N64 Controller Serial Protocol Tutorial

02.08.2019

Jul 12, 2017  Written by Holguer Andres In this manual you are going to understand how the N64 Controller works, and how we can acquire through a simple Finite State Machine (FSM), all the buttons states from the N64 controller using the DE0-NANO (you.

Last updated 8th March 2004 (first version was way back on 11th December 2002 :)

This is a reasonably technical document. If you aren't technically inclined, and you just want an easy way to connect your gamecube controllers to a PC, you might be interested to know that a ready made adaptor already exists. It's called the Skillz Cube Connection USB and is only sold by Lik-Sang as far as I'm aware. It only works with the original Nintendo Gamecube controller (it is not compatible with the Wavebird or any 3rd party controllers).

However, if you are interested in homebrew hardware, or just like dismantling things, read on.

Introduction

The controller connects to the Gamecube through a proprietary 6-pin connector, with screened cable. The official Nintendo controller only seems to wire 5/6 of these pins, and of those only one seems to be used for data transfer between the console and the controller. This document includes a pin out of the controller port, deduced from an examination of the controller and console with multimeter and oscilloscope, and from some experimentation. Therefore, I make no guarantee that any of this information is accurate, and you use it at your own risk. It's my best guess at how this thing works :)

If anyone has useful information to add to this page, please drop me a line (contact details are on index page).

James, 8th March 2004.

Connector Pinout

This is a view of the controller socket on the front of the console, looking into the socket. The numbering scheme is my own:

Pin

Colour

J1Function
1Yellow25V power supply (used by rumble motor).
2Red3DATA line: bi-directional data to/from console, pull-up to 3.43V
3Green4Ground.
4White5Ground (Skillz interface has pins 3+4 wired as common ground).
5--Unknown: not connected by official controller, or Skillz interface.
6Blue13.43V logic supply.
7Black6Cable shielding / ground. Usually common ground with pin 3.

In the table above, the pin number on the left corresponds to the diagram of the controller socket. The colour code is that of the cable from the official Nintendo Controller (different models might vary), noting that one pin is not used in this case. The third column marked J1 refers to the pinout of the connector inside the controller, which you will only be able to get to if you have the appropriate security screwdriver bit (or improvise your own handmade tool). You can buy a suitable screwdriver from Lik-Sang also. The function column on the right is my best guess at what each pin is for.

Which pins are needed for a homebrew interface?

My prototype interface wires pins 3 and 4 together as common ground, uses a 7805 voltage regulator to provide a 5V supply to pin 1, and uses a variable voltage regulator to provide a 3.43V supply to pin 6. The only other connection that I make is to the data line on pin 2, for which I use a 1K pull-up resistor to the 3.43V rail. I notice that the Skillz adaptor uses a 3.3V regulator, and my initial design also used 3.3V. I suspect that the accuracy of this rail isn't very important. I choose to use 3.43V currently, only because this is what I measured on a PAL Gamecube.

Caution: this should go without saying; but once you have connected a 3.3V and 5V rail and pull-up resistor to your cable, it would likely cause some damage if you were to then connect the cable to a Gamecube. I only mention this because it would be easy to have an accident if you modified a controller extension cable as I did - don't forget to unplug it from your cube first.

Power Supply and Rumble Motor

There are two power rails on the connector, a 3.43V supply that is probably used for the logic, and a 5V supply that appears to be used to power the rumble motor (and perhaps logic also). The ground (3) and shield (7) are connected together.

The 5V power used by the rumble motor is always on, and the motor is controlled by a command sent to the controller. i.e. the controller contains a power transistor to switch the motor on/off, rather than the console doing this. The Yellow 5V power line goes directly to the +ve terminal of the rumble motor, and it looks like the -ve terminal of the motor is attached to a transistor.

I've not measured the current drawn by the controller yet.

Serial Data Interface

The controller uses one bi-directional data line (Pin 2 - Red) to communicate with the console. This is an active high 3.43V logic signal, using a pull-up resistor to hold the line high, and pulling it low with an open-collector transistor when a low needs to be transmitted. Communication is initiated by the console sending a 24-bit string to the controller, after which the controller responds with 64-bits of button state and joystick data.

Although I first thought that the controller had an internal pull-up resistor (measured 745 ohms), in practice I had to use an external 1K pull-up resistor between the 3.43V rail and the the data line in my prototype interface.

The transfer speed is rather fast at around 4us per bit. As with the N64 controller, a low bit is signalled by a 3us low followed by 1us high, and a high bit is signalled by 1us low followed by 3us high. Yes, it's just like the N64 controller!

When the gamecube or the controller sends a string of bits, it terminates it with a single (high) stop bit. Therefore, in order to send the string 00000000, the gamecube would in fact send 000000001.

Timing Measurements

Initially (in my Dec.2003 document), I had thought that the timing was around 5us per bit, but I now believe that was wrong, and that the timebase on the 'scope was inaccurate. Philipp Kastner sent me a plot from a storage 'scope that showed 4us per bit, and I then went back and tried to measure the timings again, using the parallel port.

Using the parallel port, I timed the interval between the first high-to-low transition at the start of a command, and the final low-to-high transition at the end of the reply from the pad. The sample rate of the parallel port was around 1us per bit, leading to a possible timing error of around plus or minus 2us. An average of 10 successive measurements gave around 348us total time. Assuming a total of 24+64 = 88 bits, that equates to 3.95us per bit. This assumes no significant delay between the command and response from the pad. These timings were made using QueryPerformanceCounter, under Windows 2000, on a P4 2.8GHz, i875P chipset.

Probing for the Controller

With no controller attached, the gamecube probes for a controller by sending the sequence 000000001 about every 12ms. The oscilloscope trace below shows a typical probe sequence, with the 'scope triggered on the negative edge. When you connect a controller it will respond to this sequence, so you know that it is attached. More work is needed to examine the initial conversation between the Gamecube and controller to see if there is any useful information (e.g. about what type of controller is attached?)

Polling the Controller for Joystick/Button Data

With an official controller attached, there is a typical interval of about 6ms between successive updates. In fact, I believe that the update rate is controlled by the game, perhaps divided from the video frame rate. Each update lasts around 348us. The sequence starts with a 24-bit command from the console:

0100 0000 0000 0011 0000 0010

After the 24-bit command word, the controller responds with a string of bits that contain the state of all the buttons along with joystick position data. The sequence of the returned data is as follows. Note that the buttons are listed in transmission order, from left to right (i.e. the left most bit is transmitted first).

Usb N64 Controller

Byte 0000StartYXBA
Byte 11LRZD-UpD-DownD-RightD-Left
Byte 2

Joystick X Value (8 bit)

Byte 3 Joystick Y Value (8 bit)
Byte 4 C-Stick X Value (8 bit)
Byte 5 C-Stick Y Value (8 bit)
Byte 6 Left Button Value (8 bit) - may be 4-bit mode also?
Byte 7

Right Button Value (8 bit) - may be 4-bit mode also?

As listed above, the L/R buttons are the end-stops on the L/R shoulder buttons. Note that between the A and L buttons, there is a bit that always appears to be high. Also, the three leading bits do not seem to be affected by the buttons (so far I have seen the sequence 000 and 001 appear here).

Making it rumble

The last bit of the command is the 'rumble' control. Setting this bit to one enables the rumble motor, and clearing it disables the motor. No initialisation sequence seems to be needed. As soon as you connect the controller, you can send the 24-bit command sequence and the pad will respond with data, and can be made to rumble.

Other observations

Given that there are 24-bits in the command word, it seems likely that there will be a series of different commands to reset the controller, or to perhaps query what kind of hardware is attached to the console. Further experimentation is needed to identify other commands.

Previously, it seemed that there was a delay of about 15us before the pad responded to a command from the console. However, in recent experiments (on a different controller - perhaps it varies between controller versions) this delay seems to be gone. I suspect that this might vary between controllers, or might be related to how frequently the controller is polled. It was clearly there in my first experiments though, as can be seen from the 'scope photos later in this document.

When examining the output of the Skillz Cube Connection, it looked as though only 4-bit analogue data is returned for the Left/Right shoulder buttons. I need to go back and verify this, but it seems that the pad might support different modes with 4-bit and 8-bit resolution. Having said that, I'm not sure it matters, who wants 4-bit data when you can have 8-bit?

What does it look like on an oscilloscope?

For those that don't have access to an oscilloscope or logic analyser, here are some blurry photographs badly taken from a tired old 'scope. In this figure, point A is the start of the 24-bit command word sent by the console, and point B marks the start of the 64-bit response from the controller. The quality of the image is quite poor, but it's actually possible to see the individual data bits. Note that a delay seems to be evident in this 'scope image between the command word and the start of the reply. In more recent experiments, I haven't seen this delay.

Finally, here is a close-up view of the individual data bits when transmitting binary 0100:

Homebrew Interfacing

Recently, I built a simple homebrew interface to allow me to experiment further with the controller. Using this interface, it was possible to reliably read all the button, joystick, c-stick and left/right shoulder button values from the original (official Nintendo) wired controller (DOL-003 it says on the bottom of my controller). When I tried it with a third part controller (MadCatz MicroCon) it didn't work, but I think it's probably just a bit of tweaking of the electronics and timing (which are, to be frank, rather poorly implemented at the moment).

Anyway, it's a start; it can talk to the official controller, and can even make it rumble. And you know what the best part is? Yes, you can download the source code here.

Prototype Software

First things first, this was developed on Windows 2000, and has currently only been tested on a P4 2.8GHz with i875P chipset. Hopefully, that isn't the minimum specification, but I wouldn't be surprised if the timing messes up on a slower computer. If it does, let me know, and we will see if it can be fixed.

I'm releasing this so that people can experiment with it, assuming some basic knowledge of electronics and software. This stuff isn't yet ready for any practical use; i.e. there are no proper drivers yet.

You will need a few things before you can use this software:

  1. Some home made hardware (circuit diagram to follow shortly, but there is a description of pin connections in the source code for the impatient or the hardcore, which should be just enough to be able to build it).
  2. The giveio device driver (download it).
  3. Nerves of steel / willingness to potentially destroy your PC and controller :)

The program works by using direct port I/O on the parallel port. That isn't normally allowed from user mode on Windows NT/2000/XP, so I downloaded and installed a driver called giveio which you can easily find with the help of google (and I will add a link here soon hopefully). When this is installed (you will need administrator rights to do this), it basically breaks the protection mechanism so that your program can do direct port I/O.

Once you have installed the giveio service, the program will start and enable the giveio service automatically as required. This means that you don't need to set the giveio service to automatically start with windows (and I don't recommend doing this either, from a safety point of view).

I've not tested the program on Windows 95/98 (does anyone still use it?), and in fact I would be very surprised if it worked at all on that OS. If you know different, let me know.

Finally, here is the source code:

It compiles with MS Visual Studio .NET as a console project, and probably will work with Visual C++ 6. It uses some inline assembler, and the syntax might be MS specific, but should be easily alterable to work with other compilers I think.

What next?

The first thing to do is to refine the hardware design and then to test it on more PCs. I think a reasonable minimum specification to aim for would be P3 1GHz. The software needs improving, with a kernel mode device driver to talk to the hardware, and a DirectInput driver to allow the controller to be used as a normal joystick device. Support for more than one controller would be nice. With the current shift register, there are two inputs, so it should be fairly easy to support a second controller.

I've been discussing with Philipp Kastner the possibility of building an interface around a PIC microcontroller. This would allow a serial or even USB interface to be developed. One obstacle is that the PICs with USB support are only available in UV erasable versions (no flashable version) which makes them a pain to develop for. Unfortunately, not everyone has access to a PIC programmer of course. However, with a PIC, it should be possible to support several controllers with a single interface. What would be really, really nice is a front panel drive bay with four Gamecube controller ports.

Barely breathing rebecca donovan epub to mobi. Now, if only there were some decent games on the PC, apart from boring old 3rd person shooters.

Credits

Huge thanks to Philipp Kastner for inspiring me to work on this again, I'd abandoned it really (I blame work, and of course my friends Zelda, Link and Mario, for occupying too many hours).

The shift register hardware design was inspired by the N64 Controller Interface project first described by Stephan Hans, Simon Nield, F.P.Earle et.al. nice work!

The GC Linux project is definitely worth a look, some detail about the controller commands is emerging in their documentation (search for YAGCD).

All the people who wrote to me over the last year or so, I can't remember all the names, but I'll credit you all when I find the old e-mails!

Thanks to Sara, for putting up with the wires, flashing lights and tools strewn everywhere :)

These topics cover the hardware and software setup required to connect an Arduino device with a variety of electronic parts, chips and devices. A related topic not covered under this section is the shield, boards that plug directly into an Arduino's pin layout. Information on the creation and use of specific shields belongs in that section. Information on shields in general and their creation belongs here.

See here for a table of shields and the Arduino pins they use.

Arduino has limits on how much current can be sourced or sunk by its I/O pins. When interfacing with hardware you need to be careful not to exceed these limits. For details see ArduinoPinCurrentLimitations. In general, for AVR based Arduinos, do not exceed 20 mA per pin. In particular, do NOT directly connect LEDs to Arduino outputs! Always use a series resistor (220 ohms is a good value).

Navigation

Output

  • Visual
  • Audio
  • Physical/Mechanical

Input

  • ArduStat- Measures charge in battery
  • Environmental Sensing
    • See also Light sensors and images
  • General Purpose Sensor abstraction layer One interface to setup and control most Digital and Analog sensors.
  • Light Sensors (Visual and IR.. levels, not images)
  • Location (navigation)
  • Magnetic
  • Mechanical
  • Motion Sensors
  • Time..of day: RTC, clock / calendar chips
  • weeklyAlarm Daily scheduler

User interface

N64 Controller Serial Protocol Tutorial
  • Text-based user interface
    • microBox Linux Shell look and feel for Arduino
    • Phi_prompt glcd user interface Library This is being planned.
    • Phi_prompt persistence of vision display user interface Library This is being planned.
    • M2tklib (LiquidCrystal Library)
    • MENWIZ compact code and support to the 'new' LiquidCrystal library
    • LCD Menu Easy to use menu UI for 2 or 4 line character displays and designed with a rotary encoder input in mind.
    • Arduino HIM is a versatile menu driven user interface which uses a LCD (16x2) and a rotary encoder.
    • OLED Character Display is a project that describes how to serially interface with Newhaven OLED Character Display.
  • Graphical user interface
    • FTDI EVE Plus modules Arduino reference design to provide Graphic, Touch and Audio functions by SPI
    • LCD Shield An adaptor shield that provides an Arduino interface to 4D systems LCD Touchscreen Modules
    • M2tklib (Requires GLCD, U8glib or DOGM128 Library)
    • SMARTGPU Fullcolor touchscreen GUIs implementation.
    • TFT_Extension Extension library for Karlsens UTFT and UTouch libraries.
    • GUIslice Embedded touchscreen GUI library for Arduino (cross-platform). Leverages Adafruit-GFX.
    • Serial_LCD library suite for 4D Systems µLCD, µOLED and µVGA screens.
    • AWind Arduino window library. Provides simple way of creation GUI on TFT-touch displays. Chart windows, labels, buttons, editable text boxes allow efficient development of reach user interface for your Arduino applications
  • Hardware-independent layers
    • Multi-tap Code to enable multi-tap input on any keypads
  • Via Mobile Phone
    • pfodApp (Android) Bluetooth, BLE, SMS and WiFi. Works with 101 and other BLE boards. No Android Programming Required. pfodDesigner generates Arduino code for 101 and other BLE boards and WiFi and SMS shields. No Android Programming Required
    • Annikken Andee Don't need iOS or Android programming to create functional mobile interface, buttons, sliders, graphs, text input and many more for customisation.

Communication

  • Storage See also Data Logging and Plotting

Data Logging and Plotting

General

Examples and information for specific output devices and peripherals: How to connect and wire up devices and code to drive them.

See also the pages devoted to the Dallas One-Wire MicroLan, I2C and Ethernet. They enable you connect additional output (etc.) devices across networks controlled by the Arduino. The trouble of controlling a network is repaid if you need to connect many outputs (and/ or inputs), or if your actuators / sensors are not close to your Arduino.

Arduino as ISP (In-System Programmer)

  • Programming AVRs
    • Burning the Sanguino Bootloader to ATmega644P with an Arduino, This tutorial teaches you how to burn the Sanguino Bootloader to an ATmega644P which needs an external resonator added to the programming circuit before it will accept any programming.
    • Using Arduino Uno as ISP, the tutorial shows step-by-step (with clear pictures) how to wire a ATtiny45/85 for programming with the Arduino Uno.
    • DudeLib upload a sketch stored in a SD card from an Arduino to another Arduino, also through RS485 line.

