To invent, you need a good imagination and a pile of junk. ― Thomas A. Edison
It is said that great projects start with a good idea.
This particular project started the other way around; not with an idea, but with hardware and my usually strong tinkering-urge.
Check out the demo video if you’re too lazy to read the article:
During my free-time, I stumbled upon some really nice and easy to use nixie tube modules. For those among you who don’t know what nixie tubes are, here’s a short explanation directly taken from Wikipedia:
A Nixie tube, or cold cathode display, is an electronic device for displaying numerals or other information using glow discharge. The glass tube contains a wire-mesh anode and multiple cathodes, shaped like numerals or other symbols. Applying power to one cathode surrounds it with an orange glow discharge. The tube is filled with a gas at low pressure, usually mostly neon and often a little mercury or argon, in a Penning mixture.
Needless to say I’m quite a fan of these „old-school retro number displaying devices“…
What particularly struck me in terms of the mentioned modules was the built-in high-voltage converter which allowed to run the tubes on 5V DC power (in contrast to the normally necessary 170-400V) as well as the easy-to-use control library.
Apart from them I’ve also acquired an Arduino Yùn mini some time ago – it’s basically a micro controller with built-in WiFi support through the embedded OpenWrt-Yùn Linux chip.
What came next was my inclination to build something among the IoT line of things. So I started to think about the possibilities…
The InfoDome is an IoT project using an Arduino Yùn to fetch and display remote information as well as temperature and RTC data through four QS30-1 nixie tubes.
The goal was to design a lightweight control system to operate the Dome sensors and peripherals. As multiple operations should be done in parallel and independent from each other (e.g. read hand sensor, fade ambient lights), blocking of the execution cycle should be avoided at any cost. The SMLib library helps to achieve this by turning the whole system into state machines which are able to execute periodically without blocking each other. With this library, a different approach for a typical Arduino project was taken to keep the code flexible and fast.
State machines handle data input and output. SMLib allows or enforces a layered system where one machine controls the execution cycle of other machines. Each machine serves different purposes with different execution times.
- Master – Executes all other state machines and handles the booting process
- Display – Displays values on the nixie tubes based on the current mode
- Ambient – Controls the ambient LEDs based on the mode
- Detect – Detects and debounces hand movements
- Data – Downloads data via WiFi from Temboo
- Cycler – If turned on, cycles to a new mode after a specific interval until turned off
The online data is aggregated using the „Choreo Editor“ Twyla from the Arduino built-in IoT Stack Temboo. I use the Temboo service in this project because it requires no additional software in order to work – this is a good choice as the Arduino Yún mini doesn’t come with a SD card reader, so we can’t easily extend its very limited storage.
The editor takes some time getting used to, but is over all quite easily understandable. Using it I’ve created a custom „choreo“ or task which does these sequential tasks in order:
- Fetch open merged requests from git server
- Fetch open tickets from Atlassian Jira API
- Fetch unread email from Google API
- Fetch current local time for RTC adjustments
The great thing about the editor is that choreos are directly testable :).
A run of this combined choreo returns:
currentTime = 18:07
totalEmailCount = 45
totalJiraTickets = 39
totalMergeRequests = 1
This data can be fetched and parsed by the Arduino Temboo library.
The biggest obstacle in this project by far is the extremely limited program storage. With only 28,672 bytes the options are limited and minimal sized code is key. Imagine what could be done with even more space!
As the temperature sensor is placed inside the Dome, it reads the inner temperature of it which is always a little over the current room temperature. We could compensate this but it’s a nice way of surveying the Dome itself.
I would have liked to do even more, but unfortunately my hands are tied.
The very limited program space of the Yùn Mini is currently the hard limit. I feel that I’ve done what I could to tickle the maximum of functionality out of the board – I’m occupying 99% of the available program space. As the Yùn Mini doesn’t come with a SD card extension, shifting the code to the linux distribution is out of question for me at this time.
As always there are still some things left to be done … But I’m quite happy how this project turned out.
You can technically fetch and display any data you’d like to as long as it’s accessible via (authenticated) APIs. Temboo also has a free plan with enough requests to test the choreos.
If you’re an experienced Python programmer, there might be an option to shift the bulk of the code to the linux distribution and turn the Arduino into peripheral just displaying information.
Check the Arduino Yùn Tutorials for more information.
A few of the missing features I would have loved to implement:
- Standby functionality: There should be a way to set the Dome into standby mode, turn off the tubes and lights over night.
- More animations for the ambient lights
- Adding a buzzer
- Sending temperature data to a backend system
- Measuring ambient noise level
The source code itself as well as more in-depth information about the hard- and software can be found on this github page.
In the end…
It was my second private project using nixie tubes – and it won’t be my last!
A few closing (and not entirely serious) statistics:
- … never created detailed concepts apart from a few rough sketches
- … broken one nixie tube due to incorrect handling
- … destroyed three old and probably broken disk drives to get to the nice and shiny discs
- … completed the project in about 4 months time, working on it on weekends and in the evening
- … invested about 200 hours of actual on-project work
- … consumed about 50 cups of coffee in this period