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
Basisplatine V1.1
- SparkFun MicroMod Carrier
- ESP32/STM32/Teensy Slots
- 36-Pin HAT-Connector (J2/J3)
- USB-C, SD-Karte, LiPo-Ladung
Portable HAT V1.1
- BNO085 9-Achsen IMU (SPI)
- MAX1415 16-bit Dual-ADC
- M24M02 EEPROM (ID: 0x02)
- Wheatstone-Brücken-Anschluss
Display HAT V1.1
- ILI9341 240×320 TFT (SPI)
- FT6206 Touch (I2C)
- Joystick + 2 Buttons (TCA9534A)
- M24M02 EEPROM (ID: 0x03)
Stationary HAT V1.1
- ADS1261 24-bit ADC (SPI)
- X9C102 Digital Potentiometer
- CD74HC4067 16-ch MUX
- M24M02 EEPROM (ID: 0x01)
Gehäuse (Vorne)
- 3D-Druck Gehäuse
- Knopf Durchführung
- Aussparung für SD-Karte
Gehäuse (Hinten)
- Schutz der Elektronik
- Zugang zu Anschlüssen
- Lüftungsschlitze
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
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
Kommunikation: EspSafe
Pairing-Sequenz
- Discovery: Slave sendet Broadcast mit Profil
- Request: Master sendet PAIR_REQ an Slave-MAC
- Accept: Slave speichert Master, antwortet PAIR_ACCEPT
- 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)
ML-Pipeline
Training Pipeline
- Datenerfassung: SD-Logging in Binary-Format
- Parsing:
parser.py→ CSV pro Digit - Preprocessing: Normalisierung, Train / Val / Test Split
- Augmentation: Noise, Scaling, Time-Warping
- Training: CNN mit Keras/TensorFlow
- 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