- Erforderliche Komponenten
- Impulssensor SEN-11574
- Schaltplan für die Schnittstelle des Pulssensors mit dem PIC-Mikrocontroller
- PIC16F877A Code Erläuterung für den Herzschlagmonitor
Die Herzschlagfrequenz ist der wichtigste Parameter bei der Überwachung der Gesundheit einer Person. In der modernen Ära tragbarer Geräte gibt es viele Geräte, die Herzschlag, Blutdruck, Schritte, verbrannte Kalorien und viele andere Dinge messen können. In diesen Geräten befindet sich ein Pulssensor zur Erfassung der Pulsfrequenz. Heute werden wir auch einen Impulssensor mit PIC-Mikrocontroller verwenden, um den Herzschlag pro Minute und das Inter-Beat-Intervall zu zählen. Diese Werte werden weiterhin auf einem 16x2-Zeichen-LCD angezeigt. In diesem Projekt werden wir den PIC16F877A PIC-Mikrocontroller verwenden. Wir haben den Pulssensor bereits mit Arduino for Patient Monitoring System verbunden.
Erforderliche Komponenten
- PIC16F877A Mikrocontroller
- 20 MHz Kristall
- 33pF Kondensator 2 Stck
- 4,7k Widerstand 1 Stck
- 16x2 Zeichen LCD
- 10K Pot zur Kontrastregelung des LCD
- SEN-11574 Impulssensor
- Klettverschluss
- 5V Netzteil
- Steckbrett und Anschlussdrähte
Impulssensor SEN-11574
Um den Herzschlag zu messen, benötigen wir einen Pulssensor. Hier haben wir den Impulssensor SEN-11574 ausgewählt, der problemlos in Online- oder Offline-Geschäften erhältlich ist. Wir haben diesen Sensor verwendet, da vom Hersteller Beispielcodes bereitgestellt werden, dies ist jedoch ein Arduino-Code. Wir haben diesen Code für unseren PIC-Mikrocontroller konvertiert.
Der Sensor ist sehr klein und perfekt zum Ablesen des Herzschlags über das Ohrläppchen oder an der Fingerspitze. Es hat einen Durchmesser von 0,625 Zoll und eine Dicke von 0,125 Zoll von der runden Leiterplattenseite.
Dieser Sensor liefert ein analoges Signal und der Sensor kann mit 3 V oder 5 V betrieben werden. Der Stromverbrauch des Sensors beträgt 4 mA, was für mobile Anwendungen ideal ist. Der Sensor wird mit drei Drähten mit 24 Zoll langem Anschlusskabel und Berg-Stecker am Ende geliefert. Außerdem wird der Sensor mit einem Klettverschluss geliefert, um ihn über der Fingerspitze zu tragen.
Das Schema des Pulssensors wird ebenfalls vom Hersteller bereitgestellt und ist auch auf sparkfun.com verfügbar.
Das Sensorschema besteht aus einem optischen Herzfrequenzsensor, einer Rauschunterdrückungs-RC-Schaltung oder Filtern, die im schematischen Diagramm zu sehen sind. R2, C2, C1, C3 und ein Operationsverstärker MCP6001 werden für einen zuverlässigen verstärkten Analogausgang verwendet.
Es gibt nur wenige andere Sensoren für die Herzschlagüberwachung, aber der Impulssensor SEN-11574 wird häufig in Elektronikprojekten verwendet.
Schaltplan für die Schnittstelle des Pulssensors mit dem PIC-Mikrocontroller
Hier haben wir den angeschlossenen Pulssensor über einen 2 nd Pin des Mikrocontrollers Einheit. Da der Sensor analoge Daten liefert, müssen wir die analogen Daten durch notwendige Berechnungen in digitale Signale umwandeln.
Der 20-MHz-Quarzoszillator ist über zwei OSC-Pins der Mikrocontrollereinheit mit zwei keramischen 33pF-Kondensatoren verbunden. Das LCD wird über den RB-Port des Mikrocontrollers angeschlossen.
PIC16F877A Code Erläuterung für den Herzschlagmonitor
Der Code ist für Anfänger etwas komplex. Der Hersteller hat Beispielcodes für den SEN-11574-Sensor bereitgestellt, diese wurden jedoch für die Arduino-Plattform geschrieben. Wir müssen die Berechnung für unseren Mikrochip PIC16F877A konvertieren. Der vollständige Code wird am Ende dieses Projekts mit einem Demonstrationsvideo angegeben. Die unterstützenden C-Dateien können hier heruntergeladen werden.
Unser Code-Fluss ist relativ einfach und wir haben die Schritte mit einem Switch- Fall durchgeführt. Laut Hersteller müssen wir die Daten alle 2 Millisekunden vom Sensor abrufen. Daher haben wir eine Timer-Interrupt-Serviceroutine verwendet, die alle 2 Millisekunden eine Funktion auslöst.
Unser Code-Fluss in der switch- Anweisung sieht folgendermaßen aus:
Fall 1: Lesen Sie den ADC
Fall 2: Berechnen Sie den Herzschlag und den IBI
Fall 3: Zeigen Sie den Herzschlag und den IBI auf dem LCD an
Fall 4: LEERLAUF (nichts tun)
Innerhalb der Timer-Interrupt-Funktion ändern wir den Status des Programms in Fall 1: Lesen Sie den ADC alle 2 Millisekunden.
Also, in der Haupt- Funktion definierten wir den Programmzustand und alle Schalter Fälle.
void main () { system_init (); main_state = READ_ADC; while (1) { switch (main_state) { case READ_ADC: { adc_value = ADC_Read (0); // 0 ist die Kanalnummer main_state = CALCULATE_HEART_BEAT; Unterbrechung; } case CALCULATE_HEART_BEAT: { berechne_herz_schlag (adc_value); main_state = SHOW_HEART_BEAT; Unterbrechung; } case SHOW_HEART_BEAT: { if (QS == true) {// Ein Herzschlag wurde gefunden // BPM und IBI wurden bestimmt // Quantifiziertes Selbst "QS" wahr, wenn Arduino einen Herzschlag findet QS = false; // setze das Flag Quantified Self für das nächste Mal zurück // 0.9 wird verwendet, um bessere Daten zu erhalten. sollte eigentlich nicht verwendet werden 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; Unterbrechung; case IDLE: { break; } Standard: { } } } }
Wir verwenden zwei Hardware-Peripheriegeräte des PIC16F877A: Timer0 und ADC.
In der Datei timer0.c
TMR0 = (uint8_t) (tmr0_mask & (256 - (((2 * _XTAL_FREQ) / (256 * 4)) / 1000)));
Diese Berechnung liefert den 2-Millisekunden-Timer-Interrupt. Die Berechnungsformel lautet
// TimerCountMax - (((Verzögerung (ms) * Focs (hz)) / (PreScale_Val * 4)) / 1000)
Wenn wir die Funktion timer_isr sehen , ist es-
void timer_isr () { main_state = READ_ADC; }}
In dieser Funktion wird der Programmstatus alle 2 ms in READ_ADC geändert.
Dann wird die Funktion CALCULATE_HEART_BEAT aus dem Arduino-Beispielcode übernommen.
void berechne_herz_schlag (int adc_value) { Signal = adc_value; sampleCounter + = 2; // Verfolge die Zeit in mS mit dieser Variablen int N = sampleCounter - lastBeatTime; // Überwachen Sie die Zeit seit dem letzten Schlag, um Rauschen zu vermeiden. // Finden Sie die Spitze und Talsohle der Pulswelle, wenn (Signal <Thresh && N> (IBI / 5) * 3) {// Vermeiden Sie dichrotisches Rauschen, indem Sie 3/5 warten des letzten IBI wenn (Signal <T) {// T ist der Trog T = Signal; // Verfolge den niedrigsten Punkt in der Pulswelle } } …………. ………………………..
Ferner ist der vollständige Code unten angegeben und wird durch die Kommentare gut erklärt. Diese Herzschlagsensordaten können von überall aus in die Cloud hochgeladen und über das Internet überwacht werden. Dadurch ist es ein IoT-basiertes Herzschlagüberwachungssystem. Folgen Sie dem Link, um weitere Informationen zu erhalten.
Laden Sie hier unterstützende C-Dateien für dieses PIC-Pulssensorprojekt herunter.