Hardware and Software Projects

A somewhat accurate history of projects both finished and in progress

Motion Detection & Object Tracking

  • Finished

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

  • In Progress

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

  • Deployed, Always Improving

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

  • Finished, Not Deployed

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

  • Working, In Use, Always Improving

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

  • On Hold

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

  • Finished

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 🧿

  • Finished

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

  • Finished

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

  • Finished

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)

  • Finished

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

  • Finished

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