Gesamtsystem

Das FlexAI-System besteht aus mehreren Hardware-Modulen, die über eine gemeinsame Schnittstelle zu einem Gesamtsystem verbunden werden können (z.b: Basisplatine + Mobile Messplatine). Diese Gesamtsysteme können über ein selbst entwickeltes Kommunikationsprotokoll miteinander kommunizieren, wenn dies die Anwendung erfordert. Im Zentrum steht die Ziffernerkennung: Ein Mess-System (Basisplatine + Mobile Messplatine) misst in der Luft gezeichnete Zahlen und schickt diese über Kommunikationsprotokoll zu einem Verarbeitungs-System (Basisplatine + Displayplatine). Dieses wertet mittels Machine Learning die Zahl aus und gibt diese auf dem Display aus.


Hardware-Architektur

Datenfluss

User zeichnet Ziffer
    ↓
BNO085 erfasst Beschleunigung (25 Hz)
    ↓
EspSafe (ESP-NOW) sendet an Master
    ↓
Motion Detection + Buffering
    ↓
TFLite CNN Inferenz
    ↓
Display zeigt erkannte Ziffer
System-Blockdiagramm

Software-Architektur

State Machine Pattern

Die Firmware nutzt polymorphe State Machines. Beim Boot liest main.cpp den HAT-Identifier aus dem EEPROM und instantiiert die passende State Machine:

  • MasterStateMachine (Display HAT)
    UI, ESP-NOW Master, AI Inference
  • PortableStateMachine (Mobile HAT)
    BNO085 + MAX1415, ESP-NOW Slave
  • StationaryStateMachine (Stationary HAT)
    ADS1261 + MUX (Stubs)

Operating Modes

# platformio.ini Build Flags
-D MODE_AI_INFERENCE    # Echtzeit-Erkennung
-D MODE_SD_LOGGING      # Datenerfassung
-D MODE_MEASURE_BNO     # Nur IMU
-D MODE_MEASURE_BNO_ADC # IMU + ADC
State Machine UML Diagramm

Kommunikation: EspSafe

Pairing-Sequenz

  1. Discovery: Slave sendet Broadcast mit Profil
  2. Request: Master sendet PAIR_REQ an Slave-MAC
  3. Accept: Slave speichert Master, antwortet PAIR_ACCEPT
  4. Finalized: Master bestätigt, beide sind gepairt

Message Types

SLAVE_DISCOVERY_BCAST  // Broadcast
PAIR_REQ / PAIR_ACCEPT / PAIR_FINALIZED
DATA_PACKET / DATA_ACK
START_COMMAND / STOP_COMMAND
PING / PING_ACK

Performance

  • Max Payload: 245 bytes/frame
  • Latency: <10ms (line of sight)
ESP-NOW Kommunikationsdiagramm

ML-Pipeline

Training Pipeline

  1. Datenerfassung: SD-Logging in Binary-Format
  2. Parsing: parser.py → CSV pro Digit
  3. Preprocessing: Normalisierung, Train / Val / Test Split
  4. Augmentation: Noise, Scaling, Time-Warping
  5. Training: CNN mit Keras/TensorFlow
  6. Export: TFLite + C++ Header für ESP32

CNN Architektur

Input: (seq_len, 3)  # accel X/Y/Z
Conv1D(64, k=5) → MaxPool
Conv1D(128, k=5) → GlobalAvgPool
Dense(128) → Dense(10, softmax)

Tensor Arena: ~56 KB auf ESP32

ML Pipeline Diagramm