I'm from North Carolina, and recently graduated from Duke University with a double major in electrical & computer engineering and computer science, as well as a minor in mathematics. In my free time, I build robots, design keyboards, and experiment with household automation. Here are some of the projects I've worked on, accompanied by a brief description and skills that I've picked up along the way.
Robotic Basketball Hoop
Robotic Basketball Hoop [in progress]
Jan. 2021-Ongoing
Skills: Fusion 360, Arduino, C
In a team of two I developed the hardware and software to create a moving basketball backboard.
Mechanically, a pair of stepper motors is each connected via belt to a arm which can pivot inwards and outwards. A third, stationary mounting point is located below the steppers, and provides the third point needed to precisely define the plane of the backboard. The entire assembly is 3D printed, with bearings press fit into place to enable joints to rotate smoothly.
To improve response speed, each arm has significant portions of material removed from its cross-section. Finite element analysis is carried out to identify structural weakpoints and reinforce as needed until the final arm meets strength and weight criteria.
Control consists of an wireless Arduino joystick transmitting to a receiving Arduino mounted to the backboard. Communication is done via SPI. The Arduino translates the potentiometer input into a tilt angle which it then uses to define the input to a pair of DM542T motor drivers.
A planned extension will use a Kinect for Xbox One sensor along with NVidia Jetson Nano to carry out real time image processing to detect a thrown basketball and adjust the hoop automatically without user input
I helped found and served as president of the Duke Combat Robotics club. As a club our goal is to expand engineering within the broader Duke community by presenting robotics in a fun way--combat.
In addition to leading workshops, I designed and built three 12-pound hobbyweight class robots, as well as several 3-pound beetleweight class robots.
The robots are built from a combination of waterjet and machined parts. This introduces constraints on part geometry that must be adhered to, such as radius, milling depths, and tolerances. Finite element analysis is used to analyze parts and maximize strength to weight ratio. This is especially important for combat robotics since spinning blades and other moving objects are capable of producing immense forces on impact.
Inside the robot, a reciever uses the input signal to drive an electronic speed controller connected to each motor. PID control is used to control the speed of a spinning blade when it makes contact, protecting the motor from burning itself out.
Mechanical Keyboard Design
Mechanical Keyboard Design
2018-Ongoing
Skills: Fusion 360, rendering
As a hobby, I design mechanical keyboards for my own use and as commissions for other people. Each one is fully custom and unique, with different features and assembly methods.
Mechanical keyboards are entirely machined from solid blocks of 6061 aluminum, which poses unique design considerations. Some considerations of design for manufacturing involve optimizing tool paths, reducing blind holes, and minimizing wall heights etc. Tolerances are extremely tight, and each keyboard often requires designing a unique PCB for it.
Each keyboard consists of several parts, at minimum which include a top piece, bottom piece, and internal switch plate. Other parts are often used, such as weights or dampeners to alter the sound profile, or gaskets and other o-rings to alter the stiffness of typing.
As a hobby I design custom PCBs and write firmware to accompany mechanical keyboards, as well as for other applications as necessary.
Designing a circuit involves reading through datasheets to properly connect and route pins. Special care is taken when routing high frequency pins such as the USB data pins, to match trace lengths and impedances. Other examples include capacitor placement for proper bypassing.
In addition making the PCB, I also develop the firmware that runs on them. A microcontroller I use often for mechanical keyboard designs is the Atmega32u4, which provides adequate I/O and memory capacity. The firmware is written in C and must handle low level memory management, and communication.
The PCB pictured below features two microcontrollers communicating over I2C, as well as master/slave detection.
As a final project I developed a version of the game of Pong that runs on a Nexys A7 FPGA. The game supports multiple players, multiple balls, ball physics, and other personal addons.
The version of pong is built upon a five stage pipelined processor I designed. The processor implements full bypassing, stalling, branch recovery, and a multi-cycle multiplier. I made optimizations to the circuit in order to maintain strict timing requirements throughout each stage of the pipeline. The five stages include fetch, decode, execute, memory access, and write-back.
Embedded Systems Programming
Embedded Systems Programming
2018-2019
Skills: Arduino, Python, PID control, sensing
I built an Arduino powered robot which was capable of following a dynamic path, self-identifying targets with an RGB sensor, and wirelessly communicating with other robots to coordinate tasks.
Raspberry Pi
I used a Raspberry Pi in conjunction with a Kinect 360 sensor to indicate vehicle distance inside of a garage. The Raspberry Pi reads a depth point cloud provided by the Kinect, and identifies a moving object and its distance from the camera. It uses this depth to color a strip of addressabgle RGB lights.
Nasher Museum Painting Tracker
Nasher Museum Painting Tracker
Aug. 2018-Jan. 2019
Skills: App development, Android Studio
As part of a team of 4 I worked on developing an Android app to help staff record and track painting locations within the Nasher Museum of Art. The app featured a QR code scanner which would be used to scan a QR code on a painting and painting storage location. It would keep track of these item location associations, and when prompted provide a csv file to be imported into the museum database.
Mathematical Modeling, HiMCM
Mathematical Modeling, HiMCM
2017
Skills: Modeling, mathematical analysis, data wrangling, NetLogo
Placed top 1% out of 938 submissions to 2017 HiMCM Mathematical Modeling Contest
As part of a team of 4 I used GIS and other data to produce a map of the optimal potential ski slope locations on Wasatch Peaks Ranch. Potential ski slopes were identified by looking at gradients, natural features, solar aspects, and snow basins. Additionally we considered congestion and travel times to minimize wait time between slopes, and between lifts. I used NetLogo to model lift wait times given counts of lifts, slopes, and skiiers. We created a final ski park with 200 km of trail, distributed over green, blue, and black difficulties.