In this tutorial, you will learn how to control a nixie tube with an Arduino.
Nixie tubes were the only way to display numbers back in the 50s, before VFD and seven segments displays. Today they are highly sought after for their retro / steampunk look.
Using nixies with Arduino is fairly straightforward, but you’ll need a few exotic parts. Read on!
Parts needed
- A nixie tube. In this tutorial a Soviet era IN-14 (ИН-14) is used but it can be substituted for any other tube.
- A Nixie driver IC (KM155ID1, SN74141, 7441, etc. etc)
- 12V power supply
- 12V to 170~180V Nixie Power Supply
- A 20k resistor
- Arduino Uno or any other 5V Arduino
- Multimeter
- Lots of jumper cables
Step 1: Getting started with a Nixie tube
Before you get started, you need to get acquainted with the Nixie tube. Each digit of the tube has an ending pin at the bottom of it. If any of these leads are connected to the ground, the digit will glow; provided the anode of the tube is supplied with 170 to 180 volts. This “ignition voltage” differs for each tube but is generally in this range.
You can easily locate the anode of the tube as it is generally situated at the back, and it’s structurally reinforced. This makes it very distinguishable from the other pins.
WARNING: Do not ever connect your tube between a high voltage source and the ground. 170V+ is very high voltage. Always connect a current limiting resistor between the anode and your power source. 20k is a good value for the IN-14. In any case, proceed with caution!
TIP: A typical female 0.1″ jumper cable should be a tight fit around the Nixie leads, so you can use them to run your initial tube tests.
Step 2: power source
For most nixie tubes, you need a 170V power supply. eBay or Aliexpress should have readily available modules for this.
They are good enough to get started in the Nixie tube hobby but they are generally poor quality and might die very early. Boosting 12V to 170~180V is very taxing on electronic components (MOSFET, magnetics, etc. etc.) and the cheap power supplies are just not reliable enough. Speaking from experience: three of them died from regular usage.
I highly recommend you invest in a quality power supply, such as the one I design and sell on Tindie:

