-
Notifications
You must be signed in to change notification settings - Fork 0
/
E06_Biometrie.qmd
158 lines (124 loc) · 7.91 KB
/
E06_Biometrie.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
---
title: "Biometrie"
author: "Pia Bereuter"
date: today
other-links:
- text: Kapitel PDF
icon: file-pdf
href: chapters/E06_Biometrie.pdf
code-links:
- text: Ausgangsdaten
icon: file-zip
href: data/E06_Biometrie.zip
resources:
- data/E06_Biometrie.zip
abstract: "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:** *<i class="bi-file-zip"></i> E06_Biometrie.zip*
**Vorbereitung**
- Schaut Euch folgendes von Video von Peter Charlton zur Funktionsweise der Herzfrequenzmessung an: [Photoplethysmography in a minute (and a bit) - Peter Charlton](https://www.youtube.com/embed/HnXDvN4WNX8?si=EeIAlSWW2Z1SJBof)
- Studiere das Datenblatt zum MAX30101 [@maximintegrated2020]
- In welchen Temperaturbereichen kann der Sensor eingesetzt werden?
- Welches ist die höchste Abtastrate für die Sauerstoffmessungen?
- Was sind Anwendungsgebiete für diesen Sensor?
::: {.content-visible when-format="html"}
{{< video https://www.youtube.com/embed/HnXDvN4WNX8?si=EeIAlSWW2Z1SJBof >}}
:::
::: {.content-visible unless-format="html"}
![Photoplethysmography in a minute (and a bit) - Peter Charlton [Youtube Video](https://www.youtube.com/embed/HnXDvN4WNX8?si=EeIAlSWW2Z1SJBof)](images/youtube_photoplethysmography.png)
:::
| **Unterlagen** | |
| ---------- | ------------------------------------------------------------ |
| Produkt | [MAX30101 Breakout](https://shop.pimoroni.com/products/max30101-breakout-heart-rate-oximeter-smoke-sensor) |
| Datenblatt | [MAX30101](https://datasheets.maximintegrated.com/en/ds/MAX30101.pdf) |
| GitHub | [max30105-python](https://github.com/pimoroni/max30105-python) |
## MAX30101 Breakout Heart Rate, Oximeter, Smoke Sensor\index{MAX30101}
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
![links: MAX30101 Breakout von Pimoroni, rechts: funktionale Diagram des MAX30101 Moduls Quelle: @maximintegrated2020](images/MAX30101_wide.jpg){#fig-MAX30101}
## Ü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](E01_Luftqualitaet.qmd)), 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.
``` bash
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):
``` bash
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.
```{.python}
#!/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
max30105 = MAX30105() # <1>
max30105.setup(leds_enable=2) # <2>
max30105.set_led_pulse_amplitude(1, 0.2) # <2>
max30105.set_led_pulse_amplitude(2, 12.5) # <2>
max30105.set_led_pulse_amplitude(3, 0) # <2>
max30105.set_slot_mode(1, 'red') # <2>
max30105.set_slot_mode(2, 'ir') # <2>
max30105.set_slot_mode(3, 'off') # <2>
max30105.set_slot_mode(4, 'off') # <2>
def display_heartrate(beat, bpm, avg_bpm): # <3>
print("{} BPM: {:.2f} AVG: {:.2f}".format("<3" if beat else " ",
bpm, avg_bpm))
hr = HeartRate(max30105) # <4>
delay = 10 # <5>
print("Starting readings in {} seconds...\n".format(delay)) # <5>
time.sleep(delay) # <5>
try:
hr.on_beat(display_heartrate, average_over=4) # <6>
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.
::: {#exr-pulsmessung}
**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.
:::
::: {.content-hidden unless-meta="solution"}
::: {#sol-pulsmessung}
Je nach dem wie der Sensor auf dem Finger platziert wird, können die Messwerte stark variieren. Der Finger sollte leicht auf den Sensor gedrückt werden. Die Messwerte können durch Bewegungen oder Lichtveränderungen beeinflusst werden. Die Messwerte sollten in etwa mit der eigenen Pulsmessung übereinstimmen.
:::
:::
::: {.content-visible when-profile="chapter"}
## Referenzen
:::