Coding Projects
Python: Procedural History Generation Project (PHGP) - 2021

This was my first personal project in Python. I’ve always been fascinated by computer simulators like Dwarf Fortress and their ability to generate worlds and narratives through procedural generation. With this project, I aimed to achieve two main goals: the generation of unique characters and their interactions within a world space, leading to emergent "stories" (texts composed of gibberish words that could be translated into English). One of the most challenging aspects was terrain generation, which refreshes the world space and advances time by approximately one day per second. Characters interact, form families, and migrate across the map. If the simulation runs long enough with a sufficient starting population, small towns begin to emerge.
Python: Ryan's Insane Baseball Simulator (RIBS) - 2022

This was my second and more feature-complete Python project. As a longtime baseball fan, I wanted to build a simulator that could pit two fictional, randomly generated teams against each other in a scrimmage game. The simulator includes rudimentary but extensive ball-and-bat physics, projectile trajectories, and fielder coverage zones. It also builds on character generation work from my previous project, PHGP, with players having unique names, personalities, and custom stats. While the core systems are largely complete, I plan to revisit the project to overhaul the graphics and implement a “Season Mode,” which would generate multiple teams, simulate games concurrently, and track player statistics over time.
Python: BABEL V2 - 2023

This is one of my simpler Python programs, originally intended to rework functionality from the PHGP codebase. It features a lightweight user interface that generates fictional, alphabetic "languages" using the International Phonetic Alphabet (IPA). The program reads a .csv file containing phonetic transcriptions of English words and converts it into a Python dictionary. It then extracts a set of unique English phonemes and maps each one to a randomly generated replacement phoneme. The result is a basic find-and-replace tool that transforms input sentences into their phonetic equivalents in a newly generated language.
Python: Kiosk UI for Dining Hall Automation - 2024

Kiosk UI from the Student's perspective, after placing their order.

Kiosk UI from the worker's perspective, where the machine and UI is loaded with the menu and items.

Kiosk UI from the Student's perspective, after placing their order.
This project comprised the software component of my Senior Capstone, in which my team was tasked with designing an automated serving machine for the RPI dining hall, sponsored by Sodexo. My role focused on developing both the front end and back end of the ordering kiosk. Built using PyQt, the system included two user interfaces: one for dining staff to remotely upload the menu, and another touchscreen-friendly interface for customers to place orders. The customer UI was designed to be compatible with either custom hardware (see PCB Design section) or any touchscreen device. Once an order is placed, it is logged in a timestamped .csv file for stocking analytics and then sent to the serving machine for processing.
C/C++: "The Ultimate Battle" (Pinball Machine) - 2024

Backbox artwork of the Pinball Machine (created by Rhea Vurghese).

Playfield artwork of the Pinball Machine (created by Rhea Vurghese and Alexa Schuster).

Backbox side artwork of the Pinball Machine (created by Rhea Vurghese).

Backbox artwork of the Pinball Machine (created by Rhea Vurghese).
In addition to the custom PCBs and cabinet built for the pinball machine, multiple interconnected software systems were developed to control the hardware and gameplay. These include a coin door controller, a “master controller” that relays data to and from the playfield, an RGB LED driver, and a central program running on a Raspberry Pi. This central program is written in C (compiled with C++) and uses the SDL3 and LED Matrix libraries to drive the dot matrix display and handle audio mixing. It communicates via USB with the coin door, RGB LED driver, and master controller, all of which are programmed using Arduino. Together, these components provide the full functionality of the pinball machine.
Python: GGM Baseball Sabermetric - 2025

In my free time, I created a custom baseball metric to practice CSV parsing in Python. The goal was to quantify a batter’s "pure hitting" ability through a stat I called GGM (defined in the equation above). I wrote a script that parses data from two CSV files containing batting statistics for players from the 1800s to 2023, compiled by Sean Lahman. The program processes the data in a few seconds and outputs a ranked list of 9,393 players based on their GGM scores. For reference, the top player by this metric was John McGraw, while the lowest-ranked was Mike Thurman.
Hardware Projects
Analog Pressure Detection and Correction Circuit - 2022




