This is an old revision of the document!
Lie Detector
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
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.
Descriere generală
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
TRUTH → LED-ul se face verde, pe ecranul LCD se va afisa mesajul: “Telling the truth” si buzzerul va scoate un sunet corespunzator
Schemă bloc
Hardware Design
Lista componente
Nume | Număr Piese |
Arduino UNO R3 | 1 |
Breadboard | 1 |
Ecran LCD 16×02 (I2C) | 1 |
Senzor puls MAX30100 | 1 |
Senzor temperatura si umiditate SHT21 | 1 |
LED rosu | 1 |
LED RGB | 1 |
Buzzer | 1 |
Rezistor 330kΩ | 5 |
Schemă electrică
Placuta comandata care include senzorul are o problema de design, respectiv
liniile de SDA si SCL sunt HIGH la tensiunea de 1.8V, si nu 3.3V, astfel incat
Arduino UNO nu poate comunica cu senzorul
1). Am modificat placuta printr-un jumper
astfel incat SDA si SCL sunt alimentate de la 3.3V.
Software Design
Mediul de dezvoltare
Visual Studio Code + extensia PlatformIO → dezvoltarea codului și încărcarea acestuia pe Arduino
Autodesk Eagle → realizarea schemei electrice
LucidChart → realizarea schemei bloc
Biblioteci folosite
-
Wire (I2C communication)
3)
MAX30100 (pulse sensor)
4)
Adafruit GFX (core graphics)
5)
Adafruit BusIO (I2C communication)
6)
Adafruit ST7789 (specific TFT driver)
7)
Structura codului
Senzorul de puls are 3 stari:
WAITING → degetul nu se afla pe senzor; se afiseaza mesajul “Rest your finger on the sensor”
INITIALIZING → frecventa cardiaca este in curs de calcul; se afiseaza mesajul “Please wait…”
WORKING → display-ul afiseaza datele colectate; se afiseaza pulsul si oxigenarea sangelui pe display
Initializari - inainte de orice functie, initializam urmatoarele variabile:
pox → clasa care defineste senzorul de puls-oximetru
tft → clasa care defineste display-ul tft
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
Functii
setup() → initializarea pinilor pentru buzzer si LED-uri, initializarea display-ului TFT, initializarea senzorului de puls, inregistrarea functie de callback pentru fiecare puls
loop() → logica principala a programului: apeleaza pox.update(); la fiecare 2 secunde calculeaza pulsul si SpO2 si afiseaza informatii relevante pe display in functie de aceste valori
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
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.
Astfel, in trebuie apelat cat mai des pox.update()
Rezultate Obţinute
Circuit final
Demo
Concluzii
Acest proiect m-a facut sa invat mai multe despre cum pot crea un dispozitiv
cu utilitate practica folosind un microcontroller si cum pot programa un ansamblu
de piese pentru a 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 folosit. In 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
Jurnal
Bibliografie/Resurse