SteamPunk Radio




About: Now retired but have a passion for robot design and construction. Also enjoy programming, my career was largely commercial programming and design work using Cobol, Fortan, and industrial automation and integ...

Project: SteamPunk Radio

Date: May 2019 – Aug 2019


This project is without doubt the most complex I have undertaken, with sixteen IV-11 VFD tubes, two Arduino Mega cards, ten LED Neon light circuits, a servo, an electromagnet, two MAX6921AWI IC Chips, five DC power supplies, a HV power supply, two DC Volt meters, a DC Amp meter, FM stereo radio, 3W power amplifier, LCD screen, and keyboard. Apart from the above parts list, two software programs had to developed from scratch and finally the construction of the entire radio required about 200 hours of work.

I decided to include this project onto the Instructables site not expecting members to reproduce this project in its entirety but rather to cherry pick the elements that where of interest to them. Two areas of particular interest to the site members may be the control of the 16 IV-11 VDF tubes using two MAX6921AWI chips and its associated wiring, and the communications between two Mega 2650 cards.

The various components included into this project have been sourced locally, except the IV-11 tubes, and the MAX6921AWI chips both obtained on EBay. I wanted to bring back to life various items that would otherwise languish in boxes for years. All of the HF valves where sourced with the understanding that all where failed units.

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.


1. 2 x Arduino Mega 2560 R3

2. RDA5807M FM radio

3. PAM8403 3W amplifier

4. 2 x 20W speakers

5. Di-pole FM Ariel

6. 16 X IV-11 VDF tubes

7. 2 x MAX6921AWI IC Chip

8. 2 x MT3608 2A Max DC-DC Step Up Power Module Booster Power Module

9. 2 x XL6009 400KHz Automatic Buck module

10. 1 Channel Module, 5V Low Level Trigger for Arduino ARM PIC AVR DSP

11. 2 Channel 5V 2-Channel Module Shield for Arduino ARM PIC AVR DSP

12. Electric Magnet Lifting 2.5KG/25N Solenoid Sucker Electromagnet DC 6V

13. 4 phase stepper motor can be driven by ULN2003 chip

14. 20*4 LCD 20X4 5V Blue screen LCD2004 display LCD module

15. IIC/I2C Serial Interface Module

16. 6 x Bits 7 X WS2812 5050 RGB LED Ring Lamp Light with Integrated Drivers Neo Pixel

17. 3 x LED Ring 12 x WS2812 5050 RGB LED with Integrated Drivers Neo Pixel

18. 2 x LED Ring 16 x WS2812 5050 RGB LED with Integrated Drivers Neo Pixel

19. LED Strip Flexible RGB 5m Length

20. 12 Key Membrane Switch Keypad 4 x 3 Matrix Array Matrix keyboard switch keypad

21. BMP280 Digital Barometric Pressure Altitude Sensor 3.3V or 5V for Arduino

22. DS3231 AT24C32 IIC Module Precision RTC Real Time Clock Module

23. 2 x Knurled Shaft Linear Rotary Potentiometer 50K

24. 12V 1 Amp Power Adapter


This projects’ use of the MAX6921AWI chip builds on my previous Alarm Clock project. Each set of eight IV-11 tubes are controlled via a single MAX6921AWI chip using the Multiplex method of control. The two attached PDFs show the wiring of the eight-tube set and how the MAX6921AWI chip is wired to the tube set and, in its turn, wired to the Arduino Mega 2560. Strict colour coding of the wiring is required to ensure that segment and Grid voltage lines are kept separate. It is very important to identify the tube outputs, see attached PDF, this includes the 1.5V heater pins 1 and 11, the 24v anode pin (2), and finally the eight segment and “dp” pins, 3 – 10. At this time, it is also worth testing each segment and “dp” using a simple test rig before starting to wire the tube set. Each tube pin is wired in series with the next down the line of tubes till the last tube where extra wiring is added to allow remote connection to the MAX6921AWI chip. This same process is continued for the two heater supply lines pins 1 and 11. I used coloured wire for each of the 11 lines, when I ran out of colours I started the colour sequence again but added a black band around each end of the wire using heat shrink. The exception to the above wiring sequence is for pin 2, the 24-anode supply which has an individual wire wired between pin 2 and the anode power outputs on the MAX6921 chip. See the attached PDF for details of the chip and its connections. It cannot be overemphasized that at no time during the operation of the chip should the chip get hot, warm after a few hours use yes, but never hot. The chip wiring diagram shows the three connections to the Mega, pins 27, 16, and 15, the 3.5V-5V supply from the Mega pin 27, its GND to the Mega pin 14, and the 24V supply pin1. Never exceed 5V supply and keep the anode power range to between 24V and 30V maximum. Before continuing use a continuity tester to test each wire between its most distance points.

