Bewegungsmelder

Ich hätte nie gedacht, dass das so Hardware…

Alex, ca. 2021

Schon früh in der Projektausarbeitung kam uns die Idee, zusätzlich zum Endgerät, dem EasyChart-Stick, einen Bewegungsmelder zu entwickeln, welcher den Fernseher bzw. Monitor automatisch einschalten würde, sobald sich der Nutzer davor bewegt.

Durch diese Integration soll einerseits Strom gespart werden, da die Kurse nur dann angezeigt werden, wenn auch jemand da ist, um diese zu bewundern, und andererseits soll dadurch der Benutzer die Möglichkeit erhalten, selbstdefinierte Zeitspannen zu vergeben, für die der Fernseher oder Monitor aktiv sein soll.

Bei dem Bewegungsmelder selbst handelt es sich um einen Infrarot Bewegungsmelder.

Infrarot Bewegungsmeldern PIR HC-SR501

Um mit dem Bewegungsmelder kommunizieren zu können, wird ein Arduino Nano 33BLE verwendet.

Da der Bewegungsmelder per Akku funktionieren muss, wurde dieser Arduino aufgrund des stromsparenden Designs und der BLE-Funktionalität als Basisbauteil ausgewählt. BLE steht für Bluetooth-Low-Energy und ermöglicht Bluetooth-Verbindungen bei möglichst geringem Stromverbrauch.

Innenansicht des Bewegungsmelders

Der Arduino wird auf ein speziell dafür entwickelten PCB gesteckt und dadurch mit dem Bewegungsmelder und einem Akku verbunden. Auf diesem PCB befindet sich ein USB-C Port, über den der Akku aufgeladen werden kann sowie eine Aufladeschaltung, welche ein Über- bzw. Unterladen und somit Schäden am Akku verhindert. Als Designsoftware wurde Autodesk Eagle verwendet.

Für den Bewegungsmelder wurde ein Gehäuse mittels 3D-Druck gebaut, welches Akku, PCB und den Bewegungsmelder selbst beinhaltet.

Doch wie schaltet der Bewegungsmelder nun den Fernseher ein?

Firmware

EasyChart bedient sich der Bluetooth Low Energy- Technologie, um Bewegungsmelder und EasyChart Stick kommunizieren zu lassen. Für Arduino existiert eine umfangreiche Bibliothek, die BLE Kommunikation recht einfach macht. Für Raspberry Pi OS, dem Betriebssystem des EasyChart Sticks, haben wir mit der API bluepy von Ian Harvey eine gute Möglichkeit gefunden, Bluetooth Low Energy zu nutzen.

Im Folgenden nun eine Prinzipskizze der Kommunikation zwischen dem Bewegungsmelder und dem EasyChart Stick.

BLE Kommunikation

Bei Bluetooth Low Energy gibt es immer 1 central device und beliebig viele peripheral devices. Im Fall von EasyChart gibt es genau 1 peripheral, nämlich den Bewegungsmelder. Man kann sich dieses System etwa wie eine Server-Client Beziehung vorstellen, das central ist der client, der Daten vom server, dem Peripheral bezieht.
Ein peripheral device besitzt nun beliebig viele sogenannte services. Diese kann man als verschiedene Anzeigen eines Geräts verstehen. Bei EasyChart gibt es lediglich 2 relevante Parameter, ob eine Bewegung erkannt wurde und der Batteriestand. Im Laufe der Entwicklung wurde entschieden, beides in 1 service zusammenzufassen.
Des Weiteren gibt es characteristics. In ihnen werden die konkreten Daten abgelegt; bei EasyChart sind das die Bewegungsinformation und der Batteriestand.

Wenn sich ein central device mit einem peripheral device verbunden hat, kann er, wann immer er will, characteristics lesen oder schreiben. Doch auch eine dritte Möglichkeit gibt es noch: Notify. Hierbei wird ein characteristic so deklariert, dass bei jede Änderung seines Werts das central device darüber benachrichtigt wird.

Wie ist nun der genaue Ablauf der Kommunikation bei EasyChart?

Sequenzdiagramm Bluetooth Low Energy Kommunikation

Am Anfang richtet der Bewegungsmelder seine BLE-Kommunikation ein, woraufhin sich Stick und Bewegungsmelder verbinden. Hat der Stick signalisiert, dass er bereit ist, geht es in die Hauptschleife:
Hier wartet der Stick auf Notifications vom Bewegungsmelder. Ist nach 3 Sekunden nichts angekommen, wird das TV abgeschaltet, wenn die Wartezeit von 5 Minuten vorbei ist.
Auf der anderen Seite fragt der Bewegungsmelder den Sensor wiederholt, ob ein Interrupt gekommen ist, d.h. eine Bewegung wurde erkannt. Ist das geschehen, werden die characteristics mit Bewegungsinfo und Batteriestatus beschrieben. Daraufhin schaltet der Stick den TV ein (wenn er noch nicht angeschalten ist), holt sich das Batterielevel, schreibt ihn in ein File und signalisiert, dass er wieder bereit ist.
Die Batterieinfo wird von einem weiteren Prozess am Rasperry ausgelesen und wenn sie zu niedrig ist, wird das auf der EasyChart GUI angezeigt.