Introduction: LED Array Jacket

Inserting an LED Array into a military jacket. Looks cool, and will likely get you arrested at airports!

This is a fairly simple project.

Parts Needed:

MAX6952 LED Array Driver
Microcontroller ( I used a boarduino )
280 LEDs ( I used red 3mm purchased at mpja.com cheaply )
Perf board. ( I used a dremel to shave it down to size )
40 PIN DIP Socket
4 AA Battery Pack.
Threaded core ribbon cable ( Tried using solid core... DOES NOT WORK )
I used a 15pin VGA connecter to connect the array driver to the MCU and Power pack. Makes it easy to detach and work on outside of the jacket.

Step 1: Building the LED Array

Building the LED Array is the first thing you will want to do. It's the hardest part and most time consuming. Building an LED array from scratch is effectively a massive time sink. But if you want the leds flush against the fabric you are going to be stuck doing it this way. Alternatively you could stitch in a prebuilt array or get your hands on some old 5x7 array dip chips. But this is how I did it.

Basically you want to follow the MAX6952 wiring diagram and make sure your 5x7 arrays are matched up to what it needs. I've included a photo of the completed array.

I just punched the leds through the fabric and into the perf board. You don't need to solder down the leds to the perf board (as they will ultimately all be soldered together anyways), but you may want to if the fabric is unstable. I used my pliers to bend the pins and inspected the led array with a magnifying glass once completed. Testing continuity with a meter is a good idea too. LED array problems can be hard to diagnose later.

Step 2: Adding the MAX6952

I got some protoboard style perfboard for mounting the max6952.

To mount it I just pushed the 40 pin dip socket through the jacket and into the perf board. Solder and done.

Now if I need to wash the jacket I can remove the driver chip. But I really wouldn't try washing this thing the way it's built.

Once this guy is in you will want to wire up the array to the max6952 as laid out in the chips datasheet.

It's a fairly straightforward process. But, for ease I've included a drawing of the pin layouts for the 6952 for anyone who doesn't feel like translating the datasheet.

Step 3: The Microcontroller Interface

So here's the board layout for the boarduino.

I didn't use the proper capacitor values when building the jacket. I didn't want any electrolytics in the mix. The 6952 is a fairly resilient chip and has stood up fairly well to my abuse.

I am providing power to the boarduino directly with the 4AA power supply, and then running 5v to the max6952.

And here's some sample code for interfacing the boarduino with the max6952:

// Max 6952 Example Code For Arduino
// Tested on Boarduino
// Matt Joyce @ NYC Resistor

#define DATAOUT 11//MOSI
#define DATAIN 12//MISO - not used, but part of builtin SPI
#define SPICLOCK 13//sck
#define SLAVESELECT 10//ss

char spi_transfer(volatile char data)
{
SPDR = data;
// Start the transmission
while (!(SPSR & (1<<SPIF))) // Wait the end of the transmission
{
};
return SPDR; // return the received byte
}

void setup()
{
byte i;
byte clr;
pinMode(DATAOUT, OUTPUT);
pinMode(DATAIN, INPUT);
pinMode(SPICLOCK,OUTPUT);
pinMode(SLAVESELECT,OUTPUT);
digitalWrite(SLAVESELECT,HIGH); //disable device
// SPCR = 01010000
//interrupt disabled,spi enabled,msb 1st,master,clk low when idle,
//sample on leading edge of clk,system clock/4 (fastest)
SPCR = 0b01010010;
clr=SPDR;
delay(32);
// Configure Register
write_led_twice(0x04,0x01);
// Intensity Pane 1 and Pane 2
write_led_twice(0x01,0xFF);
write_led_twice(0x02,0xFF);
// Scan Limit
write_led_twice(0x03,0x01);

}

byte write_led(int address, int value)
{
digitalWrite(SLAVESELECT,LOW);
//2 byte opcode
spi_transfer(address);
spi_transfer(value);

delay(36);
digitalWrite(SLAVESELECT,HIGH); //release chip, signal end transfer
}

// Write n times for n chips daisy chained.
byte write_led_twice(int address, int value)
{
digitalWrite(SLAVESELECT,LOW);
//2 byte opcode
spi_transfer(address);
spi_transfer(value);
spi_transfer(address);
spi_transfer(value);
delay(36);
digitalWrite(SLAVESELECT,HIGH); //release chip, signal end transfer
}

void loop()
{
// Testing ROM Character Set
write_led_twice(0x20,0x5e);
write_led_twice(0x21,0x5e);
write_led_twice(0x22,0x5e);
write_led_twice(0x23,0x5e);
delay(4000);
// Testing Programmable RAM Space
write_led_twice(0x05,0x80);
write_led_twice(0x05,0x42);
write_led_twice(0x05,0x61);
write_led_twice(0x05,0x51);
write_led_twice(0x05,0x49);
write_led_twice(0x05,0x46);
write_led_twice(0x20,0x80);
write_led_twice(0x21,0x80);
write_led_twice(0x22,0x80);
write_led_twice(0x23,0x80);
delay(4000);
// Gred Test Register Call
write_led_twice(0x07,0x01);

delay(1000);
// Turn off Test Register
write_led_twice(0x07,0x00);
}

Step 4: The Final Form

I tossed the mcu and power supply into a pocket and ran the 15 pin connector through a hole in the back.

Anyways. That's how I made my LED jacket.

Enjoy.

Get the LED Out! Contest

Participated in the
Get the LED Out! Contest