LED strip. I bought mine locally but they are available at Adafruit too.

10K Trimmer Potentiometer with Knob

Mini Speaker 0.5W 8 OHM

Arduino Nano clone


QIJIE 10mm 5050 LED Strip Connector 3 Pin for Non-waterproof Single Color Tape Light, Snap Splicer for Board-To-Wire (22,20,18 Gauge), Pack of 10 (No Wire)

The LED strips are a lot of fun in themselves. You can learn more about them here:

Warning - I started this project last year and end up destroying my pixel strip. To make the candles, I cut the strip up into lengths of 6 LEDs so I ended up with 9 candles and a spare. The strips come with a good electrical and mechanical connection. I needed to connect the short segments via wires. I used solid core wire that was stiff. And, I think I burned some of the backing when soldered them on. To make a long story short, the wires broke off when I went to assemble the shirt. 
This time my plan was to use conductive thread and stitch the LED strips to the sweater. However, the sweater has is quilted and it was very hard to get the thread sewed neatly with no shorts. The contacts on the LED strips are very close together. After doing the first one and checking the continuity with my multi-meter, I gave up on it and moved to plan C.
Plan C was to use the LED strip connectors that I had bought as a backup. They clip to the end of the LED strip and have a place to clip in the control and power/ground wires. I found these very fiddly to work with but mostly it worked fine.

Step 1 - Prepare the Sweater

I marked the placement and the scale of the candles in chalk on the shirt and we painted the design in sparkly silver paint.

Step 2 - Wire the hardware

Wire the hardware as shown. For testing, I used a breadboard to connect the LED strip to the Nano.

Connect the speaker in series with the potentiometer to Digital Pin 8 and to ground. There is a third pin on the pot that can be left unconnected. The pot acts as a volume control for the speaker.

Connect the LED strip to +5v, ground, and the middle data connection to Digital Pin 6. When programming and testing, I powered the Nano using the USB connection and used the serial interface for debugging messages. When installed on the sweater you can power either via a USB battery or some other power source.

Step 3 Programming

The program runs through 8 days of Hanukkah, turning on the right number of candles, burning them down, and moving on to the next day. Each “day”, it plays the tune once.  When it’s finished, it starts all over with day 1.

Keeping track of all the LED pixels for the candles is kind of complicated. I ended up using a number of two dimensional arrays. I’ve commented the code pretty thoroughly- it’s probably easier to understand reading the code.  The main array is Candle. It contains 9 entries - one for each candle. The second dimension is the 6 pixels for each candle - 4 for the candle, and 2 for the flame. The value stored keeps track of if it’s off (0), on (1), or flame (3). If it’s on, the color, comes from the CandleColor array.

#include "pitches.h"
#include <Adafruit_NeoPixel.h>
#define PIN 6
Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800);

//global variables
byte Candle[9][6]; //2D 9x6 array of integers holding the on/off state. 0 is off, 1 is the color from CandleColor array, 3 is flame.  First value is the candle number, second value is the LED along the candle, starting from the bottom.
//Candle [0][x] is the Shamesh. There are a total of 9 candles for 8 days.
//Candles are initially 4 pixels long with 2 pixels for the flame.
short CandleState;//current length of the candles. 4 to start, 0 when done.
byte CandleColor[9][6];//a 2D array of...
Read more »