Uncategorized

Giardino Intelligente ESP32: Irrigazione Automatica

Il Problema

Le tue piante continuano a morire perché dimentichi di innaffiarle. Oppure innaffi troppo e le radici marciscono. Ti serve un sistema che sappia quando le piante hanno davvero sete — e le innaffi da solo.

Con un ESP32, un sensore di umidità del terreno e un relè, puoi costruire un giardino intelligente completamente automatico che:

  • Monitora l’umidità del terreno 24/7
  • Innaffia le piante quando ne hanno bisogno (non a orari fissi)
  • Ti invia avvisi quando il serbatoio dell’acqua è vuoto

Cosa Costruirai

Un sistema di irrigazione automatica basato su ESP32 che legge l’umidità del terreno ogni ora e aziona una pompa dell’acqua quando il terreno si secca. Opzionale: connessione WiFi per il monitoraggio remoto via MQTT.

Difficoltà: Principiante  |  Tempo: 45 minuti  |  Costo: ~$35 di componenti

Hardware Necessario (Bill of Materials)

Componente Modello Qtà Prezzo Acquista
Microcontrollore ESP32 DevKitC V4 1 $13.49 Vedi Prodotto
Sensore Umidità Terreno Capacitivo Umidità Terreno v1.2 1 $4.49 Vedi Prodotto
Modulo Relè Relè 2 Canali 5V 1 $5.24 Vedi Prodotto
Display 0.96″ OLED SSD1306 1 $5.99 Vedi Prodotto
Breadboard 830 punti 1 $4.49 Vedi Prodotto
Cavi Jumper M-M 40 pz 1 $2.99 Vedi Prodotto

Ti serviranno anche una mini pompa per acqua (5V, ~$3 in qualsiasi negozio di ferramenta) e un tubicino in silicone. Collega il filo positivo della pompa passando dal relè.

Passo 1: Cablaggio

ESP32 ↔ Sensore di Umidità del Terreno

Pin Sensore Pin ESP32 Nota
VCC 3V3 Alimentazione
GND GND Terra
AOUT GPIO 34 Uscita analogica (ADC1_CH6)

ESP32 ↔ Modulo Relè

Pin Relè Pin ESP32 Nota
VCC 5V/VIN Alimentazione
GND GND Terra
IN1 GPIO 26 Segnale di controllo del relè

ESP32 ↔ Display OLED

Pin OLED Pin ESP32 Nota
VCC 3V3 Alimentazione
GND GND Terra
SDA GPIO 21 Dati I2C
SCL GPIO 22 Clock I2C

Importante: Collega la pompa dell’acqua al terminale NO (Normalmente Aperto) e al terminale COM del relè. Il relè funziona come un interruttore — quando GPIO 26 va LOW, la pompa si accende.

Passo 2: Calibrazione

Prima di automatizzare, devi trovare i valori di “secco” e “bagnato” del tuo terreno:

  1. Inserisci il sensore in terreno asciutto → annota la lettura analogica (es. 3200)
  2. Inseriscilo in terreno bagnato → annota la lettura (es. 1400)
  3. Calcola la soglia — sotto questo valore = abbastanza bagnato, sopra = serve acqua
DRY_VALUE = 3200   (your reading in dry soil)
WET_VALUE = 1400   (your reading in wet soil)
THRESHOLD = 2500   (trigger watering above this)

Passo 3: Carica il Codice

#include <Wire.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

// --- Pins ---
#define SOIL_PIN 34
#define PUMP_PIN 26

// --- Calibration (change these!) ---
const int DRY_VALUE = 3200;
const int WET_VALUE = 1400;
const int THRESHOLD = 2500;

const unsigned long CHECK_INTERVAL = 3600000;
const unsigned long PUMP_DURATION = 5000;
unsigned long lastCheck = 0;

void displayReading(int raw, int percent) {
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println("Smart Garden");
  display.drawLine(0, 10, 128, 10, SSD1306_WHITE);
  display.setCursor(0, 20);
  display.printf("Moisture: %d%%", percent);
  display.setCursor(0, 35);
  if (percent < 40) {
    display.println("Status: DRY");
    display.println("Pump: ACTIVE");
  } else {
    display.println("Status: OK");
    display.println("Pump: OFF");
  }
  display.setCursor(0, 55);
  display.printf("Raw: %d", raw);
  display.display();
}

void setup() {
  Serial.begin(115200);
  pinMode(PUMP_PIN, OUTPUT);
  digitalWrite(PUMP_PIN, HIGH);
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println("OLED not found!");
  }
  display.clearDisplay();
  display.display();
}

void loop() {
  if (millis() - lastCheck >= CHECK_INTERVAL || lastCheck == 0) {
    lastCheck = millis();
    int raw = analogRead(SOIL_PIN);
    int percent = map(raw, DRY_VALUE, WET_VALUE, 0, 100);
    percent = constrain(percent, 0, 100);
    Serial.printf("Soil: %d%% (raw: %d)n", percent, raw);
    displayReading(raw, percent);
    if (percent < 40) {
      Serial.println("Soil is dry! Watering...");
      digitalWrite(PUMP_PIN, LOW);
      delay(PUMP_DURATION);
      digitalWrite(PUMP_PIN, HIGH);
      Serial.println("Watering complete.");
    }
  }
}

Passo 4: Installazione

  1. Inserisci il sensore capacitivo di umidità del terreno nel vaso della pianta
  2. Collega la pompa a un contenitore d’acqua con il tubicino che arriva alla pianta
  3. Alimenta l’ESP32 via USB o con lo shield batteria 18650
  4. Il display OLED mostra la percentuale di umidità in tempo reale e lo stato della pompa
  5. Ogni ora il sistema controlla l’umidità del terreno e innaffia automaticamente

Perché i Sensori Capacitivi Sono Migliori

Questo sistema usa un sensore di umidità capacitivo (non resistivo). I sensori resistivi hanno sonde metalliche esposte che si corrodono nel terreno bagnato in poche settimane. I sensori capacitivi sigillano l’elettronica dietro uno strato protettivo — durano anni senza degradarsi.

Andare Oltre

  • Aggiungi WiFi + MQTT — Inoltra i dati di umidità al telefono (combinalo con il tutorial MQTT)
  • Aggiungi più sensori — Usa un multiplexer (CD4051BE) per monitorare più piante con un solo ESP32
  • Aggiungi un sensore di livello acqua — Avvisa quando il serbatoio è quasi vuoto
  • Integrazione Home Assistant — Controlla la pompa dalla dashboard della tua casa intelligente
  • Energia solare — Aggiungi un pannello solare da 5V + shield batteria 18650 per un deploy esterno permanente

Leave a Reply

Your email address will not be published. Required fields are marked *