This is an old revision of the document!


Componente: - senzor PULS - senzor TEMPERATURA - senzor UMIDITATE - ecran

Ecranul afiseaza concluzii in urma masuratorilor!

Detector de emotii

Introducere

Proiectul propus este un sistem de monitorizare al emoțiilor care utilizează senzori pentru puls, umiditate și temperatură, și afișează datele colectate pe un LCD. Codul sursă necesar pentru funcționarea acestui sistem este încărcat pe o placă Arduino.

Acest proiect nu numai că este capabil să monitorizeze emoțiile umane, ci poate fi, de asemenea, folosit ca un detector de minciuni, utilizând datele fiziologice și de mediu pentru a identifica discrepanțe între starea declarată și starea reală a utilizatorului. Prin integrarea mai multor senzori și algoritmilor de analiză a datelor, acest sistem poate oferi o evaluare mai precisă a stării emoționale și a sincerității individului, având potențialul de a fi folosit într-o varietate de aplicații, de la monitorizarea sănătății mentale până la interogatorii și evaluări de securitate.

Descriere generală

1. Hardware:

  • Arduino: Microcontrolerul Arduino este componenta centrală a proiectului și este responsabil de preluarea datelor de la senzori și controlul afișajului LCD
  • Senzorul XD-58C: Acest senzor măsoară pulsul si ritmul cardiac și furnizează datele către Arduino
  • Senzorul DHT11: Acest senzor măsoară temperatura și umiditatea și furnizează datele către Arduino
  • Afișaj LCD: Afișajul LCD este utilizat pentru a afișa datele colectate de la senzori
  • Baterie externa

2. Software:

  • Biblioteci: <LiquidCrystal_I2C.h>, <dht.h>, <PulseSensorPlayground.h>
  • Configurare: Software-ul include funcții de configurare a senzorilor și a afișajului LCD pentru a asigura funcționarea corectă a acestora.
  • Prelevarea datelor: Arduino preia datele de la senzori prin intermediul interfeței hardware corespunzătoare și le procesează.
  • Afișarea datelor: Arduino afișează datele colectate pe afișajul LCD într-un format ușor de citit.

Modul în care modulele hardware și software interacționează este următorul: Arduino inițializează și configurează senzorii și afișajul LCD. După aceasta, Arduino preia datele de la senzori în mod regulat și le afișează pe afișajul LCD. Astfel, utilizatorul poate vizualiza în timp real informațiile colectate de senzori, facilitând monitorizarea și interpretarea datelor.

Hardware Design

Lista de piese:

  • Senzor de puls XD-58C
  • Senzor DHT11
  • LCD I2C
  • Arduino UNO
  • Breadboard
  • Fire de conexiune
  • Baterie Externa

Schema electrica a circuitului:

Rezultatele Simularii:

  • Simulare 1: Temperatura: 23 grade Celsius, Umiditate: 46%, Puls: 63 bpm, Sentiment: Relaxat
  • Simulare 2: Temperatura: 23 grade Celsius, Umiditate: 46%, Puls: 63 bpm, Sentiment: Fericit

Software Design

Mediul de dezvoltare: Pentru acest proiect, am utilizat Arduino IDE pentru programarea pe Arduino UNO, deoarece este o aplicație gratuită și ușor de folosit, care oferă o serie de funcționalități utile pentru dezvoltarea proiectelor pe platforma Arduino.

Librarii:

  • Wire: Biblioteca Wire este utilizată pentru comunicația I2C (Inter-Integrated Circuit) între Arduino și alte dispozitive compatibile I2C, cum ar fi senzori, afișaje și alte microcontrolere. Aceasta permite conectarea a multiple dispozitive pe același bus de comunicație folosind doar două fire (SDA pentru date și SCL pentru ceas). Funcții principale: begin(), requestFrom(), beginTransmission(), endTransmission(), write(), read().
  • LiquidCrystal_I2C simplifică controlul afișajelor LCD compatibile cu protocolul I2C. Folosirea acestei biblioteci reduce numărul de pini necesari pentru a conecta un afișaj LCD la Arduino, comparativ cu conexiunile standard (4 sau 8 pini). Funcții principale: begin(), print(), setCursor(), clear().
  • DHT: Biblioteca DHT este utilizată pentru a lucra cu senzorii de temperatură și umiditate DHT11, DHT22, etc. Aceste senzori sunt ieftini și ușor de utilizat, oferind măsurători precise ale temperaturii și umidității. Funcții principale: begin(), readTemperature(), readHumidity().
  • PulseSensorPlayground: Biblioteca PulseSensorPlayground este special creată pentru a lucra cu Pulse Sensor, un senzor pentru măsurarea ritmului cardiac. Aceasta simplifică procesul de citire a datelor și de interpretare a semnalelor provenite de la senzor. Funcții principale: begin(), getBeatsPerMinute(), sawNewBeat().

