Zum Inhalt springen
Projekte
Akademischer Prototyp2026Arduino Nano 33 BLE Sense Rev2C++PythonTinyMLIMU

TinyML-Vibrationsanomalie-Erkennung auf Arduino Nano 33 BLE Sense Rev2

Ein leichtgewichtiges Softmax-Modell klassifiziert lokale IMU-Fenster als NORMAL oder ANOMALY und löst nach drei aufeinanderfolgenden Anomaliefenstern einen ALERT aus.

Rolle

Ich entwickelte die Pipeline von der synthetischen Datengenerierung und Merkmalsextraktion bis zum Modelltraining, C++-Export und zur Inferenz auf dem Arduino.

Kernergebnisse

98,61 %
Offline-Testgenauigkeit · synthetischer Datensatz
~1 ms
Gemessene Inferenzlatenz
12 % Flash · 19 % RAM
Kompilierte Ressourcennutzung

Problem und Rahmenbedingungen

Kleine Lüfter und Motoren können vor einem Ausfall auffällige Vibrationen entwickeln. Ein Node-Device soll dies lokal, speicherschonend, ohne Cloud-Abhängigkeit und mit klarer Live-Ausgabe erkennen.

Sicherheit

Das Gerät verarbeitet Bewegungsdaten lokal und überträgt keine Sensordaten. Das Design bleibt in der Demo eigenständig und vermeidet Credentials, Netzabhängigkeit und externe Services.

Zuverlässigkeit

Der Sketch nutzt überlappende Fenster, normalisierte Features, eine Anomalie-Schwelle von 0.60 und eine 3-Fenster-ALERT-Persistenz, damit ein einzelner Störimpuls nicht sofort einen finalen Alarm auslöst.

Was ich gebaut habe

Ich habe balancierte synthetische Vibrationsfenster erzeugt, 20 statistische Features aus 2-Sekunden-IMU-Fenstern extrahiert, ein zweiklassiges Softmax-Modell trainiert, Mittelwerte, Standardabweichungen, Gewichte und Biases nach model_parameters.h exportiert und denselben Verarbeitungspfad in Arduino-C++ umgesetzt.

Architektur

Architekturdiagramme

TinyML-Training und lokaler Inferenzfluss

End-to-End-TinyML-Architektur für Vibrationsanomalie-Erkennung: Offline-Training in Python, C++-Parameterexport, Arduino-Deployment, lokales IMU-Sampling, Softmax-Inferenz, Serial-Monitor-Ausgabe und Built-in-LED-Alerting.

Diagramm öffnen
TinyML-Training und lokaler Inferenzfluss diagram for TinyML Vibration Anomaly Detection on Arduino Nano 33 BLE Sense Rev2
TinyML-Training und lokaler Inferenzfluss

Was das Diagramm zeigt

  • Trennt Offline-Training/Export vom Runtime-Pfad und macht klar, dass keine Cloud-Inferenz genutzt wird
  • Zeigt den Embedded-Runtime-Loop: 100-Hz-Sampling, 2-Sekunden-Fenster, 50% Überlappung, 20 Features, Normalisierung, Softmax-Inferenz, Schwellwert und Persistenz
  • Enthält die Projektnachweise: 98,61 % Offline-Genauigkeit, ca. 1 ms Inferenzlatenz, 12 % Flash-Nutzung und 19 % RAM-Nutzung

Technische Entscheidungen

  • 100-Hz-IMU-Sampling mit 2-Sekunden-Fenstern und 50% Überlappung
  • 20 leichtgewichtige Vibrationsfeatures aus X/Y/Z-Achsen und kombinierter Magnitude
  • Zweiklassiger Softmax-Klassifikator direkt als C++ exportiert, ohne große Inferenz-Runtime
  • Serial-Monitor-Ausgabe für Zeit, Zustand, Wahrscheinlichkeiten, Persistenzzähler und Latenz
  • Onboard-LED-Alarm nach 3 aufeinanderfolgenden Anomaliefenstern

Validierung

  • Klassifikator offline auf dem synthetischen balancierten Datensatz trainiert und bewertet.
  • Serial-Monitor-Ausgabe für Zustand, Wahrscheinlichkeiten, Persistenzzähler und Latenz geprüft.
  • Sketch auf dem Arduino Nano 33 BLE Sense Rev2 kompiliert und Flash-/RAM-Nutzung festgehalten.

Ergebnisse

98,61 %

98,61 % Offline-Testgenauigkeit auf dem synthetischen balancierten Datensatz erreicht

ca. 1 ms

ca. 1 ms Inferenzlatenz im Arduino Serial Monitor gemessen

12 %

Kompiliert mit 12 % Flash- und 19 % RAM-Nutzung auf dem Nano 33 BLE Sense Rev2

Live-Demo zeigte stabiles Board als NORMAL, Tippen/Schütteln als ANOMALY, anhaltende Bewegung als ALERT und Rückkehr zu NORMAL

Vollständiger Stack

Embedded-Hardware

Arduino Nano 33 BLE Sense Rev2IMUBuilt-in LED

Training-Pipeline

PythonSynthetic dataset20 vibration features

Runtime-Modell

C++TinyMLSoftmaxModel export

Validierung

Serial MonitorOffline test setFlash/RAM report

Artefakte

Nächster technischer Schritt

Geplante Arbeit

Das Modell mit real gemessenen Vibrationsdaten zusätzlich zum synthetischen balancierten Datensatz validieren.