Skip to the content
2 layers128.3 × 129.5 mmECE445L RSLK V2, the printed circuit board in 3D

Inspired by the game Just Dance, a DIY Embedded System to classify user gestures and simulate 2-player gameplay

Size
128.3 × 129.5 mm
Copper layers
2
Thickness
1.6 mm
Parts
71
Nets
68
Pads
209
Tracks, vias
421, 54
Pours
1
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
10 Oct 2026
Updated
10 Oct 2026

Overview

ECE445L RSLK V2 is an open-source printed circuit board by andyMath7745, from the andyMath7745/JustDance-TinyML-Embedded repository on GitHub. It is a 2-layer board of 128.3 × 129.5 mm with 71 parts on 68 nets, routed with 421 tracks and 54 vias.

It is built around the GP2Y0A41SK0F and 500SSP1S2M2QEA. Its parts include 14 connectors, 9 capacitors, 8 resistors, 4 ICs and 1 diode.

Main components

2

README

README.md

TinyML Embedded Gesture Classifier

I built this project as a real-time embedded gesture-recognition system with a custom PCB using TM4C123 microcontrollers, LSM6DSOX IMUs, ESP8266 wireless communication, and fixed-point TinyML inference.

Custom PCB and handheld controller modules used in the embedded gesture classification system

The system captures motion from handheld controller modules, segments raw IMU data into meaningful gesture windows, extracts engineered features, runs lightweight classifiers directly on-device, and streams results to a central hub and host display. The full pipeline runs on embedded hardware rather than relying on a PC for inference.


Overview

My goal with this project was to design a complete embedded system capable of classifying human motion under tight hardware constraints.

Each controller:

  • samples a 6-axis IMU in real time
  • performs filtering and calibration
  • segments motion into gesture windows
  • extracts a compact feature vector
  • classifies gestures using rule-based logic and TinyML models

A central hub coordinates timing, aggregates controller outputs over ESP8266, and forwards results to a PC over UART for visualization.


Key Features

  • Real-time gesture classification on TM4C123 microcontrollers
  • LSM6DSOX accelerometer/gyroscope integration over I2C
  • Deterministic scheduling using a free-running hardware timer
  • Fixed 5-second calibration stage for bias stabilization
  • Tunable motion segmentation engine
  • 32-feature embedded feature extraction pipeline
  • Fixed-point TinyML inference (no floating point at runtime)
  • Hybrid detection: neural networks + rule-based scoring
  • ESP8266 wireless communication between modules
  • UART protocol for structured output (SEG and DETECT)
  • EEPROM-backed configuration persistence
  • Multi-module embedded architecture (controllers + hub + host)

System Architecture

text
Controller Modules (TM4C + IMU)
    ↓
Sensor processing + segmentation
    ↓
Feature extraction (32 features)
    ↓
TinyML / rule-based classification
    ↓
ESP8266 wireless messages
    ↓
Central Hub (TM4C)
    ↓
UART output
    ↓
Host PC (Python visualization/logging)

A key design decision I made was to keep all classification on the embedded controllers. The PC is only used for visualization and logging, not inference.


Repository Structure

text
sw/
  sw_Player1_Controller/   → Controller firmware
  sw_Player2_Controller/   → Second controller firmware
  sw_Audio/                → Central hub firmware
  sw_Display/              → Python host interface

hw/                        → KiCad hardware design files
Resources/                 → Datasheets and references

Main Entry Points

  • sw_Player1_Controller/src/Lab1.c
  • sw_Player2_Controller/sw/src/Lab1.c
  • sw_Audio/sw/src_latest/Lab5.c

Embedded Gesture Pipeline

Each controller runs a full embedded ML pipeline:

text
IMU read
→ axis remap
→ filtering
→ calibration
→ segmentation
→ feature extraction
→ classification
→ output

IMU Processing

I read accelerometer and gyroscope data over I2C and remap axes into a consistent real-world coordinate system:

text
IRL X = sensor Y  
IRL Y = sensor Z  
IRL Z = sensor X  

Calibration

At startup, I run a strict 5000 ms calibration phase using timer-based scheduling. This avoids drift and ensures stable baseline values for bias and gravity compensation.


Real-Time Scheduling

I use Timer0A as a free-running hardware timer and schedule all sampling relative to time instead of loop delays. This keeps behavior deterministic even with UART output or I2C latency.


Motion Segmentation

I designed a segmentation engine that detects meaningful motion using:

  • energy thresholds
  • quiet-window detection
  • min/max segment sizes
  • cooldown timing

