Smart Planter — Sistem inteligent de monitorizare si irigare automata

Autor: Dobrin David-Marius, grupa 332CA
Asistent: Bianca Popa

Introducere

Descriere generala

Smart Planter este un sistem inteligent de monitorizare si irigare automata a plantelor, cu acces remote prin internet. Ghiveciul ramane acasa conectat la WiFi 24/7, iar utilizatorul il monitorizeaza si controleaza de oriunde din lume printr-o aplicatie web (PWA). Cand apa din rezervor se termina, primeste o notificare push pe telefon si poate trimite pe cineva sa umple rezervorul.

Scop

Eliminarea grijii de a uda plantele atunci cand utilizatorul lipseste de acasa (vacanta, deplasari, program incarcat) si automatizarea unei rutine repetitive prin masurarea umiditatii solului in timp real.

Ideea de baza

Microcontrollerul ESP32 (cu WiFi integrat) citeste umiditatea solului si nivelul apei din rezervor, decide local cand sa porneasca pompa (mod AUTO) si publica datele catre un broker MQTT public (HiveMQ). O aplicatie React conectata la acelasi broker afiseaza datele si trimite comenzi catre ghiveci de oriunde.

Utilitate practica

  • Pasionati de plante de apartament care lipsesc periodic de acasa
  • Monitorizare obiectiva a starii plantei (umiditate sol procentuala, in loc de “pare uscat”)
  • Notificari proactive — utilizatorul afla cand apa e pe terminate inainte ca planta sa sufere
  • Scalabilitate — un singur cont gestioneaza oricate ghivece (fiecare cu Device ID propriu)

De ce credem ca e fain

  • Combina embedded + IoT cloud + frontend modern intr-un singur proiect end-to-end
  • Foloseste un broker MQTT gratuit, fara cont — nu blocheaza utilizatorul intr-un ecosistem comercial
  • Configurarea WiFi se face prin Access Point + portal captiv la 192.168.4.1 — nu trebuie reflashat codul cand schimbi reteaua
  • Aplicatia ruleaza in browser ca PWA, deci se instaleaza pe telefon fara magazin de aplicatii

Descriere generala

Schema bloc a sistemului:

Schema bloc Smart Planter

Fluxul de date pe scurt:

  1. Senzorii (umiditate sol + nivel apa) furnizeaza valori analogice catre ESP32 prin pinii ADC.
  2. ESP32 aplica logica de irigare (in mod AUTO) si comanda releul care porneste pompa.
  3. Starea curenta este afisata pe LCD 16×2 (I2C) local si publicata in cloud prin MQTT.
  4. LED-ul rosu semnalizeaza fizic ca rezervorul este gol.
  5. Aplicatia (smartphone / laptop) se conecteaza la acelasi broker MQTT si poate publica comenzi (mod AUTO/MANUAL, water now, rename).

Hardware Design

Lista de piese

Componenta Cantitate Rol
ESP32 DevKit (cu WiFi integrat) 1 Microcontroller principal + comunicatie WiFi
Senzor umiditate sol LM393 1 Masoara umiditatea pamantului (analog)
Senzor nivel apa (analog) 1 Masoara nivelul apei din rezervor
Modul releu 5V cu optocuplor 1 Controleaza pompa
Pompa submersibila 5V (USB) 1 Iriga planta
LCD 16×2 + modul I2C (PCF8574) 1 Afiseaza umiditate, nivel apa, mod
LED rosu 5mm 1 Semnal vizual rezervor gol
Rezistor 220 Ω 1 Limitare curent LED
Breadboard + fire jumper 1 set Conectica
Sursa alimentare 5V / 2A 1 Alimentare ESP32 + pompa

Schema de conexiuni

Pin ESP32 Componenta
GPIO 34 (ADC) Iesire analogica senzor umiditate sol
GPIO 35 (ADC) Iesire analogica senzor nivel apa
GPIO 25 Alimentare comutata senzor nivel apa
GPIO 26 IN modul releu pompa
GPIO 27 Anod LED rosu (prin 220 Ω → GND)
GPIO 21 (SDA) SDA modul I2C LCD
GPIO 22 (SCL) SCL modul I2C LCD
5V VCC senzori, releu, LCD, pompa
GND GND comun

Schema electrica

Software Design

Mediu de dezvoltare

  • Arduino IDE 2.x cu suport ESP32 instalat din Boards Manager (esp32 by Espressif Systems)
  • VS Code + Vite pentru aplicatia frontend (React + TypeScript)
  • Node.js 20+ pentru server de dezvoltare local

Librarii folosite

Librarie Autor Rol
WiFi.h Espressif (built-in) Conectare la retea WiFi
PubSubClient Nick O'Leary Client MQTT
Wire.h Arduino (built-in) Magistrala I2C
LiquidCrystal_I2C Frank de Brabander Driver LCD 16×2 cu modul I2C
Preferences.h Espressif (built-in) Salvare credentiale WiFi in NVS
ArduinoJson Benoit Blanchon Serializare/parsare mesaje MQTT JSON
mqtt (npm) mqttjs Conectare frontend la broker

