← BACK TO ENGINEERING LAB
// Electronics & Microcontrollers

Microcontroller Experiments

● COMPLETE

The Challenge & Process

Learning how to read physical signals (like distance, light, or temperature) and translate them into mechanical motion or digital data streams. I built and programmed multiple standalone Arduino circuits: an ultrasonic distance-sensing alert, a servo-guided robotic claw, and an LCD temperature logger. Each project involved writing clean, non-blocking C++ code in the Arduino IDE.

The Iteration Story: Steering Wheel V1 vs. V2

V1: I built a basic steering wheel using a potentiometer and the Unojoy firmware to map rotation and custom buttons to controller axes. While functional, it was limited to 180° rotation and had very few buttons for input.

V2 & Shifter: Recognizing the limitations of my first prototype, I undertook a ground-up redesign. The V2 wheel features a >270° rotation potentiometer, custom switch joycon wiring for button inputs, a multi-gear shifter assembly, and a much cleaner wire harness for the pedal set.

[!TIP] Engineering Debug Box: Analog Signal Jitter While testing V2, the steering axis would rapidly twitch in-game even when the wheel was held perfectly still. I diagnosed this as analog line noise from the cheap potentiometer. Instead of buying expensive hardware, I fixed it in software by writing a C++ moving-average filter to smooth the signal array before sending it to the computer!

Circuitry & Code: I wrote non-blocking C++ code in the Arduino IDE to handle analog-to-digital signal conversion and HID game controller emulation. Here is the signal-smoothing loop I wrote:

// Moving Average Filter to eliminate potentiometer jitter
const int numReadings = 10;
int readings[numReadings];
int readIndex = 0;
long total = 0;

int getSmoothSteering() {
  total = total - readings[readIndex];
  readings[readIndex] = analogRead(A0);
  total = total + readings[readIndex];
  readIndex = (readIndex + 1) % numReadings;
  return total / numReadings;
}

This project is a stellar example of iterative design—taking a working prototype, analyzing its flaws, and rebuilding it better from scratch.

Skills Demonstrated

ArduinoC++SensorsElectronics integrationAnalog I/OPCB layout

Gallery