
PCB Fingerboard
A sensor-packed, WiFi-connected skateboard-shaped PCB that detects tricks in real time.
⌗ overview
A fingerboard is normally just a piece of shaped plastic. I turned mine into a full embedded system: a custom PCB, reading motion, rotation, distance, touch, and color, streaming that data over WiFi, and triggering haptic feedback the instant a trick is recognized.
I designed and soldered the PCB, 3D printed the chassis, sourced the components, wrote the firmware, and built the wireless pipeline that connects the board to a trick-classification desktop application.

⌗ System architecture


⌗ On-board Components
IMU – BMI270: 6-axis accelerometer/gyroscope, the primary sensor for capturing trick motion.
Magnetic rotary sensor – AS5600: tracks rotation, paired with a 3D-printed truck/axle assembly so the board can sense wheel spinning to infer distance travelled.
Color sensor – VEML3328: sensing the floor color and paired with capacitive touch sensing to select player (by simply placing it on a specific color paper)
IR proximity sensor – VCNL4040: give the board environmental awareness — surface/contact detection to complement the motion data.
Haptic driver – DRV2605L: driving a vibration motor for haptic feedback.
Capacitive touch pads: sense finger contact directly through the board's copper fill zones, calibrated against a sampled baseline at startup.
ESP8266 WiFi module: streams sensor telemetry out and receives classification results back.
SPI serial flash: onboard storage.
Status LED for at-a-glance state feedback.
⌗ Power System
Power is handled by a self-contained LiPo circuit:
A single-cell 3.7V LiPo charged over USB through an MCP73831 charge management IC, with charging-status LED.
Power ORing via Schottky diodes between USB VBUS and battery so the board can run seamlessly whether it's plugged in or on battery.
A TLV73333 LDO steps the ORed 5V/3.7V rail down to 3.3V for the MCU and sensors.


⌗ Sensing
Capacitive touch: at boot, each touch pads is sampled repeatedly to establish a baseline; every subsequent reading is baseline-subtracted so touch detection stays accurate regardless of the board's resting capacitance.
Color detection: raw RGB values are normalized by total intensity, then classified against threshold ratios to identify surface color. It's only evaluated when the touch pads confirm the board isn't currently being touched, to avoid false reads from a finger blocking the sensor or during a trick.
A motion score (accel_magnitude + 0.01 × gyro_magnitude) is computed on the receiving end to detect when the board is actually moving enough to be mid-trick.
Once triggered, a 150-sample window at 100 Hz (1.5 seconds) is captured around the motion event and fed to a random forest classifier.
⌗ Haptic Feedback
The board listens for classification results coming back over WiFi and parses out the trick label, then fires a corresponding haptic pattern through the DRV2605L driver:
1 pulse → Ollie
2 pulses → Shuvit
3 pulses → Kickflip


⌗ Team Selection
The color detection feature is used for player representation so that you and friends can compete, and the system automatically logs the team. Simply play it on different color paper and the tricks will be logged for the corresponding team.
⌗ CAD Model

