It is done! The final version of the hardware sits on my living room wall in a nice wooden frame. The software works, too! Apart from the fact that SoundCloud don’t give out new API keys to developers of apps everything works perfectly. It just means that I have to search for a new random API key myself and save it to my Arduino Programm running on the WeMos. Also I had to tweak the php script running on my webserver. Remember that the Arduino gets the actual number to display from this php script because it doesn’t have sufficient memory to calculate it on-board. So php does the “heavy lifting” for it. SoundCloud API has some wonderful quirks to work around. The list of tracks it returns for a given user has 50 entries max. If a user has more tracks, you must use a paginated variant of the API call. This way you get multiple answers. But: in the chunks of 50 tracks some of the tracks can occur in two different chunks. So you have to check if you encountered a given track ID before, and only if not save that track’s play_count.
Still there remains a discrepancy between the plays my script calculates and the plays shown in the official SoundCloud “Pulse” App. This is due in to some hidden (non-public but scheduled for release) tracks that have a few plays which are not returned by the API call.
After the breadboard version of the circuit was proven to be functional and the software I came up with was working I decided to use KiCAD to make useful schematics and design my own PCB that I can use in my Nixie Tube SoundCloud Play-Counter project. There is a really useful Tutorial in the help menu of KiCAD and on their website that got me started with this lovely open source program that runs on Windows, Mac and Linux and has no limitations on maximum board sizes etc. like a lot of the free versions of big paid software do. Since I am working on an Apple Macintosh I also shortly considered using Eagle, but since I didn’t want to buy the software that choice would have limited me to a half-size euro board. Altium Designer, PADS (PowerPCB), ORCAD and Allegro as well as CircuitMaker or CircuitStudio are all Windows-only options so I didn’t look at them.
You can download my KiCAD files and use them if you want.
Following some YouTube tutorials and more online documentation I generated the Gerber files that are necessary for ordering an actual manufactured PCB. After checking out some services like Osh Park, Seeed Studio and Elecrow I decided to try
and ordered there. I like the way they have the ordering process set up and it seems to me they’re really fast and also pretty cheap. I went ahead and placed an order of the minimum quantity of five boards.
After soldering all the parts to the board I went ahead and plugged everything in: the external 12V power supply, the Wemos D1 mini, the 160V power supply board and finally all seven nixies. It was a really cool moment switching on power for the first time! All works fine! No parts heat up, no shorts! The entire circuit uses 27.5 to 220.0mA, averaging to a mere 155mA over time says my Fluke 177.
One of my Arduino sketches was getting this total play count from the PHP script by calling it up and put the number into a variable. The other Arduino sketch can take any given number and send it to the shift registers so that the corresponding glyphs inside the Nixie tubes light up.
Marrying the two Arduino sketches that I got working was actually easier than I thought. To test the result I added a routine that makes the Nixies count from 0 to 9 in unison. This is also helpful to prevent what is called cathode poisoning. It occurs if one of a Nixie’s glyph stays lit for too long. That’s why I make the Nixies cycle through all their glyphs overtime the total play count changes.
So far I have only added one actual Nixie tube to my breadboard test setup. I have yet to solder all the connections to the rest of my Nixies.
Next I had to come up with some Arduino methods that would take a number and make a series of 0s and 1s out of it and then output those through the pins of my chip to the shift registers that are switching the Nixie digits on and off.
This is the Arduino sketch I made. Without a lot of help of my dear friend O. I wouldn’t have made it. If you want to have a look, you can download the sketch.
I then attached some LEDs instead of the first Nixie Tube so I could check the functionality without getting involved into that horrid 160V business just yet.
The first thing I did was go on eBay and buy twelve cheap Nixie IN-12A tubes. They don’t have the decimal point like the IN-12B but I don’t need it.
Then I watched Dave’s EEVBlog videos again quite a few times and I was able to screen capture his schematics for the electronic layout. The whole system relies on a Wemos D1 mini. This is a micro controller with built-in WiFi than can be programmed using the Arduino software on you computer. To actually switch on the Nixies which require 160V Dave found some really cheap shift registers called TPIC6B595 that can handle the high voltages.
Next I bought a high voltage power supply on eBay. It was a set containing a little PCB, all the components and a manual. I had some breadboards and jumper wires still lying around at home.
While I waited for all the goodie to arrive I fired up the Arduino software on my laptop and began programming the Wemos D1 mini. The sad thing was that I couldn’t find the code that Dave had written for his own project so I was stuck having to come up with my own code. I am NOT good at this so it took me quite a while to understand what I had to do. And I’m still not done yet. But I have made some really good progress.
My research involved getting to know the SoundCloud API and learning how to get to the numbers that I need through it. Since there’s no way to ask for the total play count of a given user, I had to parse an answer that is in the JSON format that holds a huge list of all of a user’s tracks including descriptions, keywords and everything else. I had to find the number of plays for every single track in this huge mess of characters. To do this with Arduino, I installed the famous Arduino JSON library and looked at the example code they provide with it. It took me a while to figure out that the SRAM memory of the tiny micro controller I use is way too small to hold that entire string. So I failed searching or parsing the string for the entries I needed.
My brother came up with an idea for a solution to this: write a PHP script for your WordPress server, then you give it the SoundCloud user ID and your own secret API ID key handle and it returns the total number of plays! Yay! For a big server computer the parsing of a huge JSON string is no problem. And the tiny answer that it gives can be parsed by the Arduino running on the Wemos D1 mini.
As soon as my shift registers arrived, I started to place them on my breadboards. I don’t want to connect the hight voltage yet and that’s why my next step will be using LEDs instead of all the segments of the tubes to try out if my software works. Since my software is not finished yet, I stopped putting stuff together on the breadboard so I can focus on getting the numbers out of the computer chip into the real world!
I want to build a counter display that tells me how many people have hit PLAY on my track on SoundCloud in total in all times so far. The idea came to me when I watched Dave’s EEVblog Youtube video of his Nixie Tube subscriber display he made out of his YouTube silver award. Of course for SoundCloud the project has to be tweaked a little.
As I progress I will make new entries in this series of blog posts about the nixie counter display. Click here for a