Giulia Guglielmi logoGiulia Guglielmi
tutti gli articoli

Aggiornato 4 min

Sensore di umidità Wemos: dal cablaggio a ThingSpeak

Costruisci un monitor con Wemos D1: collega e calibra un sensore capacitivo, converti le letture ADC e invia dati e avvisi con ThingSpeak.

Sensore di umidità Wemos: dal cablaggio a ThingSpeak

In questo breve blog voglio descrivere il piccolo sensore di umidità che ho creato per poter monitorare lo stato delle mie piantine. Questo perché sono un'appassionata di cucina e il basilico ci sta proprio bene sui piatti freddi: al momento della scrittura, infatti, siamo in piena estate.

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).

Questo è un sensore capacitivo. Le piste della sonda si comportano come un condensatore e l'acqua nel terreno cambia la permittività effettiva del materiale. Il circuito sulla scheda trasforma la variazione di capacità in una tensione analogica su AOUT. A differenza di una sonda resistiva con elettrodi esposti, non stima l'umidità facendo passare corrente continua nel terreno, per questo è meno soggetto a corrosione.

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). Campiona la tensione analogica e la rappresenta con 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 % su questa scala di calibrazione).
  • 633 → massimo della secchezza. Ho ottenuto questo valore con il sensore asciutto (0 % di umidità). Questi estremi sono empirici e specifici per il sensore, la scheda e la tensione di alimentazione usati. Un altro esemplare va calibrato con le proprie letture a secco e in acqua.

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.

Fonti e approfondimenti

Scritto da
Note su elettronica, IoT e software.