
Below are several of my favorite personal projects along with some of their engineering challenges.
Game Console PCB: A custom PCB that can run 2-player Pong, Simon, and reaction competitions. It also had every pin broken out for other uses.
Key engineering challenges: Onboard memory was a major problem. The ATTIN85 has 8kb of flash. When I was breadboarding, I used a standard OLED library. This library alone almost takes up all of the ATTINY85's available storage. I searched for a long time to find a bare-bones driver that would meet requirements. The memory issue kept recurring and forced me to learn how to be very efficient with the code I was writing.
Plotter V2: A fast and rigid pen plotter redesigned around linear rails for improved portability, acceleration, and accuracy.
Key engineering challenges: One of the Axis had a unaccounted for stretch, I was forced to create a python preprocessor for the Gcode to distort in the necessary way. Canelevered linear rail had deflection issues; I majorly reinforced the axis connection points and decided that a secondary stationary rail was not required.
POV Wand: A WiFi connected persistence of vision wand that fetches and displays the current temperature using addressable LEDs.
Key engineering challenges: When the wand is waved backward, the reverse image must be displayed in order to overlap the forward swing. Implementing this reverse was not hard, but the timing delay between when the swing was detected and when to start the sequence was not the same for both directions. Machining the housing was very hard for me, it took me around five hours to create the tool paths, and I had to make many compromises on the design.
Plotter V1: A custom CNC pen plotter designed from scratch, including the mechanics, motor control, G-code generation, and kinematics.
Key engineering challenges: The pen was supported from the end in an earlier version, this caused major stability issues, wobble, and inaccuracy. The solution was to hold the pen lower and move that whole axis as low as possible for stability. The control structure had to pass through no less than four pieces of software to get the gcode running on the machine. These were Inkscape, LightBurn, vsc and fluidNC.
Micro Camera: A tiny battery-powered ESP32 camera that captures photos to a microSD card with a controllable flash.
Key engineering challenges: I was unable to read the SD card on boot, so I did not know how many pictures were on it or what they were called. To remedy this, I named each photo with a random name from zero to 10,000. This basically guaranteed that no photos would be overwritten. This only works since the volume of photos I'm taking is relatively very low. A byproduct of this is that the photos are not in any kind or order when opened on a laptop. I could not simply increment a counter since there is no way to determine how many times the ESP32 has booted up before. Looking back on it, I could have saved data about the photo number in EEPROM.
Tiny Arcade: A miniature 8x8 LED matrix arcade used to explore object oriented programming, graphics, and collision detection.
Key engineering challenges: The 8x8 grid of LED's were not aranged in a serpentine pattern like other matricies Ive worked with. This required a new positional function to get from an XY location to an LED index value. I experiumented with how small I could make the wall fo the housing, I got down to about 1.5mm before it felt too flimsy to be functional.
TicTacToe Bot: An unbeatable Tic Tac Toe program that uses the minimax algorithm to determine the optimal move.
Key engineering challenges: Minimax was very computationally intensive, doing roughly half a million recursive calls to determine the first move. Since it always picks a corner and since all the corners are the same, I simply preprogrammed the first move to cut down on the compute necessary. Switching orientation from the standard form required that every line, circle, and text box was rotated, and the x and y were not intuitive. If I were doing it all again, I would create a function to perform this transformation automatically.
Wordle Bot: A small machine that solves the daily Wordle in an average of three to four guesses.
Key engineering challenges: Wiring, space was extremely limited in the housing, which made routing very hard. Capacitive switches were very unreliable; I implemented a version of debouncing which had to average reading over a 500ms interval and compared it to other intervals. Sourcing a list of available words was not publicly available, but someone on GitHub has a list of about 2300 words which has never failed thus far.
Weather Display: A compact electronic display designed to present useful weather information at a glance.
Key engineering challenges: OI had a bug early on which fetched the weather data around 10000 times per hour. This is over the free limit, and since I didn't notice for a few hours, I was billed around $30 in API fees. This was fixed with a robust waiting condition along with monitoring serial outputs whenever it makes an HTTP request.
Micro RC Car: A miniature ESP NOW-controlled RC car designed to fit into the smallest practical form factor.
Key engineering challenges: The wheels did not spin at the same rates even though they were identical motors; this required that I quantify the speed difference and offset it in the code. For the second, smaller rc car, the motors were not geared down; the speed differential was far greater. It was uncontrollable; the second project failed.
Valentine's Gift: A homemade mechanical split flap display inspired by a clock my girlfriend liked.
Key engineering challenges: The arm which led the picture flap down was made adjustable since it had to be perfect for the top picture to sit vertically before it flaps down. Later I realized that I didn't even need the arm at all. With gravity alone, the photos would rotate on their own in a perfectly acceptable way.
Cat Doorbell: A wireless ESP32 and ESP8266 doorbell that alerts me when one of my cats is waiting outside.
Key engineering challenges: Tuning the sensitivity of the PIR detector took significant time. There was a fine line between detecting leaves blowing in the distance and not seeing a cat directly moving in front of the sensor. I also struggled to implement a low battery warning and a special tone sequence to the annunciator.
RC X-mas Tree: A remotely controlled electronic Christmas tree built as a fun holiday project.
Key engineering challenges: I started with buttons for the X-mas tree (not shown in video); they were effective but required the user to physically be there to control it. I fixed this by creating a web access point to control all of the features. Now, any device with an internet connection and a web browser could control these lights.
Linear Clock: An unconventional clock that displays time through the position of a carriage moving along a linear rail.
Key engineering challenges: The stepper motors were very noisy; I bought my way out of this problem with TMC2209 stepper drivers. These new drivers were as silent as drivers can be and improved the experience all around.
3D Printer Pen Plotter: An unconventional clock that displays time through the position of a carriage moving along a linear rail.
Key engineering challenges: Getting positive pressure on the pen was very important. I had to make sure that a spring was always pushing the pen down weather it was drawing or not. Moving the spring in a standard pen from the front to the back proved to be the solution. This ensured the pen was always fully extended while providing tolerance when the pen was in contact with the page.
String Shooter: A string launching machine built around a pair of high-speed brushless motors.
Key engineering challenges: The arming sequence on the ESC that I bought was not documented. I tried to read the signals coming from a drone controller, but I ended up having a potentiometer and figuring out what the arming sequence was through trial and error. Then I hardcoded that into the program to arm on boot.
Lots of LEDs: A large programmable LED display used to experiment with clocks, animations, graphics, and even video playback.
Key engineering challenges: Combining four 16x was non-trivial. Each matrix had a serpentine pattern, arranged where the output of the top left fed the bottom left, then the top right, then the bottom right. I wrote a function which took in an XY location and outputted an index value. For example, LED 18,5 might be LED index 533.
Omni Wheel Car: An omnidirectional robot car developed over several months to explore unconventional robotic movement.
Key engineering challenges: Kinematics for the wheels was challenging. I wastched a lot of youtube videos about
Coding Projects: A collection of small programming experiments including a pool geometry simulator, birthday paradox simulation, and precise age calculator.
Key engineering challenges: The birthday paradox quickly becomes too computationally intensive for most laptops. It draws a line from the new node to every other node every time a node is added. This demands exponential compute from the processor.
Servo Sisyphus: A small robotic arm that repeatedly carries a ball bearing through a three-dimensional Hilbert curve.
Key engineering challenges: The servo motors were too fast for the Hilbert curve I had to implement; I had to implement for loops to gradually make the movements such that the robot would arrive at the bottom at the same time the ball did.
Robot Sand Artist: A two-motor drawing machine that creates geometric patterns in sand by varying the relative motor speeds.
Key engineering challenges: Typically, a slip ring would be needed if you have electronic components on both sides of a continuously rotating data bridge. To avoid using one, I housed all of the electronics on the first linkage and flipped the motor upside down. This was a bad design choice because I rested all the weight axially on the motor shaft, and I also relied on it for radial stability. Neither the first nor the second linke were ridged enough for the desired task. The backlash in the gears was enormous, but that didn't matter because the motors were only being spun in one direction.
Mechanical Illusion: This mechanism has a T shaped gearbox with two counter rotating sets of spiraling blades which create this interesting illusion when they spin.
Key engineering challenges: OThe bevel gearbox kept trying to push the gears into the sides of the box. The proper fix for this problem would have been axial thrust bearings to prevent wear and
chapter1 isocline null cline verify explicit implicit and eulers
Servo Clock: A minimalist clock prototype that maps the twelve hours of a clock onto 180 degrees of servo movement.
Gear Clock: A massive three-foot wooden gear clock that combines a servo and real-time clock module to mechanically display time.
Cat Treat Dispenser: A simple push-button-operated servo mechanism that automatically dispenses treats for my cat.
I <3 U: A small servo and LED powered mechanical gift activated by a switch.
Pi Hole: A Raspberry Pi based network filter that blocks advertisements, trackers, and malicious traffic.
Binary LED Counter: A ten LED Arduino counter that visually represents numbers in binary at an adjustable counting speed.
Modified Microwave Transformer: An experimental transformer rewound to convert high voltage low current power into extremely low voltage high current power.
The Reaction Contraption: An Arduino powered reaction time game built entirely from recycled components with several difficulty modes.
Lichtenberg Wood Burning: A high voltage experiment that created branching electrical patterns in wood.
Voltage Multiplier: A high voltage experiment combining a booster, flyback transformer, and Marx generator to produce electrical arcs.
Jacob's Ladder: A high voltage demonstration that creates a continuously rising electrical arc between two conductors.
Some of My Rent Free Thoughts
Engineering is the closest thing to magic we have.