Visual

  • Camera Control - Controlling Cameras
    • multiCameraIrControl Library, controlling Nikon, Canon, Sony, Minolta, Olympus and Pentax cameras just with an IR LED.
    • HacroCam Arduino Library, for controlling the HacroCam VGA camera module. Also listed is Arduino software for controlling multiple cameras from PC or Mac serial terminal software.
    • Infrared controlled timelapse photography with Canon DSLRs. Works with all cameras that are compatible with the Canon RC-1 remote.
    • Imitating a Nikon IR Remote from NikonSLRs.
    • Imitating a Sony A230 DSLR Shutter Release IR Remote.
    • Remote control a Nikon camera via infrared LED
    • AI-1 ('All-in-one') Remote - A Photographic Accessory That You Can Build. A fully featured intervalometer by Tom Lackamp. Does a lot, but is also quite a big/complex project.
    • A device to trigger camera and flash forum discussion (English) pointing to this page (not English).
    • Controlling camera shutter, flash and more via 3 pin plug. Forum discussion with sample code. Should be quite generic, tested with Canons and Olympus SP510UZ.
    • IR remote for canon digital camera. Unresolved forum discussion. Sample code and pointers of how to get it working.
    • Canon RC-1 compatible IR remote. All you need is one IR LED and an Arduino board.
    • Links to the Sony LANC protocol. This can be used to control video cameras, and a subset of it might be used to control still cameras (Arduino-LANC Code).
    • LANC Arduino full application + circuit Another approach to implement LANC control with Arduino, including open collector circuit you need to interface with the camera.
    • Arduino controlled video recording using the LANC port Simple and easy to understand Arduino sketch that starts and stops video recording.
    • Arduino powered simple LANC remote Circuit and sketch with rec, zoom and focus buttons.
    • thIntervalometer Simple stripboard Intervalometer 'shield'. Easy to understand code.
    • USB control of Canon EOS cameras using USB Host Shield - An intervalometer with extended HDR bracketing.
    • High Speed Photography: using an Arduino connected to a microphone and camera flash to capture images of Peeps exploding. full text of original post via web.archive.org
    • Triggering a Camera’s Flash with Sound and Light - complete with photos and hand-drawn schematics.
    • Intervaluino: An Arduino-powered intervalometer for taking time-lapse photo sequences.
    • DIY camera motion control: An Arduino-controlled stepping motor and an IGUS DryLin W rail allow smooth camera moves.
    • OpenMoco: A complete time-lapse motion control system, integrating intervalometer, multiple motor axes, action scripting, and keyframing in a single Arduino.
    • Arduino Intervalometer Basics: An introduction to building DIY intervalometers, covering optocouplers, blocking timing, and two forms of non-blocking timing
    • Hack a Canon camera and control it with an Arduino: Hacked Canon Ixus camera, with instructions, code and videos
    • Long-term time-lapse photo: Run a Canon camera with CHDK and a Arduino controller for one year stand-alone.
    • DSLR Controller: Arduino based camera and flash control (IR remote Canon RC-1, RC-5, Nikon ML-5, sound and light trigger, intervalometer, etc.)
    • Sony DSLR Wired Remote Use Arduino to make an intervalometer, etc, for Sony DSLR. Wired remote is more reliable than IR.
  • LED Lights and Displays
    • Addressable LEDs ws2812b ws2801 apa102 apa104 apa106 sk6812..
      • FAB_LED Fast Arduino Bitbang LED library, provides easy and powerful programming of all RGB and RGBW addressable LEDs from ws2812 to apa* to sk6812.
      • Using WS2812 Smart Pixels. The WS2812 is a 'smart' 5mmx5mm SMT module with three bright LEDs (red, green, blue) You can buy them made into rings, strips or arrays. Each has a controller to accept and store commands via a daisychained data line. The nice people at Adafruit have created the Adafruit NeoPixel library which makes using multiple WS2812s (or WS2811s) very easy. The tutorial link gives you all the 'getting started' information you will need.
      • Pixel Matrices other than WS2812 (if supported by FastLED). Marc MERLIN wrote FastLED NeoMatrix library which offers the same support as Adafruit's library, but on all chips supported by FastLED. But even on Neopixel based matrices, it offers more options than the Adafruit lib thanks to FastLED. While https://github.com/marcmerlin/FastLED_NeoMatrix/tree/master/examples/MatrixGFXDemo is the same code that works on any other Adafruit GFX backend, you can do a lot more.
        • fontzoom is nice font zoom demo (video)
        • Aurora has super nice demos you can see (video)
        • For even more cool demos, you can steal code from NeoMatrix-FastLED-IR. see this video for why and this blog post
    • Single LEDs of one color
      • Blinkenlight experiments Features many different ways to implement knight rider effects, persistence of vision and other amazing stuff.
      • FadeLed: Library to make fading leds a piece of cake.
      • Fade an LED with a knob - An example that lets you twist a knob to control the brightness of an LED.
      • FancyLED: Another simple hardware abstraction library that enables blinking 'N' times at custom rates, toggling, has a 'fuse' example that allows for blinking to start after some lead time..
      • Knight Rider extensions - an extension to the learning loops example. Several single LEDs used together to create satisfying visual displays.
      • LED: Simple hardware abstraction library. Either use this to simplify(?) working with single LEDs, or study it as a good example of what you can do by creating a library.
      • I/O LED: Manage an LED as an emitting AND receiving device!
      • SoftTimer is a time sharing solution, that has a built in asynchronous blinker. It can blink LEDs in a configured pattern, while not blocking other processes.
      • eCandle warm, live and safe eCandle. Comes in one single sketch.
    • Single LEDs, multi-color
      • Object Oriented RGB LED abstraction layer Simple setup and control of common RGB LEDs. Works with common cathode and common anode devices and with both PWM and non-PWM digital pins.
      • Arduino mood light with a 3W RGB LED.
      • High Power RGB LED Shield drives High Power LEDs from 100mA - 700mA. The shield provides three independent channels and provides 12-bit / channel PWM dimming and Analog dimming. Acceptable input voltages range from 6 – 42V. If more than three channels are required , up to 64 Shields can be stacked to control up to 192 Channels. The shield is controlled through I2C and only requires 2 Arduino pins (SCL, SDA) and GND.
      • HPLEDShield1 A four channels (RGBA) High Power LED driver in a shield. Control up to 28x1Watt LEDs with a single shield.
      • ShiftBrite: a module with three LEDs. (High brightness red, green, blue.) Library for the module. Module uses a simple clocked serial interface to accept a 10-bit brightness value for each LED's color.
      • BiColorLED: a simple library for driving bi-color LEDs, including support for mixing the two colors.
      • PCA9536_RGB: Control an RGB LED (Common-Anode or Common-Cathode) over the I2C Bus via a PCA9536 (4-Channel I2C GPIO Expander IC)
    • Multiplexed single LEDs, each a single color (See also 'LED Segmented Displays' sections. Here we have multiplexing done 'the hard way', but leaving you with the greatest creative control.)
      • Arduino-LED-Matrix-Display A multiplexed 8X11 LED Matrix Display (you can display stuff and scroll text on it, display text in any language
      • Heart Matrix A wearable 7x10 LED Matrix Display with an Arduino Library to easily handle text and animations.
      • 3x3 LED Cube Diecimila Shield (Inexpensive version of a fun idea.. 27 LEDs, some resistors, some transistors.. and a lot of craftsmanship with your soldering!)
      • TinyBrite: An easy to use software driver for MegaBrite, ShiftBrite and other RGB LEDs (any chip that uses the A6281 LED drivers). TinyBrite is lightweight and simple, and doesn't require SPI so you can use it with ATTiny-based Arduino-compatible devices, like the Digispark.
      • Schematic for driving multiple LEDs from one Arduino pin.
      • lightuino: Arduino 328 software and shield compatible board drives 70 LEDs through 70 individual channels (i.e. constant drive, not matrix strobing) using the M5451 constant current chip. FOSS source code available at http://code.google.com/p/arduino-m5451-current-driver/. Also contains instruction on how to wire up the M5451 chip to Arduino yourself. Buy
      • Direct driving of an 8x8 LED matrix with no ICs or other components involved.
      • TLC5940 - constant-current LED driver with 16 channels of 12 bit PWM output. Chips can be daisy-chained for >16 PWM channels. Library code and examples available.
      • TLC5940 Library for Arduino Due - This library doesn't have as many features as Alex Leone's above, but it works with the Arduino Due.
      • LED Matrix Multi-Displays - Controlling multiple 32x8 LED matrix display boards with simple printf like functions. Supporting accented fonts, Left, Center, Right justification, Blinking, Intensity control. Can combine multiple displays boards into single text line (up to 8 display boards, 256x8) or separate them into multiline.
    • Multiplexed single LEDs, each multi-color (See also 'LED Segmented Displays' sections. Here we have multiplexing done 'the hard way', but leaving you with the greatest creative control.)
      • RGB LED Color Mixing using 10k potentiometers : Simple tutorial on getting color mixing with 10k pots.
      • 8x8 RGB PWM Matrix The driver includes an ATmega168 and can be programmed via ICSP or the bootloader + USB/TTL cable. It is code compatible with Halley's shield.
      • 4x4x4 RGB LED shield Complete Arduino no component shield which provides mounting possibility for 64 LED's. It includes the required code.
      • HT1632C Based LED Matrix Display: Tutorial on how to connect and use an HT1632C based LED Matrix(eg. sureelectronics 3216) with a RTC(DS1307) to display date/time.
    • Using the Sparkfun DS1307 Real Time Clock to tell time with your Arduino - http://bildr.org/2011/03/ds1307-arduino/
    • Seven segment displays (See also the 'LED Multiplexing' sections. Here we have displays supplied with character generating control circuitry, minimizing the work you have to do.)
      • Adafruit 7-Segment Display with I2C Backpack An Arduino.cc forum post with helpful information on how to use one of the Adafruit 4 character, 7-Segment displays with the I2C backback, in your program.
      • DigitLedDisplay library for MAX7219 and MAX7221 8 bit 7-segment digital LED display module drivers.
      • SevenSeg Highly flexible library for using Arduino to drive a seven segment display directly at the output pins of an Arduino or through transistors. Key words: Arbitrary number of digits, decimal points, colon, apostrophe, common anode, common cathode, brightness control (adjustable duty cycle), display text, use interrupt timers.
      • SevenSegmentLibrary Allows you to use an Arduino as a 4-digit seven segment display controller. Works with any pin configuration as well as common cathode and common anode seven segment displays.
      • Seg7 library for control of 7 segment displays
      • Multiplex7Seg is a small Arduino library allowing you to multiplex 1, 2, 3 or 4 digits using any one of the pins on your Arduino, that's a 9999 digit display. You also have the ability to enable zero leading blanking for low power requirements. Mail me at bester.juan@gmail.com for additional help on using the library.
      • 7SegCounterMultiplexer is a simple example that demonstrates multiplexing a 7 segment LED display using a 74HC595 shift register. Only a single segment of the display is on at any one time, but they are illuminated in sequence so quickly that the digit is displayed properly to human eyes. This approach prevents you drawing too much power from the shift register, and means you don't need to use any special driver ICs.
      • 7-Segment LED Display Calculator is a simple interactive web application to calculate and visualize bit sequences to setup 7 segments LED displays.
      • MAX7219, a fork off the LedControl library which uses hardware SPI and adds some syntax sugar to the process of controlling many displays.
      • MAX7221float is a Arduino library for the MAX7219 and the MAX7221. Library MAX7221spi is for the SPI-interface, and MAX7221shift for any pin. The library has automatic display of floating point numbers and can put the sensor in low power mode.
      • 4 Character 7-segment Display $13+ P&P (8/10). Control with one Arduino digital pin and NewSoftSerial, or SPI.
      • Direct Drive 88:88 4 digit 7 segment display using same method as 8x8 matrix.
      • hc4led - A cheap 4-digit seven segment LED display with SPI. No decimals, though. Sample code here: Hc4led. And here's an easy-to-use Arduino/Wiring library for controlling these displays. The Reaction Time Tester project uses the HC4LED library.
      • TM1637 based display module - Very low cost, 4x7-segment display modules, based on the TM1637 chip.
      • TM1650 based display module - 4x7 segment display driver for JY-MCU module based on TM1650 chip.
      • 7 Segment Display Library Comprehensive guide on how the 7 segment displays work and a library written from scratch with explanations. Display chars, digits (floats and ints) and decimal place.
    • Multi-segment displays- more than 7 LED segments per character (See also 'LED Multiplexing' sections. Here we have displays supplied with character generating control circuitry, control circuitry, minimizing the work you have to do.)
      • Controlling an Alphanumeric LED Display - Library on Blogspot
      • Twitter LED Scroller - Twitter API to PHP to Processing to Arduino to 74HC595 to scrolling LED matrix (complete with cool resin case).
      • Sure-Electronics 2416 Display 24x16 LED display. Matrix Display Library (supports multiple displays)
      • 8 x 8 LED grid: Send commands to the display via SPI. the 64 LEDs then remain as you want them until new commands sent.
      • MAX7219 Dot Matrix Modules are 8x8 LED modules that can be connected together without extra wiring. This library gives it easy editing, scrolling text and so on.
      • Matrix LED backpack - Code for running the Sparkfun RGB 8x8 matrix LED backpack. Controlled via SPI.
      • Rainbowduino: An Arduino-compatible board that can drive an 8x8 RGB matrix, or 192 discrete LEDs.
      • Colorduino: An interface library for ITead Studio's Colorduino and Arduino RGB LED Matrix driver shield.
      • LedDisplay: Library for HP/Agilent/Avago HCMS-29xx LED dot matrix character displays.
      • Parola for Arduino is a modular scrolling text display using MAX7219/21 LED matrix display controllers. The display is made up of any number of identical modules that are plugged together to create a wider/longer display. The aim was to create a 'Lego-like' approach to LED matrix display, using standard 8x8 LED matrices with support from a dedicated library for text scrolling special effects:
        • Left, right or center justification in the display
        • Scrolling, appearance and disappearance effects
        • Control display parameters and animation speed
        • Support for fast hardware SPI interface.
    • Monome 64 clones.. 8x8 matrix of LED illuminated switches, turned into a musical/ lightshow instrument with hardware and software.
      • THE Octinct - Arduino based RGB Monome 64 clone.
      • bonome - Arduino based RGB Monome 64 clone with SparkFun button pads.
      • 4 by 4 RGB Monome clone - controlling an RGB LED / button matrix using the TLC5940.
    • Things that don't (?) fit any of the above categories, or fit in several of them.
      • POV - Arduino does persistence of vision, too.
      • Controlling an LED matrix with the MAX7219 and MAX7221. An extensive collection of articles, schematics and software libraries. Can be used for arrays of 'dots' and for driving 7 segment displays.
      • Controlling arrays of LEDs or common cathode multi-character 7-segments displays via ICM7218A. Direct way or using PCF8574 to save Arduino pins.
      • Example code to control Texas Instruments' TPS61160 Boost LED driver with EasyScale protocol. Short example code.
  • LCDs
    • have their own page
  • Lighting Control
  • OLED
    • Some code samples to control output to a small surface-mount OLED with basic hardware-level graphics functions
    • SMARTGPU Create advanced color touchscreen GUIs very easy with Arduino + SMARTGPU.
    • uOLED Library for the 4D Systems OLED displays. This is a serial communication with the display.
    • U8glib: Monochrome OLEDs with SSD1325, SSD1327, SSD1306, SH1106 or LD7032 controller.
    • U8g2: Monochrome LCD, OLED and eInk Library. Successor of U8glib.
    • Ucglib: True color OLEDs with SSD1351 controller.
    • The Serial_LCD library suite handles the µLCD, µOLED and µVGA screens from 4D Systems. It manages text, graphics, touch, read and write on SD-card, sound, through a single serial interface, either hardware, software or I2C. High-level commands offer GUI, graphics and even a picture frame!
  • Video Output
    • 50 lines, 100 characters on a VGA monitor, with windows, for about $35 and one digital output. Word wrap, scrolling taken care of for you. Colors allowed.
    • MicroVGA Library for MicroVGA-TEXT devices, allowing Arduino to display on a VGA (LCD/CRT) monitor or a television and read keystrokes from a PS/2 keyboard.
    • TVout Library for NTSC and PAL composite video output. Video output runs in the background via timers, allowing the sketch to concentrate doing its thing.
    • SID-emulator The shield contains an emulator of the audio chip in a Commodore 64. The systems allows you to create original 8-bit video and sounds programmed and controlled via the Arduino board.
    • Bitmap picture display on a graphics shield
    • SMARTGPU Create advanced color touchscreen applications with bitmap pictures.
    • Picaso Library for interfacing with 4D Picaso devices (including the 4D uVGA Picaso MD1)
    • Gameduino Library for the Gameduino, VGA display for video games
    • HDMI Shield Raspberry Pi as a 'HDMI shield' for Arduino
    • NovaVGA Shield, a low-cost shield board for the Arduino that provides an easy-to-use VGA graphics output. 160x120 pixels and 64 colors, each pixel directly controlled via SPI.
  • VFDs Vacuum fluorescent display modules are often used in the same applications where LCD modules are used. VFDs are typically brighter, have more contrast and a greater view angle than LCDs.
    • Ncr4X20Vfd Library, examples and information for driving the NCR 7454 / Futaba M204SD01B VFD module.
    • PrimeVfd Library, examples and information for driving the Futaba NA202MD13AA VFD module.
    • IeeFlip & IeeFlipNoFrills Libraries, examples and information for driving IEE Flip VFD modules.
    • FutabaUsVfd Library, examples and information for driving Futaba US162SD03CB VFD modules and perhaps other Futaba VFD models.
    • M66004Vfd Library, examples and information for driving VFDs using the Mitsubishi/Renesas M66004 VFD controller IC. This includes the display/control panel used in many HP LaserJet printers such as the LaserJet 4.
    • HpDecVfd Library, examples and information for using VFD modules originally intended for the discontinued HP z500 Series Digital Entertainment Center media PCs.
    • SPI_VFD A library for driving modules that support the standard HD44780 command set but use SPI (clocked serial) instead of parallel communication. This library was created to drive the uPD16314 controller, commonly used on Samsung VFD modules.
    • Noritake VFD How to interface Noritake CU-Y series VFD modules to Arduino
  • IR Remote Output
    • IR remote library to control Sony, NEC, RC5, and RC6 devices.
    • DVD Synchronizer and IR remote-control techniques.
    • Multitasked IR transmission for sending Sony remote codes in background.

Audio Output

  • Audio playback from SD card
    • SimpleSDAudio library: Play audio files with your Arduino in decent quality from SD card, only very few additional hardware required, easy to use library.
  • µC Hobby Arduino Sound Tutorial
    • Part 1: various strategies to generating sound.
    • Part 2: 'hello world', simple tone generation.
    • Part 3: playing a melody.
  • Tone Generation Libraries
    • Arduino Tone Library: A library that can be used to generate tones in the background using timers while your Arduino does other things.
    • toneAC - Advantages over the tone library: Twice as loud, higher quality, much higher frequencies, much smaller compiled code size, volume control, uses timer 1 and less stress on speakers.
    • toneAC2 - Alternate version of toneAC that allows for flexible pin assignment and uses timer 2 instead of timer 1.
    • NewTone - Plug-in replacement for the tone library. Advantages: Uses timer 1, higher quality and exclusive use of port registers which results in faster and smaller code.
    • SoftTimer is a time sharing solution, what has a built in asynchronous TonePlayer. It uses the Arduino's 'tone()' function, but does not block other processes while playing music.
    • DTMF Encoder is a dual-tone emulator that can be used to dial phone numbers using DTMF (dual tone multi frequency) signaling. Place the speaker close to a handset, and this sketch can dial a touch-tone phone number.
    • Impulse to DTMF Converter use your old telephone with this impulse to DTMF converter
  • Realtime audio processing
    • realtime audio: digitizing sound and audio effects.
    • MicroLS: a simple light show which implements advanced data acquisition and DSP functions.
  • ''Zvonek: Jak si udelat vlastní zvonek.
  • Synthesizers and sound generation
    • Mozzi sound synthesis library with familiar audio and control rate synthesis units like oscillators, delays, filters and envelopes. Includes documentation and example sketches. Open source and extendable.
    • Octosynth - Code for a full synthesizer using PWM, heavily optimised to allow the playback of 8 oscillators plus a resonant filter.
    • Arduino Synth - general page for Arduino synthesizer work
    • see dusjagr labs for an easy way to control a resistor in a circuitbent toy or a simple analog electronic circuit for lo-fi music (driving a photoresistor with a LED output from the Arduino)
    • Smapler v2 shield for stereo sound generation homework help
    • arduinOSC library for arbitrary waveform generation
    • Summer simple hardware abstraction library that can playFrequencies and beep
    • GinSing Software interface and hardware shield for complex waveform synthesis, speech, and music using the Babblebot chip.
    • Gameduino library for controlling the Gameduino's 64-voice polyphonic synthesizer
    • FlexamySynth An extensive library for controlling the Fluxamasynth.
  • Speech/ Voice Synthesis
    • Using the SpeakJet How to connect to and program the SpeakJet- a $26 (8/10) phoneme based processor. One data line from Arduino. Sound effects as well as speech, and DTMF codes.
    • Babblebot Babblebot Easy to use voice and waveform synthesizer ( SpeakJet variant ). Serial interface with support shield for Arduino.
    • SpeakJet OO library for driving SpeakJet chip. Supports standard+custom dictionaries, speaks integers, words, phrases etc.
  • MIDI
    • see MIDI under communication section
  • Audio Device and Module Control
    • Control an iPod with the Arduino, by Jonas Olson & Robert White.
    • Connect Arduino to the YAMPP III Industrial MP3 player, diagrams by Jens Wunderling.
    • Some code for controlling an iPod remote through Processing, by Rosie Daniel.
    • Mediaplayer for Adafruit's Waveshield
    • Si4735 library for controlling a radio chip from SiLabs (also available as a SparkFun shield).
    • Nuvoton ISD1700 library for low-cost, solid-state audio storage and playback
  • PSG - Programable Sound Generators
    • SID-emulator The shield contains an emulator of the audio chip in a Commodore 64. The systems allows you to create original 8-bit sounds programmed and controlled via the Arduino board. You can play your sounds over the MIDI-Interface.
    • Vintage Gameboy and SNES -like sound using Yamaha chips (YM294, YM2149)
    • AY38910 This is a small project that tries to control the Yamaha AY-3-8910 with an Arduino, to generate sounds. The AY-3-8910 is a popular chip used in chiptunes and found on Atari 2600, Spectrum, Amstrad CPC and many retro game consoles.
  • Gakken SX-150
    • MIDI-to-Gakken using Arduino
  • Morse code I/O
    • Phi_Morse library plays Morse code on a speaker and recognizes keyed in Morse code. You can call the library with a string and the function morse_out() plays the string on speaker. If you call morse_in() you can key in Morse code and the returned value is keyed in character.
    • Morse EnDecoder - Raron's duplex Morse Machine. Send or receive Morse.. as fast as 300wpm Arduino-to-Arduino, if you set up two of his 'Endecoders'. Entertaining video demonstration, full souce code. Input via momentary switch, microphone or keyboard via serial monitor, output via piezo or serial monitor. One Arduino can be sending and receiving at, in human terms, the same time. If you are delivering the input via keyboard, you just type a phrase, and when you press 'enter', the phrase emerges in Morse.

Physical/Mechanical

  • Motor Control
    • http://www.cesarebrizio.it/Arduino/Light_Tracking_Turret.html - A crude but effective Arduino-controlled light-tracking turret based on 4 photoresistors and 2 small steppers.
    • AccelStepper - Motor controller for 2 and 4 pin stepper motors, with acceleration, deceleration, etc. Never blocks or delays, so supports multiple simultaneous steppers for multi-dimensions, etc.
    • Adafruit Servo/Stepper/Motor Shield - Controls 2 servos and up to 2 stepper motors or 4 DC motors. (Schematics, layout, and library.)
    • SerialServo - A simple library designed to work with Serial based servo controllers
    • SparkFun: Ardumoto - Motor Driver Shield Library to control the L298 based H-bridge shield.
    • Adafruit Motor Shield A simple sketch for the Adafruit Motor Shield without the Adafruit library.
    • Arduino Motor Shield : Robot for obstacle avoidance with 2 motors and 2 sonar sensors (from adafruit); movie: https://www.youtube.com/watch?v=9UjHomDA0iI ; shield http://arduino.cc/en/Main/ArduinoMotorShieldR3 ; chassis and motors: http://www.conrad.de/ce/de/product/191152/Arexx-Fahrgestell-Robby-RP5RP6-Roboter?ref=list (user Ronwl)
    • Analog Motor Control (AMC) Library - AMC is based on Adafruit's Arduino Motor Shield (using 74HCT595N, L293D). It is easy to use and can drive four DC motors or two stepper motors at the same time (does not need to wait for the other one to finish its stepping loop). Supports bipolar, unipolar, and 3-phase unipolar stepper motors.
    • The Ardubot by SparkFun - Dual DC motor control, speed (PWM) and direction.
    • DC Motor Control using an H bridge
    • DC Motor Control - Speed and Direction
    • PC Fan Speed Control - Reading RPM
    • PWM Arduino dual fan speed controller
    • Eagle files for a L293-based Arduino Motor Driver Shield
    • Datasheet for the L293 Motor Driver IC. Peltier elements work with this IC, too.
    • Cardboard Laser Cutter with an old EPSON printer
    • The IDCA-10 from Motor Control Technologies is an integrated intelligent motor drive for accurately controlling DC brushed motors. Implement a precision servo control system with your Arduino in a matter of minutes.
    • Motor Control Shield v3.0 - Simple motor control shield by David Cuartielles based on a SN754410 (almost like L293) that allows you to control either a stepper motor or 2 DC motors bidirectionally or up to 4 DC motors, coils, etc. unidirectionally.
    • Bot'n Rol - Omni3MD is a 3-motor driver fully compatible with Arduino. It may be used in holonomic (3-wheeled) platforms as well as other independent motor control systems.
    • Code The Parallax HB-25 motor controller item code #29144.
    • Library for Pololu Qik2s9v1 controller
    • Pololu Dual VNH5019 Motor Driver Shield for Arduino - High-power (5.5-24V, 12A continuous/30A peak per channel) motor driver shield from Pololu Robotics that makes it easy to control two brushed DC motors with an Arduino. An Arduino library provides methods for setting motor speed and direction, reading motor current, and checking fault outputs.
    • Pololu Dual MC33926 Motor Driver Shield for Arduino - Brushed DC motor driver shield from Pololu Robotics that makes it easy to control two brushed DC motors with an Arduino. It operates from 5-28V and can deliver a continuous 3A per channel. An Arduino library provides methods for setting motor speed and direction, reading motor current, and checking fault outputs.
    • StepperLab3 library with ramp function, speed & torque control, full and half step mode, non-blocking operation.
    • TA7291P DC Motor Controller - Inexpensive motor control circuit made with a breadboard and a Toshiba TA7291P H bridge chip.
    • TankShield - A tank tread shield for the Arduino that shows how to turn an Arduino into a robot.
    • XYZ-DC Motor Controller is a complete and high-performance board to control three stepper motors and a DC motor with external power supplies, heating control and a sophisticated software to manage the board with Arduino through USB serial. This is the electronic core element of XYZ-Stepper Milling Machine. See also this page for XYZ-DC Motor Controller project specifications.
    • Stepper Motor Test Bench - A fancy, simple and robust test bench for testing stepper motors. in this way, you will be able to give a second life to the unmarked, unreferenced steppers from your scrap box, or diagnose other newer ones..
    • Brushed DC motors - Learn how to monitor and even control DC motors speed..
  • Bipolar Stepper Motor from Floppy Drives
    • Using the stepper motors from old Floppy Drives PL15S-020 bipolar stepper motors Code Link, using no external chips.
  • PID Motion Control
  • Solenoids
    • Schematic for driving DC solenoids, using a transistor connected to an Arduino pin.
    • A Solenoid Tutorial.
  • Servos
    • Mega Servo
      • Control up to 12 servos with the MegaServo library.
    • Software Servo
      • You can control up to 20 hobby servos simultaneously with the Software Servo Library.
        • Example controlling a servo with the Software Servo Library.
        • Servo Bells. Example xylophone with wine glasses built with the Software Servo Library.
    • Hardware timer Servo
      • You can control 2 servos, on pin 9 and 10, very precisely with the Servo Timer 1 Library.
      • You can control 2 servos, on pin 9 and 10, with even more precision with the ServoTimeTimer1 Library based on the above.
      • You can control very large numbers of servos precisely using an external PWM chip. Each chip can control up to 16 servos and can be daisy-chained for > 16 outputs. See PWM Expansion with TLC5940 for library code and examples.
      • Code and instructions for using the ATmega's internal hardware timers to drive two servos.
      • Control up to 12 servos on a standard Arduino or 48 servos using the Mega Board with the MegaServo Library
    • Arduino and Pololu Micro Serial 8 Servo Controller. Video, images and sketch files to manage 6 servos from a joystick
    • Controlling up to 8 servos with Pololu Micro Serial Servo Controller. Forum discussion with sample code.
    • Control up to 32 Servos with SSC32 and Arduino LibSSC32
  • Robot Kits
    • Put Arduino in the Asuro Robot's brain.
    • Asurino - an Arduino library for the Asuro robot.
    • Arduino takes over RoboSapien V1 with 4 wires.
    • RoboSapienServer - A web enabled RoboSapien based on the RoboSapienIR project.
    • Custom 4 leg walker from Arduino, 3 Servos, Batteries
    • Object Oriented interface for iRobot Roomba and iRobot Create. Includes hints and circuits for reliable comms between Roomba and Arduino, example programs including remote control of a Create from your iPhone with the RCTx app.
    • 2WD Arduino Compatible Mobile Platform - Build notes
  • Other
    • Control a clock movement.
    • Model Railroad Fast Clock, using an Arduino to drive analog clock hands at selectable speeds. Includes sketch.
    • RCKithttp://www.airspayce.com/mikem/arduino/RCKit implements a WiFi remote-control receiver and drivers for remote-control vehicles using the Remote-Control over IP protocol (RCOIP). Includes support for a large number of remote-control channels, backchannels for telemetry, drivers for servos, motors, steppers, analog and digital inputs and outputs, etc. RCTx, an RCOIP compliant transmitter for iPhone is available on the Apple App Store at http://itunes.apple.com/app/rctx/id377833472?mt=8. See documentation for demo videos.
    • Infra-red remote control for models for controlling a range of infra-red models such as 3 channel Chinese IR helicopters, etc.
    • Class for controlling Parrot AR.Drone quad-copter over WiFi. Requires WiShield/Yellowjacket. Sample code for flying AR.Drone with a USB Joystick/game pad, using the USBJoystick class.
    • EvoLink: EVO-All vehicle datalink API, may be used to control and receive events from the Fortin EVO-All universal bypass. Act as a remote starter, security system and more for hundreds of makes and models of cars and trucks.

Electrical / High Power

  • Relays
    • Schematic for driving DC relays using a transistor connected to an Arduino pin.
    • Schematic for driving 5V DC relays using an optical coupler and a transistor connected to an Arduino pin, which is protected by the optical coupler. Based on the schematic above.
    • Control a Velleman K8056 8-channel relay card thru RS-232 using an Arduino library
    • Velleman K8056 updated Arduino library
    • PCB and kit for a single channel relay with embedded driver at EtherMania
    • A 'novice-friendly' way to control 110v AC (US style plug/ socket). $19+p&p 8/10. May keep you safe.
      • Also see Power Switch Tail which uses the AZ21501 Relay for higher power applications
    • ArduPower an Arduino based telnet server to control six power supply, with login password, editable TCP/IP parameters, relay status and connected system information, all parameters saved on EEPROM.
  • Relays tutorial: Back to stone age.. elegantly
  • MicroHTR: A simple heating system using a PID controller
  • Rainmaker irrigation controller. You can control up to five zone of watering, can be programmed for each day of the week. -> link not valid in May 2012.
  • Voltage Boosters
    • A simple regulated DC-DC booster for up to 60V 1/4W. It uses no special ICs, just basic components and two pins from the Arduino.
  • Spark Plugs
    • Making a spark plug spark. Using a MOSFET to pulse the ignition coil that drives the spark plug.

Multiplexing Outputs

  • How to use TLC5940s to add more PWM outputs.
  • PWM
  • M5451 Constant current output pin expander
  • I2cDiscreteIoExpander is an Arduino library for the Texas Instruments PCF8575C 16-bit I2C I/O expander.
    • The PCF8575C provides general-purpose remote I/O expansion for most microcontroller families via the I2C interface serial clock (SCL) and serial data (SDA).
    • The fixed I2C address of the PCF8575C (0x20) is the same as the PCF8575, PCF8574, PCA9535, and PCA9555, allowing up to eight of these devices, in any combination, to share the same I2C bus or SMBus.

USB

The UNO and Mega2560 use an ATmega8u2 or ATmega16u2 to provide the USB interface to the Host PC and it is programmed with USB to serial firmware. The firmware on the ATmega8u2/16u2 can be replaced to turn the UNO or Mega2560 into a different USB device such as a Keyboard, Mouse, or MIDI device. This section has links to different USB firmware resources.

  • HID Joystick by ant.b the link to the forum thread has changed to http://forum.arduino.cc/index.php?topic=111.0

The coming Arduino Leonardo has USB support built into the the processor, removing the need for the FTDI or the ATMega8u2/ATMega16u2 to communicate with a host PC and the Arduino 1.0 IDE has partial support (written 22/2/12) for keyboard and mouse interfaces.

The Micro has USB support as a Keyboard and or Mouse. This can be used to play the Les Paul and Robert Moog Google Doodles as an example. To use more USB HID functions like Gamepad or Media keys see HID project above.

Examples and information on specific input devices and peripherals: How to connect and wire up devices and code to get data from them.

See also the pages devoted to the Dallas One-Wire MicroLan, I2C and Ethernet. They enable you connect additional input (etc.) devices across networks controlled by the Arduino. The trouble of controlling a network is repaid if you need to connect many inputs (and/ or outputs), or if your actuators / sensors are not close to your Arduino.

ADC/DAC

  • The MCP3208 is a 12bit 8 channel SPI ADC.
  • The R/2R ladder is a simple and inexpensive alternative to DAC ICs - photo-tutorial for construction on a protoshield.
  • Tutorial on rolling your own voltage dividers as a PDF document (with optional data files)
  • Using a AD420 Serial Input 16 bit DAC with Arduino
  • i2c_adc_ads7828: This is an Arduino library for the Texas Instruments ADS7828 12-bit, 8-channel I2C A/D converter.
  • PlainADC: Fast ADC, single channel, autotuned, ranging from 0.125Hz to 100kHz.
  • MicroDDS: Stand alone 6 bits Direct Digital Synthesizer (DDS)
  • MCP49xx DAC library for Arduino (or: github page) - for Microchip MCP4901, MCP4911, MCP4921, MCP4902, MCP4912, MCP4922DACs
  • LTCADC: A library for Linear technology ADCs
  • MCP3221: MCP3221 Driver Library (12-BIT Single Channel ADC with I2C Interface)
  • ADS1110: ADS1110 Driver Library (16-BIT Single Channel ADC with I2C interface)

Ardustat: Galvanostat/Potentiostat

  • Ardustat: Schematics and code to build an electrochemical characterization devices using an Arduino. Open source successor to Jonny Galvo. Measures charge held by, e.g., a battery.

Audio Input

  • Microphones
    • Example of how to connect a piezo as a blow sensor, can also be used to read vibrations or as a touch sensor.
    • Example of how to connect a electret microphone.
    • Sound capture: hardware and code samples
    • Fast Fourier Transform: FFT tutorial and code samples
  • Measurement
    • Frequency Measurement Library for the audio and sub audio range

Automotive Input

  • Library to communicate with the ELM327OBD2 reader. Can be used to read both standard OBD metrics and raw CAN data.

Bar Codes

  • You can hook up a bar code scanner (which simulates a keyboard) or a keyboard to the Arduino. See bar code scanner

Capacitive Sensing

  • QTouch 1-wire Library - Library for the 1 wire interface on Atmel QTouch devices (developed for QT1103)
  • QTouch SPI Library - Library for the SPI interface on Atmel QTouch devices (developed with the QT1100)
  • Tutorial with source code Information on capacitive sensing, using the library, and the ArduCapSense.com shield
  • AT42QT10XX Library & Tutorial Arduino Library for the Atmel AT42QT1070 Touch Capacitance chip using i2c.
  • Cypress Capsense Express C8YC201xx i2c A library for communicating with the Cypress Capsense Express C8YC201xxICs via i2c.
  • Capacitance meter A fully featured capacitance meter. Few extra components required (no coils), ranges from pF to µF.
  • Looking at pulled-up-pin Rise Times with an Oscilloscope Background information about capacitance sensing, plus a sketch to produce a scope loop with turn-on levels

Degrees Of Freedom, 6DOF, 9DOF, 10DOF, 11DOF

This section is for multiple sensors combined into a 'Degrees Of Freedom' sensor or module. For the individual sensors, see the sections: Accelerometer, Gyro, Magnetometer (compass), Pressure Sensors (air, fluid, baromic), GPS.

  • A good guide for gyro and accelerometer and Kalman filtering in the forum: http://arduino.cc/forum/index.php/topic,58048.0.html
  • Playing with an Arduino and sensors: Getting pitch and roll from gyros and accelerometers for Stabilising Stuff
  • http://krazatchu.ca/2012/02/27/6dof-arduino-compass-accelerometer/ Compass Hard Iron auto Solver, 360 Compass Compensation, accelerometer, yaw, pitch, roll
  • LSM303 Accelerometer + Magnetometer Library - This library makes it easy to read the raw accelerometer and magnetometer data from the LSM303, and it can also compute the tilt-compensated heading from the Earth's magnetic field.
  • MPU-6050. Information and a basic sketch for the InvenSense MPU-6050 acceleration and gyro sensor.
  • MPU-9150. Information and a sketch for the InvenSens MPU-9150 9DOF chip.
  • SEN-10724. A sketch to get data from pressure sensors and Sparkfun 10724 9DOF sensor stick.
  • A Method for calculating changes in pitch and roll caused by changes in yaw. Provides accurate yaw, pitch and roll data from MPU6050 without relying on DMP. Could be adapted for use with others also.

Distance Sensing

  • NewPing - Fast Arduino library for the HC-SR04, SRF05, SRF06, Parallax PING))), DYP-ME007 & URM37 ultrasonic distance sensors.
  • http://www.arduino.cc/en/Tutorial/UltrasoundSensor - I just wanted to point out that this code also works for the Maxbotix Max Sonar ultrasonic range finder.. which is sold in the USA through SparkFun Electronics..
  • MaxBotix/MaxSonar tutorial: I have found the above PING code doesn't work with MaxSonar devices so I did a small write-up.
  • Parallax Ping - code https://playground.arduino.cc/Main/UltrasonicSensor
  • GP2D12 infrared sensor - read_gp2d12_range is a function that retrieves distance from this sensor in centimeters.
  • Simple IR distance sensor using a Panasonic IR sensor and IR LED using the IR sensor and LED from the boe bot kit. https://playground.arduino.cc/Main/PanasonicIrSensor
  • URM37 Ultrasonic Distance Measurement Library. URM37 Ultrasonic Distance Measurement Library by Miles Burton
  • SRF08 Ultra Sonic Range Finder Code - https://playground.arduino.cc/Main/Sonar_srf08 Communicate with old SRF08 sensor via Wire.h protocol. Choose inch or centimeters and change address.
  • SRF02 Ultra Sonic Range Finder Library - http://www.grappendorf.net/arduino-atmel-avr/arduino-libraries/srf02-ultrasonic-distance-sensor Communicates via the I2C protocol and supports multiple sensors.
  • SRF04 Ultra Sonic Range Finder Library - http://code.google.com/p/srf04-library/ - Analog ultrasonic distance sensor.
  • Sharp GP2Y0A21YK IR Distance sensor Library - http://code.google.com/p/gp2y0a21yk-library/ - Analog IR distance sensor.
  • Sharp GP2Y0A21Y & GP2Y0A02Y IR Distance sensor Library - https://playground.arduino.cc/Main/SharpIR - Analog IR distance sensor.
  • Interfacing Arduino with a digital caliper - a short tutorial which explains how you can interface Arduino with a cheap digital caliper.
  • Library for ST Microelectronics VL6180X proximity sensor. It's a low cost laser ranging and ambient light sensor.It has 200mm of range with 2mm accuracy. Library is for ST Arduino compatible kit 'VL6180X explorer kit' http://salwach.pl/VL6180X

