- Szükséges alkatrészek
- Pulzusérzékelő SEN-11574
- A PIC mikrovezérlővel összeköttetésben lévő impulzus-érzékelő kapcsolási rajza
- PIC16F877A kódmagyarázat a szívverés monitorhoz
A szívverés gyakorisága a legfontosabb paraméter az emberek egészségi állapotának ellenőrzésében. A viselhető eszközök modern korszakában sok olyan eszköz van, amely képes mérni a szívverést, a vérnyomást, a lépéseket, az elégetett kalóriákat és még sok minden mást. Ezekben az eszközökben impulzusérzékelő van, amely érzékeli a pulzusszámot. Ma a PIC mikrovezérlővel ellátott pulzusérzékelőt is használjuk a percenkénti szívverés és az ütemek közötti intervallum számlálására, ezek az értékek tovább megjelennek a 16x2 karakteres LCD-n. Ebben a projektben a PIC16F877A PIC mikrovezérlőt fogjuk használni. Már csatlakoztattuk a pulzusérzékelőt az Arduino-hoz a betegfigyelő rendszerhez.
Szükséges alkatrészek
- PIC16F877A mikrovezérlő
- 20 Mhz kristály
- 33pF kondenzátor 2 db
- 4,7k ellenállás 1 db
- 16x2 karakteres LCD
- 10K pot az LCD kontrasztszabályozásához
- SEN-11574 impulzusérzékelő
- Tépőzáras heveder
- 5 V-os hálózati adapter
- Kenyérlemez és összekötő vezetékek
Pulzusérzékelő SEN-11574
A szívverés méréséhez pulzusérzékelőre van szükségünk. Itt választottuk ki a SEN-11574 impulzusérzékelőt, amely könnyen elérhető online vagy offline üzletekben. Ezt az érzékelőt használtuk, mivel vannak mintakódok a gyártótól, de ez egy Arduino kód. Átalakítottuk ezt a kódot a PIC mikrovezérlőnkhöz.
Az érzékelő nagyon kicsi, és tökéletes a szívdobbanások leolvasásához a fülcimpán vagy az ujjbegyén. Átmérője 0,625 ”, vastagsága a kerek NYÁK-oldalról 0,125”.
Ez az érzékelő analóg jelet szolgáltat, és az érzékelő 3 V vagy 5 V feszültséggel működtethető, az érzékelő áramfelvétele 4 mA, ami nagyszerű mobil alkalmazásokhoz. Az érzékelő három vezetékkel érkezik, 24 hüvelyk hosszú kábellel és a végén egy berg dugóval. Az érzékelő tépőzáras ujjpánttal is rendelkezik, hogy az ujját végig viselje.
Az impulzusérzékelő sematikáját a gyártó is biztosítja, és elérhető a sparkfun.com oldalon is.
Az érzékelő vázlata optikai pulzusérzékelőből, zajcsökkentő RC áramkörből vagy szűrőkből áll, amelyek a sematikus ábrán láthatók. R2, C2, C1, C3 és az MCP6001 operációs erősítőt használják a megbízható erősített analóg kimenethez.
Kevés más érzékelő van a szívverés monitorozásához, de a SEN-11574 impulzusérzékelőt széles körben használják az elektronikai projektekben.
A PIC mikrovezérlővel összeköttetésben lévő impulzus-érzékelő kapcsolási rajza
Itt van kötve a pulzusmérő egész egy 2 nd csap a mikrokontroller egységet. Mivel az érzékelő analóg adatokat szolgáltat, az analóg adatokat digitális jelekké kell átalakítanunk a szükséges számítások elvégzésével.
A Crystal oszcillátor 20MHz keresztül van kötve két OSC csapok a mikrokontroller egység két kerámia 33pF kondenzátorok. Az LCD a mikrokontroller RB portján keresztül csatlakozik.
PIC16F877A kódmagyarázat a szívverés monitorhoz
A kód egy kicsit bonyolult a kezdők számára. A gyártó mintakódokat adott a SEN-11574 érzékelőhöz, de az Arduino platformra írták. Át kell alakítanunk a PIC16F877A mikrochipünk számítását. A teljes kódot a projekt végén adjuk meg, bemutató videóval. A támogató C fájlok pedig innen tölthetők le.
Kódfolyamatunk viszonylag egyszerű, és a lépéseket egy kapcsolótáska segítségével hajtottuk végre. A gyártó szerint 2 milliszekundumban kell megkapnunk az adatokat az érzékelőtől. Tehát egy időzítő megszakítási szolgáltatási rutint használtunk, amely 2 milliszekundumban elindít egy funkciót.
A kód áramlás kapcsoló nyilatkozatot fog menni, mint ez:
1. eset: Olvassa el az ADC-t
2. eset: Számítsa ki a szívverést és az IBI-t
3. eset: Mutassa meg a szívverést és az IBI-t az LCD-n
4. eset: IDLE (semmit sem csinál)
Az időzítő megszakítási funkción belül a program állapotát 1. esetre változtatjuk: Olvassa el az ADC-t 2 milliszekundumonként.
Tehát a fő funkcióban meghatároztuk a program állapotát és az összes kapcsolási esetet.
void main () { system_init (); main_state = READ_ADC; while (1) { switch (main_state) { eset READ_ADC: { adc_value = ADC_Read (0); // 0 a főállomás csatornaszáma = CALCULATE_HEART_BEAT; szünet; } eset CALCULATE_HEART_BEAT: { kiszámítja a szívét (adc_érték); main_state = SHOW_HEART_BEAT; szünet; } eset SHOW_HEART_BEAT: { if (QS == true) {// Szívverést találtak // A BPM és az IBI meghatározása megtörtént // Kvantifikált Ön "QS" igaz, ha Arduino szívverést talál QS = hamis; // állítsa vissza a Quantified Self zászlót következő alkalommal // 0,9 jobb adatok megszerzéséhez. valójában nem használható BPM = BPM * 0,9; IBI = IBI / 0,9; lcd_com (0x80); lcd_puts ("BPM: -"); lcd_print_szám (BPM); lcd_com (0xC0); lcd_puts ("IBI: -"); lcd_print_szám (IBI); } } main_state = IDLE; szünet; eset IDLE: { törés; } alapértelmezett: { } } } }
A PIC16F877A két hardveres perifériáját használjuk: Timer0 és ADC.
A timer0.c fájlban, TMR0 = (uint8_t) (tmr0maszk & (256 - (((2 * _XTAL_FREQ) / (256 * 4)) / 1000)));
Ez a számítás biztosítja a 2 milliszekundumos időzítő megszakítást. A számítási képlet az
// TimerCountMax - (((késleltetés (ms) * Focs (hz)) / (PreScale_Val * 4)) / 1000)
Ha látjuk a timer_isr függvényt, akkor ez
void timer_isr () { main_state = READ_ADC; }
Ebben a funkcióban a program állapota 2 másodpercenként READ_ADC-re változik.
Ezután a CALCULATE_HEART_BEAT függvény az Arduino példakódból származik.
void calc_heart_beat (int adc_value) { Jel = adc_érték; sampleCounter + = 2; // nyomon kell követni az időt mS-ben ezzel a változóval int N = sampleCounter - lastBeatTime; // figyelje az utolsó ütés óta eltelt időt a zaj elkerülése érdekében // keresse meg az impulzushullám csúcsát és mélységét, ha (Signal <thresh && N> (IBI / 5) * 3) {// elkerülhető a dichrotikus zaj a várakozással 3/5 az utolsó IBI értéke, ha (Signal <T) {// T a vályú T = Signal; // nyomon kell követni az impulzushullám legalacsonyabb pontját } } …………. ………………………..
Ezenkívül a teljes kódot az alábbiakban adjuk meg, és a megjegyzések jól magyarázzák. Ezeket a szívverés-érzékelő adatokat tovább töltheti fel a felhőbe, és bárhonnan megfigyelheti az interneten keresztül, ami IoT-alapú szívverés-figyelő rendszerré teszi. A további információkért kövesse a linket.
Innen töltse le a PIC impulzusérzékelő projekt támogató C fájljait.