Enigma Human Interface

A project log for Arduino Enigma Machine Simulator

An Enigma Machine Simulator was created with an Arduino UNO and a Touchscreen LCD. Simulates Enigma I, M3, M4, the Plugboard and Uhr Switch.

Arduino EnigmaArduino Enigma 07/12/2015 at 03:090 Comments

This project uses a resistive touch screen LCD to simulate the operation of an Enigma Machine.

The keys can be activated by pressing on them. The rotors turn, and once they finish turning, the encoded letter is lit. The encoded letter is kept lit for as long as the key is pressed. If the user keeps touching the screen, but moves away from the key, it is released. If the printer options is enabled, the encoded characters are printed on a tape running between the rotors and the lamp field. The tape can be cleared by cutting it

The rotors can be set by touching the setting wheel to the right and then dragging them up or down. The next letter is scrolled up or down one line at a time. The movement of the setting wheel is also animated.

The machine is configured on the open machine view by touching the enigma logo in the main screen. The reflector type can be changed by touching it. The wheel types can be changed by touching the wheels in the machine and them moving them to the spare rotor box on the lower part of the screen.

When a rotor is touched, it is placed in an intermediate holding area in the open lamp field. When the rotor is there, its internal setting can be changed by clicking anywhere in its circumference and then dragging in a circular motion. This is the distinguishing feature that separates this simulator from the other ones out there, whether running on smart phones or computers.

Once set, it can be placed in the machine by touching the appropriate position on the mechanism. Rotors I thru VIII can only be placed on the three rightmost positions. The additional wheels Beta and Gamma can only be placed on the left-most position, next to the thin reflectors B and C. Once the rotors are installed in the machine, their starting position can be set by dragging the setting wheel up or down.

Once all the rotors are installed, the machine can be closed by clicking on the word CLOSE or by touching the handle above the reflector. The machine cannot be closed with missing rotors. When the machine is open, the number of characters to print in a group, the density of the home screen background and the serial port functionality can be set by touching the respective word. Touching the small i to the right of the word CLOSE shows the program credits and acknowledgements.

Once the machine is closed, all the wheel settings, including the starting position selected are saved to EEPROM so they are remembered when the power is removed.

From either the main or open machine views, the plugboard can be set by touching the bottom of the screen.

Once in the plug board view, the plugs can be set by touching one of the desired letters, then the other one. A list of the installed plugs is shown under the plug board. When 10 plugs are installed, the Uhr switch is shown. It setting can be changed from any value from 0 to 40 by dragging around its perimeter.

When using the Uhr switch, the order in which the plugs are installed matter. For example AB CD EF GH IJ KL MN OP QR ST will yield different results for non-zero Uhr settings than BA CD EF GH IJ KL MN OP QR ST.

The following video shows how to set the machine:

The following video shows how to configure the machine to verify an Open Enigma encoded message:

While the idea for the arrangement of the three different screens for configuring the machine was borrowed from D. Rijmenants award winning Enigma Simulator and the Franklin Heath Enigma Simulator animates the scrolling of the wheels by dragging them, what makes this project unique is that all the wheel and Uhr settings are changed via a software rotary encoder by dragging them in a circular motion.

All the settings are changed by either touching them, like the keys or plugs, or dragging them, like the wheel setting ring, the wheel internal setting and the Uhr switch. This helps the user to stay in character and lends a realistic feeling to the operation of the machine.

The software rotary encoder algorithm will be described in another project log.

You can read more about this project at and see a walk-through of configuring the machine at