Each gesture can override segmentation parameters, which makes the system flexible across very different motion types.


Feature Extraction

For each segment, I compute 32 engineered features describing motion shape and intensity.

Examples include:

  • duration and sample count
  • vertical displacement and total travel
  • cross-body movement
  • oscillation and slope changes
  • total acceleration and gyro energy
  • peak timing and normalized feature ratios
  • spin characteristics
  • energy per sample

Instead of feeding raw time-series data into a large model, I compress each gesture into a compact feature vector to stay within embedded constraints.


TinyML Inference

I implemented small neural networks directly in firmware using fixed-point math.

Typical structure:

text
16 inputs → 3 hidden (ReLU) → 1 output

All weights, biases, and normalization parameters are stored as scaled integers. This avoids floating-point overhead and keeps inference fast and deterministic.

Some gestures use ML models, while others use rule-based scoring depending on how well they can be defined analytically.


Output Protocol

The system outputs structured UART messages:

Feature Data

text
SEG,<MOVE>,<32 values>

Final Detection

text
DETECT,<MOVE>,<score>

I use SEG for debugging/training and DETECT as the final classification output.


Cumulative Scoring

Instead of classifying every segment independently, I accumulate scores across a gesture window and only output a final detection after enough evidence is collected.

This significantly reduces noise and false positives.


Central Hub

The hub is another TM4C system that:

  • synchronizes controller start timing
  • receives wireless data from controllers
  • forwards results over UART
  • manages timing-sensitive coordination

Host Interface

I wrote a Python interface using:

  • pyserial for communication
  • tkinter for UI
  • opencv / Pillow for visualization

This layer is purely for monitoring—the embedded system performs all classification.


Hardware

This system is built on:

  • TM4C123 microcontrollers
  • LSM6DSOX IMUs
  • ESP8266 modules
  • DAC/audio hardware (hub side)
  • custom KiCad-designed boards
  • custom designed and 3D-printed controller housing

All hardware files are included in the hw/ directory.


Why This Project Matters

This project combines:

  • real-time embedded systems
  • IMU signal processing
  • motion segmentation
  • feature engineering
  • TinyML on constrained hardware
  • wireless embedded communication

The most important aspect is that the entire ML pipeline runs on-device, making it a true embedded TinyML system rather than a PC-based demo.


Future Improvements

  • Modularize controller firmware
  • Formalize ML training/export pipeline
  • Add evaluation metrics (accuracy, confusion matrix)
  • Improve host visualization tools
  • Add hardware/system diagrams

Status

This is a working embedded system prototype with real-time gesture classification, multi-device coordination, and on-device ML inference. The core pipeline is fully implemented and functional on embedded hardware.

Parts

71
QtyValueFootprintReferences
21~RSLK2:MountingHole_4_40H1, H2, H3, H4, H10, H11, H12, H13, H14, H15, H16, H17, H18, H19, H20, H21 +5
810uFRSLK2:CAPPM3528X210NC1, C2, C3, C4, C5, C6, C7, C8
410kRSLK2:R_0603_1608MetricR1, R2, R3, R4
3GP2Y0A41SK0FRSLK2:SHDR3W50P0X200_1X3_650X240X440PJ11, J12, J13
20.1RSLK2:R_1206_3216MetricR5, R6
2LaunchPadRSLK2:LaunchPadJ2_J4, J3_J1
1+3.3VRSLK2:Testpoint_1x02_P2.54mmTP4
1+5VRSLK2:Testpoint_1x1TP12
1+5VRSLK2:Testpoint_1x02_P2.54mmTP1
1+7.2VRSLK2:Testpoint_1x02_P2.54mmTP2
10.1uFRSLK2:C_0603_1608MetricC9
11.5kRSLK2:R_0603_1608MetricR8
13.3VRSLK2:APT1608CGCKLED1
1500SSP1S2M2QEARSLK2:500SSP1S2M2QEAJ6
1750RSLK2:R_0603_1608MetricR7
1BAT4.8VRSLK2:Testpoint_1x1TP6
1BAT7.2VRSLK2:Testpoint_1x1TP5
1Bump0RSLK2:D2F-01L30-D3_5pinJ1
1Bump1RSLK2:D2F-01L30-D3_5pinJ2
1Bump2RSLK2:D2F-01L30-D3_5pinJ3
1Bump3RSLK2:D2F-01L30-D3_5pinJ4
1DRV8847PWPRRSLK2:SOP65P640X120-17NU1
1GNDRSLK2:Testpoint_1x02_P2.54mmTP3
1GNDRSLK2:Testpoint_1x1TP13
1LM2937IMP-3.3_NOPBRSLK2:SOT230P700X180-4NU3
1LM2937IMP-5.0_NOPBRSLK2:SOT230P700X180-4NU2
1LOGOLOGOG***
1LP3.3RSLK2:PinHeader_1x02_P2.54mm_VerticalJ8
1ML+RSLK2:Testpoint_1x1TP10
1ML-RSLK2:Testpoint_1x1TP9
1MR+RSLK2:Testpoint_1x1TP7
1MR-RSLK2:Testpoint_1x1TP8
1NFaultRSLK2:Testpoint_1x1TP11
1RSLK2RSLK2:RSLK_ChassisJ5
1SSD1306RSLK2:SSD1306U4
1TF-LunaRSLK2:JST-GH_1x06_1.25mmJ9
1XDS_VCC TP10RSLK2:PinHeader_1x02_P2.54mm_VerticalJ7

