Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2022:avaduva:lie_detector [2022/05/29 13:17]
cristiana.olteanu
pm:prj2022:avaduva:lie_detector [2022/06/01 14:28] (current)
cristiana.olteanu [Descriere generală]
Line 1: Line 1:
 ====== Lie Detector ====== ====== Lie Detector ======
-Autor: [[cristiana.olteanu@stud.acs.upb.ro|Ștefania Cristiana Olteanu]]+Autor: [[cristiana.olteanu@stud.acs.upb.ro|Ștefania Cristiana Olteanu]]\\
 Grupa: 336CA Grupa: 336CA
 ===== Introducere ===== ===== Introducere =====
-Un test poligraf se bazeaza pe masurarea si inregistrarea unor parametrii fiziologici ai unui individ, cum ar fi pulsul, temperatura,​ respirația,​ perspiratia și conductivitatea pielii, in timp ce i se pun o serie de intrebari. Inca din cele mai vechi timpuri se considera ca a mintii ​determina+Un test poligraf se bazeaza pe masurarea si inregistrarea unor parametrii fiziologici ai unui individ, cum ar fi pulsul, temperatura,​ respirația,​ perspiratia și conductivitatea pielii, in timp ce i se pun o serie de intrebari. Inca din cele mai vechi timpuri se considera ca a minti determina
 efecte fiziologice colaterale. In acest proiect doresc sa simulez un "​detector de minciuni"​ care desi nu intotdeauna obtine rezultate corecte (unii oameni isi pot controla in mod constient reactia corpului lor) este un experiment interesant in a masura anumiti parametrii ai corpului si a vedea cum sau daca acestia se modifica. efecte fiziologice colaterale. In acest proiect doresc sa simulez un "​detector de minciuni"​ care desi nu intotdeauna obtine rezultate corecte (unii oameni isi pot controla in mod constient reactia corpului lor) este un experiment interesant in a masura anumiti parametrii ai corpului si a vedea cum sau daca acestia se modifica.
  
Line 9: Line 9:
  
 Prin intermediul unui senzor de masurarea a pulsului si a un senzor de  temperatura voi obtine informatiile necesare unui verdict asupra valorii de adevar a raspunsului unui individ (simularea unui test poligraf). Valoriile vor fi analizate si pe baza acestora va fi declansata una din urmatoarele stari: Prin intermediul unui senzor de masurarea a pulsului si a un senzor de  temperatura voi obtine informatiile necesare unui verdict asupra valorii de adevar a raspunsului unui individ (simularea unui test poligraf). Valoriile vor fi analizate si pe baza acestora va fi declansata una din urmatoarele stari:
-  * **LIE** → LED-ul se face rosu, pe ecranul LCD se va afisa mesajul: "You are lying" si buzzerul va scoate un sunet corespunzator +  * **LIE** → LED-ul se face rosu, pe ecranul LCD se va afisa mesajul: "You are lying!" si buzzerul va canta Never Gonna Give You Up - Rick Astley 
-  * **TRUTH** → LED-ul se face verde, pe ecranul LCD se va afisa mesajul: "Telling ​the truth" si buzzerul va scoate un sunet corespunzator+  * **TRUTH** → LED-ul se face verde, pe ecranul LCD se va afisa mesajul: "You are telling ​the truth!" si buzzerul va canta Hedwig'​s theme from the Harry Potter Movies
  
 ==== Schemă bloc ==== ==== Schemă bloc ====
- +{{:​pm:​prj2022:​avaduva:​lie_detector.drawio.png?500 |}}
-{{:​pm:​prj2022:​avaduva:​cristiana.olteanu:​lie_detector.png?500 |}}+
 ===== Hardware Design ===== ===== Hardware Design =====
 ==== Lista componente ==== ==== Lista componente ====
Line 43: Line 42:
 Mediul de dezvoltare: ​ Mediul de dezvoltare: ​
     * software:     * software:
