42 1 582KB
Universitarea din Pitesti Master SECPI
Proiect Senzori si actuatori in procesele industriale
Profesor coordonator: Monica Anca Chita
Studenti: Bilcan Costinel Ispas Cristian Tanasescu Claudiu
Senzor pentru detectarea ritmului cardiac
Poza de ansamblu a machetei
Prezentarea proiectului
Titlul temei: Sistem pentru detectarea pulsului cardiac. Masurarea ritmului cardiac reprezinta ecoul sistemului cardiovascular uman. Acest proiect demonstreaza o tehnica de masurare a pulsului inimii prin detectarea schimbarii volumului de sange din arterele unui deget in timp ce inima pompeaza sange. Proiectul consta intr-o dioda infrarosu ce transmite un semnal infrarosu prin varful degetului, o parte din acesta fiind reflectat de celulele sangelui. Semnalul reflectat este detectat de o fotodioda. Schimbarea volumului de sange cu fiecare bataie a inimii rezulta intr-un tren de impulsuri la iesirea fotodiodei, a carei magnitudine este prea mica pentru a fi detectata direct de catre microcontroller. Prin urmare o amplificare in doua etaje, cu un filtru trece jos este proiectat folosind doua amplificatoare operationale pentru a filtra si amplifica semnalul pana la nivelul de tensiune adecvat astfel incat impulsurile sa poata fi contorizare de un microcontroller. Ritmul cardiac este afisat pe un ecran LCD 16X2 de tip PC1602A. Microcontrollerul folosit in acest proiect este PIC16F648A. LCD-ul este un dispozitiv de iesire care primeste informatie de la microcontroller. Afisajul este limitat doar la reprezentarea textului monocrom si este intalnit in mod frecvent la copiatoare, fax, imprimante si alte dispozitive de uz comun.
Teorie Ritmul cardiac reprezinta numarul de batai ale inimii pe o unitate de timp si de obicei este exprimata in batai pe minut (bpm). La adulti o inima normala bate de aproximativ 60 pana la 100 de ori pe minut in conditii de odihna. Pulsul unei inimi odihnite este legat in mod direct de sanatatea si conditia fizica a unei persoane si din aceasta cauza este important de stiut. Senzorul consta intr-o dioda emitatoare de lumina infrarosie si o fotodioda, plasate una langa cealalta. Diode IR transmite o lumina infrarosie in varful degetului (plasat peste senzor), si fotodioda simte portiunea de lumina ce este reflectata. Densitatea luminii reflectate depinde de volumul de sange din varful degetului. Deci, fiecare bataie a inimii modifica usor cantitatea de lumina infrarosie reflectata ce poate fi detectata de fotodioda. Cu o conditionare corecta a semnalului aceasta schimbare minora in amplitudinea luminii reflectate poate fi convertita intr-un puls. Pulsurile pot fi mai tarziu numarate de catre microcontroller pentru a determina ritmul cardiac. In primul rand, ce este o fotodioda? O fotodioda este un fotodetector capabil sa converteasca lumina in tensiune sau curent. Ce inseamna asta? Ca in functie de intensitatea si lungimea de unda a radiatiei noastre,
fotodioda ne da un raspuns in tensiune (fotodioda in regim fotovoltaic) sau curent (regim fotoconductiv).
Schema Circuitul de conditionare al semnalului consta in 2 filtre active trece jos identice cu o frecventa de taiere de aproximativ 2,5 Hz. Acest lucru inseamna ca ritmul cardiac maxim masurabil este de aproximativ este de aprox 150 bpm. Amplificatorul operational folosit in acest circuit este LM324N, un amplificator operational ce contine patru amplificatoare operationale. Amplificatorul functioneaza de la o singura sursa de alimentare de 5V. Filtrarea realizata la intrarea in amplificatoare este necesara pentru a bloca zgomotul de frecvente inalte 50 Hz. Castigul in tensiune al fiecarui filtru, pe fiecare etaj de amplificare, este de 101. Rezultand o amplificare totala de aproximativ 10000. Este necesara utilizarea unui condensator de 1 uF la intrarea fiecarui etaj de amplificare pentru a bloca component continua din semnal. Ecuatiile pentru calcularea castigului si frecventei de taiere corespunzatoare filtrului trece jos activ sunt prezentare in continuare:
Etaj de preluare a semnalului de la senzor si amplificarea acestuia.
Schema bloc a microcontroller-ului si circuitele adiacente ale acestuia (LCD si Buton Start )
Afisajul LCD folosit in cadrul acestui proiect este unul ce poate afisa 16 caractere pe 2 linii. Modul folosit pentru comunicarea cu acesta a fost pe 4 biti deoarece PIC-ul nu dispunea de un numar foarte mare de pini. Pentru functionarea corecta a LCD-ului s-a folosit modul de conectare afisat in imaginea de mai sus. Am folosit un potentiometru pentru reglarea contrastului afisajului.
Modul de functionare al senzorului:
Lista materialelor folosite :
-
Microcontroller PIC16F648A OpAmp LM324N LCD 16x2 Tranzistor BC547 Un buton cu 2 stari (On/Off) Potentiometru 50K Ohm Placa PCB Baterie 9V Cabluri Mufa alimentare Dioda IR Fotodioda IR (Senzorul IR) 2x Condensatoare 100nF 2x Condensatoare electrolitice 1uF 2x Rezistor 680k 2x Rezistor 68k 2x Rezistor 6,8k Rezistor 10K Rezistor 1K Rezistor 150 Ohm Rezistor 33K Rezistor 470 Ohm Led
Codul sursa: // Variabile ce reprezinta pinii conectati la LCD sbit LCD_RS at RB0_bit; sbit LCD_EN at RB1_bit; sbit LCD_D7 at RB5_bit; sbit LCD_D6 at RB4_bit; sbit LCD_D5 at RB3_bit; sbit LCD_D4 at RB2_bit; // Variabile ce definesc directionalitatea pinilor; sbit LCD_RS_Direction at TRISB0_bit; sbit LCD_EN_Direction at TRISB1_bit; sbit LCD_D7_Direction at TRISB5_bit; sbit LCD_D6_Direction at TRISB4_bit; sbit LCD_D5_Direction at TRISB3_bit; sbit LCD_D4_Direction at TRISB2_bit; // Variabile ce reprezinta restul pinilor folositi in proiect (Dioda IR, Buton Start, Citire date senzor IR); sbit IR_Tx at RA3_bit; sbit DD0_Set at RA2_bit; sbit DD1_Set at RA1_bit; sbit DD2_Set at RA0_bit; sbit start at RB7_bit; // Variabile folosite in functiile programului; unsigned int pulserate, pulsecount; unsigned int i, t, j; unsigned char txt[3]; // functii delay folosite pentru a pune microcontroller-ul in asteptare dupa setarea unor configuratii; void delay_debounce(){ Delay_ms(300); } void delay_refresh(){ Delay_ms(5);} // Functie de numarare pulsuri prin furnizarea de semnal catre dioda IR si citirea semnalului de la senzorul IR void countpulse(){ IR_Tx = 1; delay_debounce(); TMR0=0; Delay_ms(1000); // Delay 1 Sec IR_Tx = 0;
pulsecount = TMR0; pulserate = pulsecount*4; } // Functie de afisare a pulsului pe LCD void display1(unsigned int x) { Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); IntToStr(x,txt); Lcd_Out_CP("Pulse :"); Lcd_Out_CP(txt); } // Functia principal void main() { // Parte de configurare a microcontroller-ului CMCON = 0x07; // Disable Comparators TRISA = 0b00110000; // RA4/T0CKI input, RA5 is I/P only TRISB = 0b10000000; // RB7 input, rest output OPTION_REG = 0b00101000; // Prescaler (1:1), TOCS =1 for counter mode pulserate = 0; j = 1; // Parte de configurare si initializare a LCD-ului folosind functii implementate in cadrul compilatorului Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); // Afisare initiala a pulsului inainte de a fi citit; display1(pulserate); // Bucla infinita in care programul citeste starea butonului de start iar daca acesta este apasat ruleaza functia de citire a pulsului si o afiseaza; do { if(!start) delay_debounce(); if (!start){ countpulse(); j= 3; display1(pulserate); } } while(1); // Infinite loop }
Bibliografie: -
http://embedded-lab.com/blog/?p=5508 http://www.engineersgarage.com/electronic-components/16x2-lcd-module-datasheet http://ww1.microchip.com/downloads/en/DeviceDoc/40044E.pdf http://pdf1.alldatasheet.com/datasheet-pdf/view/27228/TI/LM324N.html http://en.wikipedia.org/wiki/Light-emitting_diode http://en.wikipedia.org/wiki/Photodiode