N64 Controllers For Sale

Environmental

  • WeatherShield1 A Weather Shield for Arduino. Pressure, temperature and relative humidity in a easy to use shield.
  • Electro magnetic fields
    • An ELFEMF detector, so as to say an Extremely Low Frequency Electromagnetic Fields detector
  • Humidity
    • HH10D Simple, frequency-output relative air humidity sensor
    • HTF3223 Inexpensive Humidity sensor example code
    • DHT22 Library Easy to use library with example code
    • DHT11 DHT22 AM2302 Humidity & Temperature: $12+p&p and one signal pin. No special libraries needed.
    • DHT12_sensor_libraryDHT12 library that have the same behavior of Official Adafruit DHT library, support one wire or i2c comunication, tested with Arduino and ESP8266, on github you can find connection schema and pullup value resistor.
    • DHT11_lib Yet another DHT11 Library.
    • DHT_lib One library that supports both DHT11 and DHT 22
    • dht Yet another library that support: kludge from DHT11_lib / DHT_lib but also includes support for the DHT12 sensor (connected by I2C)
    • Sensirion SHT1x & SHT7x series temperature / humidity sensors: Version 2.0 (Sensirion_10Dec2010.zip) of this library is now available. Features include: Temperature, humidity, and dew point calculations (optionally via non-blocking calls); CRC checking; Status Register write and read capability; plus other enhancements. See the Sensirion page for additional information.
    • Check this project too: Arduino for datacenter monitoring: http://marco.guardigli.it/2010/05/arduino-in-datacenter-rack.html
    • Sensirion SHTx series: temperature and humidity sensors, explained and exemplified. With PlainSHtx library, connect SHTx sensors to any pin you want and get temperature and humidity measurements very easily; display data on console, LCD, or GLCD. PlainSHTx contains advanced features such as HIGH/LOW resolution measurements and sensor conditioning.
  • AM2311 Library This library reads the temperature and humidity data from AOSONG AM2311 sensor.
  • Honeywell HumidIconTM Digital Humidity-Temperature Sensors A library for controlling Honeywell's HIH6130-6131 and HIH6120-6121 Series Humidity-Temperature Sensors.
  • AOSONG AM2321 This library reads the temperature and humidity data from AOSONG AM2321 sensor. It's very small and accuracy.
  • Temperature
    • PT100 RTD Shield Open Source Arduino Shield with on-board hardware filtering and microprocessor to read up to 4 PT100RTDs Quickly and Accurately.
    • Internal Temperature Sensor The internal temperature sensor.
    • http://ricardo-dias.com/projects/temperature-central/ A temperature central with LM35 and 7-segment displays
    • Rudimentary Thermal Imaging A rudimentary setup for a 20 pixel thermal imaging device consisting of basically just 20 diodes.
    • http://www.australianrobotics.com.au/node/266 Pachube Client With Watchdog Timer (Round 2)
    • DS18B20 Accurate digital sensor. Simple code, could the basis for reading other 1-Wire devices. No special libraries needed, not even Arduino 'OneWire'.
    • An article about DS18BS20 & Arduino Describes command interface for sensors (good for advanced users), provides Wiring function for handling the sensors
    • KTY 81-* KTY (NTC) Temperature sensor with Arduino
    • Dallas Temperature Control Library. A very simple library to interface with the DS18B20, DS18S20 or DS1820 IC.
    • A simple library to interface with the DS1621 with high resolution function https://github.com/TommasoS/DS1621.
    • A library for interfacing with the DS1621 temperature sensor (Code)
    • A simple lookup table method of getting Celsius numbers from a 10k thermistor. Code & calculating spreadsheet here: thermistor
    • Reading a thermistor using an equation instead of a lookup table. thermistor2
    • Single line of code to read thermistor from 1C to 44C: thermistor3
    • Universal and flexible NTC thermistor library using Steinhart-Hart equations: Thermistor4
    • There are also ways to access the excellent Dallas 1-Wire temperature sensors.OneWire
    • Reading from SMT16030 digital temperature sensors
    • LM75A i2c temperature library
    • LM75 with using temperature alarm and interrupt. Take a look at Arduino forum entry
    • Microchip MCP9700A Temperature Sensor Library -40C to +125C for $0.36US!
    • Microchip Technology's MCP9804I2C-connected temperature sensor: comprehensive and easy to use library Hackscribble_MCP9804 library
    • LM335A Temperature Sensor Library
    • Library to interface a Maxim DS7505 Digital Thermometer and Thermostat Sensor. (Code)
    • DS7505 Digital Temperature Sensor/Thermostat Library Another guide on how to use the DS7505 temperature sensor with Arduino.
    • PT1000 RTD Temperature sensing A guide on how to build a 4 input multiplexed RTD sensing module for PT1000 will work with PT100 too
    • TMP75I2C Thermometer Code TMP75 I2C Thermometer Code
    • TMP102I2C Thermometer Tutorial Code+Schematic http://bildr.org/2011/01/tmp102-arduino/
    • MLX90614 IR thermometer Tutorial Code+Schematic http://bildr.org/2011/02/mlx90614-arduino/
    • Remote Temp Monitoring w/ Spreadtrum SM5100B uses DS18B20 Dallas 1-Wire temperature sensors and the SMS capabilities of the SM5100B to monitor and report in-home temperatures.
    • Arduino library for Analog Devices TMP temperature sensors: (TMP35,TMP36,TMP37)
    • Sensirion SHTx series: temperature and humidity sensors, explained and exemplified. With PlainSHtx library, connect SHTx sensors to any pin you want and get temperature and humidity measurements very easily; display data on console, LCD, or GLCD. PlainSHTx contains advanced features such as HIGH/LOW resolution measurements and sensor conditioning.
    • Interfacing a water level & temperature sensor for a solar water heater controller (GHBO1/SHBO1)
    • MCP9802: MCP9802 Driver Library (12-BIT Temperature Sensor with Hysteresis, Alert & I2C interface)
  • Water detector
    • Simple Water Trigger Detect water between two needles (in order to trigger a foto flash for high speed fototgraphy).
  • Gas sensors
    • MQ Gas sensors Using the MQ-2, MQ-3, MQ-4, MQ-5, MQ-6, MQ-7, etc. gas sensors.
  • Anemometer (wind speed meter)
    • Thermal Anemometer.
  • See also
    • Dallas One-Wire Interface:MicroLans- networks of 1-Wire chips- have been popular for many years with weather station hobbyists. In the 'outside world' beyond our own Arduino community there is a great deal of information on connecting rainfall, wind, temperature, (etc., etc.!) sensors.. little of it Arduino specific, but all of it Arduino useable once you master the basic techniques of communicating with the 1-Wire chips at the heart of all of the already-invented wheels. The basic techniques are not terribly complicated, and they open up many possibilities.
    • Sensors for Light (Visual and IR.. levels, not images)

