- Mga Kinakailangan na Bahagi
- Pulse Sensor SEN-11574
- Circuit Diagram para sa Pulse Sensor na nakikipag-ugnay sa PIC Microcontroller
- PIC16F877A Pagpapaliwanag ng Code para sa Heart Beat Monitor
Ang rate ng Heart Beat ay pinakamahalagang parameter sa pagsubaybay sa kalusugan ng sinumang tao. Sa modernong panahon ng mga naisusuot na aparato, maraming mga aparato na maaaring masukat ang tibok ng puso, presyon ng dugo, mga yabag, nasunog na calorie at maraming iba pang mga bagay. Ang mga aparato ay may sensor ng pulso sa loob ng mga ito upang maunawaan ang rate ng pulso. Ngayon, gagamit din kami ng isang pulse sensor na may PIC Microcontroller upang mabilang ang pintig ng puso bawat minuto at ang Inter-Beat Interval, ang mga halagang ito ay karagdagang ipapakita sa 16x2 character LCD. Gagamitin namin ang PIC16F877A PIC microcontroller sa proyektong ito. Nag-interfaced na kami ng pulse sensor kasama ang Arduino para sa Patient Monitoring System.
Mga Kinakailangan na Bahagi
- PIC16F877A microcontroller
- 20 Mhz Crystal
- 33pF capacitor 2 pcs
- 4.7k risistor 1 pcs
- 16x2 Character LCD
- 10K palayok para sa kontrol ng kaibahan ng LCD
- SEN-11574 Pulse sensor
- Strap ng Velcro
- 5V Power adapter
- Mga wire ng Breadboard at hookup
Pulse Sensor SEN-11574
Upang sukatin ang tibok ng puso kailangan namin ng sensor ng pulso. Napili namin dito ang SEN-11574 pulse sensor na madaling magagamit sa mga online o offline na tindahan. Ginamit namin ang sensor na ito dahil may mga sample code na ibinigay mula sa tagagawa, ngunit iyon ay isang Arduino code. Na-convert namin ang code na iyon para sa aming PIC microcontroller.
Ang sensor ay talagang maliit at perpekto para sa pagbabasa ng tibok ng puso sa kabuuan ng earlobe o sa daliri. Ito ay 0.625 "ang lapad at 0.125" makapal mula sa bilog na bahagi ng PCB.
Ang sensor na ito ay nagbibigay ng isang analog signal at ang sensor ay maaaring hinimok ng 3V o 5V, ang kasalukuyang pagkonsumo ng sensor ay 4 mA, na mahusay para sa mga mobile application. Ang sensor ay may tatlong kawad na may 24 "mahabang hookup cable at berg male header sa dulo. Gayundin, ang sensor ay may Velcro Finger Strap upang maisusuot ito sa kabuuan ng daliri.
Ang skema ng Pulse Sensor ay ibinibigay din ng gumawa at magagamit din sa sparkfun.com.
Ang sensor ng eskematiko ay binubuo ng optical heart-rate sensor, pagkansela ng ingay RC circuitry o mga filter, na makikita sa diagram ng eskematiko. Ang R2, C2, C1, C3 at isang pagpapatakbo na amplifier MCP6001 ay ginagamit para sa maaasahang pinalakas na analog output.
Mayroong ilang iba pang mga sensor para sa Heart Beat Monitoring ngunit ang SEN-11574 pulse sensor ay malawakang ginagamit sa mga proyekto sa Electronics.
Circuit Diagram para sa Pulse Sensor na nakikipag-ugnay sa PIC Microcontroller
Dito nakakonekta namin ang sensor ng pulso sa isang 2 nd pin ng unit ng microcontroller. Habang nagbibigay ang sensor ng analog data, kailangan naming baguhin ang analog data sa digital signal sa pamamagitan ng paggawa ng mga kinakailangang kalkulasyon.
Ang Crystal oscillator ng 20Mhz ay konektado sa kabuuan ng dalawang mga pin ng OSC ng unit ng microcontroller na may dalawang ceramic 33pF capacitor. Ang LCD ay konektado sa kabila ng RB port ng microcontroller.
PIC16F877A Pagpapaliwanag ng Code para sa Heart Beat Monitor
Ang code ay medyo kumplikado para sa mga nagsisimula. Ang tagagawa ay nagbigay ng mga sample code para sa sensor ng SEN-11574, ngunit isinulat ito para sa platform ng Arduino. Kailangan naming i-convert ang pagkalkula para sa aming microchip, PIC16F877A. Ang kumpletong code ay ibinibigay sa pagtatapos ng proyektong ito na may isang Demonstration Video. At ang mga sumusuporta sa mga C file ay maaaring ma-download mula dito.
Ang aming daloy ng code ay medyo simple at gumawa kami ng mga hakbang gamit ang isang switch case. Tulad ng bawat tagagawa, kailangan naming makuha ang data mula sa sensor sa bawat 2 milliseconds. Kaya, gumamit kami ng isang timer na nakakagambala sa serbisyo na gawain na magpaputok ng isang function sa bawat 2 milliseconds.
Ang aming daloy ng code sa pahayag ng switch ay magiging ganito:
Kaso 1: Basahin ang ADC
Kaso 2: Kalkulahin ang Heart Beat at IBI
Kaso 3: Ipakita ang tibok ng puso at IBI sa LCD
Kaso 4: IDLE (Huwag gumawa ng anuman)
Sa loob ng pag-andar ng timer timer, binabago namin ang estado ng programa sa Case 1: Basahin ang ADC sa bawat 2 milliseconds.
Kaya, sa pangunahing pagpapaandar, tinukoy namin ang estado ng programa at lahat ng mga kaso ng paglipat .
void main () { system_init (); main_state = READ_ADC; habang (1) { switch (main_state) { case READ_ADC: { adc_value = ADC_Read (0); // 0 ang numero ng channel main_state = CALCULATE_HEART_BEAT; pahinga; } case CALCULATE_HEART_BEAT: { calcul_heart_beat (adc_value); main_state = SHOW_HEART_BEAT; pahinga; } case SHOW_HEART_BEAT: { if (QS == true) {// A Heartbeat Was Found // BPM and IBI have been Determined // Quantified Self "QS" true when Arduino found a heartbeat QS = false; // reset ang Quantified Self flag para sa susunod // 0.9 ginamit para sa pagkuha ng mas mahusay na data. talagang hindi dapat gamitin 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; pahinga; case IDLE: { break; } default: { } } } }
Gumagamit kami ng dalawang mga peripheral ng hardware ng PIC16F877A: Timer0 at ADC.
Sa loob ng timer0.c file, TMR0 = (uint8_t) (tmr0_mask & (256 - (((2 * _XTAL_FREQ) / (256 * 4)) / 1000)));
Ang pagkalkula na ito ay nagbibigay ng 2 milliseconds timer makagambala. Ang formula sa pagkalkula ay
// TimerCountMax - (((pagkaantala (ms) * Fflix (hz)) / (PreScale_Val * 4)) / 1000)
Kung nakikita natin ang pag- andar ng timer_isr , ito ay-
void timer_isr () { main_state = READ_ADC; }
Sa pagpapaandar na ito ang estado ng programa ay binago sa READ_ADC sa bawat 2ms.
Pagkatapos ang pag- andar ng CALCULATE_HEART_BEAT ay kinuha mula sa halimbawa ng Arduino na code.
void calcul_heart_beat (int adc_value) { Signal = adc_value; sampleCounter + = 2; // subaybayan ang oras sa mS kasama ang variable na int N = sampleCounter - lastBeatTime; // subaybayan ang oras mula nang huling matalo upang maiwasan ang ingay // hanapin ang tuktok at labangan ng alon ng pulso kung (Signal <thresh && N> (IBI / 5) * 3) {// iwasan ang dichrotic na ingay sa pamamagitan ng paghihintay sa 3/5 ng huling IBI kung (Signal <T) {// T ay ang labangan ng T = Signal; // subaybayan ang pinakamababang punto sa alon ng pulso } } …………. ………………………..
Dagdag dito, ang kumpletong code ay ibinibigay sa ibaba at mahusay na ipinaliwanag ng mga komento. Ang data ng heart beat sensor na ito ay maaaring karagdagang na-upload sa cloud at sinusubaybayan sa internet mula sa kahit saan, na kung saan ay ginagawang IoT based Heart Beat Monitoring system, sundin ang link upang matuto nang higit pa.
Mag-download ng Mga sumusuporta sa mga C file para sa PIC Pulse Sensor Project na ito mula rito.