Table of Contents

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

De ce credem ca e fain

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

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

Rezultate Obtinute

Concluzii

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