Nume: Gabriela Botea, Mihaela Dvornic
Grupa: 335CA
E-mail: gabriela.botea@gmail.com, dvmihaela@gmail.com
Un poligraf este un dispozitiv care interpreteaza in mod grafic cateva din semnalele biologice omenesti: frecventa pulsului,rezistenta galvanica a pielii (denumita si GSR), presiunea sangelui, frecventa respiratiei. Aceasta masina, impreuna cu un examinator certificat, este apoi folosita pentru a analiza stresul unei persoane interogate cu scopul de a distinge adevarul de minciuna.Aceste masini costa oriunde de la sute la mii de dolari;noi am construit una pentru cateva zeci de lei.
Am construit un poligraf care masoara frecventa pulsului, GSR si frecventa respiratiei. Masuratorile sunt apoi analizate si transmise unui calculator pentru o analiza viitoare folosind microcontrolerul ATMEL AVR Mega16.
Poligraful preia date analogice. Deoarece fiecare masuratoare necesita amplificarea semnalului generat de un senzor, am facut 3 circuite analogice, corespunzatoare fiecarui semnal. Acestea sunt atasate primilor 3 pini ale convertorului analog-digital (ADC) din microcontroler.
Primul circuit masoara frecventa pulsului. Acesta functioneaza pe principiul ca transmiterea luminilor infrarosii prin degetul unei persoane este o functie a debitului sangelui in deget.Aceasta se intampla deoarece, atunci cand inima pompeaza, este un debit mare de sange in varful degetului. Acest lucru duce la descresterea luminii receptionata de senzorul infrarosu, care poate fi masurata. Rata batailor inimii este o componenta cheie intr-un poligraf deoarece, sub anumite conditii stresante ritmul batailor inimii persoanei interogate va creste. Circuitul amplifica semnalul de aproximativ 10000 de ori si scoate zgomotele din semnalul de iesire. Masuratorile date de catre LED-ul IR si fotodioda sunt obtinute prin plasarea degetelor intre ele si mentinerea lor in pozitie cat mai fixa.
Al doilea circuit,probabil cel mai comun instrument de poligraf, masoara rezistenta pielii subiectului. Sub stres, persoana interogata va incepe sa transpire, reducand rezistenta masurata intre doua fire. Circuitul, desenat mai jos,este un divizor de tensiune urmat de un masurator de tensiune. Rezistentele au fost alese sa aiba aceeasi marime ca rezistenta individului.Deoarece aceasta este singura parte care trimite curent prin persoana interogata, am avut grija sa alegem o tensiune superioara moderata de 5V. Subiectul va atinge cele doua fire cu varfurile degetelor mijlociu si mare.
Ultimul circuit,care masoara frecventa respiratiei are un design asemanator cu primul circuit, cu exceptia ca in acest caz se foloseste un termistor ca senzor. Acesta este plasat langa gura subiectului interogat. Atunci cand acesta expira temperatura va creste iar dupa o scurta perioada, cand se inspira temperatira scade la valoarea ei originala. Circuitul amplifica semnalul de 100 de ori si il face sa tinda pana la 1,4V folosind doua diode 1N4001.
Software-ul consta in doua programe: un program in C care se incarca pe microcontroler si un program in MATLAB care ruleaza pe calculator. Functia microcontrolerului este de a esantiona multitudinea de semnale si sa le paseze programului in MATLAB.Programul MATLAB ia apoi semnalele, le omogenizeaza prin filtre low-pass, le afiseaza grafic, apoi ofera o analiza precum calculul ratei pulsului si respiratiei, mediile lor pe termen lung si deviatiile standard.
Codul Mega16
Programul in C care ruleaza pe Mega16 are avantajul versatilitatii ADC-ului. Setam prescalerul de esantionare A/D la 1/128 din ceasul de 16MHz.O proba este preluata la fiecare 10ms in Timer0 ISR. Folosim un pooling loop pentru a alege ce canal sa preia mostre in continuare.Valorile sunt suprascrise la fiecare prelevare de probe, asa ca majoritatea mostrelor sunt pierdute. Din moment ce semnalele au frecvente foarte mici, aceasta nu este o problema.
MATLAB Code
Programul MATLAB comunica cu microcontrolerul printr-o seriala RS-232, conexiune care este realizata la inceputul programului. Loopul principal captureaza datele, analizeaza si afiseaza grafic. In fiecare iteratie de loop, programul va cere date de la MEGA16, care va raspunde trimitand un vector de date (continand pulsul, GSR, semnalele de respiratie). Dupa captura, semnalele de puls si GSR sunt filtrate: printr-un filtru Gaussian cu 8 puncte, respectiv un filtru uniform cu 10 puncte. Apoi semnalele sunt reprezentate grafic. Graficele se realizeaza folosind handlere de plot, in loc sa se foloseasca functii de plot conventionale. Acest lucru este datorat overheadului implicat in comenzi de plot, precum scalarea pe axe si redesenare. Am folosit aceasta implementare deoarece refacerea celor trei grafice este prea costisitoare pentru a fi rezolvata in real-time.
Inaintea analizarii datelor, se aloca timp arbitrar pentru sistem sa se incalzeasca. De exemplu, poate dura pana la 5 secunde pentru ca semnalul de puls tranzitoriu sa se stabilizeze, inainte ca datele sa fie capturate. Dupa ce timpul de incalzire se termina, putem incepe analiza datelor, precum calcularea ratelor de puls si respiratie. Frecventa respiratiei instantanee este calculata bazandu-ne pe o fereastra in miscare a semnalului de respiratie. Acest semnal corespunde cand subiectul respira. Atunci cand persoana interogata inspira, tensiunea este ridicata, iar atunci cand expira, tensiunea este joasa. Asadar, atunci cand este o marire in tensiune, se indica faptul ca subiectul a inspirat. Am implementat o schema care sa captureze valorile ridicate ale semnalului folosind o functie open source pentru detectarea punctelor culminante. Apoi se calculeaza perioada dintre aceste maxime, sau frecventa; se reprezinta grafic punctele culminante ale semnalului folosind acele handlere amintite mai devreme. Frecventa medie a respiratiei se calculeaza folosind fiecare proba din toate probele prelevate pana la momentul curent.
Frecventa pulsului este calculata similar, in acest caz fereastra in miscare este mai aproape intrucat frecventa pulsului este mai mare decat cea a respiratiei. In acest caz, o tensiune mai ridicata indica o bataie de inima. Media frecventelor pulsului si deviatiile standard sunt calculate in real time pentru fiecare proba, la fel ca la respiratie.
GSR este determinat mai usor decat frecventa deoarece nu este periodic. Folosind divizorul de tensiune si legile rezistentelor in paralel, se determina rezistenta pielii.
La realizarea acestui proiect am intampinat probleme la rularea programului pe placuta; bootloader-ul nu mergea corect. De asemenea, rezultatele nu au fost cele dorite, deoarece matlab-ul nu era compatibil cu versiunea de windows 7, iar output-ul era deformat din cauza lipsei implementarii unor functii in matlab (le-am implementat separat, dar output-ul era la fel de deformat).