Algoritm de functionare

setup():
    initializeaza Serial, I2C, LCD, GPIO-uri
    incarca credentialele WiFi din NVS (Preferences)
    daca lipsesc -> porneste in mod Access Point (SoftAP)
                    serveste portal captiv la 192.168.4.1
                    salveaza credentialele primite si reporneste
    daca exista -> conecteaza la WiFi
    conecteaza la broker.hivemq.com pe topic-urile sp/{id}/...

loop():
    citeste senzorii (mediere pe 10 esantioane)
    actualizeaza LCD-ul (afiseaza umiditate %, nivel apa, mod)

    daca rezervor gol:
        opreste pompa (siguranta)
        aprinde LED rosu
        publica alerta MQTT { "type": "low_water" }

    daca mod == AUTO:
        daca umiditate < 35% si rezervor are apa -> porneste pompa
        daca umiditate > 60% -> opreste pompa

    la fiecare 30s sau la schimbare de stare:
        publica status JSON { soilMoisture, waterLevel, pumpOn, mode, online }

    proceseaza comenzile primite pe sp/{id}/cmd

Topic-uri MQTT

Topic Directie Continut
sp/{id}/status ESP32 → App Date senzori + stare curenta (JSON)
sp/{id}/alert ESP32 → App low_water, tank_full
sp/{id}/cmd App → ESP32 mode (auto/manual), water start/stop

Exemplu mesaj status:

{
  "name": "Monstera",
  "soilMoisture": 42,
  "waterLevel": "ok",
  "pumpOn": false,
  "mode": "auto",
  "online": true
}

Validare si testare

  • Calibrare senzori — citire valori ADC brute pe Serial Monitor pentru `SOIL_ADC_DRY` (senzor in aer) si `SOIL_ADC_WET` (senzor in pamant ud)
  • Test pompa — modul MANUAL, pornire/oprire prin aplicatie
  • Test reconectare — simulare pierdere WiFi (oprire router 30s); ESP32 trebuie sa se reconecteze automat fara reset fizic
  • Test rezervor gol — pompa se opreste in <500ms cand `waterLevel` scade sub prag, indiferent de mod
  • Test acces remote — laptop pe alta retea (hotspot 4G) se conecteaza la acelasi ghiveci

Rezultate Obtinute

  • Sistem functional end-to-end: senzori → ESP32 → cloud MQTT → aplicatie web
  • Latenta sub 1 secunda intre actiunea din aplicatie si comutarea releului
  • Configurare WiFi prin portal captiv reuseste din prima incercare
  • LCD afiseaza date stabile, fara flicker
  • Aplicatia React functioneaza ca PWA instalabila (Add to Home Screen) pe iOS si Android

Concluzii

  • Trecerea de la Arduino Uno + ESP8266 shield la ESP32 standalone a simplificat semnificativ atat hardware-ul (un singur modul) cat si codul (fara comunicatie seriala intre 2 chipuri).
  • MQTT prin broker public HiveMQ este o solutie excelenta pentru proiecte studentesti — fara cont, fara cost, fara deschidere de porturi pe router.
  • Modul Access Point pentru configurare WiFi este esential — un sistem care cere reflashare la fiecare schimbare de retea ar fi inutilizabil de un client final.
  • LCD-ul I2C cu doar 4 fire (VCC, GND, SDA, SCL) este net superior fata de LCD-ul clasic cu 16 pini.
  • Provocarea principala a fost calibrarea senzorului de umiditate — valorile ADC variaza in functie de tipul de pamant si nivelul de tasare; pragurile au trebuit ajustate dupa instalarea fizica.

Jurnal

Data Activitate
2026-03-08 Achizitie componente (ESP32, senzori, pompa, LCD)
2026-03-12 Modelare 3D ghiveci (FreeCAD + OpenSCAD)
2026-03-15 Print 3D ghiveci si rezervor
2026-03-20 Conectare senzori, citire valori ADC pe Serial Monitor
2026-03-25 Implementare logica AUTO + control releu, test pe breadboard
2026-04-02 Integrare WiFi + portal captiv pentru configurare
2026-04-10 Conectare la broker HiveMQ, publicare status JSON la 30s
2026-04-18 Aplicatie React (vite + mqtt.js), conectare la acelasi broker
2026-04-25 Notificari push (Web Push API), test pe iOS si Android
2026-05-01 Adaugare LCD 16×2 I2C, refactorizare cod afisare
2026-05-05 Test final end-to-end, calibrare praguri umiditate
2026-05-07 Documentatie OCW + schema bloc

Bibliografie / Resurse

pm/prj2026/bianca.popa1106/david_marius.dobrin.txt · Last modified: 2026/05/17 01:29 by david_marius.dobrin
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