Human Interface

  • Muscle (EMG) Sensors
    • Easy to follow instructions on how to build and hook up a muscle sensor to Arduino microcontrollers.

Images

  • Video

Joysticks / Gamepads

  • SNES_Keyboard - A library that allows you to use/configure a SNES controller to press keyboard keys for use with emulators. (Requires Leonardo or Micro)
  • NES_Keyboard - A library that allows you to use/configure a NES controller to press keyboard keys for use with emulators. (Requires Leonardo or Micro)
  • NESpad library that handles the serial communication between Nintendo NES/SNES game pads and an Arduino (moved from rahji.com) http://code.google.com/p/nespad/
  • A project in which a SNES-Controller-To-USB-Keyboard-adapter with iCade support is built http://petrockblog.wordpress.com/2012/04/22/snes-pad-icade-adapter/
  • N64-To-USB turns your Arduino in an N64 to USB plug n play converter for two joysticks https://github.com/MickMad/N64-To-USB
  • N64Controller Library Supports N64 controllers on various pins. Based on this work.
  • WiiNunchuck.h - New - A clean and accurate library for communicating with a Wii Nunchuk including non-Nintendo, 3rd party devices. The library processes data from the Nunchuk and provides functions to access the processed (and unprocessed) data. See the project webpage or get it from the Git repository.
  • Talking to a Wii Nunchuk. Adapter and Library at Todbot http://todbot.com/blog/2008/02/18/wiichuck-wii-nunchuck-adapter-available/
  • Processing sketch for visualization of the Nunchuk, classic controller data. Guitar Hero library.

New!! improved adapter with Att pin and lock mechanism calledwiikend.

  • Wii Nunchuk Library for Arduino. Works with Arduino 1.0. Implements new initialization method (unencrypted data from the Wii Nunchuk).
  • A pair of libraries for talking to a Wii Remote and Nunchuk. The Wiimote library supports bidirectional communication between Wiimote and Arduino, with two APIs, one for sporadic updates and one for continuous streaming. Background and commentary can be found here and here.
  • Talking to a Wii Classic Controller
  • Wii Classic Controller for Arduino 1.0, a modified version of the above library to work with Arduino 1.0.
  • Updated WiiClassicController A modified version to the two above libraries.
  • Another Wii Nunchuk library with more accurate angular pitch and roll data WiiChuckClass.
  • A library to read a standard Playstation controller PSX Library.
  • A library to read a standard, wireless, or dualshock Playstation controller in digital or analog mode as well as control feedbackAnalogPSXLibrary
  • An easy to use library to read a Playstation 2 controller including full analog mode and rumble control; also tested with Guitar Hero Controllers PS2X Library
  • Converting Wii gamepad signals to USB HID, compatible with PS3 and Windows : http://code.google.com/p/wii-ext-to-usb/.
  • Wii Nunchuk, Arduino and servos (video, images and source code) http://www.fabiobiondi.com/blog/2009/12/wii-nunchuck-controller-and-arduino/.
  • Wiimote and PS3 controller on Arduino using USB-Host shield: http://www.circuitsathome.com/mcu/programming/ps3-and-wiimote-game-controllers-on-the-arduino-host-shield-part-1
  • Pre-assembled shield for using a standard PC joystick or gamepad: http://lectrobox.com/joystick
  • Instructions for using a standard PC joystick or gamepad directly: http://www.built-to-spec.com/blog/2009/09/10/using-a-pc-joystick-with-the-arduino/
  • Class for easy interface to USB Joysticks/Gamepads using USB Host Shield http://www.airspayce.com/mikem/arduino/USBJoystick
  • Joyduino: using Arduino as an Atari-compatible joystick for retro computers.

Keyboard/Keypads

(See also section on capacitive sensing for keypads which will, for instance, work through a window pane.)

  • Unified Arduino Input Interface: Library that provide unified interface to all input devices. The interface can sense buttons, rotary encoders, keypads, analog buttons, serial keypads or even smartphone as your Arduino input. Make local interface on your project and control it the same on remote interfaces on PC, phones or internet.
  • keybrd - A library for creating custom-keyboard firmware. Supports split keyboard and multiple-layer configurations.
  • GKOS Keypad - Enter any text directly into Arduino simply with 6 keys.
  • Keypad - Read a matrix keypad. See Keypad Tutorial.
  • OneWireKeypad - Keypad using just one analog pin
  • Simple interface board to connect USB keyboard/ keypad - Converts output of USB keyboard to a simple stream of serial data. Interface to Arduino over a single bit.
  • 16-Button Keypad Shield - A shield and keypad that can either be mounted together, or separated by an Ethernet cable
  • PS2Keyboard - A small library that deals with PS/2 based keyboards
  • PS2KeyboardExt - An extension to the above library to support more keys and functions
  • PS2KeyboardExt2 - another extension, fast with shift, alt and caps lock and caps_lock light
  • PS2C - A final version of the PS2Keyboard library that gives complete functionality of a ps2 keyboard
  • PS2tester: Arduino sketch to communicate with PS/2 devices (e.g. keyboard). Useful for testing/debugging custom PS/2 devices, for example.
  • I2C Port expander and Keypads - A small library for use keypads with I2C port expander PCF8574
  • I2C Port expander and Decoders - A library that uses a 74C922 keypad decoder on an I2C port expander
  • See also the entry in the communications section, wireless, IR subsection, about using a domestic (e.g.TV) remote to send 'keystrokes'.