I used the AWI version of this chip as it was the smallest format, I was willing to work with. Fabricating the chip and its carrier starts with two sets of 14 PCB pins placed on a bread board, the chip carrier placed over the pins with pin 1 top left. Using flux and solder, solder the pins and “tin” each of the 28 chip leg pads. Once complete place the chip of the chip carrier taking great care to line up the chip’s legs with the leg pads and ensuring that the notch in the chip is facing towards pin 1. I found using a piece of sellotape over one side of the chip helped steady the chip prior to soldering. When soldering ensure flux has been applied to the leg pads and the soldering iron is clean. Press generally down onto each chip leg, this will bend it slightly onto the leg pad and you should see the solder run. Repeat this for all 28 legs, you should not need to add any solder to the soldering iron during this process.

Once complete clean the chip carrier of flux and then using a continuity tester test each leg placing one probe onto the chip leg and the other on the PCB pin. Finally, always ensure that all connections have been made to the chip carrier before any actual power is applied, if the chip starts to get hot switch off immediately and check all connections.


This project required ten lighting elements, three RGB light ropes and seven NEON light rings of various sizes. Five of the NEON light rings where wired in a series of three rings. These type of lighting rings are very versatile in their control and what colours they can display, I used the three primary colours only which were either on or off. Wiring consisted of three wires, 5V, GND, and a control line which was controlled via the slave Mega, see attached Arduino listing “SteampunkRadioV1Slave” for details. Lines 14 through 20 are important especially the defined number of light units, these must match the physical number otherwise the ring will not work correctly.

The RGB light ropes required the construction of a control unit which took three control lines from the Mega each controlling the three primary colours, red, blue, and green. The control unit consisted of nine TIP122 N-P-N transistors, see attached TIP122 datasheet, each circuit consists of three TIP122 transistors where one leg is grounded, the second leg is attached to a 12V power supply and the middle leg is attached to the Mega control line. The RGB rope supply consists of four lines, a single GND line, and three control lines, one from each of the three TIP122 middle legs. This provides the three primary colours, the intensity of the light is controlled using an Analog write command with a value of 0, for off, and 255 for maximum.


This aspect of the project was new for me and as such required the scratch building of an IC2 distribution board and the connection of each of the Mega GNDs. The IC2 distribution board allowed the two Mega cards to be connected via pins 21 and 22, the board was also used to connect the LCD screen, BME280 sensor, Real Time Clock, and the FM Radio. See the attached Arduino file “SteampunkRadioV1Master” for details of the single character communications from the Master to the Slave unit. The critical code lines are line 90, defining the second Mega as a slave unit, line 291 is a typical slave action request procedure call, the procedure starting at line 718, finally line 278 which has a returned response from the slave procedure, however I decided not to fully implement this feature.

The attached “SteampunkRadioV1Slave” file details the slave side of this communication, critical lines are line 57, defines the slave IC2 address, lines 119 and 122, and the “receiveEvent” procedure starting a 133.

There is a very good You Tube article: Arduino IC2 Communications by DroneBot Workshop which was very helpful in understanding this subject.


Again, a new element in this project was the use of an electromagnet. I used a 5V unit, controlled via a single channel relay. This unit was used to move the Morse code key and it worked very well with short or long pulses providing the “dot” and “dash” sounds that a typical Morse key exhibits. However, a problem occurred when this unit was used, it introduced a back EMF into the circuit which had the effect of resetting the attached Mega. To overcome this problem, I added a diode in parallel with the electromagnet which solved the problem as it would catch the back EMF before it affected the power circuit.


As the project name suggests this is a radio and I decided to use a RDA5807M FM module. While this unit was work well its format requires very great care in attaching wires in order to create a PCB board. The solder tabs on this unit are very weak and will break off making it very difficult to solder a wire onto that connection. The attached PDF shows the wiring of this unit, SDA and SDL control lines provide control to this unit from the Mega, the VCC line requires 3.5V, do not exceed this voltage or it will damage the unit. The GND line and ANT line are self-evident, the Lout and Rout lines feed a standard 3.5mm female headphone jack. I added a mini FM aerial jack point and a di-pole FM antenna and reception is very good. I did not want to use the headphones to listen to the radio so I added two 20W speakers connected via a PAM8403 3W amplifier with the input to the amplifier using the same 3.5mm female headphone plug and a commercial 3.5mm male to male connector wire. It was at this point that I encountered a problem with the output from the RDA5807M which overwhelmed the amplifier and caused significant distortion. To overcome this problem, I added two resistors 1M, and 470 ohms in series, to each of the channel lines and this removed the distortion. With this format I was not able to reduced the volume of the unit to 0, even setting the unit to 0 all sound was not completely removed, so I added a “radio.setMute(true)” command when the volume was set to 0 and this effectively removed all sound. The last three IV-11 tubes on the bottom line of tubes normally shows the temperature and humidity, however if the volume control is used this display is changed to show the current volume with a maximum of 15 and minimum of 0. This volume display is shown till the system updates the top tubes from displaying the date back to showing the time, whereupon the temperature is displayed again.