Cod:

#include <Wire.h> #include <LiquidCrystal_I2C.h> #include <dht.h> #include <PulseSensorPlayground.h>

#define DHTPIN 5 #define PULSE_PIN A0

LiquidCrystal_I2C lcd(0x3F, 16, 2); PulseSensorPlayground pulseSensor; dht DHT;

const float happyTempThreshold = 25.0; const float happyHumidityThreshold = 50.0; const int happyPulseThreshold = 80;

const float sadTempThreshold = 20.0; const float sadHumidityThreshold = 60.0; const int sadPulseThreshold = 70;

void detectFeelings(float T, float H, int P) {

if (T >= happyTempThreshold && H <= happyHumidityThreshold && P >= happyPulseThreshold) {
  lcd.print("Feeling: Happy");
} else if (T <= sadTempThreshold && H >= sadHumidityThreshold && P <= sadPulseThreshold) {
  lcd.print("Feeling: Sad");
} else {
  lcd.print("Feeling: Chill");
}

}

void setup() {

lcd.init();
lcd.clear();
lcd.backlight();

}

void loop() {

DHT.read11(DHTPIN);
float temperature = DHT.temperature;
float humidity = DHT.humidity;
float pressure = analogRead(PULSE_PIN);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.print((int)temperature);
lcd.print("C");
lcd.setCursor(6, 0);
lcd.print("H:");
lcd.print((int)humidity);
lcd.print("%");
lcd.setCursor(12, 0);
if(pressure > 550){
  lcd.print("P:");
  lcd.print((int)pressure);
  //lcd.print("hPa");
} else {
  lcd.print("P:0");
}
lcd.setCursor(0, 1);
detectFeelings(temperature, humidity, pressure);

delay(1000);

}

Detaliere a algoritmului:

  • Inițializare și Configurare:

În secțiunea de inițializare, bibliotecile necesare sunt incluse: Wire.h pentru comunicarea I2C, LiquidCrystal_I2C.h pentru controlul ecranului LCD, dht.h pentru senzorul DHT11 și PulseSensorPlayground.h pentru senzorul de puls. Sunt definite constante pentru pinii unde sunt conectați senzorii (DHTPIN și PULSE_PIN). Un obiect LiquidCrystal_I2C este creat pentru a controla ecranul LCD cu adresa I2C 0x3F și un obiect PulseSensorPlayground pentru senzorul de puls. De asemenea, este creat un obiect dht pentru senzorul de temperatură și umiditate.

  • Praguri de Senzori:

Pragurile pentru detectarea stării de spirit sunt definite ca constante pentru temperatură, umiditate și puls. Aceste praguri sunt utilizate pentru a determina dacă valorile măsurate indică o stare de “Happy”, “Sad” sau “Chill”. De exemplu, dacă temperatura este peste 25°C, umiditatea sub 50%, și pulsul peste 80, programul va indica starea de “Happy”.

  • Funcția detectFeelings

Funcția detectFeelings primește ca parametri temperatura, umiditatea și pulsul, și folosește aceste valori pentru a determina starea de spirit. Dacă toate condițiile pentru starea de “Happy” sunt îndeplinite, afișează “Feeling: Happy” pe ecranul LCD. Dacă sunt îndeplinite condițiile pentru “Sad”, afișează “Feeling: Sad”. Dacă nici una dintre aceste condiții nu sunt îndeplinite, afișează “Feeling: Chill”.

  • Funcția setup și loop

În funcția setup, ecranul LCD este inițializat și curățat, iar iluminarea de fundal este activată. În bucla principală loop, senzorul DHT11 citește temperatura și umiditatea. Pulsul este citit de pe pinul analogic A0. Ecranul LCD este curățat și sunt afișate valorile măsurate pentru temperatură și umiditate. Dacă presiunea (care în acest context pare să fie greșit denumită, probabil se referă la puls) este mai mare de 550, este afișată valoarea acesteia, altfel se afișează “P:0”. Funcția detectFeelings este apoi apelată pentru a afișa starea de spirit determinată. La sfârșit, codul așteaptă o secundă înainte de a relua citirile și afișările.

Rezultate Obţinute

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Concluzii

Download

O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).

Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2024/avaduva/cerasela.soare.1716562461.txt.gz · Last modified: 2024/05/24 17:54 by cerasela.soare
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