Mechanical Engineering Portfolio — 2026

ALEX DiFranco

Future Mechanical Engineer  ·  Eastchester, NY
RC Systems  ·  Instrumentation  ·  Hardware Design  ·  Data Analysis

// student_data.sys
SchoolEastchester HS, NY
GPA3.9 UW / ~96 W
SAT1350
MajorMech. Engineering
ClassSenior — 2027
Portfolio● ACTIVE
// 01
About Me & Background
// 02
RC Dynamometer Project
// 03
Build Code
// 04
Photography
// 05
Contact
Alex DiFranco · Engineering Portfolio · 2026
Contact GitHub
01 — About Me & Background

How I Think
About Engineering

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.

Alex DiFranco
Alex DiFranco
// profile.json
SchoolEastchester HS, NY
MajorMechanical Engineering
GPA3.9 UW / ~96 Weighted
InterestsEngineering, CAD, Robotics
MethodBuild → Test → Iterate
ClassSenior — 2027
⚙️
Systems Thinking
I want to understand how components interact — not just what they do, but why the system behaves the way it does under real-world constraints.
📊
Data Over Instinct
Every modification I make is tracked and measured. I don't trust assumptions when a dataset can give me the actual answer.
🔁
Purposeful Iteration
V2 should be better than V1 for a specific, documented reason. Iteration without a hypothesis isn't engineering — it's guessing.
Outside the Workshop
Activities & Experience
RC Dynamometer — Self-Directed
Designing and building a low-cost RC dynamometer to measure vehicle performance directly — currently on V1: a Hall-sensor-based rig with a desk-clip stand, with data logging and RC-car tuning planned next.
Coding & Software Projects
Building programming skills through AP Computer Science with growing interest in applying code to engineering data pipelines and automation.
Student Government
Active member contributing to school initiatives and developing collaborative leadership skills alongside technical work.
Photography
Automotive, industrial, and architectural photography — analytical eye expressed through visual storytelling.
Tennis — Eastchester HS
Competitive player. Tennis demands the same iterative mindset as engineering: analyze patterns, adjust strategy, and execute under pressure.
Academic Coursework
Completed AP Exams
AP Psychology — 5AP Computer Science A — 4AP Language — 4APUSH — 4
Current Courses — Senior Year
AP Physics CAP CalculusAP LiteratureAP BusinessAP MacroeconomicsAP ItalianRobotics
Academic Profile
3.9 GPA (UW)~96 WeightedSAT: 1350Class of 2027
About — Alex DiFrancoNext: Project →
02 — Featured Project

Building an RC
Dynamometer

From a simple speed sensor to a performance testing platform

// Self-Directed Engineering Project — 2024–2026
Problem: I wanted to optimize RC vehicle performance, but had no reliable way to actually measure whether a change made a difference.

Solution: I designed and built a low-cost RC dynamometer — a custom testing instrument that measures vehicle performance directly, rather than guessing from feel. The RC car is the test subject; the dyno is the actual engineering deliverable. It touches mechanical design (frame, mounting, vibration control), electrical sensing (Hall-effect sensor + magnet), and physics (RPM, speed, rotational motion) — with data logging and RC-car tuning as the next phases.

Dyno V1 — Full Rig
Dyno V1 — Full Rig
Full Rig No Car
Full Rig No Car
Magnet on Wheel
Magnet on Wheel
Desk-Clip Stand
Desk-Clip Stand
Circuit Setup
Circuit Setup
Current Build — V1
01
// Frame & Mount
Desk-Clip Stand
A simple stand that clips right into my desk, keeping the rig fixed while the car runs. It's not perfect — the desk itself has a little give — but it's enough to get a real reading.
02
// Sensing System
Hall Sensor + Magnet
A magnet is taped to the wheel and a Hall-effect sensor is propped nearby to catch the signal on every rotation — the core electrical system that makes any measurement possible.
03
// Measurement Method
RPM → Speed
The car's own motor spins the wheel — I'm not spinning it by hand. What I am doing by hand is holding the chassis down, since it vibrates like crazy on the stand at full throttle. Sensor pulses get converted into RPM and top speed. Basic, but it works, and it's the foundation Phase 2 builds on.
How It Works
01
Wheel Spins
Car's motor drives the wheel — I hold the chassis steady by hand
02
Magnet Passes Sensor
Magnet taped to the wheel sweeps by once per rotation
03
Electrical Pulse
Hall-effect sensor fires a pulse each time the magnet passes
04
Pulses Counted
Controller counts pulses over a time window
05
RPM Calculated
Pulse count converts into RPM and wheel speed
Results — V1 Testing

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.

Lessons From Building V1
📐
Vibration Control First
A rig that shakes gives noisy readings before you've measured anything. Solving the mounting problem first — with a simple desk-clip stand — turned out to matter more than the sensor itself.
🧲
A Clean Signal Beats a Complex One
One magnet and one Hall sensor is about as simple as a sensing system gets, but it gives a clean, reliable pulse per rotation — enough to calculate RPM without needing anything more complicated yet.
🔁
Prove the Concept Before Adding Complexity
It would've been easy to jump straight to rollers, logging, and graphs. Building the simplest possible version first confirmed the core idea — measuring RPM and speed — actually works.
// What's Next
Stay tuned for the next versions.

V2 (roller system) and V3 (RC tuning) are still on the roadmap — I just haven't built them yet. Once they're up and running, this page gets updated.

Project — RC DynamometerNext: Build Code →
04 — Photography

Through the
Lens

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.

NATURE
// 50 photos
Open Album →
CARS
// 50 photos
Open Album →
CITIES
// 30 photos
Open Album →
Photography — Alex DiFrancoNext: Contact →
04 — Photography

Album

Album — Alex DiFrancoNext: Contact →
05 — Contact

Let's Build
Something.

I'm interested in connecting with engineers, admissions teams, and anyone who shares a passion for mechanical systems, engineering, and hands-on problem solving.

Alex DiFranco · Engineering Portfolio · 2026← Back to Home
03 — Build Code

Dyno Code

The code behind each version of the dyno, as it gets built

V1 — Hall Sensor RPM & Speed Reader

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.

// dyno_v1.ino
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.

Build Code — Alex DiFrancoNext: Photography →