This Simple Ring of LEDs Hides an Entire Turing Machine Within
Users can create their own Turing-complete programs with this deceptively simple device.
A small start
A few years go, Mark Wilson was an attendee at an online conference that was running a competition around a Turing machine (TM) problem. He ended up winning, and his prize for doing so was a NeoPixel ring that mimics the tape used within a Turing machine.
In short, a Turing machine is an abstract computational model that uses a table of rules to modify symbols on a tape. Although it seems basic, this machine is capable of running any computer algorithm and therefore any other Turing-complete machine, given enough time and memory, also possesses these abilities. This is what inspired Wilson to create a slightly more advanced version, dubbed the Turing-ring, that uses the color of an LED to denote its state, along with several options in a menu to perform certain tasks.
Components required
As mentioned before, Turing machines are extremely simple in how they're constructed, which is why Wilson's project is based around a single RGB LED NeoPixel ring which is driven by an Arduino Nano. User input is entered via a rotary encoder that also has a push button for confirming a selection. Finally, power is provided to the device via a 5V DC barrel jack connector.
Designing the user interface
The user interface of any device/program is a challenging thing to get right, and the task is made even tougher when all a person can interact with is an LED ring and a single dial. At startup, the system is in "editor mode", meaning that the tape or machine state can be written to. If the menu mode is selected, a total of ten options appear which allow the user to do everything from loading/storing programs to changing the global speed. Additionally, a currently-running program can have its speed modified by turning the rotary encoder on the front.
Enclosure fabrication
For the enclosure, Wilson laser cut a rear panel with spaces for screws and the DC barrel connector from a sheet of black acrylic. On the front, a second black panel was fabricated along with a smaller white one that sits just on top of the NeoPixel ring. The body and rotary encoder knob were 3D printed and finished with a smooth, glossy texture to match the rest of the pieces.
More advanced features
In his video demonstrating the Turing-ring, Wilson showcases how a "chase" sequence can be created with just a few rules. However, it doesn't stop there, as his GitHub repository contains program examples including counting in binary, cycling colors, and even adding two numbers together. All of these programs are given by an encoded string that specifies the state(s) and action(s) performed. Better yet, this information can also be read from the serial port at runtime if flash memory runs low.