Light sensors.. visible, IR, etc. Levels, not images

For communication with infrared, see the IR Remote section.

  • Light Sensors
    • http://www.cesarebrizio.it/Arduino/Light_Tracking_Turret.html - A crude but effective Arduino-controlled light-tracking turret based on 4 photoresistors and 2 small steppers.
    • Use 20 LEDs as a simple camera - A Blinkenlight experiment to use 20 LEDs as a crude camera sensor.
    • Example of how to use an LED as a light sensor using 2 digital pins.
    • Tutorial on replacing a CdS photocell with an LED using only a single pin - either a digital pin or (optionally) an analog pin for faster response times in low-light conditions. Complete with a reusable class for fast/easy support in your project.
    • Example of how to use several LEDs as a light sensor and display the results with Processing.
    • Example of how to Build a simple tachometer using an optoswitch based circuit.
    • Example of how to use an IR LED and sensor to detect a broken beam. With a simple game of Sneak_Thief.
    • Tutorial on interfacing the TSL230R light sensor and the Arduino
    • Simple sketch interfacing TSL235R Light to frequency sensor
    • Example of how to read a photo diode array TSL1402R Linear sensor array
    • Library for interfacing to commonly available TCS230 and TCS3200 Color Sensor breakout boards. Look for the PDF file in the library download for documentation on the breakout board and the library. Example code is included for simple reads and how to calibrate the sensor.
    • Library for directly connecting your Arduino to the Pixart sensor taken from the Wiimote handset. PVision library for Pixart/Wiimote IR sensor Can be used for X/Y blob tracking (at 100Hz) of up to 4 points. Note: you will need to build a harness circuit for the Pixart sensor.
    • Example of how to use an LED as a light sensor using the ADC and external circuitry.
    • I/O LED, covers various examples of how to take advantage of the emitting/receiving properties of LEDs
  • IR Reflectance/Line Sensors
    • Library for connecting your Arduino or Orangutan to Pololu QTR reflectance sensors, which can be used for line following, edge detection, or close-proximity obstacle detection/ranging.
    • Parallax QTI sensor and Arduino
    • Your first LDR project (includes calibration) http://blog.rafaeltorrales.info/2011/11/17/first-ldr-project/
    • Library for ST Microelectronics VL6180X proximity sensor. It's a low cost laser ranging and ambient light sensor.It has 200mm of range with 2mm accuracy. Library is for ST Arduino compatible kit 'VL6180X explorer kit' http://salwach.pl/VL6180X

Location (navigation)

See also the Magnetometer (compass) section for compass sensors.

  • GPS
    See also the Degrees Of Freedom, 6DOF, 9DOF, 10DOF, 11DOF section for a GPS module combined with an accelerometer, gyro, etc.
    • Sample configuration code for GPSBee modules using the U-Blox chipset. Includes setting baud rate, update rate, NMEA message disabling and more!.
    • Sample configuration using ITEAD GPS Shield with Arduino Uno and LCD display,
    • Sample configuration using ITEAD GPS Location Sensing with the Arduino Mega,
    • Arduino code for parsing data from the EM-406 GPS module, by bigengineer.
    • How to connect a Parallax GPS module to the Arduino, and read its $GPRMC string. Tutorial translated from Igor González Martín's original Spanish tutorial. This allows you to get date, heading, latitude and longitude from the GPS module.
    • GPS on Arduino explains how to read the output of a GPS module and render the information on a LCD screen.
    • GPS library for Arduino/Wiring by Maarten Lamers is a library for decoding (NMEA) data from any GPS receiver. It extracts all information types, such as speed, direction, location. Supports $GPRMC and all possible sentence types. Includes example programs and routines for calculating distances and directions over Earth's surface. NOTE: this library does not work on 1K Arduinos: Duemilanove, etc.
    • TinyGPS, a new GPS/NMEA parser by Mikal Hart is a resource stingy library for decoding (NMEA) data from any GPS receiver. It extracts speed, direction, location, course, date, and time, but consumes only about 100 bytes of RAM.
    • Arduino-NMEA, Yet another GPS/NMEA library, this one provides an object oriented interface.
    • Acoustic.GPS A GPS homebrew 'GPS' system that uses sound to determine distance to three known points using off the shelf components.
    • GPS Position Radio Mesh library for ArduinoGPSNet is an Arduino library and example sketch that provides a radio broadcast mesh network among a number of GPS+RFM22 radio equipped nodes, such that all nodes in the network know the GPS position of all other nodes. Includes a sample PC program to display all node positions on a Google map.

Magnetic

  • Hall Effect Sensors
    Some current sensors use the hall effect, see the Current Sensing section. One such, the ACS712 (which you can buy on a simple breakout for less than $5) can be used to measure current.. but you could also use it to measure the proximity of a known magnet. Useful, perhaps, for, say, noting tiny swings of a seismograph pendulum. (If using the sensor to sense current, be sure to do so in an environment with no other fluctuations in local magnetic fields!)
    • A1301 / A1302 A simple sketch to measure strength and polarity of a magnetic field.
    • Reading PC Fan RPM A simple tutorial on using the Arduino to read the RPM of a common 3 wire PC fan.
  • Magnetometer (compass)
    See also the Degrees Of Freedom, 6DOF, 9DOF, 10DOF, 11DOF section for a magnetometer sensor combined with an accelerometer or gyro.
    • MicroMag.
      • MicroMag library to read the MicroMag2 and MicroMag3 magnetometer sensors from PNI.
    • LSM303.
      • LSM303 Tilt-Compensated Compass Library - The LSM303 is an inexpensive 3-axis accelerometer combined with a 3-axis magnetometer. This library makes it easy to read the raw accelerometer and magnetometer data, and it contains a function that performs the non-trivial math to compute the tilt-compensated heading using the Earth's magnetic field.
    • HM55B.
      • Parallax HM55B Compass Sensor - get angle to North here is all you need: HM55B
    • CMPS03.
      • CMPS03 Compass Module - http://www.grappendorf.net/arduino-atmel-avr/arduino-libraries/cmps03-compass-module Communicates via the I2C protocol.
      • Using CMPS03 compass module on Arduino connected through I2C : http://www.grapelabs.de/arduino/libraries/cmps03-compass-module.
    • HMC5883.
      • A tutorial and a library for the HMC5883 at Love Electronics: https://www.loveelectronics.co.uk/Tutorials/8/hmc5883l-tutorial-and-arduino-library
      • The Sparkfun page for the HMC5883L with documentation and an example: http://www.sparkfun.com/products/10530
      • Library for HMC5883 by Tim Zaman: http://www.timzaman.com/?p=970&lang=en
    • HMC6352.
      • I2C Compass Sensor - Read heading from a compass sensor, using the Wire library. Here's the sketch: Learning.hmc6352
      • Forum posting on controlling the HMC6352 with the Wire library.
      • Using the HMC6352I2C Digital Compass - Code & Schematic http://bildr.org/2011/01/hmc6352/
  • IMU
    • using vectornav vn-100 IMU (with extended kalman filter) and an Arduino. based on vectorduino, a parsing lib for the mega. here is a video of a project and revised lib with example code in the description video.
  • Magnetic Cards
    • MagStripe - a library to interface with single-track magnetic card readers
  • Reed switches

Mechanical

  • Switches and Buttons
    • Unified Arduino Input Interface: Library that provide unified interface to all input devices. The interface can sense buttons, rotary encoders, keypads, analog buttons, serial keypads or even smartphone as your Arduino input. Make local interface on your project and control it the same on remote interfaces on PC, phones or internet.
    • Debounce: a library to debounce switches.
    • SoftwareDebounce: a simple software input debounce algorithm.
    • ClickButton - A library to get button clicks. Short and 'long' clicks, multiple clicks like double click, triple click etc. Also button holds. Active high or low buttons, software debounced.
    • SoftTimer is a time sharing solution, what has a built in asynchronous software debounder. Has an onPressed, onReleased callbackwith the time it is being pressed.
    • Buttons: a simple library to use hardware debounced buttons, handling one shot and hold.
    • HoldButton: a code that makes a single button able to call different functions depending upon how long it it is held.
    • Button: simple hardware abstraction library
    • Improved Button Improved button library, Version 2 allows for double and multiple clicks.
    • Button (carlynorama) Another button abstraction library. Event based, also allows for being used with shift registers, debounce, holdDelay (like keyboards) etc.
    • AnalogButtons: a library to connect more than 1 switch to a single analog pin, using different voltage dividing resisters for each switch. Provides register callback functions or over-riding Button class methods to communicate a button press action. Supports configurable holding down of a Button.
    • AdvButton: Advanced, yet simple to use, library for registering user input with buttons. Provides an event based interface.
    • M66004Vfd: Library includes support for the buttons on the VFD display/control panel salvaged from certain HP LaserJet printers such as the LaserJet 4.
    • HpLaserJetLcd: Library includes support for the buttons on the LCD display/control panel salvaged from certain HP LaserJet printers.
    • DebounceInput (PaulMurrayCbr) Yet another debouncer, this one based on a simulated RC circuit and Schmitt trigger. Simple interface to detect state and state changes (rising/falling).
    • AceButton: An Adjustable Compact Event-driven (ACE) Button Library for Arduino. A button library with 2018 technologies. Handles debouncing and dispatches events to a user-defined event handler. Supported events are Pressed, Released, Clicked, DoubleClicked, LongPressed, and RepeatPressed. Timing parameters, event activation, and event suppression can be configured at compile-time or run-time. Optimized for compact memory consumption. Supports single button or multiple buttons. Thoroughly unit tested using AUnit.
  • Encoders
    • CommonBusEncoders Use human turned, click activated encoders that uses only four pins for the first encoder and only one more for each extra encoder.
    • Unified Arduino Input Interface: Library that provide unified interface to all input devices. The interface can sense buttons, rotary encoders, keypads, analog buttons, serial keypads or even smartphone as your Arduino input. Make local interface on your project and control it the same on remote interfaces on PC, phones or internet.
    • A little sketch for reading rotary encoders.
    • Magnetic Rotary Position SensorMLX90316.
    • ACE128 Bourns 128 position Absolute Contacting Encoder. 128 position gray code encoder, provides rotation position. i2c support for MCP23008 and PCF8574 expanders. Now on GitHub
  • Potentiometers
    • Potentiometer: simple hardware abstraction library
  • Telephony
    • Rotary Dial: reading pulse-dialed digits from a rotary telephone dial
  • MIDI
    • see MIDI under communication section

Mice

  • Read data from a PS2 mouse. Useful if you want to use the encoders from an old mouse in a robot or other device. PS2 mouse interface
  • PS2 Mouse Library - An updated version of the above library that adds support for scroll wheel mouses and easier sketch integration.
  • Read out the surface movements directly from an optical mouse sensor. English tutorial and library
  • Get absolute position from a laptop touchpad. Instructable with an Arduino sketch

Motion

See also the Magnetometer (compass) section for magnetometer sensors.

  • Accelerometer
    See also the Degrees Of Freedom, 6DOF, 9DOF, 10DOF, 11DOF section for a accelerometer combined with a gyro and other sensors. For a list of accelerometer terminology, go here.
    • LSM303.
      • Connect the Arduino to an LSM303 3-axis accelerometer & 3-axis magnetometer - get raw accelerometer and magnetometer data, or put it together for a tilt-compensated compass heading
    • LIS3LV02DQ
      • Connect the Arduino to the LIS3LV02DQ Triple Axis Accelerometer
      • Arduino and the Two-Wire Interface (TWI/I2C) interfacing with a LIS3LV02DQ accelerometer.
    • Memsic 2125.
      • Connect and read the Parallax 2-axis Memsic 2125 accelerometer - instructions, video, and source code
    • H48C.
      • Connect Arduino to a Parallax H48C 3-axis accelerometer : Parallax H48C
    • ADXL330.
    • ADXL335.
      • MicroTLT: Tilt Sensor
    • ADXL345.
      • ADXL345 3-axis accelerometer special features - sense tap, free-fall, and activity - Code/Schematic http://bildr.org/2011/03/adxl345-arduino/.
      • Interfacing the ADXL345: http://codeyoung.blogspot.com/2009/11/adxl345-accelerometer-breakout-board.html
      • Exploring the advanced features of the ADXL345.
      • Sparkfun has a well documented page about the ADXL345 : http://www.sparkfun.com/tutorials/240
    • MMA7455.
      • MMA7455 Accelerometer A ready to use sketch to get to know the MMA7455 accelerometer.
      • MMA7455L Three Axis Digital Output Accelerometer.
    • MMA8451, MMA8452, MMA8453.
      • Library and examples for the Freescale MMA845-1,2,3Q Accelerometers. Includes sense shake, motion, and raw xyz.
    • MMA7361.
      • Library and example for a Freescale MMA7361 Triple Axis Accelerometer.
    • LIS332h/LIS331.
      • Library and documentation for the LIS332h/LIS331 accelerometer.
    • Wii Nunchuk Library: WiiChuckClass.
    • Concept proof of reading HTC Desire Android phone Accelerometer data : HTCDesire.
  • Gyro (Gyroscope, Gyroscopic Sensor)
    See also the Degrees Of Freedom, 6DOF, 9DOF, 10DOF, 11DOF section for a gyro sensor combined with an accelerometer and other sensors.
  • PIR Motion Sensors
    • A starters guide to PIR sensors: http://makeprojects.com/Project/PIR-Sensor-Arduino-Alarm/72/1
    • A full explanation by LadyAda: http://www.ladyada.net/wiki/tutorials/learn/sensors/pir.html
    • Code for a PIR sensor: PIRsense
    • Interface to the Parallax PIR motion sensor : some instructions and code samples

Multiplexing Inputs

  • read the forum post on analog multiplexers
  • learn how to use the Motorola MC14067BCP Analog multiplexer/demultiplexer through the fluidforms tutorial
  • Want to learn how to make your own force-sensors and how to connect hundreds of them with multiplexers? look at fluidforms' great tutorial and post in the Arduino users projects section of this wiki. Tutorial by fluidforms.at.
  • The SN74HC165N 8-bit parallel-in/serial-out shift register. Read the state of 16 (or more) digital pins using only 4 Arduino digital pins.
  • Expand the digital outputs. Chainable with individual pin access using the 74HC595 http://bildr.org/2011/02/74hc595/
  • Serial to Parallel using 74HC595 Shift Register http://www.arduino.cc/en/Tutorial/ShiftOut
  • Using the CD74HC4067 is a 16-Channel Analog Multiplexer - Expand your analog pins - http://bildr.org/2011/02/cd74hc4067-arduino/
  • The Mux Shield expands your Arduino to 48 analog or digital inputs.
  • I2cDiscreteIoExpander is an Arduino library for the Texas Instruments PCF8575C 16-bit I2C I/O expander.
    • The PCF8575C provides general-purpose remote I/O expansion for most microcontroller families via the I2C interface serial clock (SCL) and serial data (SDA).
    • The fixed I2C address of the PCF8575C (0x20) is the same as the PCF8575, PCF8574, PCA9535, and PCA9555, allowing up to eight of these devices, in any combination, to share the same I2C bus or SMBus.

Signal Filtering

  • Arduino library for signal filtering: cleaning up noisy signals
  • Arduino library for outlier detection: Library uses a Hampel filter to identify outliers in data. It also calculates median and median absolute deviation of data. Optimized for speed.

Pressure Sensors (air, fluid, baromic)

See also the Degrees Of Freedom, 6DOF, 9DOF, 10DOF, 11DOF section for a (baromic) pressure sensor combined with an accelerometer, gyro, etc.

  • SCP1000: Code to read the SCP1000 barometric pressure/temperature sensor, which uses the SPI interface.
  • Intersema MS5607B and MS5534C: Code to read some Intersema barometric pressure/temperature sensors:
    MS5607B uses i2c
    MS5534C uses bit-banging
  • Intersema MS5541: Code to read the MS5541 or compatible sensor: sketch for reading calibration words and for use.
  • Pressure Sensor with bridge output: Connecting such a sensor directly to the analog inputs of an Arduino, using the SPX3058D as an example.
  • MPX5050. Using a pressure sensor to sense the water level.
  • Honeywell TruStability SSC-HSC pressure sensors: A library to control the Honeywell TruStability HSC and SSC Series Pressure Sensors (Digital Output)
  • BMP180 barometric pressure sensor: Interfacing with the BMP180 barometric pressure sensor.

