About Me
I recently graduated the University of Michigan - Ann Arbor with a Masters degree in Embedded Systems. I previously received my bachelors in Computer Engineering in 2023. Throughout my years at Michigan, I have worked on many fascinating projects, labs, and taken lots of awesome classes. Between building my own PCBs, writing multithreaded operating system code, developing level C drivers, and working on many robotics projects, I’ve learned a lot at Michigan. I would love to share some of my experiences and projects below. Enjoy!
Work Experience
Graduate Student Instructor
After having taken this class myself, I was happy to help teach it. Students learn and build on embedded system design principles such as device drivers, PCB design, kernel modules, and more. There is a semester-long project as well as exams. As a GSI, I was tasked with teaching lab sections that cover some of these topics in practice. I also hosted office hours, project consultation, and administrative tasks.
Qualcomm | Engineering Intern (Summer 2023)
I returned to Qualcomm for a second summer to continue my development on a crash dump parsing tool. This tool was developed as a COM-standard C++ dynamically linked library for use internally as well as externally by Qualcomm OEMs. I added unit tests using the Catch2 testing framework to verify my software. I wrote a demo program to showcase the API as well as replace a previously existing tool. Once my work passed all the test cases and built successfully in Qualcomm’s build environment, it was added to the main code repository.
During this summer, I continued learning from beyond just my project. I shadowed engineers working on hardware bugs and was involved in brainstorming sessions. I became oriented with my team’s workflow of feature/change requests, as well as JIRA issue tracking.
Qualcomm | Engineering Intern (Summer 2022)
Qualcomm Engineers use a parsing tool for retrieving information from memory crash dump binary files. I updated this tool by adding data driven elements such as XML based chipset specifications that were read at runtime. This greatly increased engineering operations by removing the need to recompile the tool source code for new chips. Later in the internship, I prototyped a rewrite of the tool from C# to C++ and from a standalone executable to a dynamically linked library. A library format allowed for future integration with the existing windows debugger or any other executable. I created a test executable compiled against this library to showcase functionality and usage and presented my work to my team. I also won 3rd place in an internal 5G themed hackathon for a wildfire detection and monitoring project. See our presentation here.
Projects
Rangefinder
Inspired by laser rangefinder tools found in many video games, my project fulfills a similar role. The Rangefinder is a wrist mounted device that measures the distance (up to 12 meters) from it to whatever it points to. This distance is then displayed on a user-facing screen in meters. A red laser diode inline with the rangefinder gives the user an easy to see indication of where the distance is being sampled from. Powered by a common 9V battery, the custom PCB designed in KiCad provides 3.3V and 5V to the STM32 processor, LiDAR, and oled screen. All of the electronics are housed in a 3D printed housing. See a YouTube demo here!
An upcoming iteration will feature freeRTOS, a USB-C rechargeable battery, and faster display rates.
Haptic Hands
Haptic Hands is a pair of haptic gloves which are able to track the user’s finger movements, map them to the corresponding fingers in Virtual Reality, and stop the user’s fingers in the real world upon interaction with virtual objects. They are also able to provide vibrational feedback to every fingertip. Each glove is fully wireless (connects to a computer via Bluetooth), and able to be worn without obstruction. The gloves were designed to work with a Meta Quest 2 VR system but could be adapted to other platforms. The system is built around an ARM Cortex-M4 STM32 microcontroller on a custom PCB (Designed in Altium) and software stack.
The mechanical design was inspired by Lucas VRTech on YouTube. Lucas was able to prove that the spring-loaded spool mechanism works for tracking and allows for force-feedback via servos.
Micromouse Maze Solving Robot
Our Micromouse is a small robot that is able to solve a 4×4 maze autonomously. The robot itself has a Zumo robot chassis with a STM32F411RET6 Nucleo board on it to control all the onboard operations. It controls the state machine, inputs, and outputs of the robot. Other devices on the robot include an XBEE module, a custom shield, a servo sensor, and an ultrasonic sound sensor. To complement the robot, there was a controller module. The controller module allows the user to control the robot wirelessly and manually. It also allows the user to monitor the status of the robot (its current state at any given moment, including its status while solving the maze). The controller includes another Nucleo board with a STM32F411RET6 chip, an XBEE module, a custom keypad, and an LCD graphic display. Find more info as well as a link to the github repo here.
Efficient Drone Delivery Pathing Algorithm
Finding the most efficient delivery paths is a logistical problem that is still being worked on today. This project focused on finding solutions to the “travelling salesperson problem” wherein which a salesperson is trying to find the shortest route that goes through all the cities he wants to go to. In fact, optimal solutions take a very long time to find (Time complexity O(n!)) and so heuristics sometimes offer a much greater approach if speed is prioritized. My algorithm implements the arbitrary-insertion heuristic as well as an optimal method which prunes using minimum spanning trees (Branch and Bound). C++, Python, and Bash scripts were used to develop the algorithm and visualize it for various amounts of nodes.
Custom Arduino-Based Space Invaders Console
This project resulted in a custom Arduino powered space invaders game. A Master processor was made out of an Arduino MEGA which ran calculations and sent commands to the smaller Arduino UNO’s via UART (Universal Asynchronous Receiver/Transmitter). Two 16×32 LED boards were used and powered by Arduino Uno’s which processed the graphics in a such a way to effectively double the screen size. Other electrical components included potentiometers for movement, buttons for actions, a piezo buzzer for sound, and breadboard with jumper wires for wiring. Featuring singleplayer, multiplayer, pvp, powerups, and easter eggs, our version of the game had 25 custom levels followed by randomly generated waves. Our team ended up winning the Grand Prize at the EECS-183 2019 showcase.
Created as part of a project for a programming class by the Arduinerds: Robert, Sam, Ammar, and Myself.
N8 Nintendo Controller
The N8 is a very simple game controller with 8 buttons and uses an 8-bit microprocessor. It communicates over a serial communication protocol with a game box. The controller uses an 8-bit parallel-load shift register to keep information on button inputs. The controller is then clocked by the game box to sample the current inputs. This project developed the game box part of the setup using Verilog on an FPGA and also programmed a specific “easter egg” button sequence using a state machine to produce a light show.
Additional Projects
6502 Breadboard Computer
Inspired by Ben Eater on YouTube, I built a breadboard computer based on the 6502 8-bit processor. It features 32kB of SRAM, an EEPROM, peripheral interface, 1 MHz clock, and LCD screen. It is programmed entirely in assembly. I plan to add UART hardware to it in the near future.
Coil Gun
Homemade prototype of a multistage coil gun. The concept design used an Arduino Microcontroller to turn power on and off to a series of coils in order to accelerate a projectile. The timed microcontroller signals were used to gate mosfets which allowed several amps of current to run through the coils. LED’s were wired in parallel to the mosfet control wires in order to provide a visual cue of when the stages were being powered. Future designs will use larger sets of coils, better wiring and wire management, and a better testing plan.
Foundry
Homemade, charcoal powered foundry v2.0. Originally inspired by TheKingofRandom on Youtube. I iteratively upgraded it to hold a bigger crucible and be able to process more metal. I use it to melt, refine, and cast aluminum and bronze from scrap into cool trinkets. I’ve also upgraded from basic sand casting to the lost wax process using a mixture of micro crystalline and paraffin wax (carved into desirable shapes) and then embedded inside plaster of paris. Version 3.0, which will be propane powered, is currently in the final planning stage but will be done by this summer (2020)!
Update: V3.0 is done! See picture below.
Garden
During the summer of 2019, right after my high school graduation, I organized the building of a vegetable garden in my high school courtyard. I began planning during the winter and finally got approval, funding, and materials sorted out to get some friends and teachers together to help me create this community project. All the vegetable produce produced was donated to the local food pantry. Thank you to everyone who helped!
Research
Photos
FPGA with N8 Controller
Testing Motor Controller
Reclaimed Silver from Chemistry Class
I2C Multiplexing Accelerometers
Bronze “M”
FSK – Decoder Circuit
Testing out Drive Systems
Arduino Space Invaders