This shows you the differences between two versions of the page.
pm:prj2025:avaduva:andrei.nedelcu2002 [2025/05/18 16:41] andrei.nedelcu2002 [Software Design] |
pm:prj2025:avaduva:andrei.nedelcu2002 [2025/05/28 09:24] (current) andrei.nedelcu2002 [Youtube & Download] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Dozator Inteligent de Apă ====== | + | ====== Dozator Inteligent de Apa ====== |
===== Introducere ===== | ===== Introducere ===== | ||
<note tip> | <note tip> | ||
- | Proiectul constă într-un sistem automatizat pentru dozarea apei, cu posibilitatea alegerii cantității prin telecomandă. Am pornit de la ideea de a crea un dispozitiv util în medii aglomerate (birouri, laboratoare, etc.) unde dozarea apei poate fi repetitivă și anevoioasă. | + | Proiectul consta intr-un sistem automatizat pentru dozarea apei, cu posibilitatea alegerii cantitatii prin telecomanda. Am pornit de la ideea de a crea un dispozitiv util in medii aglomerate (birouri, laboratoare, etc.) unde dozarea apei poate fi repetitiva si anevoioasa. |
- | Scopul este de a oferi un mod hands-free, rapid și sigur de a umple pahare cu apă, cu verificarea automată a disponibilității apei și a recipientului. Considerăm că un astfel de dispozitiv poate avea aplicabilitate practică. | + | Scopul este de a oferi un mod hands-free, rapid si sigur de a umple pahare cu apa, cu verificarea automata a disponibilitatii apei si a recipientului. Consideram ca un astfel de dispozitiv poate avea aplicabilitate practica. |
</note> | </note> | ||
- | ===== Descriere generală ===== | + | ===== Descriere generala ===== |
<note tip> | <note tip> | ||
- | Sistemul este compus din mai multe module hardware și software care colaborează pentru a permite dozarea controlată a apei. Utilizatorul selectează cantitatea dorită folosind o telecomandă IR. Un senzor ultrasonic detectează prezența unui pahar, iar un al doilea senzor verifică nivelul apei în rezervor. Dacă oricare dintre condiții nu este îndeplinită, utilizatorul este informat printr-un mesaj pe LCD și un semnal sonor. Dacă totul este în regulă, o pompă este activată pentru a doza cantitatea corespunzătoare. | + | Sistemul este compus din mai multe module hardware si software care colaboreaza pentru a permite dozarea controlata a apei. Utilizatorul selecteaza cantitatea dorita folosind o telecomanda IR. Un senzor ultrasonic detecteaza prezenta unui pahar, iar un al doilea senzor verifica nivelul apei in rezervor. Daca oricare dintre conditii nu este indeplinita, utilizatorul este informat printr-un mesaj pe LCD si un semnal sonor. Daca totul este in regula, o pompa este activata pentru a doza cantitatea corespunzatoare. |
</note> | </note> | ||
+ | Schema bloc: | ||
+ | {{:pm:prj2025:avaduva:2.jpeg?200|}} | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
Line 19: | Line 20: | ||
Lista componentelor: | Lista componentelor: | ||
* Arduino UNO | * Arduino UNO | ||
- | * Senzor ultrasonic HC-SR04 x2 (pentru nivel apă și detecție pahar) | + | * Senzor ultrasonic HC-SR04 x2 (pentru nivel apa si detectie pahar) |
* Display LCD 1602 cu I2C | * Display LCD 1602 cu I2C | ||
* Modul Releu 5V | * Modul Releu 5V | ||
- | * Pompă de apă submersibilă | + | * Pompa de apa submersibila |
* Receptor IR | * Receptor IR | ||
- | * Telecomandă IR standard | + | * Telecomanda IR standard |
* Buzzer pasiv | * Buzzer pasiv | ||
- | * Fire de conectare, breadboard și sursă de alimentare | + | * Fire de conectare, breadboard si sursa de alimentare |
- | Schema electrică și diagrame de semnal vor fi atașate mai jos. | + | Schema electrica si diagrame de semnal vor fi atasate mai jos. |
</note> | </note> | ||
+ | Schema electrica: | ||
+ | {{:pm:prj2025:avaduva:1.jpeg?200|}} | ||
===== Software Design ===== | ===== Software Design ===== | ||
<note tip> | <note tip> | ||
- | Codul implementat pentru acest proiect controlează întregul proces de dozare automată a apei, fiind scris pentru platforma **Arduino UNO**. Funcționează cu o **telecomandă IR** pentru inputul utilizatorului, iar feedback-ul vizual este oferit de un **ecran LCD 1602 cu I2C**. Sistemul se bazează pe doi senzori ultrasonic HC-SR04 pentru a evalua atât **nivelul apei din rezervor**, cât și **prezența unui pahar** la punctul de umplere. Acțiunile sunt coordonate în funcție de comenzile IR și de starea senzorilor. | + | Codul implementat pentru acest proiect controleaza intregul proces de dozare automata a apei, fiind scris pentru platforma **Arduino UNO**. Functioneaza cu o telecomanda IR pentru inputul utilizatorului, iar feedback-ul vizual este oferit de un ecran LCD 1602 cu interfata I2C. Sistemul foloseste doi senzori ultrasonic HC-SR04: unul pentru detectarea nivelului de apa din rezervor, iar celalalt pentru a verifica prezenta unui pahar. |
- | </note> | + | |
- | ==== 🔧 Biblioteci utilizate ==== | + | Codul utilizeaza urmatoarele biblioteci externe: |
- | - `Wire.h`: pentru comunicația I2C necesară LCD-ului | + | - `Wire.h`: pentru comunicatia I2C; |
- | - `LiquidCrystal_I2C.h`: controlul afișajului LCD | + | - `LiquidCrystal_I2C.h`: pentru controlul afisajului LCD; |
- | - `IRremote.h`: pentru decodarea semnalelor de la telecomandă | + | - `IRremote.h`: pentru interpretarea semnalelor de la telecomanda. |
- | ==== 📌 Configurarea componentelor ==== | + | Display-ul LCD este configurat pe adresa I2C `0x27`, cu 16 coloane si 2 randuri. Receptorul IR este conectat la un pin digital definit ca `IRPIN`. Senzorii ultrasonic folosesc perechi de pini `TRIG`/`ECHO` pentru masuratori. Buzzer-ul este conectat la `BUZZER_PIN`, iar pompa este controlata printr-un releu conectat la `RELAY_PIN`. |
- | - **LCD 1602 I2C**: adresa `0x27`, dimensiune 16x2 | + | |
- | - **Receptor IR**: conectat la pinul `IRPIN` | + | |
- | - **Senzori ultrasonic**: | + | |
- | - `TRIG_PIN1` & `ECHO_PIN1`: nivelul apei | + | |
- | - `TRIG_PIN2` & `ECHO_PIN2`: detecția paharului | + | |
- | - **Releu**: conectat la `RELAY_PIN`, comandă pompa | + | |
- | - **Buzzer**: pe `BUZZER_PIN`, avertizare sonoră | + | |
- | - **Coduri IR**: | + | |
- | - `BUTTON_LEFT`: selectează pahar mic | + | |
- | - `BUTTON_RIGHT`: selectează pahar mare | + | |
- | - `BUTTON_OK`: confirmă selecția | + | |
- | ==== 🧮 Variabile și constante ==== | + | Sunt definite coduri pentru butoanele de pe telecomanda: |
- | - `pourTime`: durata de activare a pompei | + | - stanga pentru selectarea paharului mic, |
- | - `MAX_WATER_LEVEL`, `MIN_WATER_LEVEL`: praguri nivel apă | + | - dreapta pentru selectarea paharului mare, |
- | - `MAX_GLASS_DISTANCE`: distanță maximă pentru detectarea paharului | + | - OK pentru confirmarea selectiei si initierea procesului de dozare. |
- | - `SMALL_GLASS`, `BIG_GLASS`: timpi prestabiliți de turnare | + | |
- | ==== 🔄 Structura codului ==== | + | Durata de turnare este stabilita in functie de selectie, iar valorile pentru nivelul minim si maxim de apa, respectiv distanta maxima admisa pentru detectarea paharului, sunt configurate ca variabile constante. |
- | **setup():** | + | |
- | - Inițializează componentele hardware | + | |
- | - Configurează pinii și pornește comunicarea cu LCD și IR | + | |
- | **loop():** | + | Functia `setup()` initializeaza componentele hardware, configurand pinii si pornind comunicarea cu LCD-ul si receptorul IR. In bucla principala `loop()`, codul citeste valorile senzorilor si asteapta o comanda de la telecomanda. Daca este selectat un pahar, sistemul seteaza durata de turnare si actualizeaza afisajul. La apasarea butonului OK, se verifica daca exista suficienta apa si daca este detectat un pahar. Daca una dintre conditii nu este indeplinita, se declanseaza un semnal sonor si se afiseaza un mesaj de eroare. In caz contrar, pompa este activata pentru timpul setat. |
- | - Citește datele de la senzori și le trimite prin serial | + | |
- | - Așteaptă comenzi IR: | + | |
- | - Selectează tipul de pahar | + | |
- | - Afișează informația pe LCD | + | |
- | - La apăsarea OK: | + | |
- | - Verifică paharul și nivelul apei | + | |
- | - Dacă sunt condiții ok → se activează pompa | + | |
- | - Altfel → avertizare cu buzzer și mesaj pe LCD | + | |
- | ==== 🧩 Funcții auxiliare ==== | + | Printre functiile implementate se numara: |
- | - `beep()`: activează buzzer-ul pentru avertizare | + | - `beep()`: genereaza un semnal sonor prin buzzer; |
- | - `pourWater()`: comandă releul pentru o durată prestabilită | + | - `pourWater()`: activeaza pompa pentru perioada configurata; |
- | - `isWater()`: verifică dacă rezervorul are apă suficientă | + | - `isWater()`: returneaza true daca nivelul apei este suficient; |
- | - `isGlass()`: verifică prezența unui pahar | + | - `isGlass()`: verifica prezenta unui pahar; |
- | - `readWaterLevel()`: returnează distanța până la nivelul apei | + | - `readWaterLevel()` si `readGlassDistance()`: returneaza valorile masurate de cei doi senzori ultrasonic. |
- | - `readGlassDistance()`: returnează distanța față de pahar | + | |
- | ==== 🔁 Fluxul general de utilizare ==== | + | Fluxul de utilizare este simplu: utilizatorul selecteaza marimea paharului, confirma cu OK, iar sistemul valideaza conditiile si actioneaza pompa daca totul este in regula. In caz contrar, utilizatorul este notificat corespunzator. |
- | 1. Utilizatorul alege dimensiunea paharului prin telecomandă | + | </note> |
- | 2. Codul IR este decodificat și interpretat | + | |
- | 3. La apăsarea OK: | + | |
- | - Se verifică prezența unui pahar și nivelul apei | + | |
- | - Dacă ambele sunt valabile → se activează pompa | + | |
- | - Dacă nu → sistemul avertizează și nu pornește pompa | + | |
- | ===== Download ===== | + | ===== Youtube & Download ===== |
<note warning> | <note warning> | ||
- | Fișierele proiectului (schemă, cod sursă, documentație) vor fi atașate în acest spațiu. | + | - Link video:https://youtu.be/Zt5q7LeTAOQ?si=VO7BnMt8LUti_yVh |
+ | - Download:{{:pm:prj2025:avaduva:dozator_apa.rar|}} | ||
</note> | </note> | ||
+ |