Category Archives: Programming

Nixie Tube Clock

Design files for this project can be found here (board + firmware), here (3D model).

Ever since I started dabbling in electronics, I’ve wanted to build myself a Nixie tube clock completely from scratch. Building one isn’t easy though given the various barriers to entry: the high cost of Nixie tubes ($10-$50 each), high voltages for driving the tubes (~170V+), designing the PCB, the desire for an nice enclosure that isn’t 3D printed or made out of laser cut acrylic, etc. All together, it meant that I didn’t have the time, knowledge, or resources for this project until now.

In order to increase the probability that this project reaches completion, the feature list was kept as low as possible while still aiming for a working clock that I can build upon in future iterations. As such, the Nixie tubes themselves must be easy to source, which rules out expensive and/or rare tubes that are difficult to come by. The goal of this project is to create a basic clock, so only four digits are needed along with a digit separator. The power supply must be efficient, and should be powered off of USB-C if possible. Being a clock, RTC functionality along with the ability to keep time even when disconnected from power will naturally be required. Finally, the enclosure must be well designed, heavy, and preferably machined out of stainless steel, copper, or brass.

Continue reading Nixie Tube Clock

PIC Based Ultrasound PWM Generator

The code base for this project can be found here

Here’s a fairly simple yet somewhat interesting project that I’ve been working on for the last few days. The idea is to make a simple, configurable ultrasound PWM generator that could be used to drive an electrostatic transducer at low ultrasound frequencies (20 kHz – 200 kHz). To keep parts to a minimum, I used nothing but a PIC12F1840 with a 20 MHz crystal oscillator and a single button for the trigger.

Continue reading PIC Based Ultrasound PWM Generator

Real-Time Pathing Risk Prediction

The code base for this project can be found here and here

For the final project of my Bayesian Robotics class, the only requirement was to come up with a practical implementation of some of the concepts that were taught in the class. As such, my partner and I had an idea to implement real-time risk mapping and tracking for autonomous robots using only a depth sensor similar to the one found on the Microsoft Kinect. Both static and moving objects would be detected, with the static objects having a fixed region of high risk surrounding the object that the robot will want to avoid. For moving objects, the movement of the object itself is tracked and predicted. Once the velocity and direction of the object is found, we can predict where the moving object is likely to be in the near future. This likelihood region maps directly to the areas where we would like the robot to avoid. To achieve this, we used the Asus Xtion Pro sensor along with OpenNI and OpenCV for data acquisition and processing. Qt was chosen as the cross-platform framework for the front-end GUI.

Continue reading Real-Time Pathing Risk Prediction

NeoPixel Clock

The latest code base for this project can be found here

Here’s a quick weekend project that I did a week or so back. I decided to put together a standalone wall clock using Adafruit’s 60 NeoPixel ring, a ChronoDot real-time clock (RTC), TSL2561 light sensor, and a PIC12F1840 to tie everything together. The hardware was pretty straightforward, but the interesting part about this project was really with the one-wire protocol used to control the NeoPixels.

Continue reading NeoPixel Clock

RGB LED Cube Improvements

The original post for the LED cube can be found here

While the LED cube itself is pretty much finished, I recently had a chance to add a few new features and improvements to both the code and hardware. The main hardware improvement so far is a cube-to-Cerebot adapter PCB that replaces the interconnecting cable between the processor board and cube PCB. On the software side, I implemented a custom Ethernet driver that allows a user to read and process raw Ethernet packets. Using this driver, I added a new API that allows any external computer capable of writing raw Ethernet packets to control the cube. I also wrote the corresponding Python API that runs on any Linux machine with root.

Continue reading RGB LED Cube Improvements