Like the original this is a puzzle kit – patterns of colours on LEDs and rotary encoders to twiddle and pushbuttons to press to match a target pattern. There are 16 puzzles in total, a few of them are timing based but most of them require logic to solve.

The circular screen in the centre of the board is used to give simple instructions.

The Raspberry Pi Pico is my go-to microcontroller of choice these days. Plenty of flash and RAM for a project of this size and a programmable I/O module to support peripherals such as addressable LEDs.

The physical appearance of the circuit board was important for this project and I spent some time on an artistic layout. There’s a lot of visible copper on the top side plated in gold and decorative alchemical symbols. I used KiCad which was well up to the task.

I wanted to keep the top side of the PCB as clean and uncluttered as possible with minimal visible solder joints. That meant using surface-mount components on the bottom side of the board. Mostly passives, no smaller than 1206, so easy enough to hand solder.

Power is from three AAA cells supplying a nominal 4.5V. That was enough voltage to drive the RGB LEDs which are 5V parts. It does mean that rechargeable AAAs (nominally 3.6V) probably won’t drive the LEDs properly (the blue component may drop out).

After I’d ordered boards I realised it could also be powered from USB via the micro-USB socket on the Pico. That required  a small patch to connect two points with a flying wire.

Another motivation for this project was trying out Python on a small device – MicroPython specifically. Python would make it more hackable as using C/C++ on the Pico is quite involved setting up a toolchain in Visual Studio Code. MicroPython only needs a simple IDE such as Thonny.

Because Python isn’t a fully-compiled language I was concerned about performance, particularly writing to the display and polling the rotary encoders fast enough not to miss pulses. I found performance surprisingly good after I’d optimised the code, screen refresh is noticeable (in C it would be near instantaneous) but was perfectly acceptable.

MicroPython on the Pico has inbuilt support for the PIO on the RP2040 and that was essential for controlling the peripherals.

I sell on Tindie