HabSat is my near-space balloon project. I've launched several missions, all of them successful.
I designed the electronics, firmware, enclosures, and ground software all from scratch. The flight module has a single, custom board with a camera, GPS, 6DOF IMU, sensors for temperature, pressure, and relative humidity, an SD card for logging, and a long-range radio to transmit photos and all telemetry back to my ground station up to 40km away. The main chip is an ATmega1284p.
Hover over images for brief descriptions.
The custom flight computer board. It's a small 2-layer board that can be assembled by hand with SMD techniques.
The HabSat is small and weighs about 300g. This is the HabSat in its enclosure immediately after a successful landing in eastern Washington State.
The ground station tablet logs received photos and telemetry, issues commands, displays flight map progress, and other functions that are useful in the field.
The ground station is lightweight and portable. I use a Microsoft Surface tablet running my custom C# .NET command and control application. The ground station can receive photos, telemetry, and health status; issue commands; track both itself and the HabSat via GPS; and, check future launch weather conditions up to two weeks out.
This was one of the many photos taken from my first HabSat mission.
Another near-space photo. There's virtually no atmosphere this high up, which is why you can clearly see the black of space.
My record altitude is 27km. That's high enough to see the curvature of the Earth. It also makes a great phone wallpaper.
Near-space is harsh. Temperatures can go down to -60°C, with 1% atmosphere. The HabSat is designed to withstand these challenging conditions, including landing safely afterwards.
HabSat is an ongoing project, with future launches and expanded capabilities planned. It's a great example of low-cost science: comparable telemetry/radio systems alone cost more than an entire HabSat module.
To learn more, check out my YouTube Shorts on taking photos from near-space and the HabSat hardware.
The µBee Drone
The µBee is a 3D-printed micro-drone I designed and built from scratch. Optional mounts allow integration with a motion capture system. I used these drones to conduct my PhD research. Since then, I've made a number of improvements.
A brief test of a small µBee fleet, detected and controlled by custom software I wrote that also doubles as a simulator to test out behaviours beforehand. A Vicon motion capture system surrounding the lab space captures the 9.5mm markers attached to the drones. For size and weight considerations, only 3 reflective markers are used per drone. The software controlling the µBees detects and tracks these markers over time to associate the detections with drone IDs.
Myself, test-flying an early version of the µBee that I designed and built for my PhD thesis.
The upgraded µBee and remote control. This new version has a PCB trace antenna. It's also lighter, more stable, and stronger.
I have several YouTube Shorts about the µBee on the project overall, frame and assembly details, flight controller summary, and the improved remote control.
The Pocket Bot
The Pocket Bot is a 3D-printed, 1.5-inch robot with line following sensors, infrared transmitter and receiver, USB-C charging, an array of RGB LEDs, and an expansion header for additional peripherals. The main controller is the ATmega328p, like the µBee drones.
Line following is a classic toy robotics control problem. A Pocket Bot has three line sensors on its underside to sense distance or reflectivity.
The Pocket Bot's line sensors can also be used to avoid falling off of surfaces.
Multiple Pocket Bots can communicate with a server or each other over infrared. Or just dance.
The chassis is printed with PLA, and the wheels are printed with TPU for extra grip on nearly any surface. A Pocket Bot can be assembled from parts in just a few minutes. With a full charge, a Pocket Bot can run continuously for over 3 hours.
Feel free to check out the YouTube Shorts I've made on the overall design and capabilities.
3D-Printed Custom Smart Watch
My 3D-printed smart watch is entirely custom, with my own hardware, firmware, and drivers specifically optimized for this project. It's not just for show: I use it as my daily driver because it's so useful. I use it to control my smart home, televisions, some of my robots, cat toys, and other functions.
It has a digital compass, temperature sensor, 9DOF IMU, flashlight, and a special feature to tell me when I'm dreaming. It's also USB-C rechargeable, and (somewhat) resistant to water. The main chip is an AT90USB64. I regularly improve existing features or add new ones.
A few settings menu items from an early iteration of the watch.
I turn off a TV at BestBuy using a double tap gesture.
I reversed-engineered the infrared signals used by a cat toy, and use my watch to control it. I steer with my wrist angle.
Check out the YouTube Short about my watch.
8-Bit Game Console
Motivated by my interest in game development, computer graphics, and electronics hardware, I built my own 3D-printed 8-bit gaming console. It's powered by an ATmega1284p on a custom board, and supports 8-bit audio and vector graphics. It supports up to 4 wired controllers, although the game I wrote for it only uses one.
Warship Hidalgo is the example game that I wrote for this console, and it was inspired by the space combat in the popular sci-fi series, The Expanse. My game includes a brief tutorial, and escalating, endless level-based play. Players and high scores are stored in EEPROM, so they persist even if the console is turned off.
A brief snippet of typical gameplay. The entire project took 3 months to build.
When out of lives, the player enters their name into the high score table.
A wired game controller that goes with my custom 8-bit console.
I've published YouTube Shorts covering the graphics, audio, and assembly.
Miscellaneous
Here is a brief selection of some of my older projects. They include an electric scooter, RC vehicles, robotic global vision systems, and more.
Myself, riding my DIY electric scooter. Its top speed is approximately 16km/h and it has a modest maximum range of about 7km when powered with a 3.3Ah 6s LiPo.
Field tests of a custom, rugged-terrain remote-controlled car on the SFU campus.
A digital clock I built using 3D-printed parts, a real-time clock module, 3 LED matrices, and a custom PCB. It can be controlled by my smart watch. The power cable is hidden inside the wall.
An interactive LED coaster that lights up when something is underneath it. The circuitry is all analog, with no microcontrollers.
An earlier robotics project. A custom vision system captures the 3pi robots and instructs them to maintain various formations as robots are added or removed.
Another earlier robotics project, built from a kit: a remote-controlled quadrupedal robot.
Hypergate
Hypergate is a 3D arcade-style space combat game. To date, it is my most ambitious project. It includes a two-hour scripted compaign, instant action mode (single player and LAN), 3 flyable ships, 30 equipment upgrades, and many other features and mechanics. I wrote it with my custom game engine in C++ with raw OpenGL/GLSL. I created all of the textures, backdrops, 3D models, and audio effects. Voice acting was generously provided by friends and family. I used royalty-free music. Hypergate runs on both Windows and Linux. It took five years to develop. It is available on Steam, where it has received positive reviews.
Hypergate's focus is high-speed space combat, rather than grinding for resources or configuring spacecraft systems.
The player destroys an enemy fighter during combat.
The player flies into a gorgeous backdrop.
Miscellaneous
My game development and graphics projects are too numerous to list, so here is a brief selection of some of my favourites. They are written in C or C++, with graphics rendered using OpenGL, Vulkan, or in some cases, in pure software. One of these projects is available on Steam. Another was a submission to Ludum Dare 45. Both received positive reviews.
Asteroids Millennium is a modern take on an old classic, available on Steam for Windows and Linux. Check out the Steam Store page here.
Secrets of Mars is a game about an autonomous rover that begins to question reality, and its own programming, when things on Mars begin to become strange.
A game that I developed in 48 hours for my submission to the 45th Ludum Dare "Compo" competition using my open-source C media library SIGIL. It ranked 360th out of 2613!
No-Fly-Zone is a short survival first-person shooter (FPS) where you defend yourself against rogue drones. It's a simple open-source example of how to create an FPS with OpenGL.
A render from a raytracing engine I wrote. It features bounding volumes and other techniques for faster rendering, although not in real-time. The object in the center is a mirror.
I modelled the Star Trek: Voyager holodeck and put it into my experimental engine to learn about the differences in lighting between movies and video games, motion blur, and other techniques.
A 3D platformer I wrote to learn how to make a game engine in Vulkan. It supports animated models, diffuse and specular irradiance, shadow maps, multisampling, and more.
Another GIF of the platformer, showing the main menu and most of the world.
Sample output from a fast raytracer which simulates photons that can be influenced by gravity. Source code is available here.
I've developed stock market backtesters, automated options trading software (which actually perform live trading), near-space mission command and control software, drone swarm simulation and control software, particle effect editors, a media library for C, mission scripters for my custom game engines, tools for my PhD research, and many more.
Fornax is a general-purpose particle editor I use a lot. The GUI was made in C# .NET, with the preview functionality built in C++ with OpenGL.
The scripting and mission layout tool I built to script missions in Hypergate. It was made in C# .NET.
Some output from a suite of back-testing tools I wrote to develop and test options trading strategies on the S&P 500. These tools were built using C++ and Python.
My automated trading software, written in C# .NET, running on a wall-mounted tablet.
A screenshot of the drone simulation and control software I wrote that powered my drone experiments for my PhD research.
A small visualization project showing ping results for IPV4 addresses a.b.c.d, for all a, b, c, and a random d.
Last updated Jan. 15, 2025.