- Wymagane komponenty
- Czujnik tętna SEN-11574
- Schemat obwodu dla połączenia czujnika impulsów z mikrokontrolerem PIC
- PIC16F877A Objaśnienie kodu monitora tętna
Tętno jest najważniejszym parametrem w monitorowaniu zdrowia każdej osoby. We współczesnej erze urządzeń do noszenia istnieje wiele urządzeń, które mogą mierzyć bicie serca, ciśnienie krwi, kroki, spalone kalorie i wiele innych rzeczy. Te urządzenia mają w sobie czujnik tętna do wykrywania tętna. Dzisiaj użyjemy również czujnika tętna z mikrokontrolerem PIC do zliczania uderzeń serca na minutę i interwału między uderzeniami, wartości te będą dalej wyświetlane na wyświetlaczu LCD 16x2 znaków. W tym projekcie użyjemy mikrokontrolera PIC16F877A PIC. Połączyliśmy już czujnik tętna z Arduino dla systemu monitorowania pacjenta.
Wymagane komponenty
- Mikrokontroler PIC16F877A
- Kryształ 20 Mhz
- Kondensator 33pF 2 szt
- Rezystor 4,7k 1 szt
- Wyświetlacz LCD 16x2 znaków
- Potencjometr 10K do kontroli kontrastu wyświetlacza LCD
- SEN-11574 Czujnik tętna
- rzep
- Zasilacz 5V
- Płytka prototypowa i przewody przyłączeniowe
Czujnik tętna SEN-11574
Do pomiaru bicia serca potrzebny jest czujnik tętna. Tutaj wybraliśmy czujnik tętna SEN-11574, który jest łatwo dostępny w sklepach online lub offline. Użyliśmy tego czujnika, ponieważ istnieją przykładowe kody dostarczone przez producenta, ale jest to kod Arduino. Przekonwertowaliśmy ten kod dla naszego mikrokontrolera PIC.
Czujnik jest naprawdę mały i idealny do odczytu bicia serca w płatku ucha lub na opuszku palca. Ma 0,625 ”średnicy i 0,125” grubości od okrągłej strony PCB.
Ten czujnik dostarcza sygnał analogowy, a czujnik może być zasilany napięciem 3 V lub 5 V, pobór prądu czujnika wynosi 4 mA, co jest idealne do zastosowań mobilnych. Czujnik jest dostarczany z trzema przewodami z 24-calowym kablem połączeniowym i końcówką męską berg na końcu. Ponadto czujnik jest wyposażony w pasek na palec z rzepem, który można nosić na czubku palca.
Schemat czujnika tętna jest również dostarczany przez producenta i dostępny również na stronie sparkfun.com.
Schemat czujnika składa się z optycznego czujnika tętna, obwodu RC z redukcją szumów lub filtrów, które można zobaczyć na schemacie. R2, C2, C1, C3 i wzmacniacz operacyjny MCP6001 zapewniają niezawodne wzmocnione wyjście analogowe.
Istnieje kilka innych czujników do monitorowania bicia serca, ale czujnik tętna SEN-11574 jest szeroko stosowany w projektach elektronicznych.
Schemat obwodu dla połączenia czujnika impulsów z mikrokontrolerem PIC
Tutaj podłączyliśmy czujnik tętna do drugiego pinu jednostki mikrokontrolera. Ponieważ czujnik dostarcza dane analogowe, musimy przekonwertować dane analogowe na sygnał cyfrowy, wykonując niezbędne obliczenia.
Kryształ 20 MHz oscylatora jest połączony poprzez dwa kołki OSC z mikrokontrolerem z dwoma kondensatorami ceramicznymi 33pF. Wyświetlacz LCD jest podłączony przez port RB mikrokontrolera.
PIC16F877A Objaśnienie kodu monitora tętna
Kod jest nieco skomplikowany dla początkujących. Producent udostępnił przykładowe kody dla czujnika SEN-11574, ale został on napisany dla platformy Arduino. Musimy przekonwertować obliczenia dla naszego mikroczipa, PIC16F877A. Kompletny kod jest podany na końcu tego projektu wraz z filmem demonstracyjnym. Obsługiwane pliki C można pobrać stąd.
Nasz przepływ kodu jest stosunkowo prosty, a kroki wykonaliśmy przy użyciu przełącznika . Jak podaje producent, dane z czujnika musimy pobierać co 2 milisekundy. Więc użyliśmy procedury obsługi przerwania timera, która będzie uruchamiać funkcję co 2 milisekundy.
Nasz przepływ kodu w instrukcji switch będzie wyglądał następująco:
Przypadek 1: Przeczytaj ADC
Przypadek 2: Oblicz tętno i IBI
Przypadek 3: Pokaż bicie serca i IBI na wyświetlaczu LCD
Przypadek 4: IDLE (nic nie rób)
W funkcji przerwania timera zmieniamy stan programu na Przypadek 1: Czytaj ADC co 2 milisekundy.
Tak więc w funkcji głównej zdefiniowaliśmy stan programu i wszystkie przypadki przełączania .
void main () { system_init (); main_state = READ_ADC; while (1) { przełącznik (stan_główny) { przypadek READ_ADC: { adc_value = ADC_Read (0); // 0 to numer kanału main_state = CALCULATE_HEART_BEAT; przerwa; } przypadek CALCULATE_HEART_BEAT: { oblicz_bicie_heartu (wartość_adc); main_state = SHOW_HEART_BEAT; przerwa; } case SHOW_HEART_BEAT: { if (QS == true) {// A Heartbeat Was Found // Określono BPM i IBI // Quantified Self "QS" true, gdy Arduino znajdzie puls QS = false; // zresetuj flagę Quantified Self na następny raz // 0.9 używane do uzyskania lepszych danych. w rzeczywistości nie powinno być używane BPM = BPM * 0,9; IBI = IBI / 0,9; lcd_com (0x80); lcd_puts ("BPM: -"); lcd_print_number (BPM); lcd_com (0xC0); lcd_puts ("IBI: -"); lcd_print_number (IBI); } } main_state = IDLE; przerwa; sprawa IDLE: { przerwa; } domyślnie: { } } } }
Używamy dwóch sprzętowych urządzeń peryferyjnych PIC16F877A: Timer0 i ADC.
W pliku timer0.c
TMR0 = (uint8_t) (tmr0_mask & (256 - (((2 * _XTAL_FREQ) / (256 * 4)) / 1000)));
To obliczenie zapewnia 2 milisekundowe przerwanie timera. Formuła obliczeniowa to
// TimerCountMax - (((opóźnienie (ms) * Focs (hz)) / (PreScale_Val * 4)) / 1000)
Jeśli widzimy funkcję timer_isr , jest to:
void timer_isr () { main_state = READ_ADC; }
W tej funkcji stan programu zmienia się na READ_ADC co 2 ms.
Następnie funkcja CALCULATE_HEART_BEAT jest pobierana z przykładowego kodu Arduino.
void calc_heart_beat (int adc_value) { Signal = adc_value; sampleCounter + = 2; // śledzenie czasu w mS za pomocą tej zmiennej int N = sampleCounter - lastBeatTime; // monitoruj czas od ostatniego uderzenia, aby uniknąć szumu // znajdź szczyt i dół fali tętna if (Signal <thresh && N> (IBI / 5) * 3) {// unikaj szumu dichrotycznego czekając 3/5 ostatniego IBI if (Signal <T) {// T jest doliną T = Signal; // śledź najniższy punkt fali tętna } } …………. ………………………..
Ponadto pełny kod jest podany poniżej i dobrze wyjaśniony w komentarzach. Te dane z czujnika bicia serca mogą być dalej przesyłane do chmury i monitorowane przez Internet z dowolnego miejsca, dzięki czemu jest to system monitorowania bicia serca oparty na IoT. Kliknij łącze, aby dowiedzieć się więcej.
Pobierz obsługiwane pliki C dla tego projektu czujnika tętna PIC stąd.