This was my first circuit design project, completed as the final project for the class ECSE-2010: Electric Circuits. The objective was to design an analog circuit capable of monitoring ambient pressure (such as in an airplane or spacecraft cabin) and regulating a pressurized air canister to maintain cabin pressure during a depressurization event. The circuit reads an analog signal from an air pressure sensor, processes it using operational amplifiers to apply gain and set a threshold, and then uses a combination of op-amps and 555 timers to generate a PWM signal for controlling a solenoid valve. The images above show the LTSpice schematic, simulation waveforms, and the final implementation on a breadboard.
"The Ultimate Battle" (Pinball Machine) - 2024/2025

Full cabinet (without playfield glass).

Full cabinet (with playfield glass).

Disassembled Playfield, with artwork installed.

Full cabinet (without playfield glass).
The most intensive project I have ever undertaken, this electromechanical pinball machine was handcrafted as my Master's Project. I designed and built the cabinet, cutting and assembling the wood, painting, and wiring the electronics, which include seven custom PCBs. I also developed the programming for the boards, primarily in C (compiled into C++), with some Arduino integration. The artwork for the backbox, sides, and playfield was created by Rhea Vurghese, with assistance from Alexa Schuster. Additionally, Paul Nieves helped record the voices of Felicia Lai and Deon Rivers for the project. Selected images can be seen above, with more available on the "Gallery" page. The code is showcased in the "Software" section, and PCB designs are available below.
PCB Design Projects
Pinball Machine Motherboard Prototype (NUC980) - 2023

Prototype motherboard for the Pinball Machine (based on the NUC980). PCB Layout View.

Prototype motherboard for the Pinball Machine (based on the NUC980). 3D Layout View.

Prototype motherboard for the Pinball Machine (based on the NUC980). PCB Layout View.
This is the first iteration of the motherboard for the Pinball Machine, created as a prototype before full development began. The design is based on the NuMaker NUC980 SoC but was not pursued further due to my decision to use an authentic dot matrix display and the original plan to incorporate an additional LCD screen on the playfield (which the SoC did not support). I later switched to using a Raspberry Pi, which better aligned with my development goals, met my criteria, and reduced the estimated cost. Above are the layout and 3D view of the board, as seen in Altium Designer.
Kiosk Motherboard (Raspberry Pi Compute Module) - 2024

Kiosk board based around the Raspberry Pi Compute Module. Designed for Senior Capstone Project sponsored by Sodexo. PCB Layout View.

Kiosk board based around the Raspberry Pi Compute Module. Designed for Senior Capstone Project sponsored by Sodexo. PCB 3D View.

Schematic for the kiosk board based around the Raspberry Pi Compute Module. Designed for Senior Capstone Project sponsored by Sodexo.

Kiosk board based around the Raspberry Pi Compute Module. Designed for Senior Capstone Project sponsored by Sodexo. PCB Layout View.
This custom PCB was developed for my Senior Capstone Design Project, sponsored by Sodexo, to automate the serving process at an RPI dining hall. The board is built around the Raspberry Pi Compute Module with Wi-Fi support and is designed to fit into the base of the kiosk. It includes provisions for SD card storage, a 5V DC power jack, a USB port, and a ribbon cable for a touchscreen display. Above are the layout and 3D view of the board, as seen in Altium Designer.
Pinball Machine MCU "Base Board" (ATMEGA328p) - 2024

Microcontroller "Base Board" PCB Layout based around the ATMEGA328p MCU. This is used extensively as a modular board for the various other Pinball Machine boards.

Microcontroller "Base Board" PCB 3D view based around the ATMEGA328p MCU. This is used extensively as a modular board for the various other Pinball Machine boards.

Microcontroller "Base Board" PCB Layout based around the ATMEGA328p MCU. This is used extensively as a modular board for the various other Pinball Machine boards.
This board was initially created as a test to verify the functionality of the USB/UART interface and ensure that the ATMEGA328p could be programmed correctly. It features a vertical Molex connector to serve as a bridge for the Coin Door wiring assembly and other boards, by breaking out the GPIO pins on the MCU. Once the base board’s functionality was confirmed, it was repurposed as the USB interface and main MCU for subsequent boards, facilitating fast development and testing for the pinball machine. Above are the layout and 3D view of the board, as seen in Altium Designer.
Pinball Machine RGB LED Driver - 2024