-        * [[https://​www.arduino.cc/​en/​software| Arduino IDE]]  +        * Arduino IDE ((https://​www.arduino.cc/​en/​software))  
-        * [[https://​code.visualstudio.com| VS Code]] ​+        * VS Code ((https://​code.visualstudio.com)) 
     * pentru realizarea schemei-bloc:​     * pentru realizarea schemei-bloc:​
-        * [[https://​app.diagrams.net| draw.io]]+        * draw.io ((https://​app.diagrams.net))
     * pentru realizarea schemei electrice:     * pentru realizarea schemei electrice:
-        * [[https://​www.autodesk.com/​products/​eagle/​overview?​term=1-YEAR&​tab=subscription ​| EAGLE]] ​+        * EAGLE ((https://​www.autodesk.com/​products/​eagle/​overview?​term=1-YEAR&​tab=subscription)) 
 Biblioteci folosite: Biblioteci folosite:
-    * [[https://​www.arduino.cc/​reference/​en/​language/​functions/​communication/​wire/​|Wire]] +    * Wire ((https://​www.arduino.cc/​reference/​en/​language/​functions/​communication/​wire/​)) 
-    * [[https://​www.arduino.cc/​reference/​en/​libraries/​liquidcrystal-i2c/​| LiquidCrystal_I2C]]+    * LiquidCrystal_I2C ((https://​www.arduino.cc/​reference/​en/​libraries/​liquidcrystal-i2c/​)) 
 +    * MAX30100_PulseOximeter ((https://​github.com/​oxullo/​Arduino-MAX30100)) 
 +    * SHT21 ((https://​github.com/​e-radionicacom/​SHT21-Arduino-Library))
  
 ==== Structura codului ==== ==== Structura codului ====
  
 **Initializari** - inainte de orice functie, initializam urmatoarele variabile: **Initializari** - inainte de orice functie, initializam urmatoarele variabile:
-  * //pox// → clasa care defineste senzorul de puls-oximetru +  * //pox// →  clasa care defineste senzorul de puls-oximetru 
-  * //tft// → clasa care defineste ​display-ul tft +  * //sht// → clasa care defineste ​senzorul de temperatura si umiditate
-  * //​lastState//​ → initializat cu WAITING, folosita pentru a tine cont cand actualizam display-ul +
-  * //​prevHeartRate//​ → initializat cu 0, folosita pentru a determina daca calculul pulsului este stabil+
   * //​tsLastReport//​ → initializat cu 0, folosita pentru a actualiza display-ul la intervale determinate   * //​tsLastReport//​ → initializat cu 0, folosita pentru a actualiza display-ul la intervale determinate
 +  * //​is_lying// ​ → initializat cu -1, ne aflam intr-o stare in care nu se stie daca se minte sau se spune adevarul 
 +  * //​count// ​ → necesar pentru a obtine media valorilor ce trebuie comparata cu threshold-ul 
 +  * // melody, tempo, notes, wholenote, divider, noteDuration // → variabilele necesare buzzerului pentru a canta melodiile de mintit si spus adevarul (cate o variabila diferita pentru fiecare)
  
 **Functii** **Functii**
-  * //setup()// → initializarea pinilor pentru buzzer si LED-uri, initializarea ​display-ului TFT, initializarea senzorului de puls, inregistrarea functie de callback pentru fiecare puls +  * //setup()// → initializarea pinilor pentru buzzer si LED-uri, initializarea ​ecran LCD, initializarea senzorului de puls, inregistrarea functie de callback pentru fiecare puls 
-  * //loop()// → logica principala a programului:​ apeleaza //​pox.update()//​la fiecare ​secunde calculeaza pulsul si SpO2 si afiseaza ​informatii relevante ​pe display ​in functie de aceste valori+  * //loop()// → logica principala a programului:​ apeleaza //​pox.update()//​ la fiecare ​secunde calculeaza pulsul si umiditatea ​si afiseaza ​aceste infromatii ​pe ecran. Daca avem o valoare a pulsului valida (considerata de mine peste 60 bpm) atunci v-om adauga valoarea plusului si a umiditatii la cate o suma si vom incrementa counterul. Se apeleaza si functia make_choice() 
 +  * //​make_choice()//​ → Cand un counter declarat global ajunge la o valoare predefinita se va calcula media valorilor pentru puls si umiditate si se vor compara fiecare cu un thershold ​in functie de care se da verdictul de minciuna sau adevar si se apeleaza functia corespunzatoare. 
 +  * //​sing_lying_song()//​ → se afiseaza pe ecran mesajul "You are lying!"​ si se porneste buzzer-ul care canta melodia corespunzatoare,​ apoi se reinitializeaza counterul, tsLastReport si pox; 
 +  * //​sing_telling_the_truth_song()//​ → se afiseaza pe ecran mesajul "You are telling the truth!"​ si se porneste buzzer-ul care canta melodia corespunzatoare,​ apoi se reinitializeaza counterul, tsLastReport si pox; 
 +  * //​onBeatDetected()//​ → functie callBack care face un LED rosu si buzzerul sa se porneasca de fiecare data cand detecteaza un puls
   * //​RGB_color(red,​ green, blue)// → seteaza pinii LED-ului RGB cu valorile date ca parametri   * //​RGB_color(red,​ green, blue)// → seteaza pinii LED-ului RGB cu valorile date ca parametri
-  ​* //​onBeatDetected()//​ → functie callBack; porneste buzzer-ul si LED-ul rosu de fiecare data cand detectam un puls+  ​
  
 <​note>​ <​note>​
 Senzorul puls-oximetru trebuie interogat cat mai rapid, altfel datele din buffer-ul sau se pierd. Senzorul puls-oximetru trebuie interogat cat mai rapid, altfel datele din buffer-ul sau se pierd.
 Conform bibliotecii pe care am folosit-o, actualizarea ar trebui facuta la aproximativ 100Hz. Conform bibliotecii pe care am folosit-o, actualizarea ar trebui facuta la aproximativ 100Hz.
-Astfel, in trebuie apelat cat mai des //​pox.update()//​+Astfel, in cod trebuie apelat cat mai des //​pox.update()//​
 </​note>​ </​note>​
  
Line 78: Line 84:
  
 ==== Circuit final ==== ==== Circuit final ====
-{{:​pm:​prj2022:​avaduva:​cristiana.olteanu:​circuit_lie_detector_01.jpeg?​600|}} +{{:​pm:​prj2022:​avaduva:​cristiana.olteanu:​circuit_lie_detector_01.jpeg?​550|}} 
-{{:​pm:​prj2022:​avaduva:​cristiana.olteanu:​circuit_lie_detector_02.jpeg?​600|}}+{{:​pm:​prj2022:​avaduva:​cristiana.olteanu:​circuit_lie_detector_02.jpeg?​550|}}
 ==== Demo ==== ==== Demo ====
 Accesand acest [[https://​www.youtube.com/​watch?​v=c99hRBaU_T4 | link]] puteți găsi un demo pe YouTube in care prezint funcționalitățile proiectului. Accesand acest [[https://​www.youtube.com/​watch?​v=c99hRBaU_T4 | link]] puteți găsi un demo pe YouTube in care prezint funcționalitățile proiectului.
Line 86: Line 92:
 ===== Concluzii ===== ===== Concluzii =====
  
-Acest proiect m-a facut sa invat mai multe despre cum pot crea un dispozitiv  +A fost o experienta intersanta ​sa lucrez la acest proiect. De la gaisrea unei idei pana la cumpararea ​si asamblarea componetelor si scrierea 
-cu utilitate practica folosind un microcontroller ​si cum pot programa un ansamblu +codului si documentatieiAm avut cateva probleme ​cu senzorul de puls care mi-au aratat importanta unui senzor de calitate si necesitatea uneori de a modifica anumite aspecte ale componentelor ​cumparate ​pentru a functiona in concordanta ​cu anumite valori ale microcontrollerului(adaugarea unui jumper ​pentru ​ca  SDA si SCL sa fie alimentate de la 3.3V la senzorul de puls) si mai ales nevoia de a citi datasheet-ul si documentatia pentru bibliotecile folosite pentru a sti exact cu ce ai deaface.
-de piese pentru ​ajunge la rezultatul dorit +
- +
-De asemenea, am invatat ca este foarte important sa citesti ​cu atentie +
-datasheet-ul componentelor ​pe care doresti sa le comanzi ​pentru a te asigura +
-ca sunt compatibile ​cu microcontroller-ul folositIn cazul meu, a fost nevoie de pasi +
-suplimentari ​pentru ​a asigura compatibilitatea,​ respectiv divizorul de tensiune pentru +
-LCD si jumper-ul lipit pe senzorul de puls.+
  
 ===== Download ===== ===== Download =====
  
 +{{:​pm:​prj2022:​avaduva:​cristiana.olteanu:​lie_detector.zip|}}
  
 ===== Jurnal ===== ===== Jurnal =====
Line 105: Line 104:
   * 9.05.2022 -> schema bloc   * 9.05.2022 -> schema bloc
   * 10.05.2022 -> pagina wiki - milestone 1   * 10.05.2022 -> pagina wiki - milestone 1
 +  * 20.05.2022 -> finalizare componenta hardware si software a proiectului
 +  * 27.05.2022 -> schema electrica in Eagle
 +  * 30.05.2022 -> finalizare documentatie
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
pm/prj2022/avaduva/lie_detector.1653819429.txt.gz · Last modified: 2022/05/29 13:17 by cristiana.olteanu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0