RFID devices for input

  • Mifare MFRC522
  • SonMicro's SM130
  • RFID - Sparkfun/ Innovations
    Sparkfun offer several RFID readers suitable for Arduinos. There are useful discussions on the use of them in the SparkFun pages, and in the forum.
    • SparkFun/ Innovations Readers 'Getting started' guide from SheepdogGuides.. Introduction followed by full code for door lock, and PCB design, and information on electro-mechanical strike plate.
    • Innovations ID-12 RFID Reader using software serial and detecting removed RFID tags
    • ID-12 / ID-20 RFID readers - ID tags in Arduino code. - Code & Schematic http://bildr.org/2011/02/rfid-arduino/
  • RFID - Parallax
    • GumboLabs write-up on how to get the best out of your Parallax RFID reader and how to account for noise. Using the Parallax reader and accounting for noise.
    • Code for using the Parallax RFID reader with Arduino.
  • RFID - General points and other readers
    • RFID door lock Using the SL018 low-cost I2C reader
    • At 1/2011, a useful discussion was unfolding in the forum on how to connect a Wavetrend active reader capable of reading cards at distances in excess of 2m.
    • The USB Phidgets RFID reader you may encounter for sale on eBay is not suitable for Arduino work, as to use it you need a proprietary .DDL
  • DIY RFID reader - using the Arduino plus simple home-wound coil to read FSK tags
    • FSK RFID tags are widely used, yet are unsupported by the popular Parallax kit. A simple solution based on using only the Arduino and a few low cost common components can read FSK RFID tags reliably (and potentially all other 125kHz tags).
  • RDM630 library for reading EM4100-compatible tags with the RDM630-reader.
  • Parsing Manchester code from EM4100 tags
    Library for parsing manchester or biphase encoded data from EM4100 compatible tags. Requires external hardware for RF demodulation.

Slotted Detectors/ Proximity Sensors

See also other references to 'proximity' elsewhere on page, including the material in distance sensing. There may be discussion of these devices in the 'encoders' section, for instance. Set up xrefs? SEe, for instance, the material here in 'IR Reflectance/Line Sensors' under 'Light sensors'

  • Someone please do a write up of the useful slotted and reflective detectors which DO exist, and can be plugged into Arduinos!

Tagging / Labeling

This section a legacy, see the sections RFID and Barcodes

Time

  • Time library for dates and times that can be used with and without external hardware
  • DCF77
    • DCF77 - DCF77 Library - Set internal clock to atomic time
    • DCF77 Library description Documentation and full explanation of DCF77 library.
    • Articles on DCF Hardware and DCF Signal
    • A tutorial for a DCF77-based radio clock
    • Tutorial Arduino DCF77 v0.2 Code
    • Decoding the meteotime weather data from DCF77 using the HKW581. Includes modified library and full software. DCF77 meteotime decoder
    • DCF77 Clock - a binary DCF77 clock with good noise tolerance.
    • The Clock - a DCF77 clock with extraordinary noise tolerance.
    • dcf77 - a DCF77 library with extraordinary noise tolerance
    • http://blog.blinkenlight.net/experiments/dcf77/dcf77-generator/ - a DCF77 signal generator and transmitter.
  • DS1302
    • DS1302 Information and a basic sketch for the DS1302.
    • DS1302RTC library, companion the Time library.
    • DS1302 RTC (23-wire interface with supercap backup) library
  • DS1306
    • Use the Dallas/Maxim DS1306 Real-time Clock chip with Arduino.
  • DS1307
    • I2C for RTC DS1307 Real Time Clock - Interfacing with the DS1307 date/time keeping clock - Great for logging events.
    • Library to control the RTC DS1307 with Arduino. Also an example is supplied and how to connect it.RTC DS1307 Library
    • RealTimeClockDS1307: Yet another (more elaborate) library for working with the DS1307. Includes methods for access to the battery-backed RAM, square wave generator, correct 24h-AM/PM conversion, etc. Example sketch allows interactive control of most functions via Serial Monitor.
    • Sketch to set the DS1307 of the logshield by means of NTP.
    • Library for the I2CDS1307 RTC with NV-RAM support. With v1.20 you can calculate with the time and a program has been added to modify the RTC over the serial port.
    • Syncing an RTC to your computers time using python Syncing RTC using python
    • Comparing RTC DS1307 and PCF8563 and using DS1307 with an optimized code. I2C RTC DS1307 and Arduino
    • Setting the time on your DS1307 RTC using a Windows application. Set RTC time from PC App
  • Use the CMax CMMR-6P WWVB Receiver with Arduino
  • Sleep and Watchdog functions for battery operated equipment Nightingale example
  • Interface to IBM AT RTC bq3287 and compatable with 8bit bi-directional bus code and description
  • Interface to a Maxim-IC DS3231I2C chip
  • Guide for beginners to using the DS1302 RTC in the nuelectronics.com datalogging shield. Could help other users of the DS1302 also.
  • Library for the DS1340Z RTC with sample sketch to read and write time code. (Low voltage operation supported). For more information please check out the DS1340Z Inmojo Arduino Shield product page.
  • PCF8563 RTC Library with examples.
  • MicroCLK: A stand alone RTC controlled clock with LCD display
  • DS3234
    • The library creates software interface to communicate with DS3234 RTC.
    • It allows for using any pins as MOSI, MISO, CLK and SS, for communication with the DS3234, thus conflicts with SD and Ethernet libraries are no longer a problem.
    • The library is based on the example offered by SparkFun.
    • Library offers reading date and time, setting it, and also as a bonus it allows to read the temperature.
  • PCF8563
    • Using I2C RTC PCF8563 at I2C fast mode (400 kbit/s) with an optimized code. I2C RTC PCF8563: basic usage with Arduino
    • Comparing Arduino crystal deviations. A Blinkenlight experiment that shows why Arduino without RTC is unsuitable for time keeping.
  • R4571 (ETM21E-02)
    • R4571 Epson Toyocom R4571 RTC Library and documentation
  • WatchDog: A library containing a set of intuitive and easy to use functions for utilizing the built-in AVR WatchDog Timer as an interrupt-based timer/counter.

WeeklyAlarm

  • https://github.com/NitrofMtl/weeklyAlarm WeeklyAlarm is a timer to trigger events on a daily base at the same time. It has been programmed to use like a numeric thermostat scheduler.

Touch screen

  • Schematics and source code available for interfacing to a small touchscreen (mounted on the TouchShield) - and another example
  • SMARTGPU Fullcolor touchscreen display drawing.
  • Schema + sources to plug DS Touchscreen with an Arduino (from A to Z)
  • The U8glib graphics library includes examples for 4-wire resistive touch screens.

Voltage, Current, Power (kiloWatt hours)

  • DC
    • Arduino can only sense 0-5V inputs. Here's a schematic explanation of how to interface to 5V or higher.
    • Monitor Vcc without using any pins - simple technique for measuring Vcc internally. Can be used for increased accuracy when using the default analog reference as well as monitoring the Arduino supply voltage.
    • Supply Voltage vs. load - Internal Vcc measurement plus comparison of the measurements for different load situations.
    • USB Voltage Monitor - How to monitor USB supply voltage with an Arduino
  • Current sensing
  • 120V/240V AC
    • Monitor the power grid - A Blinkenlight experiment to monitor the power grid's frequency deviations / load.
    • How to build an energy monitor / power meter that can measure whole house energy use, using a current transformer to measure current and AC-AC power adapter to measure voltage plus a few resistors and capacitors. Calculates Real Power, Apparent Power, Power Factor, RMS Voltage, RMS Current, frequency and kWh.
    • AC Phase Control Method for controlling power to AC devices using hardware timers, a triac and a zero crossing detector.
  • kWh Monitoring
    • Small sketch for interfacing with a EEM12L-32A kWh Monitoring device.
  • Energy meter readout
    • Energy consumption monitor project reading out precise solar production and public grid consumption values from recent electrical power meters via serial infrared port and blinking LED, and generating pulses to feed the S0 port of an attached Solarlog 500 recording device with the current home consumption (in German).
    • Electric monitor Simple electric meter for measuring power production/consumption with resettable volt/ampere/kWh/time/temperature counters and a multi-mode LCD interface

Graphical or text - based user interface (UI) or human machine interface (HMI) on Arduino: How to ask a user to input information (number, choose from a list, enter text, etc.) on an Arduino using display (LCD, LED matrix etc.) and buttons, keypads or other devices.

Also see Via Mobile Phone for a simple mobile based user interface - No Android programming required and very little Arduino programming.

Text-based user interface

  • microBox: microBox is a Arduino library that provides a interface with Linux Shell like look and feel for Arduino applications. With microBox own commands and application parameters are made accessible to the user within a virtual Linux filesystem tree. The parameters can easily be accessed by Linux standard commands.
  • Unified Arduino Input Interface: Library that provide unified interface to all input devices. The interface can sense buttons, rotary encoders, keypads, analog buttons, serial keypads or even smartphone as your Arduino input. Make local interface on your project and control it the same on remote interfaces on PC, phones or internet.
  • Phi_prompt user interface Library Interactive user interface for your projects. Library functions use an HD44780 character display and one to six push buttons. You can use the library to construct a user interface to ask your user to enter numbers, select from a list, navigate a menu (multi-level), enter text strings, display multi-line and multi-page long texts from main memory and PROGMEM, ideal for introductions and outputting multi-line results. You can also call simple functions such as ok_dialog and yn_dialog to ask user for information. Lists/menus have lots of features, scroll bar, auto-scroll long list items like on an MP3 player, centering on item, flashing cursor or arrow to highlight item, current/total index or 0-9 index etc.
  • MenuSample - an interactive terminal-based menu interface for your projects. Allows multi-level menus, uses PROGMEM space, and lets you control your Arduino interactively. http://sourceforge.net/projects/arduinowifly/files/MenuSample/
  • M2tklib (LiquidCrystal Library): 2-6 buttons or custom defined, debounce, menus and dialog definitions in PROGMEM area, text & number input, toggle/check/combo box, container widgets, scrollbar, online reference and tutorials
  • MENWIZ - MENu WIZard: Simple coding, user defined callbacks and actions. The user can define a splash screen to be activated at startup, a user default screen to be activated after x secs from last menu interaction. The user can easily fire action inside a menu hierarchy. Any sketch variable (integer, byte, boolean, float) can take input from the menu. Menu navigation needs 4 or 6 buttons (up to the user), or the user can provide its own callback routine for custom nav devices. It is built on top of 'new' LiquidCrystal library (i2c, 4 wires, 8 wires and other interfaces are supported) and is able to support different LCD sizes (16x2, 20x4, ..).
  • LCD Menu Easy to use Menu-drive user interface. Primarily intended for 16x2 to 24x4 style character displays. This library uses Liquid Crystal to control the LCD, and adds a menuing layer on top so that you can define your menus easily, and receive callbacks from the menu code to execute your code. You can also use some of the built-in code for taking input for Boolean or integer inputs. The primary focus of this library is on an easy-to-use interface for defining your user interface and getting input back.

Graphical user interface

  • Monochromatic dot-matrix display implementations
    • M2tklib (GLCD, U8glib or DOGM128 Library): 2-6 buttons or custom defined, debounce, menus and dialog definitions in PROGMEM area, text & number input, toggle/check/combo box, container widgets, scrollbar, online reference and tutorials
    • Seeeduino TFTv2 Menu Converted Seeeduino TFT Menu to work on the TFTv2 screen.
  • Color dot-matrix display implementations
    • LCD Shield An adaptor shield that provides an Arduino interface to 4D systems LCD Touchscreen Modules
    • SMARTGPU Create advanced color touchscreen GUIs very easy with Arduino + SMARTGPU.

Command line user interface with some graphic features

  • Here's an implementation of a quite basic OS that enables editing and executing small apps on an UNO with a TFT-touch-shield:

Hardware independent layers

  • Multi-tap input This code accepts any type of keypads such as standard Arduino keypads library result and interprets it with a pre-defined multi-tap mapping. It has cap key and space key for 12 key pad and more functions for 16 key pad. The instructions are embedded as comments in the front of the code.

Various options for storing data from your Arduino board. See also Data Logging and Plotting

Built-In EEPROM / Built-In Flash

  • The EEPROM library give you access to 512 bytes of non-volatile memory (that is, it retains its value when you turn the board off).
  • Mikal Hart's Flash library allows you to easily store strings, arrays, and tables in read-only memory without the hassle and complexity of learning PROGMEM programming.
  • The EEPROMex library extends the standard EEPROM library with: Reading, writing bytes, longs, ints, floats and doubles, single bits, structs, arrays and more. Note that most of the functionality of EEPROMex(other than address allocation) is now included in the stock Arduino EEPROM 2.0 library.
  • EEPROM-Erom library is made to ease reads/writes of any types of data, care-free data address management and reduce the wear of EEPROM flash memory. Includes tools for handling all EEPROM variables as one entity and verification of stored data validity.
  • Bitlash lets you define and store new Bitlash functions in EEPROM.
  • EEProm wear leveling - A Blinkenlight experiment that explains EEPROM wear leveling.
  • Arduino EEProm wear leveling - A basic library to manage variables with wear leveling.

Dallas 1-Wire

  • There are EEPROMs in the 1-Wire chip family from Dallas Semiconductor. They can connect to the Arduino via a MicroLan, or more directly. The techniques for using MicroLans from an Arduino have already been developed. (And give you access to input and output options, too.)

DataFlash Memory

I2C EEPROM

  • A small library for I2C EEPROM to read and write blocks of 'any' size.
  • M24LC256 I2C EEPROM Library high-speed page-writing EEPROM library
  • Microchip 24XX1025 series EEPROM driver (or: GitHub page) - fully-featured, optimized, any-size writes (single bytes, strings/data, ints/floats), easy to use
N64 controller pc

SPI EEPROM

SD / MMC Card

  • Chips To Bits Storage Shield – Examples of how to use a SD card while using very little memory or processing power of the Arduino.
  • SMARTGPU color touchscreen display shield with microSD FAT format support.
  • PlainSDC: SD Card driver library;
  • Simple SD Card Shield for the ICSP header and the SD Library; schematics and pictures.
  • Adafruit SD card Arduino tutorial (details on how to use the Adafruit SD library on GitHub)
  • SdFAT Arduino library supports FAT16 and FAT32 on standard SD and SDHC cards.
  • The default SD library that is used when Arduino scripts use '#include <SD.h>'

SIMM RAM

  • SIMM RAM Library to interface with 30-pin simm ram modules which were used in AT (286), 386, 486, Macintosh Plus, Macintosh II, Quadra, Atari STE and Wang VS systems. It will give you extra RAM to store and restore dynamic data in your sketches.

Spi RAM

Ferroelectric RAM (FRAM)

  • Hackscribble Ferro - Library to interface with Fujitsu MB85RS FRAM chips. Add up to 256KB per chip of fast, non-volatile memory through SPI bus.
  • FM24CXX & AT24CXX chips I2C to FRAM - Library to interface with FM24/AT24 chips. Uses up to 32K nonvolatile FRAM over I2C interface.

USB Memory Stick

  • Datalogging to a USB memory stick with FTDI board usb memorynick

Smartcards

  • Directly connect SLE4432 / SLE4442 and compatible smartcards to the Arduino via SCLib.

Information on logging and plotting Arduino data. SD card libraries, logging and plotting packages. See also Storage

Data Logging

  • pfodApp (Android) The free pfodDesigner generates Arduino code for logging data in CSV format to your mobile phone (using pfodApp). Works with Arduino code for 101 and other BLE boards as well as SMS and WiFi shields. No Android Programming Required

Plotting

  • pfodApp (Android) The free pfodDesigner generates Arduino code for plotting data on your mobile phone (using pfodApp). Works with Arduino code for 101 and other BLE boards as well as SMS and WiFi shields. No Android Programming Required

Information on communication protocols often used to talk with other devices. Please refer to Interfacing with Software for information on linking with various PC based applications. This listing may contain cross-listings with device type listings above.

Overview

  • Guide to Arduino Communications provides an overview of various communication protocols available on the Arduino. Covers SPI, I2C/TWI, USI, UART/USART, USB and others. Good introduction to the various types of communications available.

Serial

  • Serial command handler for decoding commands in serial messages and calling functions or setting variable values.
  • HyperGraph is a replacement for HyperTerminal, with an extra possibility to make graphs, save to file and so on. user must send data of up to 5 channels as Serial.println( var1,var2,var3,var4,var5) each channel can have different name, color, scale, offset.
  • Simple Soft Serial, No library http://www.arduino.cc/en/Tutorial/SoftwareSerial
  • SimpleTX configuration USART SimpleTX
  • Arduino + Mini2440, Controlling an Arduino with a mini2440 development board.
  • EasyTransfer, easy communications between Arduinos via Serial or I2C
  • See also InterfacingWithSoftware - Specifically interfacing Arduino as a Linux TTY
  • NewSoftSerial - Mikal Hart's replacement for SoftwareSerial -- derived from Ladyada's AFSoftSerial. (Has a Serial.available, among other virtues.)
  • MAX3100 - Increase the count of your Arduino's hardware serial ports using the MAX3100 over the SPI interface.
  • Communication through files - A really quick and easy way to communicate with any software of your choice.
  • Messenger: Send, receive and parse characters, integers and lists. It is the new SimpleMessageSystem.
  • CmdMessenger: A successor to Messenger above. It supports binary data transfer and C# and VB counterparts on the PC side
  • SimpleMessageSystem: Send, receive and parse characters, integers and lists between Arduino and Max/Msp or Pure Data
  • Arduino Shark Protocol implementation for Arduino & PC (Linux). Features: CRC16-checksum, bytestuffing, 8-9kbytes/s throughput rate of payload in each direction, point-to-point protocol
  • Modbus RTU Master/Slave implementation of the functions read holding registerspreset single register, and preset multiple registers (function codes 3, 6, and 16 respectively). Available as .pde sketch written in C, or Arduino library written in C++. Only until Arduino IDE 0.22!
  • libModbus adapts the previous library to Arduino 1.6.x. It is intended for iether for master and slave devices. It implements functions 1, 2, 3, 4, 5, 6, 15 and 16 for slaves and 3 and 16 for master devices. It also adds some useful examples and documentation. It has no relation to libmodbus.org.This blog site is based on it: http://arduino-experience.blogspot.com.es/

