Nixie Clock: Overview
- Posted
- Updated
- Series
- Part 1 of N, ongoing
This series documents the design and construction of my first nixie tube clock, including a high voltage flyback converter designed from scratch, ESP32 main board and 3D printed case. I'll also cover writing Rust firmware for the ESP32 to handle WiFi, NTP, USB Power Delivery, and the high voltage converter.
Intro
Don't remember when I first heard about nixie tubes, but like every engineer I've introduced them to, I was pretty immediately enamored. Sometime in 2021 or 2022, I designed the board for my first attempt at a clock in Eagle.Still its own thing back then, not... whatever zombie thing fused to Fusion that it is now. This was the first board I ever sent to a fab, and either insufficient review of the footprints I found online or my failure to account for fab tolerances correctly left me with a board that the tubes didn't even slot into.
In 2026 I was mentoring some community college students, and we got on the subject of circuit design. After talking with them about it in general terms for a couple of hours, I decided I needed a project to really practice and learn the skill in depth. The original board files were long gone, and with the confidence born of a moderately priced LLM subscription, I had bigger ambitions anyway.
Versioning
I started this project optimistically believing that I could design everything a single time and send it
to the fab. The first couple of revisions were just A and B. By the time I got
to C and still wasn't very close to actually ordering anything, I realized I needed more
granularity or I would run out of letters, so I added a numeric step variable. The current revision
scheme increments the letter each time I change the fundamental design of the board in some way, and
increments the step each time I generate the fabrication files. The tooling in the repository ensures
that each fab generation is based on a clean git repo and tags the commit used so that I can always
trace design files back to a specific repository state.
The current design is rev C4.
Files
All files for this project, including KiCad projects, firmware, software and 3D models, are in a single repository on GitHub. The repo does necessarily reproduce freely available but copyrighted material (mostly datasheets and vendor 3D models of components), but all of my work in that repo is licensed under CC BY-SA.
Repository (github.com↗)Components
| Part | Notes |
|---|---|
| Main Board | USB PD, 3.3V and 5V bucks, ESP32 |
| HV Board | USB PD bus voltage in, ~170V out, flyback topology |
| Face Board | Tubes, ballast resistors and K155ID1 drivers |
| Body | 3D printed in 5 parts |
| Firmware | Async Rust, modules split by subsystem, wifi, ntp, hv, pd, nixies |
Project Status
| Area | Version | Status Report |
|---|---|---|
| Main Board | C4 | Working flawlessly. One minor hiccup with getting the ESP32 on the USB bus that we'll talk about in a future post. |
| HV Board | C4 | Working in some configurations; by far the most in need of a second iteration out of any of the components. With a 5V supply (computer port), the clock works great. On a 12V supply the supply works either intermittently or not at all depending on which of the two built boards I use. |
| Face Board | C4 | Fully working and operational. The biggest issue on this board is how big it is. The resulting clock case to fit the face feels too big to me. Considering an alternative design that ditches the K155ID1s and moves all of the non-tube components to SMD on the back side to cut the front face area roughly in half. |
| Body | Unversioned | Works okay, takes about 12 hours of total print time. |
| Firmware | 1.1 | Fully working. No real surprise there. This is the only component where I am completely within my professional competency. I did have to learn async Rust finally and work through setting up the Xtensa toolchain, but the former is actually very straightforward and the latter was easy with a couple of pointers from Claude. |
System Architecture
Design Constraints
- USB-C with full power delivery negotiation for a wide range of protocols
- High voltage converter supplies ~160-180V from 5-12V input
- 3.3V converter supplies 3.3V, even from a 3.3V FTDI plugged into the UART header
- Static drive for each tube
- Prefer through hole for the face board and HV converter board
The Design in Brief
Face Board
Design started from the old boards, which I still inexplicably have despite my anti-hoarding instincts and their utter uselessness. The new board retains the 4 digit HH:MM display, repositions the ballasts a bit, and retains the K155ID1 BCD drivers, all in pretty much the same layout. The display is statically driven rather than multiplexedI gather from my research that some people use a single driver that cycles which tube it is driving. This design seems so obviously wrong to me that I have thus far refused to even look up the specifics.. The tubes are wired to the K155ID1s in an order that simplifies layout rather than wiring the tube digits to their nominal BCD output. The firmware handles this with a simple table lookup to translate. I quickly realized that an on-board WiFi capable MCU and high voltage converter would make the clock board too big for any reasonable clock footprint, so everything else moved to separate boards.
High Voltage Board
My next bright idea was to put the HV converter on its own board and build it with through hole components where practical so it would be somewhat period appropriate and could be displayed as part of the clock. After some consideration, I came to the conclusion that putting anything carrying ~170V at several milliamps on display was a pretty idiotic idea. The current clock hides it under a sheet of acrylic where it's mostly invisible anyway. I think the next revision will move the design to full SMD on the main board.
Electrically the board is a ground-referenced flyback built around an LM5156H controller and a Coilcraft DA2032-AL transformer. It converts a 5-12V input into an adjustable rail centered at 170V. The main board controls a default-off enable circuitMeaning the HV output stays disabled if it is somehow powered without a connection to the main board and monitors the LM5156H's power good output.
Main Board
Finally, for circuit boards, the main board holds the ESP32, USB Power Delivery chip and associated parts, along with 3.3VThe 3.3V converter is in fact currently a buck/boost for reasons we'll get into later in the series, but this was a relatively expensive and egregious over-design on my part. and 5V buck converters. The ESP32 manages USB Power Delivery through the CYPD3176 controller over HPI.
Case
The case was the very last thing I worked on. I would call the design "utilitarian minimalist". It's a box. I did spend a lot of time looking at pictures of other nixie clocks, and of desk/table clocks from back when those were a thingI consistently typed "60s table clock", "70s desk clock", etc. into the search bar, but it was obvious from the results that Kagi image search does not have any real concept of time., and what little actual design there is in the case was aimed at evoking a sense of the style of the time when these tubes were in common useIt occurs to me as I write this that I never typed "Soviet table clock" into the search bar, which is probably a way better search term....
Mechanically the printed enclosure consists of a face frame that holds the face board and upper and lower body sections, each of which mounts one of the two remaining boards. Acrylic panels cover the face and the HV board, which is mounted underslung from the top body panel. This keeps both boards visible without exposing a high voltage touch hazard.
Firmware & Software
The firmware uses the Xtensa Rust toolchain and Embassy's async executor through Espressif's esp-rtos.
The code is split into modules based on purpose. So far the firmware has performed flawlessly, but I
have not added unit tests or done extensive performance analysis. The ESP32-S3 I put on the first
iteration has a second core, but it is not currently used.
In addition to the firmware, I have added a basic command and telemetry protocol on the firmware side and a simple egui desktop application that can read the device logs and issue software resets. This has been invaluable while debugging the 12V power supply issues, where I can't simultaneously plug the device into a computer USB port to connect probe-rs.
I didn't start working on the firmware until after I had already ordered the boards. As a consequence, I realized very shortly after it was too late to cancel the order that there is a RISC-V version of the ESP32ESP32-C series, likely ESP32-C6 for this design that would have gotten me first tier Rust toolchain support. That version of the ESP32 has fewer GPIOs and only a single core, but so far I don't think I need the second core and an I2C linked buffer to expand the IOs is trivial. I'll likely make this switch in rev D.
Closeout
Summary of the Current State
Initial bringup went a lot better than I expected considering the high voltage converter design was a little out of my depth and I relied on Claude more than I would have liked. Ultimately, aside from the 12V issue that still needs more debugging, the only real problems were a couple of parts that had incorrect values in DigiKey's parts catalog. Fortunately none of those parts ended up in the critical path.
I have a ton of competing ideas for the next revision, which is why I'm going to try to write up the current state in detail first before figuring out how those all fit together. I think I can reduce parts count on the main board a lot, but then I also want to expand the HV converter to make it more capable. TBD whether rev D ends up any cheaper than my first go-around.
Estimated Cost
The previous paragraph just made me realize that I haven't mentioned cost at all. I should probably go back and total it all upOr not... for my own sanity, but I'd estimate that cost at about $600 for 5 of each board, including assembly on the main board and parts to build out 2 of each. A big chunk of that is shipping and tariffs from a Chinese board house, but I got several quotes and no one in the US could even match the price despite no tariffs and shorter shipping. One US house quoted me as much per board as the entire order from China.
Rest of the Series
I plan to write several more notes in this series, focusing on individual boards and the firmware. I'll probably skip the case since at least the current iteration really doesn't have a ton of thought put into it.