Tom Hammond

Tom Hammond

How to Build It

Configuring Arduino as a Pixel Controller for xLights


Please read these updated instructions here.


2018 Presentations


Power, Power, Power 

by Dan Blickensderfer

If you're working with DC or AC lighting, one of the most confusing pieces to the puzzle can be... how to get enough power to the prop. Dan is going to show us the tricks and give us educated advice on how to do exactly that!

PDF version of presentation slides



Designing & Building your 1st Pixel Tree

by Tom Hammond

Tom is going to go over all the things you need to know, tips & tricks, along with what parts you need and where to get them, basically everything you need to know...start to finish!

PDF version of presentation slides



New, Fun Stuff

by David Jones

David is going to give us an update on Cheap Pixel technology with Pixel Prop Controllers and also tell us all about the new P5 display boards and how to make an inexpensive "Tune to Sign" with them!

PDF version of presentation slides



xLights and LOR

by Clyde Lindsey

xlights is getting more & more LOR friendly! Clyde is going to share with all of us, how to combine xLight's "LOR mode" and the original xLights together, to achieve that perfect sequence you are looking for!  



2017 Presentations


XLights and LOR Living Peacefully Together 

by Clyde Lindsey

Do you use XLights and want to add LOR or you use LOR and want to add XLights, but not sure how or they just don't seem to play nice with each other?? Then this session  you won't want to miss!! Clyde is going to go over the "Tips & Tricks" on getting LOR & XLights to work together!

PDF version of presentation slides



Internet Controlled Christmas Lights

by Tom Hammond

Tom will outline how to create an internet controlled, interactive Christmas light display, based on "FREE" software (Xlights and Falcon Player) and "Low-Cost" hardware (Raspberry Pi and Arduino).

PDF version of presentation slides



Pixels on a Budget

by David Jones

David is the "guru" of DIY, and he will show you how to have the Holiday show of your dreams, and not break the bank!

PDF version of presentation slides



Raspberry Pi

by Dan Blickensderfer

You just got your new Raspberry Pi, now what?  Let Dan show you how to set it up and control your lights wirelessly.

PDF version of presentation slides



Dumb RGB's

by Clyde Lindsey

Clyde will show you the many advantages of using "Dumb RGB".


Contact Us

Tom Hammond

15439 Valley View Road

Doylestown OH 44230


Phone: 330-658-3872.  Please note that I am NOT affiliated with G.E. Technical Support nor warranty returns.

Email: This email address is being protected from spambots. You need JavaScript enabled to view it.


Easiest to hardest:

  • Add realtime clock to webpage for visitors from different timezones to easily tell when lights are available
  • Add two bulbs to bottom left string
  • Shorten bottom left and bottom middle cords?
  • Make floor hole in living room larger
  • Replace current garage extension cord with new 50' cord
  • Backup FPP as image
  • Backup camera as image
  • Backup "Christmas DMX" folder to CD
  • Make new tree anchors
  • Fix driveway arch
  • Find out why last 4-5 pixels do not light up on bottom left string (something wrong with sequence or string itself?)
  • Secure camera better so that wind doesn't blow it around.
  • Add resistors to data lines in GE control box
  • Build how-to website
  • Redo Layout in xLights (fix window accuracy)
  • Add WS2811 RGB spotlights
  • Add WS2811 mini arches
  • Person who may provide free stuff from MicroCenter: Ed Lukins, 614-850-3270
  • Find out how to allow more simultaneous connections to the camera. Try setting up sessions with Facebook Live? YouTube Streaming? Twitch? I discovered that a 4.5Mbps upload connection allows up to 8 simultaneous connections.
  • When there are too many people clicking, try setting up votes so that every 30 seconds, the most voted sequence plays.
  • Figure out whe GE bulbs are pink at times when they are supposed to be white (ask Facebook group)
  • Fix existing sequences and make them nicer, convert my old animations to sequences.
  • Website does not seem to show me as the clicker, even when the lights are available. It shows the previous clicker as using them instead.
  • Find out why white analog LED lights flicker on wreath
  • Find out why Falcon Player services sometimes stops for no reason, will not accept web input, have to restart service. (intermittent problem, sometimes more often than not). If I fix *** below, it may fix this problem, too.
  • Find out why GE controller "freezes" for no reason, need to reset power to accept DMX data from Falcon Player (rare problem).
  • Find out way to prevent people from sending commands to Falcon Player when lights are not on (daylight hours)
  • Find out why GE pixels are pink instead of white under full load (seems to be a power issue, not a bad pixel issue)
  • Fix marquee (make stiffer diffuser, enable 8-pixel characters, shorter (black) network cable, attach LED strips better), strengthen box halves, fix Arduino sketch problem.
  • Build flat tree like Keith's!


  • Currently building the iTwinkle website
  • Preparing for a presentation at Light Up Ohio this coming weekend
  • Ordering hardware to build the 17' tree
  • Fixing broken props from last season