Link to the store: https://www.tindie.com/products/tonyp7/170v-high-voltage-nixie-power-supply/
These kits usually require an input voltage between 5 to 12V, and incidentally 12V is a good value to power your Arduino from the barrel jack and onto the integrated 5V voltage regulator. From a single 12V power source you can therefore power both your Arduino and the Nixie, while maintaining the same ground level. 12V is a popular value for a lot of consumer electronics so chances are you have one of these wall warts hanging around in your home.
Step 3: The Nixie driver
Many companies produced Nixie drivers, but today they are no longer on their catalogs. That being said, you can easily find “new old stock” on eBay or any other place. These chips are 5V logic and transform a 4 bit input (0000 to 1111) into a given output pin. They are more or less a typical BCD to decimal decoder that you can buy today for 7 segment displays; except that they are built in with high voltage transistors.
The pinout is as following:
Known nixie drivers include:
- Texas Instruments SN74141
- MSI DM74141
- USSR K155ID1
- … And many more. A complete list can be found here if you are interested in these chips.
Truth table is as following:
Input | Output | |||
D | C | B | A | |
0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 1 | 1 |
0 | 0 | 1 | 0 | 2 |
0 | 0 | 1 | 1 | 3 |
0 | 1 | 0 | 0 | 4 |
0 | 1 | 0 | 1 | 5 |
0 | 1 | 1 | 0 | 6 |
0 | 1 | 1 | 1 | 7 |
1 | 0 | 0 | 0 | 8 |
1 | 0 | 0 | 1 | 9 |
Step 4: Putting it all together -the schematics
Connecting it all together should be an easy task. The difficulty here is the amount of wires: it’s easy to mix up input A, B, C & D of the driver chip since they are in a completely random order (A, D, VCC, B, C –who thought that was a good idea?); and the output to connect to the nixie don’t seem to make any more sense. Proceed with care and you’ll have a working circuit in no time!
Key points on this schematic:
- Connect Arduino pins 10, 11, 12 & 13 to the pins A, B, C & D of the nixie driver.
- You can connect the 12V source directly on the Arduino by using the “VIN” pin and any ground pin.
- Use the same 12V source to power the step up converter.
- Use the 5V pin of the Arduino to power the nixie driver.
- Don’t forget the 20k resistor on the anode of the nixie!
Step 5: uploading the code
Upload this code on your Arduino. Don’t forget to disconnect it to the 12V source first! Having two source input (from the USB and from the external 12V) might damage your Arduino.
uint8_t currentValue = 0; //Use pins 10, 11, 12 & 13 of Arduino //Connect to pins A, B, C & D of your SN74141 Nixie driver chip #define A 10 #define B 11 #define C 12 #define D 13 void setup() { pinMode(A, OUTPUT); pinMode(B, OUTPUT); pinMode(C, OUTPUT); pinMode(D, OUTPUT); nixieWrite(A, B, C, D, 0); } void nixieWrite(uint8_t a, uint8_t b, uint8_t c, uint8_t d, uint8_t value){ //D is most significant bit //A is least significant bit digitalWrite(d, (value & 0x08) >> 3); digitalWrite(c, (value & 0x04) >> 2); digitalWrite(b, (value & 0x02) >> 1); digitalWrite(a, value & 0x01); } void loop() { delay(1000); currentValue++; if(currentValue > 9) currentValue = 0; nixieWrite(A, B, C, D, currentValue); }
The pins chosen (10, 11, 12, 13) are completely arbitrary and of course can be substituted by the pins of your choice.
One interesting bit about the code is the “nixieWrite” function: it transforms a decimal number into its individual bit components by isolating the bit with a bitwise and operation; then the result is shifted according to the position.
Take number 9 for instance, or 1001 in binary. The result will be:
- D: 1001 AND 0x08 (1000) = 1000. 1000 shifted 3 bits: 1
- C: 1001 AND 0x04 (0100) = 0000. 0000 shifted 2 bits: 0
- B: 1001 AND 0x02 (0010) = 0000. 0000 shifted 1 bit: 0
- A: 1001 AND 0x01 (0001) = 0001. no need to bit shift this one.
Wrap up
… That’s all there is to it! Nixies are fairly easy to use provided you have all the components needed and the patience to painstakingly wire everything one by one. As a single nixie requires at the very least 17 wires (10 for the digits, 6 for the driver’s input including VCC and GND, and one for the 180V anode), it can get rapidly messy.
As a matter of fact, without the IC driver it gets even more messy. You can drive nixie with high voltage transistors such as a BF259 “Bipolar (BJT) Transistor NPN 300V 100mA 90MHz 5W”; but you will need one for each digit!
That being said, there is nothing quite like this amazing orange glow; and all this work will definitely give a unique look to your projects!
Credits
This tutorial would not have been possible without these other great resources:
20 thoughts on “How to control a Nixie Tube with Arduino”
EXACTLY what I need just in this moment ! GREAT! THANKS A LOT
Great stuff, thanks for the info! I’m wondering though, looking at your breadboard photo, what is the right breadboard used for? Just to interconnect wires?
Also, what is that small device on the far right? Looking at the wires, I’d guess a 12v to 5v converter? If so, why not feed the 12v directly to the Arduino? (Or is your input voltage perhaps higher than what the Arduino can handle?)
Hi RefriedNoodle,
You’re right on everything, the breadboards (both actually) are just there to interconnect wires and the device on the far right is a 12V to 5V converter. From what I remember, I did this because this particular Arduino clone did not have a Vraw pin…
Thanks you so much for the tutorial ! just a thing i noticed on your photo, it seems you grounded the HV(~170V) to arduino? i trying to zoom in that photo to max level, i can see there is a white wire came out of HV, i guess that’s ground, but sill not sure you connected that wire to arduino or not
Yes. The HV power supply shares the same ground as the rest of the circuit. Since this HV power supply is not isolated this white wire actually doesn’t matter.
Works! Great guide! Many thanks!
Thank you! I have replicated it successfully.
Great writeup. However, how would you wire it so the arduino could power/control up to 10 nixie tubes? Everyone wants to make clocks and I want to make a large counter… Thanks in advance!
There are several ways to do it but you should start googling “Multiplexing nixie tubes” which will give you a good direction. You can either multiplex through the cathode and some high voltage transistors, or through the TTL level logic by having a 74141 for each tube.
Can I use Arduino Mega instead of Arduino Uno?
yes, you can
I could not find (KM155ID1, SN74141, 7441) in my country , can you introduce more ICs for Driving nixies?
These drivers are no longer built. Old stock resellers are the only source for these. You can try your luck on eBay.
Could it be that you missed the connection between your step up converter and the arduino in your schematic?
It wouldn‘t make any sense in my mind otherwise :/
Wiring is correct. You don’t need HV to connect to the arduino. What would be the use for that?
Thank You
How do adjust the clock readout if it is running fast or slow?
So there is no need to connect the 170-180v PSU GDN?
You have to connect GND, but you don’t have to connect both (HV and low voltage sides). One side is enough, whichever you prefer, since they are connected together on the HV power supply. In the picture I have connected both but it’s not necessary.
The schematics showing only the low side GND connected is correct.
Great! Thanks for the prompt reply!