Differences

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

Link to this comparison view

pm:prj2024:mdinica:ioana.aradoaie [2024/05/27 01:53]
ioana.aradoaie [Jurnal]
pm:prj2024:mdinica:ioana.aradoaie [2024/05/27 02:58] (current)
ioana.aradoaie [Descriere generală]
Line 18: Line 18:
  
 Sistemul se bazeaza pe un controler ESP32 si integreaza o serie de senzori folositi pentru detectarea prezentei cainelui, monitorizarea consumului de apa si a temperaturii mediului inconjurator. Datele colectate sunt afisate pe un ecran LCD si transmise prin e-mail prin intermediul modulului WiFi si protocolului SMTP, permitand proprietarilor sa fie permanent informat cu privirei la starea animalutului lor. Sistemul va incorpora si un Step Motor controlat prin PWM pentru a reumple automat bolul de apa atunci cand nivelul acesteia scade sub un prag prestabilit. Sistemul se bazeaza pe un controler ESP32 si integreaza o serie de senzori folositi pentru detectarea prezentei cainelui, monitorizarea consumului de apa si a temperaturii mediului inconjurator. Datele colectate sunt afisate pe un ecran LCD si transmise prin e-mail prin intermediul modulului WiFi si protocolului SMTP, permitand proprietarilor sa fie permanent informat cu privirei la starea animalutului lor. Sistemul va incorpora si un Step Motor controlat prin PWM pentru a reumple automat bolul de apa atunci cand nivelul acesteia scade sub un prag prestabilit.
-{{:​pm:​prj2024:​mdinica:​ioana.aradoaie-diagrama.drawio.png?750|}}+{{:​pm:​prj2024:​mdinica:​ioana.aradoaie-draww.jpg?750|}}
  
  
Line 24: Line 24:
  
 <note tip> <note tip>
-Lista de piese:+** Lista de piese: ​**
   * Arduino Nano ATMEGA328PB   * Arduino Nano ATMEGA328PB
   * ESP32-CAM WIFI+BT   * ESP32-CAM WIFI+BT
Line 39: Line 39:
   * fire si jumpere   * fire si jumpere
 </​note>​ </​note>​
-} 
 ==== Schema electrica: ==== ==== Schema electrica: ====
  
Line 47: Line 46:
 ==== Implementare fizica: ==== ==== Implementare fizica: ====
  
