🌱 Arduino • Umidità terreno • Irrigazione

Sensore di umidità del terreno con Arduino

Leggiamo l’umidità del terreno con Arduino, visualizziamo il valore sul Monitor Seriale e attiviamo un LED — oppure, con un opportuno circuito di potenza, un sistema di irrigazione.

DifficoltàPrincipiante
IngressoA0 analogico
UscitaD9
In poche parole: il sensore fornisce un valore analogico che cambia in funzione dell’umidità del terreno. Arduino confronta la lettura con una soglia e attiva un’uscita quando il terreno risulta troppo secco.

Cosa imparerai

  • come collegare un sensore di umidità del terreno ad Arduino;
  • come leggere il segnale analogico con analogRead();
  • come scegliere una soglia di intervento;
  • come usare il Monitor Seriale per calibrare il progetto;
  • come attivare un LED quando il terreno è secco;
  • come trasformare il progetto in un piccolo sistema di irrigazione automatica.

Come funziona il sensore di umidità del terreno

In questo progetto viene utilizzato un classico sensore resistivo per terreno. Le due sonde vengono inserite nel suolo e il circuito misura una variazione elettrica legata alla conducibilità del terreno.

Sensore di umidità del terreno per Arduino

Sensore di umidità del terreno utilizzato nel progetto.

Concetto chiave: il sensore non restituisce automaticamente una percentuale di umidità assoluta. Nel progetto Arduino lavora con un valore analogico grezzo e una soglia scelta dopo la calibrazione.

Materiale necessario

🔌 Arduino Uno
🌱 Sensore umidità terreno
🔴 LED
〰️ Resistenza per LED
🧩 Breadboard
🔗 Cavetti jumper

🧰 Kit Arduino consigliato

Molti progetti del sito utilizzano sensori, LED, resistenze, breadboard e cavetti. Un kit completo può essere comodo per iniziare.

👉 Guarda il kit Arduino consigliato

Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.

📘 Vuoi imparare Arduino passo dopo passo?

Se vuoi approfondire e realizzare progetti più completi, puoi dare un’occhiata anche ai miei libri dedicati ad Arduino. All’interno troverai spiegazioni semplici, schemi chiari e molti progetti pratici pensati per chi parte da zero.

👉 Scopri i miei libri su Arduino

Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.

Schema del circuito

Schema Arduino con sensore umidità terreno

Schema del circuito con sensore di umidità del terreno e Arduino.

Collegamenti principali

ElementoPin ArduinoFunzione
Uscita analogica sensoreA0Lettura umidità
LED / uscita di comandoD9Segnalazione terreno secco
Monitor Seriale9600 baudVisualizzazione valore grezzo

Regolare la sensibilità del modulo

Il progetto segnala che il modulo dispone di un piccolo potenziometro. Ruotandolo è possibile modificare la soglia dell’uscita digitale del modulo.

Nel nostro sketch, però, utilizziamo direttamente l’uscita analogica su A0: in questo modo possiamo decidere la soglia via software e vedere il valore reale sul Monitor Seriale.

Codice Arduino commentato

Sensore umidità terreno con soglia e LED
// ==========================================================
// SENSORE UMIDITA' TERRENO CON ARDUINO
// Lettura analogica + soglia di intervento
// ==========================================================

// Pin analogico collegato al sensore
const int sensorePin = A0;

// Pin del LED o uscita di comando
const int uscitaPin = 9;

// Soglia usata in questo progetto.
// Va calibrata sul proprio sensore.
const int sogliaCritica = 300;

void setup() {

 // Avvia il Monitor Seriale
 Serial.begin(9600);

 // Configura il pin 9 come uscita
 pinMode(uscitaPin, OUTPUT);
}

void loop() {

 // Legge il valore analogico del sensore
 int valoreSensore = analogRead(sensorePin);

 // Mostra il valore sul Monitor Seriale
 Serial.println(valoreSensore);

 // In questo progetto:
 // valore <= soglia = terreno considerato secco
 if (valoreSensore <= sogliaCritica) {

 // Accende il LED / attiva l'uscita
 digitalWrite(uscitaPin, HIGH);
 }
 else {

 // Spegne il LED / disattiva l'uscita
 digitalWrite(uscitaPin, LOW);
 }

 // Attende due secondi prima della nuova lettura
 delay(2000);
}

Come funziona il programma

1. Lettura analogica

analogRead(A0) legge il segnale proveniente dal sensore e restituisce un valore numerico.

2. Monitor Seriale

Il valore viene inviato al Monitor Seriale con Serial.println(). Questa parte è fondamentale per capire quali valori produce il tuo sensore in terreno secco e in terreno bagnato.

3. Soglia critica

Nel progetto la soglia è impostata a 300. Quando il valore è minore o uguale alla soglia, Arduino porta HIGH il pin 9.

