Schema electrica si diagrame de semnal vor fi atasate mai jos.
Codul utilizeaza urmatoarele biblioteci externe: - `Wire.h`: pentru comunicatia I2C; - `LiquidCrystal_I2C.h`: pentru controlul afisajului LCD; - `IRremote.h`: pentru interpretarea semnalelor de la telecomanda.
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`.
Sunt definite coduri pentru butoanele de pe telecomanda: - stanga pentru selectarea paharului mic, - dreapta pentru selectarea paharului mare, - OK pentru confirmarea selectiei si initierea procesului de dozare.
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.
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.
Printre functiile implementate se numara: - `beep()`: genereaza un semnal sonor prin buzzer; - `pourWater()`: activeaza pompa pentru perioada configurata; - `isWater()`: returneaza true daca nivelul apei este suficient; - `isGlass()`: verifica prezenta unui pahar; - `readWaterLevel()` si `readGlassDistance()`: returneaza valorile masurate de cei doi senzori ultrasonic.
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.