This year we're running a series of events we've called the NodeBots Battle Royale. In a nutshell everyone turns up at 10am on a Saturday and is issued with a challenge and a reference kit. People have access to tools, spare parts and are encouraged to use their creativity to customise their kit in order to best their rivals when the competition starts at about 3:30.
When we started the meetup, our aim was essentially to get good at electronics so we can build a Jaeger and we've been working towards that goal ever since.
We'd often talked about a 'Time since last high five' display similar to the Time since last Kaiju attack clock (which Alan prototyped last January and inadvertently led to us building the high five machine for our NodeBots workshops at NodeConf 2014).
I figured why not take it a step further and actually build a giant clock that would show the time remaining until the competition begins, maybe starting green and the gradually turning red and flashing as the deadline approaches to instil a sense of mild panic in the competitors.
I found the wonderful 12ft GPS Wall Clock on Sparkfun's website which I used as a blueprint to build my own.
The GPS clock used 12v light bars of type you get in kitchen lighting; with fourteen bars per numeral, two for each segment. The lights are one colour and the whole bar is either on of off. RJ45 cable and custom circuit boards were used to wire it all together.
I've never been very good at making ethernet cable (and consequently have some unreliable cabling under my floorboards) and I didn't fancy making custom circuit boards - rather I wanted to run the whole thing from an Arduino or Raspberry Pi; neither or which can supply 12v without extra circuitry. The single colour was also a bit of a downer so I needed to find a different solution.
The answer comes in the form of WS2812 LEDs, also known as "NeoPixels". UK supplier Proto-Pic sells strips of these up to 5m in length - they run at 5v and since each LED has a chip embedded in it they are individually addressable - meaning it only takes three wires to run hundreds of them - they are even RGB LEDs to boot.
An important safety tip - wear googles and a mask. There will be little bits of sharp stuff flying around everywhere along with loads of wood and plastic dust and you don't want any of that stuff in your eyes or sinuses. Make sure your mask fits better than mine...
The first thing to do was to create a template for the numbers. Wickes sell 3mm hardboard at 607mm x 1220mm - this would form the base for the frames so to avoid more cutting than was necessary I enlarged the image from the GPS clock page to fit that comfortably, printed it out and stenciled it onto some foamex.
I used a Dremel and a Stanley knife to cut the template out. The multipurpose cutting wheel generates a lot of friction - the vented wood cutting wheel tears material away from the thing you are cutting so I find it works better with things that are likely to melt like perspex and indeed, foamex.
Next up was cutting the polystyrene. This made an incredible amount of mess. I tried with a circular saw, the Dremel wood cutting blades, even some third party serrated blades, all of which statically charged the polystyrene so it stuck to every available nearby surface and regularly clogged up power tool air vents like a champ.
Keep the hoover close and don't do this outside unless you want to stare at decomposing polystyrene balls in your garden for the next I don't know, ever.
What I discovered a little too late was that a very (very) sharp kitchen knife actually works really well and doesn't create nearly as much mess.
The finished blocks:
They were cut from 25mm insulation boards. For some reason they have little black flecks all the way through them - not a problem when they are in your attic but it does spoil the aesthetic slightly for a clock. A few coats of water based white emulsion sorted that out though.
The soldering begins. Note the frames made from pine stripwood - the kind of stuff doorjambs are made from - I chose 15mm x 25mm x 2400mm sticks.
Each LED was cut out from the strip individually and hot-glued onto the hardboard.
Each LED had six solder joints and each numeral had 42 LEDs. That's a lot of soldering. Thankfully the colons only had 8 LEDs each.
A finished numeral:
And with the polystyrene block:
Acrylic glass, the protective film says. Uhuh. Acrylic acrylic, they meant.
Wider but much thinner stripboard was screwed into place to hold the polystyrene and perspex in. This was 3mm x 25mm x 2400m
The perspex was masked off for spray-painting. I would have used ordinary gloss paint here but with the next NodeBots meetup looming I was running out of time so spray gloss it was.
All stacked up for drying:
The whole show is run from a Raspberry Pi B using node.js and the rather excellent rpi-ws281x-native module. At the moment it only works with the original B and B+ Pis, sadly not rev2 as it relies on the timing of the PWM hardware which seems to have changed with the updated model.
Power is provided by a 5v 10a laptop style adapter. With every LED showing white, the clock has the capability of drawing about 16 amps, but that's not how I'm planning on using it.
The chips on the strip that control the LEDs are very sensitive to timing, so the library uses the PWM pin of the Pi to signal them. The Pi outputs 3.3v on it's GPIO pins but the lights require 5v - initially I had this going through a logic level converter and it worked ok for a few lights but with all the LEDs chained together after a while the signal got corrupted and it started to look something like the writing from The Predator.
The solution was found in the Adafruit NeoPixel/Raspberry Pi guide. They recommend using a 74AHCT125 level converter chip - I couldn't find any of these, instead I used a 74HCT125N as mentioned in the rpi-ws281x-native module README and it worked a treat.
To make it a bit more robust I mounted the chip on a Pi Plate with the cabling underneath to make it look tidy and it's all set.
Because the lights are all RGB LEDs and they are individually addressable it's got a neat demo mode. Here the frames are unassembled. This was taken at about 3:30am on the morning of NodeBots. Phew.
Installed at NodeBots (sadly it wasn't possible to wall mount it). As events transpired the soldering was so time consuming that I ended up spraying the frames after NodeBots, but I'd already bought the paint by then so meh.
The finished article. At nearly 3.5m long it's slightly smaller than the GPS clock but it's still too big for my kitchen!
And that's it!
If I could have my time again, I'd probably try to find pre-made RGB LEG bars or strips with wider spacing that would obviate the need for quite so much soldering.
Also the connectors between the numerals are just 0.1" pitch 3x1 crimp connectors glued into the frames holding female crimp pins and feel a bit flimsy, they should probably be something more robust. I fancy trying to find some 3-pin mini jacks like the sort you get with mobile phone handsfree kits, but for the moment I'm just happy I don't have to solder anything for a while.
You can still see the individual LEDs which is a shame. Pre-frosted plexiglas might be a reasonable solution to this although it might get expensive. Other options are a dab of hot glue over each LED to diffuse the light further and maybe another sheet of privacy film.
The code that runs the clock is up on GitHub: https://github.com/achingbrain/clockbot