Differences

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

Link to this comparison view

pm:prj2024:avaduva:cerasela.soare [2024/05/24 17:37]
cerasela.soare [Software Design]
pm:prj2024:avaduva:cerasela.soare [2024/05/24 18:09] (current)
cerasela.soare [Download]
Line 21: Line 21:
 <note tip> <note tip>
 {{:​pm:​prj2024:​avaduva:​cerasela_soare.png?​200|}} {{:​pm:​prj2024:​avaduva:​cerasela_soare.png?​200|}}
 +
 1. Hardware: 1. Hardware:
-* Arduino Microcontrolerul Arduino este componenta centrală a proiectului și este responsabil de preluarea datelor de la senzori și controlul afișajului LCD +  ​* ArduinoMicrocontrolerul 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 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 +  * 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 +  * Afișaj LCD: Afișajul LCD este utilizat pentru a afișa datele colectate de la senzori 
-* Baterie externa+  * Baterie externa
  
 2. Software: 2. Software:
-* Biblioteci: <​LiquidCrystal_I2C.h>,​ <​dht.h>,​ <​PulseSensorPlayground.h>​ +  ​* 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. +  * 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ă. +  * 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. +  * 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. 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.
Line 64: Line 64:
  
 <note tip> <note tip>
-Descrierea codului aplicaţiei (firmware): 
-  * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) 
-  * librării şi surse 3rd-party (e.g. Procyon AVRlib) 
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi 
-  * (etapa 3) surse şi funcţii implementate 
- 
- 
 Mediul de dezvoltare: 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. 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.
 +
 </​note>​ </​note>​
  
Line 78: Line 166:
  
 <note tip> <note tip>
-Care au fost rezultatele obţinute ​în urma realizării proiectului vostru.+{{:​pm:​prj2024:​avaduva:​cerasela_soare_3.jpeg?​200|}} 
 + 
 +Primul rând al ecranului LCD afișează trei valori principale:​ 
 + 
 +  * Temperatura (T): Este afișată în grade Celsius (C). De exemplu, dacă temperatura este 23 de grade, va apărea ca T:23C. 
 +  * Umiditatea (H): Este afișată în procente (%). De exemplu, dacă umiditatea este 45%, va apărea ca H:45%. 
 +  * Pulsul (P): În realitate, acest cod citeaste o valoare analogică de la senzorul de puls, iar dacă această valoare este mai mare de 550, va afișa P:<​valoare>​. Dacă valoarea este sub 550, va afișa P:0. 
 + 
 +Al doilea rând al ecranului LCD afișează starea de spirit detectată ​în funcție de pragurile prestabilite pentru temperatură, umiditate și puls. 
 </​note>​ </​note>​
  
 ===== Concluzii ===== ===== Concluzii =====
 +Acest proiect Arduino integrează cu succes mai mulți senzori și un ecran LCD pentru a monitoriza și afișa date esențiale privind temperatura,​ umiditatea și pulsul utilizatorului în timp real. Folosind biblioteca Wire pentru comunicație I2C și biblioteci specifice pentru senzorii DHT11 și de puls, proiectul oferă o interfață intuitivă și ușor de înțeles. Prin analiza simplificată a datelor colectate, proiectul poate determina și afișa o stare de spirit generală, oferind astfel utilizatorului o perspectivă rapidă asupra condițiilor de mediu și a stării de sănătate. Acest proiect demonstrează modul în care tehnologia poate fi utilizată pentru a îmbunătăți confortul personal și pentru a monitoriza parametri importanți ai mediului și ai sănătății.
  
 +Posibile Îmbunătățiri:​ Implementarea unui algoritm de filtrare pentru datele de puls pentru a elimina zgomotul și a oferi citiri mai precise, Adăugarea unor LED-uri sau a unui buzzer pentru a emite semnale vizuale sau sonore atunci când sunt detectate condiții critice de mediu sau valori anormale ale pulsului, Implementarea unui sistem de alimentare cu baterii și a unor tehnici de economisire a energiei pentru a face dispozitivul portabil și autonom.
 ===== Download ===== ===== Download =====
  
-<​note ​warning+<​note>​ 
-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ă ;-). +{{:pm:prj2024:avaduva:arhiva.zip|}}
- +
-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**.+
 </​note>​ </​note>​
  
pm/prj2024/avaduva/cerasela.soare.1716561443.txt.gz · Last modified: 2024/05/24 17:37 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