Attenzione: il valore 300 non è universale. Il verso della lettura e i valori ottenuti possono cambiare in base al sensore e al modulo utilizzato. Prima di automatizzare qualunque irrigazione, osserva sempre i valori reali del tuo hardware.

Come calibrare correttamente la soglia

  1. apri il Monitor Seriale a 9600 baud;
  2. misura il valore con il sensore in terreno asciutto;
  3. annaffia il terreno e attendi che l'acqua si distribuisca;
  4. leggi nuovamente il valore;
  5. ripeti la prova più volte;
  6. scegli una soglia intermedia coerente con il comportamento osservato.

Da LED a irrigazione automatica

Il progetto suggerisce di utilizzare il pin 9 non soltanto per un LED, ma anche per comandare un relè e quindi un'elettrovalvola o una piccola pompa.

Importante: una pompa, un'elettrovalvola o la bobina di un relè non devono essere alimentate direttamente da un pin Arduino. Serve un modulo relè adatto oppure un corretto stadio di potenza con transistor/MOSFET e protezioni appropriate.

Problema tipico: corrosione delle sonde

I sensori resistivi a due elettrodi possono deteriorarsi nel tempo quando rimangono continuamente alimentati e immersi nel terreno umido. Per progetti destinati a funzionare a lungo è utile alimentare la sonda solo durante la misura oppure valutare un sensore capacitivo, che non utilizza due elettrodi metallici esposti nello stesso modo.

Perché non conviene irrigare appena si supera una sola soglia

Se il valore oscilla vicino al limite, l'uscita potrebbe accendersi e spegnersi ripetutamente. In un impianto reale è meglio introdurre una piccola isteresi: una soglia per avviare l'irrigazione e una diversa soglia per interromperla.

Esempio didattico con isteresi
const int sensorePin = A0;
const int uscitaPin = 9;

const int sogliaAvvio = 300;
const int sogliaStop = 450;

bool irrigazioneAttiva = false;

void setup() {
 pinMode(uscitaPin, OUTPUT);
 Serial.begin(9600);
}

void loop() {

 int valore = analogRead(sensorePin);
 Serial.println(valore);

 // Avvia solo quando il terreno supera
 // la condizione di "troppo secco"
 if (!irrigazioneAttiva && valore <= sogliaAvvio) {
 irrigazioneAttiva = true;
 }

 // Ferma soltanto quando il terreno
 // torna abbastanza umido
 if (irrigazioneAttiva && valore >= sogliaStop) {
 irrigazioneAttiva = false;
 }

 digitalWrite(uscitaPin,
 irrigazioneAttiva ? HIGH : LOW);

 delay(2000);
}

Scarica lo sketch

⬇️ Scarica sensore_terreno.ino
Sketch Arduino sensore umidità terreno

Debug rapido

  • controlla VCC e GND del modulo;
  • verifica che l'uscita analogica sia collegata ad A0;
  • apri il Monitor Seriale a 9600 baud;
  • confronta i valori in terreno asciutto e bagnato;
  • se il LED lavora al contrario, verifica il verso dei valori del tuo sensore;
  • non usare automaticamente la soglia 300 senza calibrazione;
  • se il sensore rimane installato a lungo, controlla periodicamente lo stato delle sonde.

Varianti del progetto

  • aggiungere un display LCD o OLED;
  • pilotare una pompa tramite MOSFET;
  • usare un modulo relè per un'elettrovalvola;
  • aggiungere un sensore capacitivo;
  • registrare le letture su scheda SD;
  • inviare notifiche con ESP32;
  • gestire più vasi con più sensori.

Cosa devi ricordare

  • Il sensore produce un valore analogico leggibile su A0.
  • La soglia deve essere calibrata sul sensore reale.
  • Il Monitor Seriale è il modo più semplice per trovare i valori corretti.
  • Il pin 9 può comandare un LED o uno stadio di potenza, non direttamente una pompa.
  • I sensori resistivi possono corrodersi nel tempo.
  • L'isteresi rende più stabile un sistema di irrigazione automatica.

Domande frequenti

Perché il valore aumenta quando il terreno è più bagnato?

Il verso della lettura dipende dal modulo e dal circuito utilizzato. Non dare per scontato che “più basso” significhi sempre più secco: verifica sul Monitor Seriale.

Posso collegare una pompa direttamente al pin 9?

No. Una pompa richiede molta più corrente di quella che un pin Arduino può fornire. Usa un MOSFET, un transistor o un modulo relè adatto.

È meglio un sensore resistivo o capacitivo?

Per esperimenti brevi il resistivo è semplice ed economico. Per installazioni più durature, un sensore capacitivo tende a evitare il problema degli elettrodi metallici esposti alla corrosione.

Posso visualizzare l'umidità in percentuale?

Sì, ma prima devi calibrare due o più punti di riferimento sul tuo sensore e poi mappare il valore grezzo in una scala percentuale. Quella percentuale rimane comunque una stima riferita alla tua calibrazione.