Realizziamo un sistema di monitoraggio grafico delle temperature con ESPertino

Per tutti coloro i quali hanno l'esigenza di controllare visivamente le condizioni climatiche di un determinato ambiente, ecco un interessante progetto che rileva la temperatura locale, mostrandola su un display oLED. La realizzazione risulta molto semplice ed estremamente personalizzabile. Il cuore del sistema è rappresentato, ovviamente, dal nostro ESPertino diventato, a pieno titolo ormai, la star delle nostre sperimentazioni.

Il termometro grafico

La duttilità di programmazione di ESPertino colpisce ancora. Quello proposto nel presente articolo costituisce un buon sistema di monitoraggio grafico della temperatura molto utile in mille occasioni. Può essere utilizzato sia in ambienti esterni o interni. Il suo uso può essere esteso anche per tenere sotto controllo frigoriferi o altri ambienti di refrigerazione, l'importante è rispettare l'intervallo di funzionamento del sensore di temperatura, costituito dall'intramontabile e universale LM35. Inoltre, dato che ESPertino è dotato di due utili relé a bordo, si potrebbe implementare, opzionalmente, un controllo a finestra della temperatura, con la possibilità di attivare o disattivare un carico secondo le più disparate esigenze di chi utilizza il sistema. Il suo campo d'azione, pertanto, è molto ampio.

Gli elementi del sistema

Il sistema è formato da tre elementi fondamentali (tutti visibili in figura 1), e tutti indispensabili. Anche il loro relativo collegamento alla scheda principale è estremamente semplice e richiede pochissime connessioni elettriche. Essi sono i seguenti:

  • ESPertino, che rappresenta il cuore del sistema e che sovrintende a tutte le operazioni elettriche, di controllo e decisionali;
  • Il sensore di temperatura, che rileva la temperatura locale fornendo un corrispondente segnale elettrico analogico, pronto per essere elaborato dall'ingresso ADC di ESPertino. Per le specifiche di uscita e altre caratteristiche si consulti il relativo datasheet ufficiale;
  • Il display oLED, che ha il compito di visualizzare, su un minimale ma elegante grafico, l'andamento della temperatura acquisita, in un intervallo di tempo personalizzabile. Maggiori informazioni sul display oLED, sui suoi collegamenti elettrici e sulla sua programmazione possono essere attinte leggendo il nostro precedente articolo.
Figura 1: gli elementi del sistema

Figura 1: gli elementi del sistema

Collegamenti elettrici

Grazie all'utilizzo di sistemi esperti ed intelligenti, come quello rappresentato dal nostro ESPertino, i collegamenti elettrici risultano estremamente semplici, a discapito della programmazione che, al contrario, potrebbe rivelarsi alquanto difficoltosa. Il cablaggio del termometro grafico prevede la connessione con il sensore LM35, effettuata con soli tre fili, e il collegamento con il display oLED, con altrettanti terminali, come si evince dalla figura 2. Sia il display che la sonda di temperatura sono alimentati tramite una alimentazione pari a 5V, prelevati dal nostro ESPertino (ho notato che il primo funziona anche con la tensione di 3.3V). Chi lo volesse può collegare anche un filo elettrico al terminale di reset del display, Potrebbe rivelarsi utile quando esso si rifiuta di lavorare (mi è successo ogni tanto). Per resettare il modulo è sufficiente applicare un brevissimo segnale logico basso a tale piedino. Inoltre, nella connessione seriale per il trasferimento dei dati tra ESPertino e il display sarebbe opportuno inserire una resistenza di circa 1000 ohm.

Figura 2: il cablaggio dell'intero sistema

Figura 2: il cablaggio dell'intero sistema

Lo sketch

