Giulia Guglielmi logoGiulia Guglielmi
tutti gli articoli

4 min

Costruire un piccolo sensore di umidità del terreno, dal cablaggio al cloud

I passi che ho seguito per costruire un piccolo sensore di umidità del terreno con una scheda Wemos: il cablaggio, la lettura tramite ADC, la conversione in percentuale nel firmware e l'invio a ThingSpeak.

Costruire un piccolo sensore di umidità del terreno, dal cablaggio al cloud
In questa pagina

Questi sono i passi che ho seguito per sviluppare il mio piccolo sensore di umidità del terreno, dall'hardware fino al cloud.

Hardware

Ho usato un cavo jumper (tre fili) per collegare il sensore alla Wemos. Il jumper deve essere del tipo maschio/maschio.

Una scheda Wemos a sinistra collegata con tre cavi jumper a un sensore di umidità del terreno a destra, su una scrivania di legno.
Il sensore collegato alla Wemos con i tre cavi jumper maschio/maschio.

Ho poi connesso i fili secondo questa logica:

WemosSensore
3V3VCC
GNDGND
A0AOUT
Primo piano dell'estremità del sensore con i tre contatti GND, VCC e AOUT.

Una volta collegato tutto, ho preso un cavo con attacco micro-USB-B da inserire nella Wemos, con l'estremità USB-A collegata al laptop. In questo modo il laptop alimenta e gestisce il sensore via USB.

I 3.3 V forniti dalla Wemos alimentano il sensore, e il GND chiude il circuito sia per l'alimentazione sia per l'uscita AOUT del sensore. Il GND è ciò che chiude il circuito (ground, la massa comune, la terra).

Il sensore genera una tensione proporzionale all'umidità presente nel terreno. Il terreno è un conduttore, e la sua conducibilità elettrica cambia in funzione di quanto è umido. Al variare dell'umidità varia la conducibilità, e l'elettronica del sensore trasforma questa variazione in una tensione analogica presente sul pin AOUT.

Per svilupparlo e calibrarlo, il laptop è sufficiente. Nella versione finita ho poi spostato la Wemos in una piccola scatola stagna alimentata da un power bank USB.

La scheda Wemos dentro una scatola di derivazione stagna bianca, con il cavo USB che entra da un pressacavo in gomma.
La Wemos dentro una piccola scatola di derivazione stagna, con il cavo USB che entra da un pressacavo in gomma.

Dall'analogico al digitale: l'ADC

AOUT è collegato al pin A0 della Wemos. Dietro a quel pin c'è un convertitore analogico-digitale (ADC) che converte la tensione (una sequenza binaria) in un numero intero, per esempio:

633
Vista dall'alto della scheda Wemos blu con il modulo Wi-Fi ESP8266 e i pin dell'header etichettati.
La scheda Wemos. Il pin A0 alimenta l'ADC integrato.

Firmware

A questo punto i valori che escono dall'ADC vengono elaborati dal firmware, codice scritto in C++ che converte la tensione in una percentuale tramite una trasformazione lineare. Questi sono i test che ho fatto:

  • 270 → massimo dell'umidità. Ho ottenuto questo valore immergendo il sensore nell'acqua (100 % di umidità). Con il terreno bagnato la resistenza è bassa, e A0 legge una tensione vicina a 0 V.
  • 633 → massimo della secchezza. Ho ottenuto questo valore con il sensore asciutto (0 % di umidità). Con il terreno asciutto la resistenza è alta, e A0 legge una tensione vicina a VCC.

Da questi due punti la percentuale si ricava con una semplice formula lineare:

                 633 − lettura
umidità %  =  ─────────────────── × 100
                  633 − 270

Una lettura di 270 dà 100 %, una lettura di 633 dà 0 %, e tutto ciò che sta in mezzo cade su una retta. In C++ bastano poche righe:

const int WET = 270;   // sensore in acqua → 100%
const int DRY = 633;   // sensore asciutto →   0%

float readMoisture() {
  int raw = analogRead(A0);
  return (float)(DRY - raw) / (DRY - WET) * 100.0;
}

Rete e cloud

Ottenuta la percentuale, il firmware effettua una chiamata HTTP verso l'API di ThingSpeak, che mostra i valori percentuali su un grafico a linee nella sua dashboard.

Screenshot da telefono di una email intitolata 'Alert: Pianta troppo secca' da ThingSpeak Alerts, che segnala che la pianta ha bisogno di acqua.
Oltre al grafico, ThingSpeak può anche inviare un avviso via email. Qui mi avverte quando il terreno diventa troppo asciutto.

E questo è tutto il percorso: il terreno cambia la lettura del sensore, l'ADC la trasforma in un numero, il firmware trasforma quel numero in una percentuale, e ThingSpeak trasforma la percentuale in qualcosa che posso tenere d'occhio da ovunque.