More from andyMath7745/JustDance-TinyML-Embedded

1
  • 2 layers115 × 94 mmECE445L Lab7, the printed circuit board in 3D

    ECE445L Lab7

    andyMath7745/JustDance-TinyML-Embedded

    Inspired by the game Just Dance, a DIY Embedded System to classify user gestures and simulate 2-player gameplay

    18 parts

Similar boards

  • 2 layers114.3 × 114.3 mmPCB design files, the printed circuit board in 3D

    PCB design files

    ACSLaboratory/pheeno_robot_electronic_schematics

    Electronic schematics for the Pheeno robot!

    75 parts1BSD-3-Clause
  • 2 layers92.5 × 100 mmRcj res b board, the printed circuit board in 3D

    Rcj res b board

    CCMNR/board

    PCB for CCMNR robot

    93 parts
  • 2 layers114.3 × 88.9 mmLab2 Circuit, the printed circuit board in 3D

    Lab2 Circuit

    tanai-prathapam/lab4_445L_personal

    The hw folder should contain your schematic and board files for your PCB or circuits. In labs 3-10, you will be creating schematics for your circuit in KiCad.

    17 parts
  • 2 layers149.9 × 38.1 mmBOMPanelClipon, the printed circuit board in 3D

    BOMPanelClipon

    dannyandreev/32x32-Matrix

    Setup from clean Windows: Install Git: https://gitforwindows.org/ Install VSCode: https://code.visualstudio.com/Download Install Python: https://www.python.org/downloads/release/python-3121/ Debug PIP…

    35 parts1
  • 2 layers185.2 × 141.7 mmAutonomous Drift Cart PCB, the printed circuit board in 3D

    Autonomous Drift Cart PCB

    danielwilczak101/EasyDrift

    ERAU and EPPL collaberation to create an autonomous drift cart that drives around campus.

    121 parts
  • 2 layers192 × 166.6 mmSuper Capacitor measurement, the printed circuit board in 3D

    Super Capacitor measurement

    Dixit-Golakiya/Master-Thesis-Project

    Custom 2-layer PCB (192 mm × 166 mm) built around a NUCLEO-G474RE evaluation board, providing all sensing and excitation circuitry for the supercapacitor health monitoring system.

    181 parts
  • 4 layers85 × 120 mmPrototype imu, the printed circuit board in 3D

    Prototype imu

    hyang025/Primary_PCB

    Primary PCB improvement

    27 parts
  • 2 layers57 × 94.1 mmController glove, the printed circuit board in 3D

    Controller glove

    momoenomoto/robot-hand-teleoperative-system

    Wireless glove controlled robotic hand using BLE 5 and STM32F7 MCU with Cortex-M7

    39 parts

Questions

How big is the ECE445L RSLK V2 PCB?

It measures 128.3 × 129.5 mm and has 2 copper layers, 1.6 mm thick.

What parts does the ECE445L RSLK V2 use?

71 parts, built around the GP2Y0A41SK0F and 500SSP1S2M2QEA. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the ECE445L RSLK V2 KiCad files?

From the andyMath7745/JustDance-TinyML-Embedded repository on GitHub, at the commit this page was made from: the board is hw/ECE445L_RSLK_V2/ECE445L_RSLK_V2.kicad_pcb and its schematic hw/ECE319K_Starter/ECE319K_Starter.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the ECE445L RSLK V2 design in my own project?

Its repository states no licence, so its author keeps all rights: ask andyMath7745 before reusing the design.