PCB Layout view of the LED driver board used to program the outputs of 32 RGB LEDs used for the Pinball Machine.

PCB 3D view of the LED driver board used to program the outputs of 32 RGB LEDs used for the Pinball Machine.

PCB Layout view of the LED driver board used to program the outputs of 32 RGB LEDs used for the Pinball Machine.
This is the first revision of the RGB LED Driver, which interfaces with the Base Board (as described in the previous entry). It uses 12 8-bit shift registers daisy-chained together to control each individual LED (and its RGB elements) based on bytes received via USB. In addition to controlling 32 LEDs and their individual RGB elements, the device features global brightness control via a PWM signal fed into a PMOS transistor. Above are the layout and 3D view of the board, as seen in Altium Designer.
Pinball Machine RGB LED Board- 2024

PCB layout view of the RGB LED used for the Pinball Machine Playfield.

PCB 3D view of the RGB LED used for the Pinball Machine Playfield.

PCB layout view of the RGB LED used for the Pinball Machine Playfield.
This board contains the actual RGB LED, which connects to the RGB LED Driver (as described in the previous entry) via a 5-pin Molex wiring harness. The harness carries the 5V PWM signal, GND, and data lines for Red, Green, and Blue. The LED is common anode and features three resistors in series with the cathodes, which are controlled by NMOS transistors. The gates of these transistors are connected to the respective Red, Green, and Blue data lines from the RGB LED Driver. Above are the layout and 3D view of the board, as seen in Altium Designer.
Pinball Machine Master Controller - 2025

PCB layout view of the Master Controller, which reads all the various switches on the Pinball Machine playfield and causes solenoid activation.

PCB 3D view of the Master Controller, which reads all the various switches on the Pinball Machine playfield and causes solenoid activation.

PCB layout view of the Master Controller, which reads all the various switches on the Pinball Machine playfield and causes solenoid activation.
This board serves as the nervous system of the pinball machine, managing switch activations, solenoid responses, scoring, and game state tracking. Its core functionality relies on I2C communication, with the Base Board's MCU acting as the host interface and three identical MCUs serving as GPIO extensions, each responsible for a subsection of the playfield. While this approach is not the most efficient for handling a large number of GPIOs, it simplified schematic entry and layout, as the building blocks were already validated on the Base Board. Above are the layout and 3D view of the board, as seen in Altium Designer.
Pinball Machine MCU I2C GPIO Extender - 2025

PCB layout view of the GPIO extender board, used with the Master Controller to enable more inputs and outputs if necessary.

PCB 3D view of the GPIO extender board, used with the Master Controller to enable more inputs and outputs if necessary.

PCB layout view of the GPIO extender board, used with the Master Controller to enable more inputs and outputs if necessary.
This additional board can be connected to the Master Controller to provide extra GPIO pins while maintaining the same layout. It was designed to address a small oversight in the number of GPIO pins available on the Master Controller, which limited room for adding more switches or devices. This board allows for future expansion of playfield features if desired. Above are the layout and 3D view of the board, as seen in Altium Designer.
Pinball Machine Photodiode Detector - 2025

PCB layout view of the Photodiode Detector board.

PCB 3D view of the Photodiode Detector board.

Physical board, FR4 with plated with a single layer of copper.

PCB layout view of the Photodiode Detector board.
This additional board was created for the pinball machine to enable the MCUs on the Master Controller board to detect whether a photodiode is receiving light from a transmitter. It is used in various parts of the machine to detect the presence of the pinball. The board serves as both a power hub for the photodiodes and transmitters and an interface that allows the microcontroller to read light detection via a digital GPIO pin. The design is intentionally simple (single-layer), as it was a practice project for using the tabletop PCB CNC machine in the X-LAB at Rensselaer Polytechnic Institute. Above are the layout and 3D view of the board, as seen in Altium Designer, along with a picture of the fabricated PCB.