Virtuelles Joggen - in Südschweden?

Sergej_ConradSergej_Conrad Member

Mal eben die Straße am Strand entlang joggen ist gerade etwas schwierig - vor allem, wenn das Fernweh hinzu kommt und der Wunschort auch noch weit entfernt liegt.
Doch mit Hilfe von ein wenig Elektronik und einem Arduino-Mikrocontroller können wir zumindest virtuell an diesen Orten etwas Sport im Homeoffice treiben…

Die Idee: Wir nutzen Google Streetview und einen Pulssensor als “bio-feedback”. Bei jedem Pulsschlag wird die Ansicht in Google Streetview weitergeschaltet und wir “bewegen” uns weiter. Je schneller wir laufen, desto höher ist der Puls und daher die Veränderung der virtuellen Ansicht… Das funktioniert sogar super im Homeoffice, einfach auf der Stelle laufen (zumindest für Untrainierte; bei Profis geht ggf der Puls nicht schnell genug hoch).

Das Weiterschalten erledigt ein Mikrocontroller, genauer: der Arduino Micro (oder ein Arduino Leonardo; je nachdem, was ihr da habt). Wichtig ist, dass der Controller ein Eingabegerät wie eine Maus oder eine Tastatur emulieren kann (HID Emulation).

Ihr braucht dazu:
1x Joy-IT Herzfrequenz-Sensor (Art.-Nr. 1695708)
1x Arduino Micro (Art.-Nr. 323485) oder Arduino Leonardo (Art.-Nr. 1969886)
und ein Mikro-USB-Kabel sowie einen Computer mit Internetzugang :-)

Los geht’s!
Der Sensor wird an den Arduino Leonardo direkt angeschlossen oder der Arduino Micro wird mit Hilfe eines Steckbords verbunden. Die schwarze Anschlussleitung ist +5V, grau ist Masse und weiß ist der Analogausgang des Sensors. Dieses Kabel wird mit dem A=-Eingang des Arduino verbunden:

Der Sensor beleuchtet den Finger mit einer grünen, sehr hellen LED und misst, wieviel Licht absorbiert wird. Pumpt der Herzschlag Blut in die Gefäße, erhöht sich die Menge Blut in ihnen und die Absorption verändert sich. Mit unterschiedlichen Wellenlängen kann dann sogar mit einer solchen Messung die Sauerstoff-Sättigung des Blutes gemessen werden. Hier reicht uns der Pulsschlag ;-)


Einen ersten Testlauf kann man mit dem Beispielprogramm “AnalogReadSerial” der Arduino Entwicklungsumgebung starten.
Dazu muss der richtige Arduino unter “Boards” gewählt werden und dann der entsprechende Port:


In dem Beispielprogramm werden die Werte des Analog-Eingangs A0 direkt über die serielle Schnittstelle (USB-Anschluss) ausgegeben. Mit Hilfe des in der Entwicklungsumgebung integrierten Plotters können die Werte angezeigt werden:

Das fertige Beispiel lässt sich noch etwas optimieren: Wenn weitere Werte als Unter-/Obergrenze angegeben werden, skaliert die Grafikanzeige auf diesen Bereich und die Veränderungen der Absorption durch den Puls werden leichter erkennbar.
Auch wenn es auf den ersten Blick den Eindruck erwecken kann - es ist kein EKG :-)
Und je nachdem, wie fest der Finger aufgedrückt wird oder bewegt wird, verändert sich diese Darstellung.
Robuster ist das fertige Beispiel zur “Peak-Erkennung”, das von Joy-IT angeboten wird:

Hier wird die LED kurz eingeschaltet, wenn ein Puls (Peak) erkannt wurde. Für ein Weiterschalten der Position bei Google Streetview muss dazu dann lediglich eine Tastatureingabe gesendet werden, die der Taste “Cursor-up” entspricht.

Hinweis: Wenn der Arduino Tastatur- und Maus simuliert, kann die Programmierung und Weiterarbeit am Computer schwierig werden ;-)
Damit der Mikrocontroller nicht jedesmal “dazwischenfunkt”, ist es sinnvoll, nur dann Eingaben zu senden, wenn eine zusätzliche Bedingung erfüllt ist. Das kann ein weiterer Eingang sein, der auf Ground verbunden wird.

Dazu müssen folgende Ergänzungen im Beispielprogramm vorgenommen werden:

Zu Beginn des Codes folgende Bibliothek einbinden (ermöglicht die Steuerung von Tastatur und Maus)

#include "Keyboard.h"

Dann in der Setup-Routine “Void Setup”

pinMode(10, INPUT_PULLUP);
Keyboard.begin();

Der erste Befehl setzt den Pin 10 als Eingang und verwendet den internen Widerstand, um den Signalpegel auf 5V (High) zu setzen. Damit ist der Eingang immer High, bis der Pin mit Ground verbunden wird, um die Tastatursimulation zu starten…

Nun muss nur noch bei jeden Herzschlag die “Cursor-up” Taste vom Arduino gesendet werden - falls der “Sicherheits-Pin” auf Ground gesetzt wurde:

   if (digitalRead (10) == 0) {
      Keyboard.write(218);
    }

Die Pin-Nr. 10 kann man natürlich auch vorher als Konstante definieren, denn wenn diese Funktion auf einen anderen Anschluss umgelegt werden soll, reicht dann eine Änderung am Anfang des Codes…

Dann kann es jetzt losgehen: Code kompilieren und hochladen:

Anschließend eine schöne Gegend in Google Streetview suchen mit möglichst geradem Verlauf.Wenn es um eine kurve geht, können noch die Cursor-Tasten nach rechts/links über die Abfrage weiterer Eingänge des Mikrocontrollers gesendet werden…

Viel Spaß beim Joggen… und ein Tipp für die untrainierten unter uns: Wenn der Puls zu schnell steigt und das Joggen virtuell zu schnell geht: Einfach den Code ändern und z.B. nur bei jedem 2. oder 3. erkannten Puls die Ansicht weiterschalten ;-)
Viel Spaß - und für den Anfang ist eine lange gerade Straße am Meer besonders schön, z.B. in Südschweden ;-)

Anmelden oder Registrieren, um zu kommentieren.