Hardware and Software Projects
A somewhat accurate history of projects both finished and in progress
Motion Detection & Object Tracking
C++ code that detects motion using a rolling average of frames, developed for a FLIR Boson but can be used on any live or recorded video feed. First deployed in an outdoor closet to catch a cat food thief that turned out to be raccoons 🦝🦝
OpenCV
C++
Camera Pan Tilt Gimbal
Simple PD controller for a 2-axis 3D printed camera gimbal. The first implementation was realized with an ESP32 and Python serial interface. This was abandonded in favor of an old Prusa control board and the Python interface reworked to send GCode commands.
Python
ESP32
Hardware
📡 Passive Radar
Passive radar building on the KrakenSDR team’s first and only release of their passive radar software. The fork improves upon their original release by allowing the user to record data for later playback and analysis, as well as provides more thorough documentation for setup and deployment. Minor quality of life improvements are included as well. In progress is a Kalman filter to track moving targets as they are detected.
Python
SDR
Hardware
🧭 Embedded GPS Logger
Simple GPS logger comprised of an ESP32, BE-220 GPS receiver, and FRAM for storage. The ESP32 uses deep sleep to save on power, waking to log its location at a prescribed rate. Initally built to track where an outdoor cat goes at night, but not yet deployed.
ESP32
Hardware
HomeBot 9000
Tool written to aid in searching for a house to buy. The user enters an address as well as other parameters and the tool reports back with the closest grocery stores and the travel time to get there. Both a native Python version and a Windows executable 🤮 (by request) are available. HomeBot leverages the OSMNX and OpenStreetMaps packages to find stores and calculate travel time.
Python
Windows
ESP32 Thermal Imager
Simple thermal camera using an ESP32, MLX90640 sensor, and LCD touch screen. This was my first foray into PCB design as an attempt to build a small form factor thermal camera to carry while hiking. It needs a second revision because while everything powers up, the signal to the display is corrupted and the image is missing. A breadboard version of the same hardware functions perfectly fine, so there must be a bug in the PCB somewhere.
ESP32
Hardware
KiCAD
PCB
YoloDB
Simple ‘database’ (we need a unicode air quote emoji) that stores image names and their associated YoloV8 annotations. The motivation for this was a locally-hosted version of Google and Apple’s photo storage services that would allow me to search for images based on their content.
Python
YOLOv8
Deep Learning
🧿 CreepyCam 🧿
Animatronic eyeball that follows people by tracking their face. The eyeball is controlled with an Arduino Nano and an Nvidia Jetson Nano does the heavy lifting running OpenCV face detection. Two different nodes running on the Jetson communicate via ZMQ, and the Arudino is controlled via Python and the PyFirmata library.
Python
Arduino
Hardware
OpenCV
PyTorch
Dew The Math
Set of tools to train Faster R-CNN to recognize Mountain Dew Bottles. In 2021 Mountain Dew held a contest to count instances of their bottles during a Superbowl commercial. Manually counting them would be nearly impossible, so I let a computer do it. Faster R-CNN was trained on a custom synthetic dataset to identify mountain dew bottles of all shapes/sizes/colors in a sequence of frames.
Python
PyTorch
Deep Learning
OpenCV
Video Wavelets
Artistic tool written by accident while investigating ways to extract unique features in a video stream for a deep learning model. PyWavelets is used to decompose images into their frequency components, and the coefficients are manipulated to create a new image. The tool can be used to create a video from a series of images or to apply the wavelet transform to a video.
Python
OpenCV
PyWavelets
FFMPEG For Dummies (It’s Me, I’m the dummy)
Python helper to wrap system calls to FFMPEG. I can never remember which knobs to turn in FFMPEG because they’re all use case-dependent. This wrapper lets me use human-readable args to pass into FFMPEG and eases the pain of creating a timelapse, resampling a video, or encoding for mobile devices.
Python
FFMPEG
Acoustic Levitation Simulator
Python and C++ implementation of DOI: 10.1109/TUFFC.2011.1995 written for a senior lab experiment in NCSU’s Physics Department. The simulator calculates the acoustic pressure field in a standing wave and allows the user to tune parameters and simulate their effects on the strength of the field. A physical experiement was built to validate the simulation. Results showed that the simulation was accurate to within measurement errors of the physical version.
Python
C++
Simulation