Project is hosted on https://github.com/smarmengol/Modbus-Master-Slave-for-Arduino

  • ModbusMaster: This is an Arduino library for communicating with Modbus slaves over RS232/485 (via RTU protocol). Discrete functions 0x01 - Read Coils, 0x02 - Read Discrete Inputs, 0x05 - Write Single Coil, 0x0F - Write Multiple Coils and register functions 0x03 - Read Holding Registers, 0x04 - Read Input Registers, 0x06 - Write Single Register, 0x10 - Write Multiple Registers, 0x16 - Mask Write Register, and 0x17 - Read Write Multiple Registers implemented. Available from within Arduino IDE Library Manager.
  • SimpleModbus is a collection of Arduino libraries that enables you to communicate serially using the Modicon Modbus RTU protocol. Mail me at bester.juan@gmail.com for any help on using the libraries. Project is hosted at Google Code
  • Modbusino is a thin library to response to Modbus requests from your Arduino (slave). The library is based on code from libmodbus.org and is designed to be robust, non-blocking and with a very low footprint. The code is under LGPL v3 license and available on https://github.com/stephane/modbusino.
  • The MuxShield collects serial output from up to 5 slaves vis software and sends it out to the serial hardware port.
  • SerialControl remotely controls Arduinos (usable in a XBee peer2peer network!)
  • iPodSerial Library to interact with iPods over serial through their dock connector. Supports Simple Remote and Advanced Remote modes.
  • General Points, serial interfacing General skills and ideas for using Arduinos connected to each other or other devices via serial port. From Sheepdog
  • Talking to Windows Writing Windows programs to deal with data from, or send data to Arduinos over serial link. Written in Delphi, but little 'Delphi cleverness'.. mostly just calls of Windows APIs. From Sheepdog.
  • Arduino Terminal Server - Serial to Network Proxy Server using old computer hardware.
  • Insek Internet to Serial Proxy Open source Mac application which facilitate the communication between a Web API and an Arduino connected to an USB Serial Port without any specific hardware.
  • Bitlash is a serial port command shell and interpreted language for Arduino.
  • Megasquirt Serial Driver is a library around the MegaSquirt 2 ECU, providing an interface from Arduino to the controller with a high level of abstraction.
  • Nick Gammon's elegant RS-485 solution. A library, code examples, hardware designs ($6 per node) for interconnecting multiple devices over two wires. Basis for a simple 'LAN' of sensors, or other uses. This includes a library for error checked packet sending over whatever link you want to set up. (RS-485 independent.)
  • VU Meter a Blinkenlight experiment that exhibits serial communication using a Python program to control the Arduino as VU display. Also features a nice Video.
  • Comduino Terminal v1.0 Use your PC to set output state and PWM value on digital outputs of your Arduino board. Scan inputs and check values/states on pins. Sketch running on board implements a simple command interpreter which executes Arduino functions in response to commands sent from PC. The accompanying VB application can also be used as a general purpose terminal utility to talk to other serial devices.
  • Simple Arduino CRC Library implements a variable-size CRC checksum for 16-bit integer arrays. Available CRC length range is 3 to 15 bits.
  • Arduino SDCard file manager sketch with ZModem Serial based SD card file manager and ZModem file transfers (send and receive) between PC and Arduino. Requires an Arduino with 30K+ of flash and 2K+ of dynamic memory (Uno, Nano, Mega, etc.)
  • ArduinoLinuxSerial in PHP for Linux via USB. The Master is PHP, and you need the serial driver (uses devices like /dev/ACMx or /dev/USBx). It is blocking the master and the php->Arduino messageis limited to 60 char. Fast and robust protocol (CRC and repetions). Useful with simple and fast Arduino responses.
  • USBphpTunnel For Linux+Android + WEB server (TVbox). The master is Arduino, and the Android app uses ports like /dev/bus/dev/00X/00Y, so you don't need the serial driver. It is blocking the master (arduino) and it allows big messages. It works in background of the main PHP program. Useful for data logging and RT.
  • USBphpTunnel_Fifo For Linux+Android + WEB server (TVbox). The master is PHP. It is NOT blocking the master, allows payload up to 4k, allows concurrence (many users via WIFI). Works in background, and it is no fast (depending from polling Arduno frequence, 5-15 sec. plus processing time). Well placed for long Arduino processes (like waiting user actions).

Bluetooth

  • CmdMessenger: A messaging library between PC and Arduino. It supports Bluetooth communication, including auto connecting and watchdog functionality. to Messenger above.
  • pfodApp (Android) pfodDesigner generates user interface menus with complete Arduino code for 101 and other BLE boards. No Android Programming Required

SPI

  • Spi library for Serial Peripheral Interface.

SPI/USI

  • Two-part SPI tutorial for beginners with various device examples

PWM

  • SoftTimer is a time sharing solution, what has a built in software PWM implementation. It can be used on any output pins, and does not block other processes to run.
  • Macroblock MBI5030 16 channel constant current 16bit / 12bit PWM LED driver library. Supports reading and writing configuration bits and global current gain (see datasheet from 2009 or later).

uM-FPU V3.1 Floating Point Coprocessor

  • Fpu library for using the uM-FPU V3.1 Floating Point Coprocessor.

uM-FPU64 Floating Point Coprocessor

  • Fpu64 library for using the uM-FPU64 64-bit Floating Point Coprocessor.

2B

  • 2B is a simple protocol used to receive and send messages to Arduino

PS2

GSM/GPRS M2M modules

  • A GSM/GPRS Library and Tutorials for using Telit and all Hayes AT compatible modules with Arduino and AVRs, for more details please visit the GROUND Lab Wiki.
  • A GSM/GPRS Library and Tutorials for using Telit and all Hayes AT compatible modules with Arduino and AVRs without the Arduino IDE, for more details please visit the GROUND Lab Wiki.
  • Beginners' Guide to using SparkFun GSM shield (Spreadtrum SM5100B module) and Arduino. Learn to create remote control, SMS transmission and so on, part of the Arduino tutorials at tronixstuff.com.
  • Remote Temp Monitoring w/ Spreadtrum SM5100B uses DS18B20 Dallas 1-Wire temperature sensors and the SMS capabilities of the SM5100B to monitor and report in-home temperatures.
  • PduEncoder is a small library which encode a message into PDU format needed for some phones.
  • Another Pdu Encoder - a code with a short tutorial which explains how you can get your Arduino to send SMS messages in PDU mode.

Phones

  • SonyEricsson]Send/receive SMS with with older Sony Ericsson phones
  • [http://romfont.com/2011/05/15/microbridge-adb-support-for-arduino/ Arduino/Android connectivity using a USB Host shield. Uses ADB, works with Android 1.5 and up.]]

HDMI-CEC

  • HDMI CEC Library communication with HDMI CEC capable devices (TV, DVD, Receivers, BR) : power on/power off/input selector.

Ethernet

  • Nimbits - an open source data historian service for Google App Engine shows how to record Temperature data into a Data Point Channel directly from an Ethernet Shield onto Google's infrastructure. Nimbits - free, social and open source data services
  • Australian Robotics blogger explains how to use Web Services (Pachube.com) to upload XML temperature data from Arduino Ethernet Shield and the Thermistor : Web Data Logging With Pachube
  • GumboLabs write-up on how to get the best out of the Ethernet shield. Also explains connecting to a Rails app. Arduino Ethernet Shield and Rails.
  • The 'official' Arduino Ethernet Shield uses the w5100 chip from WIZnet.
  • Arduino Ethernet Library by gkaindl enabling DHCP, DNS and Bonjour on Arduino
  • ArduServer.com A 'getting started' guide. Shows how you can set up an Arduino to serve a web page with two buttons: LEDon, LEDoff. Click a button, and an LED on the Arduino serving the page goes on or off.. and shines (or not!) on a light sensor. What the light sensor is seeing reported on the page the Arduino serves. Try an Arduserver for yourself. Issues of static vs dynamic IP address covered. DynDns.org solution. Router and firewall issues covered. Full code presented. Done on three platforms, with three ethernet interfaces (RBBB ($15), Uno, Teensy / ENC28J60, W5100, Wiz820io Ethernet.) How to pass the data from the light sensor to Pachube is addressed, by reference to other materials.
  • ArduServer2 The full code for something similar to the first ArduServer (see above) is tacked on at the bottom of the page the link will bring you to. This version of the Arduserver runs in an Arduino Uno with an 'official' Arduino Ethernet shield.. one with a W5100 chip. This version includes a Dallas DS18B20 1-Wire digital temperature sensor on the ArduServer, and the temperature is included in the web page served up.
  • ArduServer3 Explanation and full code for something similar to the first two ArduServers (see above). This version of the Arduserver runs in a Teensy 3.1 with a Wiz820io Ethernet shield. Brilliant. I'm no longer encountering the old problems limiting the size of the page served. This Arduserver has a Dallas DS18B20 1-Wire digital temperature sensor, and the temperature is included in the web page served up, in addition to the usual other inputs and outputs. There's a YouTube clip of ArduServer3 in operation.
  • ArduSimpSrv Arduino as server, client software provided for Windows PC. Without HTML- makes room in Arduino for other things, but means dedicated client software needed. A Linux version would be very welcome.
  • Here is a blog describing how to connect to an internet chat server using the Arduino and a Lantronix ethernet module.
  • Nuelectronics has developed an Ethernet shield for the Arduino with schematic, open-source ethershield library and webserver demo using Microchip's ENC28J60 SPI ethernet controller. The open-source TCP/IP stack is in the Arduino library format, easy to use and available for downloading.
  • Ethernet Board is a simple Paper-PCB board based on the ENC28J60. It's easy to create and one doesn't need a printed circuit board.
  • Ethernet_ENC28J60 Álvaro Justen is working on a library what is compatible with ENC28J60 modules/shields and have the same API as Arduino's standard Ethernet library, so it is more easy to use than other libraries (as nuelectronics').
  • UIPEthernet (Arduino_uIP): A plugin-replacement of the stock Arduino Ethernet library for ENC28J60 shields and breakout boards. Full support for persistent (streaming) TCP-connections and UDP (Client and Server each), ARP, ICMP, DHCP and DNS. Build around Adam Dunkels uIP Stack. This library is fully implemented and working!
  • Adafruit XPort/Ethernet shield - How to connect a Lantronix XPort to an Arduino, includes schematic & library. Examples of reading POP email, webserver, sending & receiving twitters..
  • Beginners' guide to tweeting with Arduino and Ethernet shield.
  • a Web Server example, made using an Ethernet Shield.
  • the Webduino library, a modular web server for the Arduino Ethernet Shield and AdaFruit shield using the Wiznet module that can be integrated into your sketches. It comes with several examples.
  • TinyWebServer, a small web server for the new Arduino Ethernet shield with microSD. It allows your web server files to be stored on a microSD card, giving your Arduino more memory for your program. You can even update the files directly over HTTP, making it easier to change your HTML interface after the project is finished.
  • RADIUS Client, Classes for creating, sending and receiving RADIUS requests as per RFC 2187 and 2188. For ArduinoMega and Ethernet shield.
  • MQTT Client, provides a client for doing simple publish/subscribe messaging with a server that supports MQTT v3. For the Arduino Ethernet Shield. For more information about MQTT, visit http://mqtt.org.
  • TextFinder library for extracting information (parsing) using Ethernet or Serial data
  • The Bitlash 2.0 release includes BitChi, a web and telnet server that serves dynamic content with Bitlash as the scripting language.
  • Jee Labs' EtherCard is a library for ENC28J60 that is in active development, and solves a lot of the instability problems in other implementations.
  • PachubeLibrary encapsulates the communication with the Pachube server. It simplifies the work to connect the Arduino based device into the Internet of Things.
  • homecontrol4me A Home Automation Project - Control your Wireless Switched Outlets over Ethernet with your Computer or Smartphone (currently German language only).
  • eSmtpSender Send Email via SMTP , detect and manage authentication error.
  • Send emails with SMPT : Email and read emails with POP3 : Email POP3.
  • SonosUPnP: Control and read the status of your Sonos speaker system using an Arduino Uno.
    Source code on GitHub: github.com/tmittet/sonos.
  • MicroXPath: XML navigator/parser with a tiny memory footprint (can use PROGMEM on AVR).
    Source code on GitHub: github.com/tmittet/microxpath.

WiFi