-<note tip> +=== Structura legaturilor dintre ​componente: === 
-Legaturi ​componente ​<-> pini ESP32 + 
-  * Trig senzor ​ultrasonic ​-> GPIO 12 (HS2_DATA2+| Componenta 1         | Protocol | Componenta 2               | 
-  * Echo senzor ultrasonic -> GPIO 13 (HS2_DATA3) +| RX ESP32-CAM         | UART     | TX Arduino Nano            | 
-  * senzor de temperatura -> GPIO 14 (HS2_CLK+| TX ESP32-CAM         | UART     | RX Arduino Nano            | 
-  * senzor nivel apa -> GPIO 4 (HS2_DATA0) +| TRIGGER_PIN (9)      | GPIO     | Senzor ​ultrasonic (Trigger)| 
-  * SDA LCD -> GPIO 16 (U2RXD+| ECHO_PIN ​(10       ​| ​GPIO     | Senzor ultrasonic ​(Echo  | 
-  * SCL LCD -> GPIO 0 (CSI_MCLK+| DHTPIN ​(2          | GPIO     | Senzor DHT11 (Data       | 
-  * Step Motor 1 -> GPIO 15 (HS2_CMD), GPIO 14 (HS2_CLK+| SERVO_PIN ​(3       | PWM      | SG90 Servo motor           | 
-  * Step Motor 2 -> GPIO 2 (HS2_DATA1/​FLASH), GPIO 4 (HS2_DATA0+| SDA (A4            | I2C      | LCD I2C (SDA             | 
-  * servomotor PWM -> GPIO 3 (U0RXD+| SCL (A5            | I2C      | LCD I2C (SCL             | 
-</​note>​+| A0                   | ADC      | Senzor de nivel al apei (Data)
 + 
 + 
 +=== Implementare:​ ===
  
 {{:​pm:​prj2024:​mdinica:​ioana-aradoaie-hw1.png?​750|}} {{:​pm:​prj2024:​mdinica:​ioana-aradoaie-hw1.png?​750|}}
  
  
-===== Software Design ===== 
  
 ===== Software Design ===== ===== Software Design =====
 ==== Mediul de dezvoltare ==== ==== Mediul de dezvoltare ====
 PlatformIO PlatformIO
 +
 +=== Motivarea alegerii bibliotecilor folosite în cadrul proiectului:​ ===
 +Bibliotecile folosite au fost necesare pentru a realiza atat comunicatia dintre Arduino si ESP, cat si intre acestea si senzori, motoare si ecranul LCD.
 +
 +=== Elementul de noutate al proiectului:​ ===
 +Este ieftin, usor de inteles si de implementat in propria casa, fara a necesita cunostinte avansate de electronica.
 +
 +=== Utilizarea funcționalităților din laborator: ===
 +
 +  * **Laboratorul 0: GPIO** - Utilizat pentru senzorul ultrasonic, senzorul de nivel al apei și controlul servomotorului.
 +  * **Laboratorul 1: UART** - Comunicare serială între ESP32-CAM și Arduino Nano.
 +  * **Laboratorul 2: Intreruperi** - TimerOne pentru declanșarea periodică a funcției de actualizare a afișajului LCD.
 +  * **Laboratorul 3: Timere. PWM** - Controlul poziției servomotorului cu biblioteca Servo.h si TimerOne pentru actualizarea periodică a afișajului LCD.
 +  * **Laborator 4: ADC** -Citirea nivelului apei cu funcția analogRead() de pe pinul analogic.
 +  * **Laboratorul 5: SPI** - Utilizat indirect prin ESP Mail Client pentru trimiterea email-urilor.
 +  * **Laboratorul 6: I2C** - Controlul afișajului LCD prin interfața I2C folosind biblioteca LiquidCrystal_I2C.
 +
 +
 +=== Calibrarea elementelor de senzoristică:​ ===
 +  * **Senzor ultrasonic:​**
 +Detectarea distanței: Testarea senzorului la diferite distanțe pentru a asigura măsurători corecte.
 +
 +Setarea pragurilor: Stabilirea unui prag (ex. 20 cm) pentru a detecta prezența câinelui.
 +
 +  * **Senzor de nivel al apei:**
 +Măsurarea nivelului: Testarea senzorului cu diferite niveluri de apă pentru a obține valori precise.
 +
 +Determinarea pragurilor: Stabilirea unui prag (ex. valoare ADC 500) care indică un nivel scăzut al apei.
 +
 +  * **Senzor de temperatură și umiditate (DHT11):**
 +Validarea citirilor: Compararea măsurătorilor cu un termometru și un higrometru de referință.
 +
 +Ajustarea măsurătorilor:​ Aplicarea corecțiilor în cod pentru a compensa orice erori constatate.
 +
  
 === Librării și surse 3rd-party ===  === Librării și surse 3rd-party === 
-NewPing.h: Am folosit biblioteca NewPing.h pentru a gestiona senzorul ultrasonic. Aceasta oferă funcții pentru a măsura distanțele utilizând senzorul ultrasonic într-un mod eficient. +**NewPing.h**: Am folosit biblioteca NewPing.h pentru a gestiona senzorul ultrasonic. Aceasta oferă funcții pentru a măsura distanțele utilizând senzorul ultrasonic într-un mod eficient. 
-DHT.h: Biblioteca DHT.h este utilizată pentru a citi datele de temperatură și umiditate de la senzorul DHT11. Aceasta gestionează protocoalele de comunicare necesare pentru a obține citiri precise de la senzor. + 
-Servo.h: Pentru controlul servomotorului,​ am folosit biblioteca Servo.h, care permite poziționarea acestuia la un anumit unghi cu ușurință și precizie. +**DHT.h**: Biblioteca DHT.h este utilizată pentru a citi datele de temperatură și umiditate de la senzorul DHT11. Aceasta gestionează protocoalele de comunicare necesare pentru a obține citiri precise de la senzor. 
-Wire.h: Bibliotecă standard în Arduino, folosită pentru a comunica cu dispozitive periferice care utilizează protocolul I2C. + 
-LiquidCrystal_I2C.h:​ Aceasta simplifică utilizarea ecranului LCD cu interfață I2C, permițându-mi să comunic cu ușurință cu ecranul fără a fi nevoie să implementez manual protocolul I2C. +**Servo.h**: Pentru controlul servomotorului,​ am folosit biblioteca Servo.h, care permite poziționarea acestuia la un anumit unghi cu ușurință și precizie. 
-TimerOne.h: Biblioteca TimerOne.h este folosită pentru a gestiona un timer hardware pe Arduino Nano, pentru a actualiza periodic afișajul LCD. + 
-Prin utilizarea acestor biblioteci, m-am folosit de resursele existente pentru a implementa funcționalitățile dorite în proiectul meu, economisind timp și beneficiind de funcționalități deja testate și bine documentate.+**Wire.h**: Bibliotecă standard în Arduino, folosită pentru a comunica cu dispozitive periferice care utilizează protocolul I2C. 
 + 
 +**LiquidCrystal_I2C.h**: Aceasta simplifică utilizarea ecranului LCD cu interfață I2C, permițându-mi să comunic cu ușurință cu ecranul fără a fi nevoie să implementez manual protocolul I2C. 
 + 
 +**TimerOne.h**: Biblioteca TimerOne.h este folosită pentru a gestiona un timer hardware pe Arduino Nano, pentru a actualiza periodic afișajul LCD. 
  
 === Algoritmi și structuri implementate === === Algoritmi și structuri implementate ===
-Citirea și maparea datelor de la senzori: Citirea datelor de la senzorul ultrasonic, DHT11 și senzorul de nivel al apei, maparea acestora în variabile utile pentru procesare. +**Citirea și maparea datelor de la senzori**: Citirea datelor de la senzorul ultrasonic, DHT11 și senzorul de nivel al apei, maparea acestora în variabile utile pentru procesare. 
-Controlul servomotorului și motorului ​pas cu pas: Utilizarea bibliotecii Servo.h pentru a mișca servomotorul și a motorului stepper pentru a inclina paharul. + 
-Afișarea mesajelor pe ecranul LCD: Afișarea temperaturii,​ umidității și timpului care a trecut de la ultima ​băutură de apă pe un LCD I2C+**Controlul servomotorului și motorului ​stepper**: Utilizarea bibliotecii Servo.h pentru a mișca servomotorul și a motorului stepper pentru a inclina paharul. 
-Gestionarea timpului: Utilizarea funcției millis() pentru a măsura timpul care a trecut de la ultima băutură și afișarea acestuia pe LCD. + 
-Flow firmware +**Afișarea mesajelor pe ecranul LCD**: Afișarea ​pe un LCD I2C a temperaturii,​ umidității și timpului care a trecut de la ultima ​data cand a baut apă. 
-Initializare:​ Sistemul inițializează senzorii, servomotorul,​ motorul stepper și LCD-ul. + 
-Monitorizarea senzorului ultrasonic: Dacă câinele se apropie (detectat de senzorul ultrasonic),​ se măsoară nivelul apei și, dacă este necesar, se adaugă apă în bol. +**Gestionarea timpului**: Utilizarea funcției millis() pentru a măsura timpul care a trecut de la ultima băutură și afișarea acestuia pe LCD. 
-Actualizarea LCD-ului: La fiecare secundă, LCD-ul este actualizat cu temperatura,​ umiditatea și timpul care a trecut de la ultima băutură. + 
-Trimiterea datelor: Datele sunt trimise către ESP32-CAM pentru a fi trimise prin emailcu ajutorul protocolului SMTP.+ 
 +=== Flow firmware ​=== 
 +  * **Initializare**: Sistemul inițializează senzorii, servomotorul,​ motorul stepper și LCD-ul. 
 +  * **Monitorizarea senzorului ultrasonic**: Dacă câinele se apropie (detectat de senzorul ultrasonic),​ se măsoară nivelul apei și, dacă este necesar, se adaugă apă în bol. 
 +  * **Actualizarea LCD-ului**: La fiecare secundă, LCD-ul este actualizat cu temperatura,​ umiditatea și timpul care a trecut de la ultima băutură. 
 +  * **Trimiterea datelor**: Datele sunt trimise către ESP32-CAM pentru a fi trimise prin emailcu ajutorul protocolului SMTP
 + 
 + 
 +=== Optimizări === 
 +**Evitarea busy-waiting-ului**:​ Sistemul nu verifică in continuu senzorii, ci doar atunci când este necesar, ceea ce economisește resurse și evită efectuarea unor acțiuni inutile.
  
-=== Explicații suplimentare:​ === +**Gestionarea stării aplicației**: Variabilele booleene dogDrank și start_wash sunt folosite pentru a urmări starea curentă a aplicației și pentru ​controlul fluxului programului (determina actiunea urmatoare in functie de starea curenta).
-Citirea și maparea datelor de la senzori: Funcțiile sonar.ping(),​ dht.readTemperature(),​ dht.readHumidity(),​ și analogRead(WATER_SENSOR_PIN) sunt folosite pentru a citi datele de la senzorii respectivi și a le stoca în variabile. +
-Controlul servomotorului și motorului stepper: Biblioteca Servo.h controlează mișcarea servomotorului pentru a mișca senzorul ultrasonic, iar biblioteca Stepper.h controlează motorul stepper pentru a înclina recipientul de unde se varsa apa. +
-Afișarea mesajelor pe ecranul LCD: Biblioteca LiquidCrystal_I2C.h simplifică afișarea mesajelor pe LCD-ul I2C. +
-Gestionarea timpului: Funcția millis() este utilizată pentru a măsura timpul care a trecut de la ultima băutură și pentru a actualiza afișajul LCD cu acest timp. +
-Optimizări +
-Evitarea busy-waiting-ului:​ Sistemul nu verifică continuu senzorii, ci doar atunci când este necesar, ceea ce economisește resurse și evită efectuarea unor acțiuni nedorite. +
-Gestionarea stării aplicației:​ Variabilele booleene dogDrank și start_wash sunt folosite pentru a urmări starea curentă a aplicației și pentru+
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-Link Repo GitHub: https://​github.com/​aradoai3/​PawsWatch/​ \\+**Link Repo GitHub:** https://​github.com/​aradoai3/​PawsWatch/​ \\
  
  
 ===== Jurnal ===== ===== Jurnal =====
 +  * **15 aprilie-30 aprilie** - comenzi de piese 
 +  * **1 mai** - primul draft de documentatie 
 +  * **10 mai** - logistica pentru hardware (schema electrica, lipituri, cablaj) 
 +  * **15 mai** - adaugare implementare harware + documentatia aferenta 
 +  * **26 mai** - adaugare repo GitHub si finalizare cod
 ===== DEMO ===== ===== DEMO =====
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
pm/prj2024/mdinica/ioana.aradoaie.1716764031.txt.gz · Last modified: 2024/05/27 01:53 by ioana.aradoaie
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