The 5V Servo was used to move the clockwork unit. After purchasing a “for parts only” clock mechanism and then removing the main spring and half of the mechanism, what remained was cleaned, oiled, and then powered using the Servo by attaching the Servo arm to one of the spare original clock cogs. The critical code for the operation of the Servo can be found in the “SteampunRadioV1Slave” file starting from line 294, where 2048 pulses produce a 360-degree rotation.


The box came from an old radio, the old varnish removed, front and rear removed and then re-varnished. Each of five valves had their bases removed then NEON light rings attached to both the top and bottom. The rearmost two valves had sixteen small holes drilled in the base and then sixteen LCD lights sealed to each hole, each LCD light was wired to the next in series. All pipework used 15mm copper pipe and connections. Internal partitions where made from 3mm ply painted black and the front was 3mm clear Perspex. Brass sheet, with pressed out shapes was used to line the front Perspex and the inside of each of the IV-11 tube bays. The three front controls for On/Off, Volume, and Frequency all use Linear Rotary Potentiometers attached via plastic tube to the stem of a gate valve. The copper shaped aerial was constructed from 5mm stranded copper wire, while the spiral coil around the two topmost valves was made f rom 3mm stainless steel wire painted with copper coloured paint. Three distribution boards where constructed, 12V, 5V, and 1.5V, and a further board distributes the IC2 connections. Four DC power supplies where provided with 12V from a 12V, 1 Amp power adapter. Two supply 24V to power the MAX6921AWI IC Chips, one provides a 5V supply to support all lighting and motion systems, and one provides 1.5V for the two IV-11 heater circuits.


The software was developed in two parts, Master and Slave. The Master program supports the BME208 sensor, Real Time Clock, two MAX6921AWI IC Chips, and IC2. The Slave program controls all lights, servo, electromagnet, Amp meter, and both Volt meters. The Master program supports the sixteen IV-11 tubes, the LCD rear display, and 12 key keypad. The Slave program supports all of the lighting functions, servo, electromagnet, relays, Amp meter, and both Volt meters. A series of test programs where developed to test each of the functions before each function was added to the Master or Slave programs. See attached Arduino files and details of the additional Library files needed to support the code.

Include Files: Arduino.h, Wire.h, radio.h, RDA5807M.h, SPI.h, LiquidCrystal_I2C.h, Wire.h, SparkFunBME280.h, DS3231.h, Servo.h, Adafruit_NeoPixel.h, Stepper-28BYJ-48.h.


I enjoyed the development of this project, with its new elements of Mega communications, electromagnet, Servo, and support of sixteen IV-11 VFD tubes. The complexity of the circuitry was challenging at times and the use of Dupont connectors does cause connection problems from time to time, use of hot glue to secure these connections helps to reduce random connection problems.

Be the First to Share


    • CNC Contest

      CNC Contest
    • Make it Move

      Make it Move
    • Teacher Contest

      Teacher Contest

    12 Discussions


    5 days ago

    It's a pretty contraption, but I really would advise you to get beyond dupont connectors and start producing your own PCB's. It's easier and cheaper than you think and the end result is much more compact and more reliable. I'd also bet you could use a single ESP32 or Teensy to replace both these Mega's and you'd be able to control your steampunk radio with your smartphone ;-)


    15 days ago

    Once again, WOW! I bet you had so much fun doing that.


    16 days ago

    Great looking project. Must have taken a while to piece together! Do you have a photo of the gate tapes attaching to the pots? You said you used plastic tube, but how did you couple them together?

    2 replies

    Reply 16 days ago

    Hi, sorry no photo. However after removing the gate valve the handle has a spiral end which I pushed and glued a plastic tube onto. I cut the tube to length and then pushed and glued the same tube onto the knelled knob of the pot. The pot was held in place using a piece of tin, drilled to allow the pot to pass through it and secured using its nut.


    Reply 15 days ago

    Thanks, that makes sense. I'd planned to do something similar on a guitar if I can get enough depth to it.


    17 days ago

    I agree with WilkoL - wow. A lot of ingenuity went into that project. I won't cherry pick from that to make my own. A bit too challenging but I can apreciate.


    Reply 17 days ago

    She gave you the schematics, the parts list, the software, the data sheets, and the inspiration. Come up with your own design and build.