See also the 'wire-less' section for other communications channels without wires, e.g. IR.

  • WifiDuino: Quick, simple and cheap Arduino Gui compatible board with build in WiFi Router module. Communication is done via Serial.print() and Serial.read(). http://www.wifiduino.nl
  • La Fonera routers have got a serial ttl interface that you can easily use with Arduino.
  • The small router TP-LINK TL-WR703N could be a cheap way for connect Arduino with Ethernet/WiFi(maybe Bluetooth). You can buy this device in some shops at only 21 €, including carrier cost. You must install OpenWRT on the device with some other package and connect with Arduino via USB port. After this you can comunicate with Arduino, load new sketches in .hex format, use pendrive and other things.
  • AsyncLabs has the WiShield(Out of Business as of 2011-03-26, shields may still be available) which uses ZeroG Wireless's ZG2100WiFi device. It comes with a WiShield library which includes the driver source code, a TCP/IP stack and a bunch of sample sketches demonstrating the use of the Arduino as a web server and a web client. More information about using the sketches can be found on the AsyncLabs wiki page.
  • Weburban has a low cost WiFi breakout board which uses a Microchip 80211b/g/n device and connects via a simple, labeled header. It's compatible with WiShield and other Arduino WiFi libraries.
  • SparkFun has the WiFly Shield. It is fairly new but does have 802.11 b/g. They use the SC16IS750 to communicate via SPI to Uart for much faster speeds. Documentation is there for the actual WiFly GSX module and the SC16IS750 but the only real code is from a SparkFun project called the Talking Wireless Server Tutorial. (Actually there's also a mostly-Ethernet library compatible WiFly library.)
  • SparkFun also has WiFly Breakout Boards which use just 4 connections (RX, TX, VBATT, GND) for a full wifi connection through Roving Networks RN-series wifi chips, including RN-131. RN-171 and RN-XV.
    A serial WiFly driver library and Client-Server classes are available through http://arduinology.blogspot.com and http://sourceforge.net/projects/arduinowifly/files/.
  • Watterott makes the RedFly-Shield with WiFi module from Redpine Signals. A library is available at http://www.watterott.net/projects/redfly-shield
  • Roving Networks makes the low-cost WiFly RN-XV module, which plugs into an XBee socket and provides WiFi access via the serial port. 802.11b/g with WEP and WPA/WPA2 support. Supports one UDP or TCP connection at a time.
Sparkfun has the module available here: WiFly RN-XV Wire Antenna.
  • FioV3+Wifly+128bit security -- A simple way to control Arduino devices from Android Mobile via Bluetooth, BLE,WiFi/internet with 128bit security against hackers taking control. Works with 101 and other Bluetooth Low Energy boards without and Android programming

Flash / Flex

DMX

  • DMX (Digital MultipleXed) is a protocol used for connecting lighting controllers, dimmers, scrollers, scanners, etc.

CAN-Bus

  • Arduino CAN-Bus Shield OBDII project.
  • Another Arduino CAN-Bus Shield This one with simple code for MCP2515/MCP2551

I2C / TWI

  • The Wire Reference The Arduino Wire library is used for I2C.
  • i2c_scanner A simple sketch to scan the i2c-bus for devices.
  • Arduino I2C Expansion I/O: detailed tutorial on getting I2C working.
  • I2C for X9241 Digital Potentiometer - Interfacing with the X9241 Digital Potentiometer
  • I2C for RTC DS1307 Real Time Clock - Interfacing with the DS1307 date/time keeping clock - Great for logging events.
  • I2C and Arduino tutorials - Beginners' guides to using I2C bus with Arduino, including worked examples to follow; part of the Arduino tutorials at tronixstuff.com
  • Library for the I2CDS1307 RTC with NV-RAM support. With v1.20 you can calculate with the time and a program has been added to modify the RTC over the serial port.
  • Atmel Two Wire Interface: Detailed description of how the Wire library accomplishes I2C communication via a deep dive into the source code.
  • Si4707 NOAA Weather Receiver - SAME Decoder Interface: I2C based receiver interface for NOAA Weather Radio.
  • I2C communication between two Arduino Boards, with Bus Extender and Optical Isolation: A case study that discusses communicating between two Arduino boards, using a P82B715 bus extender, and optically isolating the two Arduino supplies using an ADuM1250.
  • Wire Library Detailed Reference. An in depth reference manual on the Wire Library. Expands upon the official library documentation.
  • I2C bi-directional level shifter Combining 3.3V and 5V I2C components.
  • I2C communication via digital pins - code which enables any two digital pins to take over I2C communication, in this example with a 24lc256 EEPROM
  • Light-weight and very fast software I2C library SoftI2CMaster supporting all pins on all ATmegas and ATtinys. It implements only the master part of the protocol but supports clock stretching by slave devices and permits to set a timeout value for clock stretching.
  • Pure C++, architecture neutral, bit-banging I2C library that runs on ARMs and AVRs.
  • PCF8574 Class Class for I2CPCF8574 IO expander.
  • PCA9536: PCA9536 Driver Library ( 4-Channel GPIO I2C Expander)
  • I2C Pull-up Calculator: Sketch to measure bus capacitance and suggest resistor values.
  • I2CShell: A sketch that enables you to interact with the I2C bus from the console: Send typed in I2C commands and see how the I2C devices react.

Dallas One-Wire / MicroLan

  • iButton door lock: Use small iButton devices to enter your room
  • OneWire Interface: Tutorial on the Arduino's interface to Dallas's 1-wire chips, e.g. DS1820 series temperature probes
  • Original and Inmojo's improved libraries for using Maxim DS2482-800 to interface with up to eight one-wire devices. Shield for sale here.
  • Reading iButton keys with Arduino A sketch that reads iButton key code, transforms it to human-readable format and displays it on LCD.
  • DS28EC20 1-Wire EEPROM Interfacing OneWire EEPROM with Arduino.
  • Remote Temp Monitoring w/ Spreadtrum SM5100B uses DS18B20 Dallas 1-Wire temperature sensors and the SMS capabilities of the SM5100B to monitor and report in-home temperatures.

MIDI


MIDI Library - Simple and fast way to send and receive MIDI messages with the Arduino.

MIDI-out (sending midi data to another device)

  • Bongo-Boy Connect Wii Guitar Hero World Tour drum set to MIDI piano with no modification or external hardware. Now you can really unleash your inner rock star.
  • A 52 parts drumset: Yet Another Arduino Midi Drumhead. An invitation to build your own midi drumhead with an Arduino UNO, a mux shield and one infrared sensor optical hihat. 48 velocity sensitive piezos and 4 chokeable cymbals.
  • Ardrumo: software to convert serial data coming from the Arduino into Mac OS X MIDI drum data (i.e. how to get Arduino talking to GarageBand without buying any extra hardware).
  • S2MIDI - Windows (.NET) program for converting serial data from Arduino into MIDI messages (hosted on Google Code)
  • MIDI Relay - Very similar to S2MIDI - copies all note on / note off and controller messages to the default MIDI port.Useful for quick testing of MIDI applications(MIDI Relay)
  • ttymidi - a GPL-licensed program that allows an Arduino board to interface with Linux ALSA MIDI applications without any additional hardware.
  • MidiSerial - another GPL-licensed program for interfacing MIDI over serial. Multi-platform.
  • Make your Arduino into a MIDI drum controller with Todobot's tutorial
  • The Midi Out tutorial from the fine folks at ITP.
  • A blog on building a midi guitar pick using the Arduino.
  • read six sensors and send their values as Midi CC messages
  • MIDI Touchpad hardware and software using PS2 Touchpad as a MIDI Device. Real MIDI, not translated by Desktop app.
  • USB MIDI firmware for UNO and Mega2560 Turn your UNO into a USB MIDI device.
  • MIDI File Library Read MIDI Standard Files from an SD card and process them in your sketch through callbacks. MIDI data can either be processed by the Arduino or be send to a synthesiser as a live MIDI stream.

MIDI-in (receiving and interpreting midi data with an Arduino)

  • MIDI Board is a MIDI-In, MIDI-Out or MIDI-Thru board. Due to the fact that it is designed as Paper-PCB it is easy to create and one doesn't need a printed circuit board.
  • MIDI Glockenspiel Toy Glockenspiel MIDI driven, using solenoids.
  • MIDI2CV Controller Converts MIDI Messages from an MIDI Device (Keyboard, Computer) to Controlvoltages for an analog synthesizer.
  • SID-emulator play your SIDuino i2c-Shield with your MIDI equipment. Sample code with Midi-In function for your own projects.

MIDI Integration (Add MIDI capability to non-MIDI Devices using Arduino)

  • Forum link A write-up on adding MIDI preset functionality to a Tech21 SansAmp British Character Series guitar effects pedal
  • Blog Post A write-up on adding MIDI remote control functionality to a EHX Pitch Fork guitar effects pedal

KNX / EIB

  • Library and schematic to connect Arduino to KNX / EIB using a TP-UART interface IC (and a short blog post on it)

Wireless.. including radio-less 'wire-less' channels, e.g. IR

See also: the WiFi section and Via Mobile Phone

  • iFrogLab LoRa module designer, builder and distributor. We make a USB LoRa hub or you can purchase the LoRa module directly and integrate into your projects with simple UART interface plus power. We support all of the World Wide LoRa frequncies and can provide the correct LoRa transciever for the frquencies that you need.- See our Web Site here and here. We also offer full Arduino support using our Arduino libarary and example codes - here.

(This 'wireless' section will soon be split off into an independent page, unless someone disagrees by deleting this sentence).

  • Bluetooth
    • Wireless communication with PC and Arduino board using Bluetooth, by Mitchell Page.
    • Wireless communication with Cell phone and Arduino board using Bluetooth, by Bakalski Page.
    • A tutorial on Arduino and Android smartphone 2-way communication using Bluetooth and MIT App Inventor: Connect Arduino Uno to Android via Bluetooth
    • A Tutorial on setting up Arduino BT on Mac OS X Tiger
    • If you have the rare need to reprogram your BlueGiga module, here's a tutorial on how to build adapter.
    • See also
    • Weburban Blue Olive Bluetooth Adapter connects via UART to a USB breakout connector.
    • PaperBluetooth is a homemade Bluetooth shield by Txapuzas (Spanish)
    • BleRgbLed controls an RGB LED with Bluetooth Low Energy (BLE) using a RedBearLab BLE shield
    • Annikken Andee A Bluetooth shield and library that allows you to easily monitor and control Arduino from your smartphone! Just code the user interface in Arduino IDE! No Android programming required!
    • pfodApp (Android) pfodDesigner generates user interface menus with complete Arduino code for 101 and other BLE boards. No Android Programming Required
    • Click_BLE2_RN4020 Arduino library for interfacing with the RN4020 Bluetooth Low Energy (BLE) module: implements both central and peripheral roles.
  • EasyRadio
    • Connect Arduino to the EasyRadio transceiver module, diagrams by Jens Wunderling.
  • Interface to an RF Synthesizer Module
    • Libraries to interface to a Direct Digital Synthesis RF Module, including a soft SPI version for any Arduino and a special version for the Arduino DUE using hardware SPI. Further details here
    • Libraries to interface AD9951 (400Mhz clock, 180Mhz output), https://salwach.pl/hamradio/ad9951_arduino
  • Handheld 2.4GHz Spectrum Analyzer
    • Shows the RSSI of different frequencies in the 2.4GHz band. The CYWM6935 radio and a display from a nokia cellphone are connected via SPI. here.
  • CYWM6935 / CYWUSB6935 DSSS Wireless Radio
    • 2.4GHz band wireless transceiver Arduino Library. The CYWM6935 module allows to create wireless networks. Webpage.
  • HomeEasy
    • HomeEasy.eu is a 433MHz AM based home automation range. Beginnings of instructions and code for using the Arduino with HomeEasy controllers and devices.
  • HopeRF / Hope RF RF12RF22RFM22
    • Interface Arduino to HopeRFRF22, RFM22 and compatible transceivers. Includes classes for node addressed, unreliable and reliable datagrams. Now also supports mesh networks and automatic route discovery. Rock solid, flexible, high speed. Circuit diagrams, documentation and download instructions here.
    • The www.hoperf.comRFM12/RFM12B/RFM12BP modules for the 433/868/915 MHz frequency bands are connected via SPI. There's a driver for it here.

Visit MySensors
  • Nordic nRF24L01+
    • Build a mesh-enabled radio network between your sensors using the MySensors NRF24L01 Arduino Library. The MySensors website also contains easy-to-follow build instructions and Arduino examples to help you create your own wireless sensors.
    • Interface Arduino to Nordic nRF24L01 and compatible transceivers. Circuit diagrams, documentation and download instructions here.
    • A simple nRF24L01+ library with streaming support: rf24HQ
    • A wireless communication library for using the small, fast and bi-directional Nordic's Nrf2401 radio transceiver.
    • A simple library for the nRF24L01(+).
    • RF24: Another library for driving the nRF24L01. Uses standard SPI library. Supports up to 6 radios at once. Copious examples.
  • interfacing 2 nRF24L01 modules to Arduino Nano and controlling servo motors. example
  • Microchip MRF89XA
    • Library for interfacing the MRF89XAM8A modules. Example code can be found here.
  • Inhaos RF-2400
    • Arduino library to work with Inhaos RF-2400 modules. Source code, circuit diagrams, demo, firmware and client application for RF-2410U dongle can be found here.
  • HT12E
    • HT12E is a 12-bit encoder IC suited for remote control applications. The serial stream generated by this IC can be transmitted via RF or infrared to an Arduino running a specific decoding library available at this source. That is, if you want to control an Arduino board using a HT12E-driven remote control, then this is the right place to go!
  • Infrared
    • IR remote library for transmitting and receiving multiple infrared remote protocols.
    • Simple 'how to' for beginners: Take a $3 sensor, a library, a domestic (e.g. TV) remote control, and 14 lines of code and you can use the remote to send commands to your Arduino. From SheepdogGuides.
    • Carrier 0.01: Library to generate IR codes for 'Carrier' air conditioners
  • LoRa
    • iFrogLab LoRa module designer, builder and distributor. We make a USB LoRa hub or you can purchase the LoRa module directly and integrate into your projects with simple i2c interface plus power. We support all of the World Wide LoRa frequncies and can provide the correct LoRa transciever for the frquencies that you need.- See our Web Site here and here. We also offer full Arduino support using our Arduino libarary and example codes - here.
  • PCR-1000
    • A icom PCR-1000 controlled by a Arduino- here
  • Radio Signal Strength Sensor
    • This sensor measures radio signals from 50MHz to 3GHz. FM,TV,GSM,WiFi,Bluetooth here.
  • DCF77: DCF77, a local radio time signal Library and sketch
  • RCSwitch
    • Send and receive 315MHz or 433MHz radio signals to operate popular low cost remote control devices like power outlet switches. Handy for most devices with these chipsets: SC5262, HX2262, PT2262, EV1527, RT1527, FP1527 or HS1527. here.
  • Reading PPM from a hobby RC Receiver
    • PulseIn can be used to measure one or two channels
    • ReadReceiver uses standard RC hobby transmitters and receivers to communicate with the Arduino. Can read a nearly unlimited number of channels using PinChangeInt and Timer1 libraries.
  • Generating PPM for a hobby RC Transmitter
    • The ArduinoRC project shows how to interface an Arduino Nano/Uno and a spare RF module to make a custom multi-channel programmable RC transmitter.
  • Wixel
    • The Pololu Wixel is a general-purpose programmable module based on the TI CC2511F32 microcontroller that features a 2.4 GHz radio and USB. Open-source, precompiled apps like the Wireless Serial App make it easy to add XBee-like wireless functionality to your project, or you can write your own Wixel apps to take advantage of the Wixel's I/O lines and hardware peripherals.
    • The Wixel Shield for Arduino is an easy and affordable way to add wireless functionality to your Arduino or Arduino clone. With the Wixel shield, you get more than just a general-purpose wireless serial link between your Arduino and a remote computer or embedded system: you can also wirelessly program the Arduino using the standard Arduino computer software and wirelessly debug your sketches with the Arduino serial monitor. For more information, see the Wixel Shield User's Guide
  • VirtualWire
    • Interface Arduino to low cost RF wireless modules to provide high performance transmitters, receivers and transceivers for data. Circuit diagrams and documentation here, download here.
  • X10 Wireless
    • Arduino interface to the CM17A 'FireCracker'. The CM17A is a 'serial' dongle that sends RF signals to X10 receivers which in turn send signals down the house wiring to control lights and appliances. Documentation and code here.
  • X10 Receiver
    • Arduino interface to the PSC05/TW523. The Arduino IDE includes the X10 library that lets you transmit. This example shows how to receive X10 commands. Documentation and code here.
  • X10 Send/Receive Library
    • Incorporates the original X10 sending code with the receive code above into an X10 Send/Receive Arduino library.
  • X10 W800RF32A All-Housecode Receiver Library
    • A library for WGLDesigns X10 W800RF32A.
  • X10 Transmitter
  • X10 Power Line, RF and IR libraries with extended code support
    • A new and improved set of libraries written June 2010 that supports transmitting and receiving X10 power line, RF, IR and serial messages at the same time using a single Duemilanove board. These libraries and the sample code make commercial X10 computer interfaces and RF/IR transceivers redundant. Click here to visit homepage.
  • X10 Power Line with Temperature and status response
    • an extension upon the library from BroHogan to send RCS temperature back to your X10 network Arduino Code.
  • XBee / ZigBee
    • The XBee Shield by M. Yarza, the Arduino Developer at Libelium
    • Schematics and Eagle files for M. Yarza/Libelium's XBee shield
    • Arduino and XBee(ZigBee), Interface Circuit (AXIC), by Thomas Ouellet Fredericks (tof).
    • Step by step tutorial for setting up 2 XBee shields from scratch with code samples
    • XBee Programming Arduino Wirelessly, by Tom Igoe.
    • Arduino to XBee, from Beatriz Da Costa's course outline.
    • MaxStream's XBeeZigBee RF Module
      • Product manual (802.14.4) PDF, 69 pages.
      • Product Manual (ZigBee) PDF, 46 pages.
    • xbee-arduino: an Arduino library for communicating with XBees in API (packet) mode. Supports I/O samples, TX/RX, AT Command, and Remote AT for both series 1 and 2 XBee radios
    • Arduino XBee libraries, source and tutorials, supports all API command functions for series 1 and 2. (The above library looks solid as well, but I can't comment on the differences because of no experience with it. Posting in case there is not common overlap.)
    • Quick example using XRF Wireless modules which is an alternative to XBee Series 1. This example shows how to get two Arduinos talking to each other using the default XRF configuration settings.
    • Sense/Stage MiniBee, a small Arduino/XBee board, including a firmware library to configure inputs and outputs of the Arduino on the fly, of many MiniBees in a large network. Firmware is also usable with your own Arduino-XBee combination.
  • Sounds
    • Machine to Machine audio communication using plaindsp audio kit, which contains hardware, firmware, documentation and offers on-line support for creating an amazingly simple to use although highly sophisticated communication protocol.

Via Mobile Phone

See also: the Bluetooth section and WiFi section.

  • pfodApp - Control via Android mobile using Bluetooth, BLE, SMS or WiFi - NO Android programming required. Works with 101 and other Bluetooth Low Energy boards without and Android programming Your Arduino code completely specifies what controls are displayed on the user's mobile phone. The user can navigate, execute commands by button presses, choose menu items, select items on lists, input text, input numbers and view raw data feeds from your Arduino project. Very flexible and very simple to code. A free Android menu designer app is available, pfodDesigner, which allows you to interactively design menus on your Android mobile and then generate the Arduino code that will display the menu and handle the button presses, via pfodApp. WiFi/Internet connections via pfodApp support 128bit security to protect against hackers taking control of your device.
  • Annikken Andee - Easily connect smartphones to the physical world! Annikken Andee allows you to easily monitor and control electrical devices and gadgets wirelessly via Bluetooth. Just code the user interface in Arduino! No Android programming needed!

Arduino-related stuff that doesn't quite fit anywhere else.

  • Crystal deviations - A Blinkenlight experiment to compare Arduino crystal frequency deviations.
  • Hardware Abstraction libraries
  • External 3V3 supply using an LM317 Schematic and board in Eagle format. Also a number of different trivial/helpful little things like Arduino-related Eagle Library, boards, and even an Arduino IDE 'icon'.(A new section was added to the Playground Nov 1, 2010, to discuss power supplies, etc. The above has been listed there, too.)
  • Loomduino - Reduce the number of jumper wires you need by using ribbon cable to connect things to your Arduino (such as the 4D Picaso, VDIP1 and nRFL2401+).
  • RNControl- use RNControl based on ATmega32 with Arduino 1.0.x
  • Common Pinouts
    • The following is a shart of pinouts that one commonly comes across while working with Arduinos CommonArduinoPinouts.svg (Here in PNG: Attach:CommonArduinoPinouts.png)
  • Mega 2560 pin out, AVR ports to Arduino pins and back Attach:ARDUINO2560.ods.zip
  • SSTV encoding: Some examples of SSTV (Robot BW8 and Scottie1) encoding for AD9850 DDS module and VC0706 camera.
Comments are closed.