(work-in-progress document)


Install BBB OS and Falcon Player in one step

  1. Download image from onto microSD card
  2. Insert card, hold down button S2, connect USB cable to power it on.
  3. Keep holding button until blue lights start to flash
  4. Wait about 20-25 minutes
  5. When blue lights stop flashing, disconnect USB cable and remove microSD card
  6. Connect network cable and empty flash drive, then connect power
  7. Access FP web interface via http://fpp/
  8. Allow FPP to automatically update to 1.8, then allow it to reboot and automatically update to v1.9


The tune-to sign works independently of the rest of your light show.  It does not use the animations created by xLights and is not controlled by Falcon Player.  Instead, when powered up, it reads a file named MESSAGES.TXT on a website that contains a list of holiday messages.  It then begins displaying these messages in a random order.  

Between messages, the tune-to sign reads a file named LOCATION.TXT on a website.  If you are using Internet controlled lights, this file displays the location of the Internet user who is currently controlling your lights.  If someone is actively controlling your lights, the tune-to-sign will display that person's location.  When no one is controlling your lights, the tune-to sign will resume displaying random holiday messages.

The tune-to sign is meant to be seen by cars passing by.  Therefore the enclosure is large (16 feet wide) and the characters are large (about 10.5" tall).  To save power and keep the sign affordable, it uses only seven strips of LEDs at 135 lights each, totaling 945 lights.  Instead of combining many lights to make large letters, I use fewer lights that are magnified with honeycomb-like channels that reflect and amplify each light within each channel.  That way the entire sign can be driven by an inexpensive Arduino and a regular 400-watt computer power supply.

The enclosure is a long, narrow box that houses the power supply and Arduino on the left (as you are facing the sign) in a compartment.  The compartment has removable face to allow access to this hardware.  Seven strips of LEDs line the rest of the enclosure in the second compartment, the front of which is covered with plastic diffuser used to cover drop-ceiling lights.


Building the Enclosure

The build plans are here.  The build plans above provide dimensions for enclosures using 1/2" or 1/4" thick wood.  My actual enclosure uses 3/4" thick wood because it was cheaper at the home improvement store.  I used poplar, but discovered that it becomes soft in wet/snowy weather, so the screw fasteners tear apart.  Use a harder wood for your enclosure.

The enclosure consists of 3/4" wood for the top, bottom, sides, and compartment divider.  I used 1/8" plywood for the backing.  In additional to the poplar being too soft, the plywood backing warps badly in moist weather.

For the panel that covers the hardware compartment, I cut a piece of metal roofing and attached a wooden strip to become the handle.  Between the short electronics compartment and the long LED strip compartment, I installed a wooden divider.  I made the divider "float" above the back of the enclosure so that the wires from the LED strip in the long compartment can pass through to the electronics compartment.

To install the frosted diffuser, I used a table saw to cut tracks in to the top, bottom, and side walls, then slid the diffuser in the tracks.


Installing the LED strips

The LED strips can be purchased from Amazon, eBay, AliExpress, etc.  You can do a search for "ws2812b 5050 led strip 5v" to find them.  Make sure that they have 30 LEDs per meter; buy a 5M strip that has 150 LEDs on it.  The strip should be rated for 5V.  If you accidentally purchase a 12V strip, the LEDs are sometimes groups in threes and are not individually controllable.  Here is what they look like:

Trim each strip to 135 LEDs (if you are using a 16' enclosure like I am).  The strips usually have an adhesive backing, thought I've found that it doesn't stick to painted wood that well.  Run the seven strips of LEDs along the enclosure, spacing them evenly so that the LEDs form square distances from each other.  Then secure the strips better with white or clear tape.  In my enclosure, I actually ran eight strips, but the eighth strip is not used.  It is for future expansion that is not implemented yet.


Installing the power supply

As mentioned above, I use a 400W computer power supply to power the tune-to sign.  I found a 3D printed bracket on to mount it in the enclosure (the purple bracket in the picture below).  

Because my power supply does not have a power switch (ATX power supplies typically do not), I shorted the green pin on the large motherboard connector to one of the black pins on that connector using a thick wire or bent nail.  This way, when the power cord is plugged in the power supply, it instantly powers on. Here are instructions on how to do this.

To power the LED strips, each LED strip has a red wire for power and a white wire for ground.  Your strip's wire colors may be different, so look closely at the strip to see which wires are power & ground; they should be labeled.  I soldered all seven red (power) wires together to a single, thick red wire.  I also attached an eighth red wire into this bundle; this will be used to power the Arduino.  I did the same for the white (ground) wires, soldering them together to a thick, black wire (with an extra eighth wire to ground the Arduino).  On the other end each thick wire, I crimped a cut-off nail.  I then plugged these two wires into the 5V and GND pins on the power supply's motherboard connector, respectively.  The nails were thick enough to make a snug connection.


Installing the Arduino

The tune-to sign is controlled by an Arduino Mega 2560.  These can be found easily on Amazon, eBay, etc.  The Mega 2560 model is required because it has enough RAM memory to hold the program and store the messages it will display. 

I found a 3D printed mounting bracket on, then mounted the Arduino into the enclosure.  I connected the power and ground wires from the power supply to the 5V and GND pins on the Arduino (see picture below).

For a wiring diagram, please click here.

On my LED strips, the data wire is green.  Your strip's data wire color may be different, so look closely at the strip to see which wire is for data; it should be labeled.  I soldered a 220-ohm resistor to each data wire, then soldered a female connector to the other end of the resistor.  I then used heat shrink to protect the resistor and soldered connections on each end of it.  The resistor is used to reduce interference caused by "signal bounce".  Signal bounce can cause your LED strips to light-up unexpectedly.

For each of the seven data wires, I plugged them into pins 23-29 on the Arduino, with pin 23 for the bottom strip of the tune-to sign.  So the Arduino now has seven data wires, a 5V power wire, and a ground wire plugged into it.  With the picture below, I also connected a voltage display to the 5V and GND pins.  This tells me the voltage of the power supply that is helpful for diagnosing problems.

Lastly, I attached an Ethernet "shield" to the Arduino, like this one.  This allows the Arduino to have Internet access from my home network's router.  This can be easily found on eBay & Amazon; search for "Ethernet Shield W5100 Arduino 2560".  Be sure that the shield is model W5100 and supports the Arduino 2560.  Below is a picture of an Arduino Mega 2560 with an Ethernet shield attached to it:

And below is a picture of my Arduino with the shield and wires connected to it:


Programming the Arduino


You need to install a program on the Arduino that makes it become a tune-to sign controller.  To program the Arduino, you need to download the Arduino IDE.  This allows you to upload programs from your computer to the Arduino board.  Normally, you download the tune-to sign program, open it into the IDE, then upload the tune-to sign program to the Arduino board.  This is trickier than it sounds, as the program needs installed a special way into the IDE.  To save you time, you can download the Arduino IDE with the tune-to sign program already installed from here.  Simply unzip this file into a folder on your computer.


Configuring the tune-to sign program

The next step is configuring the tune-to sign program for your particular lights, such as the website where the Christmas messages are retrieved from.  To do this, edit the TomsTuneToSignProgram.ino file in the arduino-1.6.5-r2\examples\TomsTuneToSign folder with your favorite text editor.  These are the important lines that need changed:

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

The Ethernet shield may have a sticker on it with its MAC address.  This is a 16-character code, usually divided into eight 2-character pieces.  The MAC address is a like a house address in your neighborhood; it is a unique number that is different than other devices on your home network.  If your shield does not have this information printed on it, you may be able to skip modifying the above line.

char server[] = "";  

This defines the website where the tune-to sign will find the LOCATION.TXT and MESSAGES.TXT files.  My website is "", change this to your website instead.

int scrollSpeed=35;
int delayBetweenMessages=5000;

If the messages scroll too fast on your display, you can change the above "35" to a different number to speed it up or slow it down.  Normally, there is a five-second delay between each messages.  You can change this delay from "5000" (milliseconds) to a different number.

#define PIXELS 135 

If the strips of LEDs on your tune-to sign have more or less than 135 pixels per strip, change the above number accordingly.

int loopLocationDisplayDuration = 30;

If you are using Internet Controlled lights, the above number reflects the length (in seconds) of your animation files that website visitors choose.  In my case, my Internet controllable animations run 30 seconds each. 


Uploading the tune-to sign program

The next step is sending the tune-to sign program to the Arduino's memory.  To do this, open the folder that contains the Arduino IDE that you downloaded above.  Then run arduino.exe.  When the program starts, click File > Examples > TomsTuneToSignProgram.  A second Arduino IDE window will appear with the tune-to sign program open.

Before connecting your Arduino, verify this first:

* Make sure that you are using the Arduino Mega 2560.  The tune-to sign program only works with this board.

* If you have the LED strips connected to the Arduino, it is a good idea to temporarily disconnect them.  If the Arduino already has an older version of the tune-to sign program and you connect the Arduino to your computer, the Arduino may draw too much power from the USB port to power the lights.

When you have met the above requirements, connect the Arduino to your computer via a USB cable.  If this is the first time you have connected the Arduino, Windows will attempt to install hardware drivers for it.  Depending on the version of Windows that you have and the brand of Arduino, the driver may install automatically or you may be prompted to provide the driver software (you may have to download the driver software for that particular brand of Arduino).  Either way, the drivers must be installed successfully before proceeding to the next step.

When you connect the Arduino via USB and the computer accepts the connection with no errors (indicating that the drivers are installed and functional), tell the Arduino IDE the type of Arduino you are using.  Click Tools > Board > "Arduino Mega or Arduino Mega 2560".  Next, choose Tools > Ports > COM x where "COM x" is the virtual communications port that was assigned by the driver.  If you see more that one listing under "Ports" and are not sure which one to choose, try the first one, then try uploading the DMX program as explained below.  If the upload fails, choose the next COM port under Ports, then try uploading again.

Next, verify that the DMX program code is valid by clicking the checkmark icon in the Arduino IDE toolbar (below the File menu).  You will see "Compiling sketch..." in the window's lower status bar while the program is verified.  This may take several moments.  If you see an orange message stating "Error compiling", then there is something wrong with the DMX program or perhaps there is a typo in the global.h file that you modified above.  In this case, you will need to close the Arduino IDE program, fix the problem, then open the Arduino IDE and try to verify the program again.

If the tune-to sign program verifies correctly, you will see the "Done compiling" message in the status bar.  At this point, you can upload the tune-to sign program to the Arduino via the Upload button (the right-arrow button next to the checkmark button in the toolbar).  When you click Upload, the tune-to sign program will be verified again, then you will see "Uploading" in the lower status area.  A light on your Arduino will rapidly flash during the upload process.  When the upload is complete, you will see a message stating so in the status area.  You can disconnect the Arduino from the USB cable.


Preparing your website for the tune-to sign

When powered on, the tune-to sign retrieves its list of holiday messages from a file on a website called MESSAGES.TXT into its temporary memory.  If you want to change the messages the tune-to sign uses, simply update the MESSAGES.TXT file on your website, power off the tune-to sign, then turn it back on.  You may have up to 58 messages in this file with each message no longer than 75 characters.  If you store more (or lengthier) messages than indicated, the tune-to sign will not start properly.

Each message can be displayed in a variety of colors, specified as three-letter codes before the message.  For instance, here is a MESSAGES.TXT file with three colored messages in it:

WHILet It Snow, Let It Snow, Let It Snow! 
REDIt's beginning to look a lot like Christmas
BLUIt is Christmas in the heart that puts Christmas in the air

The color codes are: GRE (green), WHI (white), RED (red), BLU (blue), BRO (brown), YEL (yellow), CYA (cyan), PUR (purple), VIO (violet), LPI (light pink), MAR (?), TAN (tan), GOL (gold), LIM (lime green), LBL (light blue), ORA (orange), PIN (pink),

If your lights are Internet controllable similar to mine, my website creates a file called LOCATION.TXT and updates it with the current Internet user who is controlling the lights.  This file contains the location of the user, such as the following:

Czech Republic

After the tune-to-sign displays a random holiday messages, it looks for the LOCATION.TXT file on your website.  If someone is actively controlling your lights, the tune-to sign will display the location (in this case "Czech Repulic") on the sign, telling people in your neighborhood where your Internet visitors are from.  If you do not have Internet controlled lights (there is no LOCATION.TXT file on your website), the tune-to sign will simply display random holiday messages.


Checking communication

After the tune-to sign program is uploaded to the Arduino, it will begin running the tune-to sign program immediately.  We now need to see if the controller can be contacted on an Ethernet network.  To do this, connect one end of an Ethernet cable to the Arduino's network board and the other end to an Ethernet switch or hub.  Connect your computer to the Ethernet hub/switch via another cable.

Then you can power-on your tune-to sign.  Lights should appear on the Arduino.  On the end of the network cable that plugs into the Arduino's network board, there are two lights.  One should be solid, indicating a connection to the Ethernet hub/switch.  The second light should be flickering occasionally, indicating that the Arduino is sending/receiving information on the Ethernet network.

As soon as you power the tune-to sign, it will contact the website that contains MESSAGES.TXT, then save the holiday messages therein to the Arduino's temporary memory.  It will then begin displaying these messages on your sign!

The tune-to sign works independently of the other light controllers.  It doesn't receive commands from xLights nor Falcon Player; the tune-to sign does not play shows created by these.  Instead, the tune-to sign relies on files on the iTwinkle website.  

When the tune-to sign is powered up, it looks for a file in named messages.txt.  This file contains a list of messages for the tune-to sign to randomly display.  There can be up to 55 messages up to 75 characters long.  To change the messages that the tune-to sign displays, simply change the contents messages.txt file on the website, then reset the tune-to sign by disconnecting power, then apply power again.  Messages can be displayed in different colors; prefix each message with a three-character color code such as "RED", "BLU", "YEL", etc.

After displaying each message, the tune-to sign checks the website to see if anyone is actively controlling the lights.  It does this by reading the location.txt file on the website.  If this file shows a different location than the previous time it checked this file, the tune-to sign knows that someone is actively controlling the lights at that moment.  It then uses the contents of this file (city, state and/or region) to display the visitor's location with a message such as "Lights being controlled from Paris, France".  After this message is displayed, the tune-to sign goes back to displaying random messages again.


The tune-to sign is a bit of a misnomer.  Traditional tune-to signs display a message to outdoor visitors to tune their car radios to a station that is playing Christmas music that is synchronized to lights.  

My tune-to sign works differently.  It uses 135 columns by 7 rows of LED lights to display messages in a ticker-tape or scrolling marquee fashion.  These strips of LEDs are mounted in a 16' wooden box, powered by a computer power supply and driver by an Arduino Mega 2560.

You can program up to 55 messages of 75 characters each.  The tune-to sign will randomly display these messages in various colors.  

What makes this tune-to sign interesting is that if someone in the world is actively controlling the Christmas lights, the sign will display the country and city/region that someone is from, using a message such as "Lighting being controlled from Paris, France".

The tune-to sign controller works independently of the other controllers; the tune-to controller does not need to communicate with xLights nor Falcon Player.

Tune-to sign controller (one half)

  •  Start 
  •  Prev 
  •  1  2  3  4 
  •  Next 
  •  End 
Page 1 of 4


Learn how to make computer controlled, affordable, and Internet capable Christmas lights.


See what animated lights (a.k.a. "props") I have made for my Christmas display.

Build It

Step-by-step instructions how to build your own Christmas light display.


Project photos, videos, and news coverage.


FAQs, instructional videos, and community support.

Go to top
JSN Boot template designed by