Future Mechanical Engineer · Eastchester, NY
RC Systems · Instrumentation · Hardware Design · Data Analysis
I've always been drawn to understanding how systems work at a fundamental level — not just reading about them, but taking them apart, measuring them, and figuring out how to make them better.
My interest in engineering goes beyond any single application. I'm genuinely fascinated by the tradeoffs that define every well-built system: weight vs. structural rigidity, efficiency vs. output, cost vs. performance. These principles aren't abstract to me — I apply the same reasoning to every system I build and test.
I approach every project with an engineering loop: establish a baseline, isolate a variable, measure the result, and iterate. This is the same methodology used by product designers, hardware engineers, and research teams. I just happen to apply it with an RC car platform and a spreadsheet — for now.
I'm pursuing mechanical engineering with the goal of designing and building high-performance mechanical systems. Everything I do — the coursework, the projects, the data collection — is pointing toward that same target.
From a simple speed sensor to a performance testing platform





Average RPM and average speed below are each computed from 5 independent 30-second trials.
Heads up — this data isn't perfectly clean. It takes the wheel a second to actually spin up to top speed, so early readings in each trial pull the average down a bit. There's also some wobble in the numbers from the car's own wheel plus a little give in the desk itself. Not perfect, but it's a real baseline to build on.
Photography is how I look at the world analytically and creatively at the same time. I'm drawn to natural geometry, mechanical form, and the texture of cities. Click any album to explore.












I'm interested in connecting with engineers, admissions teams, and anyone who shares a passion for mechanical systems, engineering, and hands-on problem solving.
The code behind each version of the dyno, as it gets built
Reads pulses off the Hall sensor, converts them to RPM and MPH, and tracks a full run automatically — an LED lights up while a run is active and switches over once the wheel stops for 2 seconds, so I get max/average stats per run without touching a laptop.
const int hallPin = 2;
const int runningLed = 8;
const int finishedLed = 13;
volatile long pulseCount = 0;
unsigned long lastCalcTime = 0;
unsigned long lastPulseTime = 0;
unsigned long sessionStart = 0;
const int interval = 500; // RPM update rate
const int timeout = 2000; // stop if no pulses for 2 sec
const float wheelDiameterInches = 2.67717; // CHANGE THIS
bool sessionActive = false;
long rpmSum = 0;
int rpmSamples = 0;
int maxRPM = 0;
float maxMPH = 0;
void setup() {
pinMode(hallPin, INPUT);
pinMode(runningLed, OUTPUT);
pinMode(finishedLed, OUTPUT);
digitalWrite(runningLed, LOW);
digitalWrite(finishedLed, HIGH);
Serial.begin(9600);
Serial.println("RC RPM System Ready");
attachInterrupt(digitalPinToInterrupt(hallPin), countPulse, FALLING);
}
void loop() {
unsigned long now = millis();
// ---- RPM CALC ----
if (now - lastCalcTime >= interval) {
lastCalcTime = now;
long pulses = pulseCount;
pulseCount = 0;
int rpm = pulses * 120; // 500ms window scaling
if (rpm > 0) {
lastPulseTime = now;
// START SESSION
if (!sessionActive) {
sessionActive = true;
digitalWrite(runningLed, HIGH);
digitalWrite(finishedLed, LOW);
sessionStart = now;
rpmSum = 0;
rpmSamples = 0;
maxRPM = 0;
maxMPH = 0;
Serial.println("=== RUN STARTED ===");
}
rpmSum += rpm;
rpmSamples++;
if (rpm > maxRPM) {
maxRPM = rpm;
}
float circumference = wheelDiameterInches * 3.14159;
float mph = rpm * circumference * 60.0 / 63360.0;
if (mph > maxMPH) {
maxMPH = mph;
}
Serial.print("RPM: ");
Serial.print(rpm);
Serial.print(" | MPH: ");
Serial.println(mph, 2);
}
}
// ---- END SESSION ----
if (sessionActive && (now - lastPulseTime > timeout)) {
sessionActive = false;
digitalWrite(runningLed, LOW);
digitalWrite(finishedLed, HIGH);
float avgRPM = (rpmSamples > 0) ? (float)rpmSum / rpmSamples : 0;
float circumference = wheelDiameterInches * 3.14159;
float avgMPH = avgRPM * circumference * 60.0 / 63360.0;
float runTime = (now - sessionStart) / 1000.0;
Serial.println();
Serial.println("===== RUN COMPLETE =====");
Serial.print("Run Time (s): ");
Serial.println(runTime, 2);
Serial.print("Average RPM: ");
Serial.println(avgRPM, 1);
Serial.print("Max RPM: ");
Serial.println(maxRPM);
Serial.print("Average MPH: ");
Serial.println(avgMPH, 2);
Serial.print("Max MPH: ");
Serial.println(maxMPH, 2);
Serial.println("========================");
Serial.println();
}
}
// ---- INTERRUPT ----
void countPulse() {
pulseCount++;
}
V2's code will go here once the roller system is built.