Skip to end of metadata
Go to start of metadata

Introduction Video


Cree MC-E Red/Green/Blue/Neutral White LED (1w per color)

Wakefield Starboard LED Heat Sink

Ledil 26° Lens (±13°) for Cree MC-E LEDs

Pan / Tilt servos, each with 180° of movement

Four Diodes Inc. AL8805 1A constant current LED drivers

Microchip PIC24FJ16GA002 16-bit 32MHz microcontroller

UART interface at 115,200bps, 8N1 via two 10 position 2mm-pitch sockets spaced for an XBee (series 1 is preferred) or the PAN1555 Bluetooth Breakout board.

Windows GUI interface to control color, intensity, and position, as well as create custom patterns and sequences.

DMX-512 interface (coming soon to an EEWiki near you!)

Functional Description

The Moving RGB LED combines a 4x1W LED (red, green, blue and neutral white), optics, heat sink, four adjustable constant current controllers, two servo motors (pan and tilt), a microcontroller, three PCBs, and the wireless interface of your choice, into a compact and powerful moving RGBW light source.  The source is controllable via a Windows GUI, DMX512, our Joystick Remote (details forthcoming), or the wireless serial interface of your choice.  The socket accepts any Digi XBee radio or any radio using the same land pattern and pinout.  The only required connections to the XBee (or similar) are +3.3V (pin 1), Ground (pin 10), and UART data out (pin 2).


The Moving RGB LED currently accepts two packet types: position and color. The tilde [~] character denotes a position packet, and the asterisk [*] character denotes a color packet. Following the tilde, the system expects an 8-bit pan value, followed by an 8-bit tilt value. Following the asterisk, the system expects 8-bit dimming values for Red, Green, Blue, and White, in that order. Controllers may send either packet type at any time, and a continuous stream of packets is acceptable. The receiver implements a simple state machine to enter color [*] or movement [~] states, and resets to the start state if any other character is received. Should a packet of data become corrupted or incomplete, the state machine will reset.


Because three separate PCBs exist, three schematics were created.





The PCBs were fabricated by OSH Park

Mechanical Structure

From top to bottom, the Moving RGB LED is made of the LED optics, the LED, the LED heat sink, two spacers, three PCB's, two servos, several zip-ties and copious amounts of hot glue. The PCBs are configured in an up-side-down "U" shape, allowing the weight of the heat sink and PCBs to be supported from two points. One side of the up-side-down "U" is a mechanical connection to the tilt servo output shaft, and the opposing side slides around a bushing which is concentric to the output shaft. The PCBs are connected orthogonally with ten position 0.1" right-angle header pins soldered to both PCBs. These pins provide mechanical coupling, as well as ten electrical connections, between each of the two side PCBs and the center PCB.



The Moving RGB LED is controlled locally by the PIC24FJ16GA002. The PIC24 generates PWM signals to dim (modulate) the brightness of each LED, and to control each servo. The LED PWMs are operated by the hardware PWM generator, and the servo signals are generated in software via a timer interrupt. The communication state machine operates in a UART receive interrupt.

Windows GUI

The GUI was developed in Visual Basic 2010 Express (free from Microsoft).

The GUI source files can be downloaded and built within Visual Basic. Currently, the COM port must be set in the source before compiling. If using the PAN1555 breakout board from Digi-Key, pair the device and connect a virtual COM port to determine the COM port number

  • No labels


  1. Hello


    Project looks great and am looking forward to getting it to work. Was curious on the GUI, downloaded Visual Basic 2010 but program will not compile? Was wondering if anyone could give me some hints. Thanks you.

    Cheers, Michael

    1. "Was curious on the GUI, downloaded Visual Basic 2010 but program will not compile?"

      Can you be more specific? Error messages, etc.