Arduino LED Dimmer: Part 1

I’ve been playing with the Arduino platform for a while now. I’ve got two, a Duemilanove with the ATMega168 MCU and the new Mega 2560 ADK as well as an Ethernet Shield. Though I really think I need to get another one! I’ve found it to be a great toy-like introduction to the world of micro controllers. With it’s simple IDE and on board USB to just plug it straight it into the computer, it is awfully quick and convenient to prototype an idea or even just as a constructive distraction.

I love LEDs, I have what is starting to become a collection of Moroccan style lanterns and a whole bunch (eight to be precise) of LED jar lights that I made to hang in the patio umbrella in the summer. The lanterns look great when lit by the jar lights, so I decided to build a controller for them. Something a little more sophisticated than those cheap little flashing pattern controllers you tend to see on strings of lights, I want smooth fades, sensor inputs, serial interface, the works.

While poking around the Arduino Playground some time back, I came across the page detailing the TLC5940 chip from Texas Instruments and the Arduino TLC5940 library page. A 16 channel PWM driver specifically designed for LEDs, already supported by the Arduino platform! Winning! After eventually getting hold of some, first thing was to put together a breakout board for them. Yes I have breadboards, but I like the ruggedness of a breakout board with screw-terminals.

Stripboard TLC5940 Breakout

There isn’t much to this at all, it just adds screw terminals to the chip. I didn’t include any pull-up or down resistors to it since I wanted to leave my options open. Same goes for the current setting resistor which you can see inserted into a two-way terminal block in the picture below. Outputs are along the bottom, and the power, control signals and resistors are along the top. The wire I used for it wasn’t great, the insulation shrank away the moment I touched the wire with the soldering iron, which was pretty annoying.

My DIY TLC5940 Breakout Board
My DIY TLC5940 Breakout Board

If you’re wondering why I didn’t snap the terminal blocks together, their pins are 5mm spaced, not 5.08mm (0.2 inch), an easy mistake to make when you’re not paying attention! The strip board is 0.1 inch pitch, so while two-way and three-way blocks would fit, any more than that and you start bending things.

The Web of Things

What I now have, I call my Web-of-Things. Not to be confused with the Internet of Things, mine is just a bunch of circuit boards all wired together into a quite literal web-of-things! It can change at a moments notice and with ease. That’s the nature and beauty of a prototyping system like the Arduino.

Here we have the completed web of things/16 channel dimmer. You can see the Arduino controller, TLC5940 breakout board, two voltage regulators I made on strip board previously and a potentiometer as an input for adjusting fade speed and whatever other value I wanted to manipulate.

Web-of-Things stuffed into a box
Web-of-Things stuffed into a box

It works well and I rather like it, I could just tidy it up a bit, fix the boards down in the box and call it done, but that presents it’s own problem, I’d lose my prototyping tools! While the level of flexibility that the Web-of-Things affords me is great for prototyping, it’s precisely that quality that makes it less than ideal for any kind of permanent installation.

So, to tackle that problem, I decided to scale a new learning curve. To take a circuit from initial concept, where it’s prototyped using development boards, all the way through to having a finished, custom made PCB just for me. Not just some shoddy home etching kit job, because I know what I’m like. I’ll make a mess, and I don’t want the hassle of disposing of the used etchant responsibly. So instead, I’m going to turn it up to 11 and get the boards made by the professionals, with professional tools.

So next up, build the circuit on a breadboard, draw up a schematic, design the board, send the designs off for manufacture, solder it up, and get it working. How hard can it be?