DMX512 (Digital Multiplex with 512 pieces of information) is a standard for digital communication between lighting controllers, dimmers, scrollers, scanners, and other stage equipment.
To send DMX data as a differential signal, use a transceiver like the MAX485 or 75176 (a cheaper version of the Max485).
DmxSimple is a library from Tinker.it! for outputting DMX signals. It is compatible with all recent versions of Arduino. By handling DMX frames in the background, DMX can controlled in a similar way to analogWrite.
(to use DmxSimple with arduino 1.0 have a look here: http://arduino.cc/forum/index.php/topic,85547.0.html)
karistouf's library implements the ArtNet protocol for both sending and receiving DMX messages via UDP packets. chris's library also implements receiving DMX, working with EtherCard (i.e. the ENC28J60). Nat's library can receive multiple universes and has examples for the NeoPixel library and OctoWS811 libraries. It works with the standard Ethernet library.
DMXSerial is an Arduino Library for building DMX Controllers and Devices. It is just using the hardware serial interface and needs no assembler code. The library supports Arduino 2009, Uno, MEGA and Leonardo Boards. See http://www.mathertel.de/Arduino/
The DMXSerial2 library supports the DMX-RDM protocol. RDM is the extension for DMX that enables bi-directional communication between the controller and the devices. See http://www.mathertel.de/Arduino/
Conceptinetics DMX library is another library which can be used to either program your DMX Master or Slave Arduino. Though this library was written to support their Isolated shield it doesn't keep you from using it for other DMX shields as well. Examples are included in the download. Updates on this project can be found here as well: http://dmxshield.blogspot.com
Hardware design for how to receive DMX, developed by Max Pierson.
- A very simple DMX receiver, based upon the DMX Receiver C code by Henne Henne's Site, German. Slightly adapted for Arduino, the code allows receiving DMX with an Arduino without using Timer/CTC stuff. Read more
4 Channel DMX Receiver by Dan Fredell, based on a ArDMX. Uses a stopwatch instead of the Timmer class.
DMX to MPX Converter by Dennis Engdahl, based on Arduino Nano. Convert DMX to the old NSI Microplex MPX format. Allows NSI 4600 series dimmers to be controlled by DMX.
dmx_serial_sender by Kevin Deus. A simple program that reads DMX data from a CTC-DRA-10-1 DMX Shield, then sends it to the Serial port. No timers are used, and this example shows how to read the serial signal directly from the pin high/low states. This program is handy if you want to feed the DMX data from the DMX shield on an Arduino Uno to a different Arduino (such as an Arduino Due, for instance).
Deskontrol four universes DMX library for Arduino Mega, this library allows up to four DMX universes as inputs or outputs, and does not use timers. In the examples can be found as merging two universes into a single output. With Arduino Nano and UNO can only use an input or output.
Example: Arduino Art-net to DMX, 2 universes node *** UPDATED support for MEGA and UNO ***
Example: Arduino small DMX controller
Arduino based art-net node for led pixels and digital led strips with drivers type WS2811, TM1803, TM1804, TM1809, TM1812.
Arduino art-net node for led pixels *** UPDATED support for MEGA and UNO ***
To send DMX from Arduino we use a driver chip like MAX485 or 75176 (the 75176 is just a cheaper version of the Max 485). The use of these drivers is a common way of transmitting and receiving DMX. You will find them in almost every dimmer/scroller etc.
The following explanations and examples are made for Arduino IDE versions 004 and 005. They will not work with other versions, because of the change in the 'delayMicroseconds'.
-However in the code example section you will find a nice looking piece of code from two great Hungarian guys (Peter Szakal and Gabor Papp ( http://nextlab.hu ) which works for Arduino 008, at least.
-Since evolution keeps going on, here is a very nice code, working for a Duemilanove (tested on 013 and 017), thanks to Jason Ditmars