🫀 Pulse Sensor (Optisk Pulsmåler)
Den lille runde sensor lyser grønt ind i din fingerspids eller øreflip og måler, hvor meget lys der kommer tilbage. Hver gang hjertet slår, ændres blodmængden i hudens små kar – og dermed lyset. En indbygget forstærker gør det til en analog "puls-bølge" på signalbenet.
Vores modul er bygget efter det åbne Pulse Sensor-design. Til smartwatch-projekter, LED'er der blinker i takt med hjertet, eller bare for at se din egen puls i Serial Plotter.
🛒 Køb pulsmåler 📄 Datasheet for det originale design (PDF)
⚡ Hurtige specifikationer
| Parameter | Værdi |
|---|---|
| Måleprincip | PPG (fotopletysmografi) med grøn LED |
| Typiske komponenter | APDS-9008 lyssensor + MCP6001 op-amp + filter |
| Forsyning | 3,0–5,5 V DC |
| Strømforbrug | ca. 4 mA |
| Udgang | Analog, hviler omkring VCC/2 og svinger med pulsen |
| Tilslutning | 3 lodde-pads/ledninger: S (signal), + (VCC), − (GND) |
📌 Pinout
| Pin | Navn | Funktion | Forbindes til |
|---|---|---|---|
| S | Signal | Analog puls-signal | A0 (UNO/Nano) / GPIO36 (ESP32) |
| + | VCC | Forsyning 3–5,5 V | 5V (UNO/Nano) eller 3V3 (ESP32) |
| − | GND | Stel | GND |
Mærkningen S, + og − står på bagsiden af printet. Følger der ledninger med, varierer farverne – tro på mærkningen, ikke på farven.
🔌 Sådan forbinder du den
| Pulse Sensor | Arduino UNO / Nano | ESP32 (DevKit) |
|---|---|---|
| + | 5V | 3V3 |
| − | GND | GND |
| S | A0 | GPIO36 (ADC1) |
På ESP32 kører sensoren på 3,3 V, så signalet passer direkte. Brug en ADC1-pin (GPIO32–39), og husk at tærskelværdien skal skaleres til 12-bit (0–4095).
💻 Eksempelkode
Bibliotek: "PulseSensor Playground" (søg i Library Manager)
#define USE_ARDUINO_INTERRUPTS true
#include <PulseSensorPlayground.h>
const int PULS_PIN = A0;
const int LED_PIN = 13;
int taerskel = 550; // juster efter din Serial Plotter-kurve
PulseSensorPlayground pulsSensor;
void setup() {
Serial.begin(115200);
pulsSensor.analogInput(PULS_PIN);
pulsSensor.blinkOnPulse(LED_PIN);
pulsSensor.setThreshold(taerskel);
if (pulsSensor.begin()) {
Serial.println("Pulsmåler klar - læg fingeren let på");
}
}
void loop() {
if (pulsSensor.sawStartOfBeat()) {
int bpm = pulsSensor.getBeatsPerMinute();
Serial.print("Hjerteslag! BPM: ");
Serial.println(bpm);
}
delay(20);
}
Biblioteket har også eksemplet GettingStartedProject, der viser den rå kurve i Serial Plotter – start der, så du kan se, hvor din tærskel skal ligge.
💡 KompoNemt-tip fra værkstedet
- Isolér printet: Bagsiden og forsiden skal isoleres (fx med klar neglelak, vinylklistermærke eller varmlim over komponenterne). Ellers kortslutter sved og fingre signalet.
- Let tryk: Pres for hårdt, og du klemmer blodet væk. Lige nok til at sensoren ligger stille.
- Hold dig i ro: Bevægelse og omgivende lys giver mere støj end selve pulsen. Et stykke velcro eller en fingerclip gør underværker.
- Bløde ledninger: Til wearables så lod tynde silikoneledninger direkte på pads i stedet for stive stiftlister.
🔧 Fejlfinding
- Vilde BPM-tal: Tærsklen er forkert. Kig på kurven i Serial Plotter og sæt tærsklen lidt over midterlinjen.
- Flad kurve: Tjek S/+/− og at LED'en lyser grønt.
- Kurven er kun støj: Printet er ikke isoleret, eller sensoren bevæger sig. Isolér og fiksér.
- Kompilerfejl på ESP32: Opdatér PulseSensor Playground til nyeste version – ældre versioner understøtter ikke alle boards med interrupts.
Sidder du fast? Skriv til os – vi hjælper gerne.