9  Biometrie

Autor:in

Pia Bereuter

Veröffentlichungsdatum

22. Oktober. 2024

Zusammenfassung
Biometrische Messungen ermöglichen die Erfassung von physiologischen Daten wie Herzfrequenz oder Sauerstoffsättigung. Während diese Sensoren nicht typische Sensoren für IoT Projekte sind, können sie für spezielle Anwendungen wie Gesundheitsüberwachung oder Fitness eingesetzt werden. Diese Übung führt in die biometrischen Messungen mit dem MAX30101 Sensor ein und zeigt wie die Herzfrequenz gemessen werden kann.

Einführung

Ziel dieser Übung ist es biometrische Messungen mit dem MAX30101 Sensor durchzuführen und den Sensor in seiner funktionsweise zu untersuchen. Der MAX30101 ist ein Sensor zur Messung der Herzfrequenz und der Sauerstoffsättigung im Blut und ein Rauch-/Partikelsensor. Er verfügt über eine I2C Schnittstelle und kann über eine Python Library angesteuert werden.

Unterlagen: E06_Biometrie.zip

Vorbereitung

Unterlagen
Produkt MAX30101 Breakout
Datenblatt MAX30101
GitHub max30105-python

MAX30101 Breakout Heart Rate, Oximeter, Smoke Sensor

Der MAX30101 ist hochentwickelter Herzfrequenz-, Oximeter- und Rauch-/Partikelsensor. Der Sensor verfügt über drei LEDs (rot, grün, IR) und Photodetektoren. Mit der Photoplethysmographie (photoplethysmography PPG) kann über die Farbveränderung der Haut bei jedem Herzschlag dieser detektiert werden, wenn der Sensor leicht auf den Finger gedrückt wird. Der Sensor kann auch dazu benutzt werden um Partikel in der Luft wie rauch zu erkennen, in dem er die Lichtmenge, die von Partikeln in der Luft zurückgeworfen wird misst.

MAX30101 Breakout - Heart Rate, Oximeter, Smoke Sensor Breakout

  • MAX30101 - heart rate, oximeter, smoke sensor
  • Green, red, and infra-red LEDs
  • Photodetectors
  • Ambient light rejection
  • Temperature sensor
Abb. 9.1: links: MAX30101 Breakout von Pimoroni, rechts: funktionale Diagram des MAX30101 Moduls Quelle: maxim integrated (2020)

Übungsaufbau

  • Schliesse den Raspberry Pi an Monitor, Keyboard und Maus an oder verbinde Dich mit diesem über SSH (und SFTP).
  • Erstelle auf dem Raspberry Pi im Documents Ordner einen neuen Ordner MAX30101, in welchem Du Änderungen und neue Dateien für diese Übung speichern kannst.
  • Schliesse den Sensor MAX30101 an den Raspberry Pi über die Breakout Garden I2C Schnittstelle korrekt an (siehe E01 Luftqualität), so dass die Beschriftung der Anschlüsse am Sensor und bei der Schnittstelle übereinstimmen.
  • Kontrolliere mit dem Befehl i2cdetect -y 1 ob der Raspberry Pi mit dem Sensor verbunden ist. Der Sensor sollte auf der Adresse 0x57 erkannt werden.
  • Aktiviere die virtuelle Environment von Python mit source ~/.env/bin/activate und kontrolliere, ob die Library vl53l5cx_ctypes installiert ist mit python -c "import vl53l5cx_ctypes". Bei einer Fehlermeldung muss die Library in der aktivierten virtuellen Environment mit pip install vl53l5cx_ctypes installiert werden.

Wechsle in den Ordner Documents und kopiere mit folgenden Befehlen die Library auf Deinen Raspberry Pi.

cd Documents
git clone https://github.com/pimoroni/max30105-python
cd max30105-python/examples

Aufgabe 1: Biometriemessung Konsole

Teste das Beispiel read-heartbeat.py im Ordner examples. Dieses Beispiel liest die Pulsschläge pro Minute in PPM (beats per minute). Ein erkannter Pulsschlag wird mit einem <3 angezeigt.

Startet das Script mit python read-heartbeat.py. Mit Ctrl+c kann das Script wieder gestopppt wrden. Die Ausgabe sollte in etwa so aussehen (gekürzt):

python read-heartbeat.py 
NOTE! This code should not be used for medical diagnosis. 
...
Starting readings in 10 seconds...

   BPM: 0.00  AVG: 0.00
   BPM: 0.00  AVG: 0.00
   BPM: 0.00  AVG: 0.00
   BPM: 0.00  AVG: 0.00
   BPM: 45.55  AVG: 45.96
<3 BPM: 55.75  AVG: 59.90
   BPM: 55.75  AVG: 59.90
<3 BPM: 59.64  AVG: 70.65
   BPM: 59.64  AVG: 70.65

Folgendes Code Snippet zeigt eine gekürtzte Version des read-heartbeat.py Python Beispiels für die Ausgabe des Herzschlags.

#!/usr/bin/env python

# NOTE! This code should not be used for medical diagnosis. It's
# for fun/novelty use only, so bear that in mind while using it.

import time
from max30105 import MAX30105, HeartRate

1max30105 = MAX30105()
2max30105.setup(leds_enable=2)
max30105.set_led_pulse_amplitude(1, 0.2)
max30105.set_led_pulse_amplitude(2, 12.5)
max30105.set_led_pulse_amplitude(3, 0)
max30105.set_slot_mode(1, 'red')
max30105.set_slot_mode(2, 'ir')
max30105.set_slot_mode(3, 'off')
max30105.set_slot_mode(4, 'off')

3def display_heartrate(beat, bpm, avg_bpm):
    print("{} BPM: {:.2f}  AVG: {:.2f}".format("<3" if beat else "  ",
          bpm, avg_bpm))
4hr = HeartRate(max30105)

5delay = 10
print("Starting readings in {} seconds...\n".format(delay))
time.sleep(delay)

try:
6    hr.on_beat(display_heartrate, average_over=4)
except KeyboardInterrupt:
    pass
1
Sensor initialisieren
2
Sensor konfigurieren (LED Pulse Amplitude, Slot Mode der LED)
3
Funktion zur Darstellung des Herzschlags in der Konsole
4
Initialisierung des Herzschlagdetektors
5
10 Sekunden warten und dann die Herzschläge ausgeben
6
Bei einem erkannten Herzschlag wird die Funktion display_heartrate aufgerufen und der Herzschlag wird über 4 Sekunden gemittelt in der Konsole ausgegeben.

Übung 9.1 Pulsmessung

  • Führe das Beispiel read-heartbeat.py aus und beobachte die Messwerte.
  • Führe unterschiedliche Tests durch und behandle den Sensor freundlich.
  • Vergleiche die Messwerte und kontrolliere die Werte in dem Du den eigenen Puls misst oder mit einem Sportuhr vergleichst.
  • Studiere den Code der Beispiele und versuche die Funktionsweise zu verstehen.