This is an old revision of the document!
Proiectul are ca scop realizarea unui sistem de monitorizare a bunastarii animalului de companie. Acesta vine in ajutorul oamenilor care detin un caine/pisica pe care sunt nevoiti sa il lase nesupraveghiat o perioada indelungata de-a lungul zilei. Ceea ce isi propune acest proiect este sa se asigure ca animalutul dispune in permanenta de apa, facand posibila actiunea de reumplere a bolului dupa ce acesta a baut toata apa.
A avea un animal de companie este o responsabilitate foarte mare pe care multi oameni si-o asuma, dar, din nefericire, acestia nu le pot oferi mereu atentia si grija de care au nevoie. Prin urmare, un astfel de sistem va substitui din atributiile stapanului, in absenta acestuia, oferindu-i si lui o stare de liniste.
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.
Aceasta a fost realizata in Fusion. Am cautat simbolurile componentelor din ansamblu, am importat bibliotecile corespunzatoare in Fusion si am realizat legaturile (de tip NET, cu labeluri pe ele) pentru o mai buna intelegere a diagramei.
PlatformIO
Bibliotecile folosite au fost necesare pentru a realiza atat comunicatia dintre Arduino si ESP, cat si intre acestea si senzori, motoare si ecranul LCD.
Este ieftin, usor de inteles si de implementat in propria casa, fara a necesita cunostinte avansate de electronica.
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.
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.
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.
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. 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. 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.
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. 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 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.
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
Link Repo GitHub: https://github.com/aradoai3/PawsWatch/