Il programma è costituito da funzioni ben distinte, ognuna delle quali espleta un compito ben preciso. La filosofia del suo funzionamento è la seguente:

  • Definisce le variabili e le macro;
  • La funzione setup() esegue, una volta sola, le seguenti funzionalità:
    • Imposta la risoluzione dell'ADC a 12 bit;
    • Programma la corretta scala di acquisizione analogica, poiché la tensione ricevuta dal termometro è molto bassa;
    • Imposta la velocità della comunicazione seriale a 9600 baud;
    • Configura la porta GPIO35 come ingresso per l'acquisizione della temperatura dall'LM35;
    • Imposta in modo orizzontale la visualizzazione del display;
    • Disegna la griglia del grafico per la prima volta;
  • La funzione loop() è eseguita ciclicamente e all'infinito. In particolare:
    • Acquisisce il segnale analogico della tensione del sensore con un sotto campionamento, in modo da ripulirlo da eventuali spikes. Tale ciclo restituisce la somma di tutti i segnali;
    • Calcola la media del campionamento digitale;
    • Ricava la tensione, in Volt, eseguendo la classica proporzione volt=3.3*media/4096.0;
    • Calcola la temperatura secondo le specifiche dell'LM35;
    • Adegua la temperatura al display, zoomandola un po' in quanto essa risulta di livello troppo limitato, a livello numerico, e starebbe collocata nella parte bassa del grafico;
    • Ribalta l'asse Y del grafico, poiché un valore minimo deve stare nella parte bassa dello schermo e un valore massimo dovrebbe collocarsi nella parte alta. Le coordinate naturali del display sono, invece, opposte;
    • Se il tempo, ossia una sorta di contrassegno che determina la posizione di visualizzazione del grafico sull'asse X, è pari a zero, viene disegnato un singolo pixel all'estrema sinistra dello schermo;
    • Se il tempo è maggiore di 319, ossia la traccia supera il bordo destro del display, essa viene azzerato. Inoltre è disegnata nuovamente la griglia sullo schermo, ripulendolo e riposizionando il cursore all'estrema sinistra;
    • Se ancora il tempo, invece, si trova nella zona attiva di lavoro il programma traccia normalmente il grafico;
    • Il tempo è incrementato di una unità;
  • La funzione cls() ha il compito di cancellare il display;
  • La funzione landscape() risulta estremamente interessante poiché predispone il modulo oLED ad un funzionamento orizzontale;
  • La funzione rectangle() disegna un rettangolo a video. I parametri da passare ad essa sono le coordinate dell'angolo superiore sinistro e quelle dell'angolo inferiore destro, nonché il colore del bordo;
  • La funzione cursor_at() posiziona semplicemente il cursore sullo schermo;
  • La funzione line_to() è utile per disegnare una linea retta dalla precedente posizione del cursore alle coordinate specificate. In questa sede essa è usata per tracciare un grafico senza interruzioni (o buchi), anche se i punti sul display sono distanti tra loro;
  • La funzione line() disegna una linea a video. I parametri da passare ad essa sono le coordinate del punto di origine e quelle del punto finale, nonché il colore del bordo;
  • La funzione pixel() traccia un singolo punto sul video. Si devono passare ad essa le coordinate e il colore;
  • Infine, la funzione draw_grid() disegna sul display una sorta di griglia, al fine di ospitare il grafico. Quali colori sono stati scelti il verde acceso per il bordo esterno e il verde scuro per la griglia interna. L'effetto che ne viene fuori è molto suggestivo, come quello visualizzato in figura 3.

Qui di seguito è proposto l'intero listato sorgente.
[...]

Iscriviti e ricevi GRATIS
Speciale Pi

Fai subito il DOWNLOAD (valore 15€) GRATIS

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2370 parole ed è riservato agli abbonati MAKER. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici MAKER e potrai fare il download (PDF) dell'EOS-Book del mese. ABBONATI ORA, è semplice e sicuro.

Abbonati alle riviste di elettronica

3 Commenti

  1. Giovanni Di Maria Giovanni Di Maria 27 luglio 2017
  2. enzo1965 27 luglio 2017

Scrivi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Iscriviti e ricevi GRATIS
Speciale Pi

Fai subito il DOWNLOAD (valore 15€) GRATIS