Monday, 9 February 2015

They had to do it eventually

Much as I love them the Pi was starting to get long in the tooth and needed a shot in the arm. When the B+ came out I was surprised it wasn't this, but the Raspberry Pi 2 is here now and the expected extra cores, update to Cortex A7 and speed/memory tweaks are in.

I've just stuck Rasbian on one and it is noticeably quicker. OK so I/O isn't going to be any better but those extra cores really help elsewhere.

Running the motion tracking code I was using on a B the difference is very marked. It's only single threaded so the actual image processing isn't much faster but the other cores get to do other OS tasks like update the display if you're watching the results.

I will definitely be ripping the B out of the motion tracking project and putting a Pi2 in. I reckon the B will get retasked for the peer to peer radio project I have in mind as the radio module is designed for the original 26 pin GPIO connector and it really doesn't need the extra grunt to push radio packets around at 256Kbps.

The good thing they have done is make it the same form factor as the B+ and compatible with the same OS images.

Wednesday, 4 February 2015

Enigma variations

I've been keeping this one under wraps until now as it was a surprise prop in a game some friends were running and playing. Now the game is over I can post about it.

Back in November I found out Elina was playing a Spy and Bletchley Park codebreaker in a WWII/Film Noir themed freeform game. Thinking it might add to the game I contacted the main GM who I know well and offered to build an Enigma machine prop.

At that point I had no idea what it would be or how functional but she jumped at the idea and started to think of ways to add it into the plot. So that was me committed then. :-)

What we have here is a pastiche of the famous German WWII cipher machine, the Enigma. While it is the same size as the original and keeps the spirit of the thing it is not meant to be an exact replica. It's all done with a microcontroller and LEDs for a start. It has five rotors rather than the original three or four and no plugboard. The five rotors were a plot point so I was glad I didn't start building the three rotor one I had in mind at the start.

It is fully functional and uses the original Enigma algorithm to encode/decode messages.

Setting the encryption key is done by turning the rotors and the rotor positions are displayed on 5x7 LED matrices immediately below them.

The keyboard is pretty faithful, made out of a set of keys salvaged from a vintage typewriter, a bunch of brass tube and 27 momentary switches. I've used the QWERTY layout rather than the original QWERTZ as I'm English and it was for an English game.

A degree of obsession with symmetry lead me to add a 27th key, originally thinking it could be a space bar, before realising the algorithm only works with even numbers of characters. So right now it does nothing.

The 27 lamps which show the encoded message are pretty faithful too, only I've used warm white LEDs.

There are then a few indicators and buttons to make it easy to use. This
is a prop to be used in game by everyday people to send secret messages so it had to be fairly simple. They were there to play a game not learn how to use a device from military history. The buttons allow you to play back the plaintext you've typed to check for typos and also the encoded/decoded output so you can write it down easily.

The original had a kind of wrinkle finish paint on the metal covers. This is all made from plywood but I painted the relevant buts with some textured 'weathered iron' paint, which has quite nicely aped the look.

At the heart of it is an Arduino Mega 2560 microcontroller clone and a whole load of hand soldered loom. The keyboard and lamp matrix were hand done and I use the sea of GPIO pins on the big Arduino to multiplex them directly without extra components. When a Mega clone is only £15 why mess around with a smaller one and add extra components to debug? My coding is better than my soldering and that's not saying much.
The rotor movements are read with 'gray code' rotary encoders so they can move through 360 degrees and the matrices driven by MAX7219 driver chips. As you turn the rotors or they advance while typing the letters displayed on the matrices 'scroll' up and down to provide the illusion of a physical machine. It's not the smartest illusion but it works nicely.

The five MAX7219 drivers are mounted on little boards right below each matrix and daisy-chained together. I had a few problems with interference causing the displays to malfunction until I carefully tidied all the wiring up and shortened the data lines.

There are four AA batteries inside so it's portable and can also be run by connecting a USB PSU the to the Arduino USB port. I left the hole in the side of the box for the USB port as it needs to be there for programming anyway. When the batteries need changing you can get to them by removing a small metal cover in the side, I didn't want it so the whole thing had to be ripped open.

If the machine is left untouched for a 15 minutes all the lights and displays shut down to save the batteries and it needs power-cycling to wake it up again.

I hand-rolled all the code, stealing liberally from the Internet for the rotary encoders and MAX7219 without actually using any pre-made libraries. I even made my own 5x7 font for the matrices.

As a bit of added help in the game I chopped the code right down and made a standalone Arduino in a box that takes input from the serial console and encodes/decodes stuff. This is so the game GMs can code/decode messages to pass to/from the players without having to go and use the main machine. A less lazy soul would have ported the code to another environment and maybe written a small app that would run directly on a phone or PC. However I was literally coding this the night before the game and needed it done in an hour. I had the spare Arduino anyway and it can be re-used after the game.

It went down very well in the game and I'm proud of how it's worked out even if some of the woodwork is a bit shonky. I'm an IT guy not a cabinet maker and I scratch built it from the carcass of some 70s plywood furniture I'd knocked to pieces. You can do wonders with hot glue and filler.