Arduino senzor tepu srdce je vstupní modul, který obsahuje kombinaci infračervené LED diody a fototranzistoru. Pokud tedy do dráhy mezi IR LED diodu a fototranzistor vložíme například prst ruky, infračervené světlo z LED diody nám bude prosvěcovat prst a my budeme moci díky fototranzistoru měřit proměnné elektrické napětí. Změny v elektrickém napětí pak budou způsobeny tepáním krve skrze prst a my můžeme s poměrně dobrou přesností měřit srdeční tep v jednotce BPM (údery za minutu). Co se týká napájecího napětí, je vhodné použít 5 V z Arduina.
Pro úspěšné propojení senzoru tepu srdce s Arduino deskou je nutné zapojit 3 propojovací piny. Propojíme krajní pin S s pinem A0, prostřední pin s pinem 5 V Arduina a krajní pin „–„ se zemí Arduina. Pro vstupní pin S je možné využít také ostatní analogové piny, ale je nutné tuto volbu provést také v ukázkovém kódu.
Ukázkový kód obsahuje na svém začátku nastavení čísel propojovacích pinů a vytvoření konstanty, která slouží pro nastavení zpoždění při detekci. Podprogram setup na svém začátku obsahuje nastavení komunikace po sériové lince a dále nastavení pinu pro analogový vstup jako vstupní a nepovinné indikační LED diody jako výstupní. Pro indikační LED diodu byl zvolen pin 13, protože ji většina Arduino desek na tomto pinu obsahuje již v základu. V nekonečné smyčce loop nejprve vytvoříme dočasné proměnné pro ukládání výsledků a poté pomocí funkce if zkontrolujeme detekci tepu zavoláním podprogramu detekceTepu. Pokud je zmíněným podprogramem detekován tep, přepočteme naměřený údaj na tepovou frekvenci v jednotce BPM, rozsvítíme indikační LED diodu a pokud je naměřená frekvence v rozsahu 50 až 200 tepů za minutu, vytiskneme tuto informaci po sériové lince. Následuje už jen vynulování proměnné pro další měření, pauza programu a připočtení zpoždění pro účely dalšího měření. Pokud ale není v aktuálním běhu detekován tep, pouze provedeme vypnutí indikační LED diody a po pauze provedeme novou kontrolu tepu. Podprogram detekceTepu v sobě obsahuje důležitou funkci programu, kdy po vytvoření pomocných proměnných načteme analogovou hodnotu z připojeného senzoru tepu srdce a tuto hodnotu poté přepočteme pro účely dalšího měření. Po přepočtu proběhne detekce špičkové hodnoty a v případě, že výsledek je označen za platný, nastavíme proměnnou vysledek jako platnou a vrátíme ji pomocí funkce return. V opačném případě upravíme maximální naměřené hodnoty pro další měření a aktuální běh ukončíme bez detekce tepu.
// Arduino senzor tepu srdce KY039
// nastavení čísel propojovacích pinů
#define indikLED 13
#define analogPin A0
// vytvoření konstanty pro zpoždění při detekci
const int zpozdeniMereni = 60;
void setup() {
// komunikace po sériové lince rychlostí 9600 baud
Serial.begin(9600);
// inicializace analogového pinu jako vstup
// a digitálního pinu jako výstup
pinMode(analogPin, INPUT);
pinMode(indikLED, OUTPUT);
}
void loop()
{
// vytvoření dočasných proměnných pro uložení výsledků
static int uderyZaMinutu = 0;
int tepovaFrekvence = 0;
// kontrola detekce tepu srdce podprogramem detekceTepu
if (detekceTepu(analogPin, zpozdeniMereni)) {
// výpočet frekvence tepu srdce
tepovaFrekvence = 60000 / uderyZaMinutu;
// rozsvícení indikační LED diody při detekovaném
// měření tepu
digitalWrite(indikLED, HIGH);
// vytištění informace o naměřené tepové frekvenci
if (tepovaFrekvence > 50 & tepovaFrekvence < 200) {
Serial.print("Tepova frekvence: ");
Serial.print(tepovaFrekvence);
Serial.println(" uderu za minutu (BPM).");
}
// vynulování proměnné pro další měření
uderyZaMinutu = 0;
} else {
// v případě žádné detekce tepu vypni indikační LED diodu
digitalWrite(indikLED, LOW);
}
// pauza programu do dalšího měření
delay(zpozdeniMereni);
// připočtení zpoždění pro další měření
uderyZaMinutu += zpozdeniMereni;
}
// podprogram pro detekci tepu a výpočet jeho frekvence
bool detekceTepu(int senzorPin, int zpozdeni) {
// vytvoření pomocných proměnných
static int maxHodnota = 0;
static bool SpickovaHodnota = false;
int analogHodnota;
bool vysledek = false;
// načtení analogové hodnoty ze senzoru
analogHodnota = analogRead(senzorPin);
// přepočet analogové hodnoty pro další výpočty
analogHodnota *= (1000 / zpozdeni);
// upravení maximální hodnoty
if (analogHodnota * 4L < maxHodnota) {
maxHodnota = analogHodnota * 0.8;
}
// detekce špičkové hodnoty
if (analogHodnota > maxHodnota - (1000 / zpozdeni)) {
// nastavení nového maxima při detekované špičce
if (analogHodnota > maxHodnota) {
maxHodnota = analogHodnota;
}
// nastavení platnosti výsledku, když
// nebyla detekována špička
if (SpickovaHodnota == false) {
vysledek = true;
}
SpickovaHodnota = true;
} else if (analogHodnota < maxHodnota - (3000 / zpozdeni)) {
SpickovaHodnota = false;
// upravení maximální hodnoty při změně měřených hodnot
maxHodnota -= (1000 / zpozdeni);
}
// vrácení výsledku podprogramu
return vysledek;
}
Po nahrání ukázkového kódu do Arduino desky s připojeným senzorem tepu srdce dostaneme například tento výsledek:
Tepova frekvence: 76 uderu za minutu (BPM).
Tepova frekvence: 83 uderu za minutu (BPM).
Tepova frekvence: 83 uderu za minutu (BPM).
Tepova frekvence: 83 uderu za minutu (BPM).
Arduino senzor tepu srdce je pěknou ukázkou, že i tak jednoduchá kombinace jako je Arduino, infračervená LED dioda a fototranzistor dokáže alespoň pro orientační měření nahradit dražší měřící přístroje. Když jsem totiž při vlastním testování tohoto modulu se senzorem tepu srdce srovnal výsledky společně s měřením pomocí chytrých hodinek Apple Watch, dosahoval jsem podobných výsledků s maximální odchylkou 10%. Pro orientační měření se tedy jeví tento modul jako velice zajímavou volbou. Jen je nutné správně vyzkoušet polohu fototranzistoru a IR LED diody, kdy je nejlepší namířit tyto dvě součástky proti sobě a mezi ně vložit natěsno svůj prst.
Motorizovaný kulový ventil. Má široké uplatnění v různých průmyslových a obytných instalacích. Může být integrován do automatických systémů řízení, kde je možné ovládat průtok dálkově nebo automatizovaně podle předem nastavených podmínek.
Motorizované kulové vently s obvodem CR01, CR02, CR03 nebo CR04 je poměrně jednoduché po elektrické stránce správně zapojit. U ventilu s obvodem CR05 je tomu ale trochu jinak - ventil si sám nehlídá krajní polohy otevření, nebo zavření. Z toho důvodu vznikl tento článek, ukazující některé výhody, použití a především správné zapojení ventilu s obvodem CR05.