Machine Learning auf Mikrocontrollern

Hier erhalten Sie eine kurze Anleitung zur Benutzung der Hardware und die Dateien für die Teilprojekte

Die Hardware

Das Päckchen, dass Sie erhalten haben enthällt folgende Teile:

  • Arduino Nano 33 BLE Sense

  • USB 2.0 Kabel, A Stecker auf Micro B Stecker, 1,0 m

  • 3D gedrucktes Gehäuse für den Mikocontroller

Mikrocontroller mit Gehäuse.
Mikrocontroller mit Gehäuse.

Agenda

Tag 1

  • Kennenlernen der Teilnehmer.

  • Installation der Programmierumgebung:

    • PlatformIO

    • Google Colab (wird an Tag 2/3 fürs Training benötigt)

  • Kennenlernen des Mikrocontrollers:

    • Wie legt man ein neues Projekt für diesen Miktocontoller an.

    • Welche Sensoren sind verbaut (Eckdaten der Sensoren)?

    • Wie spricht man die einzelnen Sensoren an?

Tag 2

  • Das “Hello Wold!” des maschinellen Lernens auf dem Mikrocontroller:

    • Erzeugen/Sammeln der Training-, Validierungs- und Testdaten

    • Erstellen eine neuronalen Netzes in Keras.

    • Trainieren/validieren/testen des Netzes.

    • Konvertieren in ein Tenserflow Lite Model

    • Umwandeln des TFLite Models in ein C-Header Datei.

    • Implementation des Modells auf dem MC.

  • Verändern der gelernten Funktion

Tag 3

  • Gesture to Emoji

    • Gestenerkennung mit der eingebauten IMU

  • Fruit to Emoji

    • Objekterkennung anhand der Farbe

  • Stopworterkennung (“Alexa” / “OK Google”):

    • Yes/No Erkennung

    • Eigenes Stopwort (evtl. selbst aufnehmen) ← Dauert sehr lange (ca 2h fürs Trainieren + Zeit für Aufnahme und Nachbearbeiteung des Stopworts)

Software

PlatformIO

Auf PlatformIO IDE sieht man, wie man PlatformIO als Erweiterung in VSCode installiert.

Nun müssen wir noch einige weitere hilfreiche Erweiterungen und die Toolchain für unser Board installieren:

Google Colab

Google Colab bietet die Möglichkeit Python Code in einer Weboberfläche auszuführen. In der kostenlosen Variante wird die darunterliegende virtuelle Maschine nach 90 min Inaktivität beendet. Ferner könne Sie pro Tag ca 12h GPU/TPU Rechenleistung nutzen (allerdings wird dies von google evtl. dynamisch angepasst).

Serial Plotter

Wir verwenden SerialPlot - Realtime Plotting Software um Daten, die der Mikrocontroller via serieller Schnittstelle sendet, darzustellen.

Download:

  • Unter Linux lade AppImage herunter und mach es ausführbar.

  • Unter Windows benutze win32-setup.exe und installiere das Programm.

Leider gibt es keine Version für MacOS. Hier kann man auf die normale Arduino IDE zurückgreifen und dort den SerialPlotter verwenden.

Der Mikrocontroller

Sie sehen unten eine schematische Darstellung des Arduino Nano 33 BLE Sense wo alle verbauten Sensoren markiert sind.

Schematische Darstellung des `Arduino Nano 33 BLE Sense <https://www.arduino.cc/en/Guide/NANO33BLESense>`_
Schematische Darstellung des `Arduino Nano 33 BLE Sense `_

Und hier noch das Pinout des Mikrocontrollers:

Pinout des `Arduino Nano 33 BLE Sense <https://www.arduino.cc/en/Guide/NANO33BLESense>`_
Pinout des `Arduino Nano 33 BLE Sense `_

Sensoren und deren Libraries

IMU

Die IMU (inertia measuring unit) LSM9D1 enthält einen 3-Achsen Beschleunigungssensor, ein 3-Achsen Gyroskop und ein 3-Achsen Magenetometer (Kompass). Sie kann mit ArduinoLSM9DS1 programmiert werden.

Wichtig: Verwenden Sie die Version 1.1.0 da dort der Continous Modus implementiert ist.

Digitale Mikrofon

Das digitale Mikrofon MP34DT05 kann mit der PDM Bibliothek, die bereits installiert ist, programmiert werden.

Gestensensor

Der Gestensensor APDS9960 kann einfache Gesten, Farbe, Helligkeit und Annäherung messen. Mit der Bibliothek ArduinoAPDS9960 kann man auf den Sensor zugreifen.

Luftdrucksensor

Der Luftdrucksensor LPS22HB kann mit der Bibliothek ArduinoLPS22HB programmiert werden.

Rel. Luftfeuchtigkeits- und Temperatursensor

Der Sensor HTS221 kann mit der Bibliothek ArduinoHTS221 programmiert werden.

Machine Learning Aufgaben

Hello World!

Hier lernen Sie die Grundzüge des Maschine Learnings auf Mikrocontrollern.

Sie werden dem Mikrocontroller beibringen die Form einer Sinus Kurve zu produzieren.

Hello_World.zip

Gesture To Emoji [1]

Mit Hilfe der IMU werden Sie dem Mikrocontroller Gesten beibringen und diese via eines Emojis anzeigen.

GestureToEmoji.zip

Hier ist der Link zur Anzeigeseite für Emojis.

Und auf dieser Seite finden Sie die Tabellen für Unicodes: Emoji unicode characters for use on the web.

Fruit to Emoji [1]

Schließlich sollen Sie in dieser Aufgabe dem Mikrocontroller beibringen verschieden Früchte (oder auch andere Objekte) anhand ihrer Farbe zu erkennen und das Ergebnis als Emoji darstellen.

FruitToEmoji.zip

Micro Speech [2]

Hier wird dem Mikrocontroller beigebracht auf sogenannte Stop words zu reagieren.

Diese Aufgabe ist bereits als Beispiel in der TensorFlowLite Bibliothek enthalten.

MicroSpeech

Einen Link zur Trainingbeschreibung und des Jupyter Notebooks finden Sie hier: MicroSpeechTraining.

Ebenfalls nützlich ist der folgende Link: How to Do Speech Recognition with Arduino | Digi-Key Electronics - YouTube