Costruiamo un copritermosifone in legno con visualizzazione della temperatura con ESPertino

Lo scopo dell'articolo è soprattutto di tipo didattico. La sua finalità principale è quella di fare conoscenza con il termometro di ESPertino, già in dotazione su questa magnifica scheda. A corredo del progetto c'è un semplice ma elegante copritermosifone, che consente di tenere sotto controllo la temperatura ambientale, mediante un display Led a sette segmenti.

Il sensore di temperatura onboard

Forse non tutti gli utenti di ESPertino sanno che la scheda monta a bordo un ottimo sensore di temperatura. Si tratta dell'MCP9700AT-E/TT (vedi pinout in Figura 1) prodotto dalla Microchip Technology Inc. Questo è un sensore lineare di temperatura, in contenitore SOT-23, che la converte in una tensione elettrica analogica. Esso ha un'accuratezza di +/- 2°C in un intervallo compreso tra 0°C e 70°C. Riesce a misurare temperature comprese tra -40°C e +125°C.

Figura 1: pinout del sensore di temperatura MCP9700

Figura 1: pinout del sensore di temperatura MCP9700

Guardando uno stralcio dello schema elettrico ufficiale di ESPertino, proposto in Figura 2, si può notare che il sensore, siglato con IC3, risulta direttamente collegato alla porta SNS_VP (SENSOR_VP). Si tratta del pin numero 5 che fa capo (tra le altre) alla porta GPIO36, che è quella che più ci interessa.

Figura 2: il collegamento elettrico tra il sensore MCP9700 ed ESP32-WROOM

Figura 2: il collegamento elettrico tra il sensore MCP9700 ed ESP32-WROOM

La Figura 3 focalizza, invece, la posizione fisica del sensore di temperatura all'interno della scheda ESPertino.

Figura 3: la posizione del sensore di temperatura sulla scheda ESPertino

Figura 3: la posizione del sensore di temperatura sulla scheda ESPertino

Il sensore di temperatura MCP9700 fornisce, secondo il grafico contenuto nel relativo datasheet e riportato in Figura 4, una risposta molto lineare. Per l'intervallo che ci interessa, praticamente in tutto il range pratico d'impiego, la risposta del sensore alle varie temperature è la seguente:

  • a 0°C: 0.5V
  • a 50°C: 1.0V
  • a 100°C: 1.5V
Figura 4: la risposta lineare, in tensione, del sensore MCP9700 alle varie temperature

Figura 4: la risposta lineare, in tensione, del sensore MCP9700 alle varie temperature

Si tratta, come si può notare, di una risposta estremamente lineare (equazione di primo grado) che, anche mentalmente, consente di eseguire un semplice fitting, decretando la seguente formula di corrispondenza:

temperatura = 100*volt - 50

Ad esempio, una tensione, all'uscita del sensore, di 0.8V testimonia una temperatura ambientale di 30 gradi. Per il nostro progetto il fitting lineare è stato eseguito con il programma MagicPlot Student.

Primo sketch di prova

Il primo listato che proponiamo ha solo il compito di mostrare il comportamento del sensore di temperatura in un ambiente. La scheda ESPertino non ha bisogno di alcun collegamento, se non quello del cavo USB per la sua alimentazione e per la visualizzazione dei dati di monitoraggio su monitor seriale oppure su plotter seriale.

void setup() {
  Serial.begin(9600);
  analogReadResolution(12);
  analogSetAttenuation(ADC_11db);     
}
void loop() {
  int digitale=analogRead(36);    
  float volt=3.3*digitale/4096;
  float temperatura=100*volt-50;
  Serial.println(temperatura);  
  delay(250);
}

Tale mini listato risulta estremamente didattico, ai fini della comprensione del funzionamento dell'ADC e delle varie conversioni in generale. La funzione setup() predispone un'acquisizione con risoluzione a 12 bit e un'attenuazione del segnale a 11db. Questo fissa una tensione misurabile di fondo scala di 3.9V, secondo la seguente tabella:

  • ADC_ATTEN_11db: 3.9V
  • ADC_ATTEN_6db: 2.2 V
  • ADC_ATTEN_2_5db: 1.5 V
  • ADC_ATTEN_0db: 1.1 V

Il mio consiglio è sempre quello di leggere i datasheet dell'ESP32 e del sensore di temperatura. La funzione loop(), ripetuta all'infinito, espleta alcuni importanti compiti:

  1. Legge sulla porta 36 la tensione campionata, proveniente dal sensore, sotto forma di dato digitale compreso tra 0 e 4095. Essa è memorizzata nella variabile intera "digitale";
  2. Converte la tensione digitale in analogica (compresa tra 0V e 3.3V) e memorizzandola nella variabile float "volt";
  3. Converte la tensione restituita dal sensore in temperatura, secondo il grafico del suo datasheet;
  4. Invia il dato della temperatura al PC, via comunicazione seriale.

L'esecuzione dello stesso genera le visualizzazioni su monitor seriale e su plotter seriale, come riportate in Figura 5. L'asse y del grafico corrisponde alla temperatura e il test è stato eseguito con un asciugacapelli, al fine di riscaldare (ma non troppo) la scheda ESPertino.

Figura 5: monitoraggio di prova della temperatura ambientale, con il monitor seriale e con il plotter seriale

Figura 5: monitoraggio di prova della temperatura ambientale, con il monitor seriale e con il plotter seriale

Il progetto definitivo

Compresa la filosofia di funzionamento del termometro e relative conversioni, possiamo effettuare la realizzazione del progetto definitivo, dal punto di vista elettronico. Al fine di collegare il modulo di visualizzazione dati alla scheda, composto da otto display a sette segmenti, è opportuno seguire lo schema di cablaggio di cui alla Figura 6. Si tratta di un modulo di visualizzazione molto economico (può costare, infatti, anche meno di 2€, su Internet). Lo abbiamo anche utilizzato nel progetto "Tachimetro con ESPertino", dove troverete più informazioni su di esso. Il modello da noi utilizzato è composto da ben otto display a sette segmenti, gestiti dal circuito integrato MAX7219. Per il suo funzionamento esso usa il protocollo SPI.

Figura 6: il cablaggio del display a ESPertino

Figura 6: il cablaggio del display a ESPertino

Lo sketch

Il programma è molto interessante, soprattutto dal punto di vista didattico e di sperimentazione. La temperatura acquisita è visualizzata sul display tramite un "artificio" di programmazione, in particolare:

  • Si ottiene, dopo le varie conversioni viste prima, il dato della temperatura, ad esempio 19.37 gradi;
  • Essa si moltiplica per 10 ottenendo, sempre seguendo l'esempio, il valore di 193.7;
  • Tale risultato viene troncato, ottenendo il valore di 193, grazie all'utilizzo della funzione floor();
  • Quest'ultimo è trasformato in una stringa. In questo modo è molto semplice ottenere le singole cifre per collocarle nei vari display di visualizzazione.

Dopo tale algoritmo, il modulo di visualizzazione riceve i seguenti valori:

  • In posizione 1 (il primo display a destra) è visualizzato il simbolo personalizzato dei "gradi";
  • In posizione 2 è visualizzato il terzo carattere della stringa prima calcolata, ossia i decimi della temperatura;
  • In posizione 3 è visualizzato il secondo carattere della stringa, ossia le unità della temperatura. Con essa è "acceso" anche il punto decimale;
  • In posizione 4 è visualizzato il primo carattere della stringa, ossia le decine della temperatura.

La Figura 7 illustra il lavoro in corso, durante le prove di programmazione.

Figura 7: le prove di monitoraggio della temperatura

Figura 7: le prove di monitoraggio della temperatura

[...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2287 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici e potrai fare il download in formato PDF eBook e Mobi per un anno. ABBONATI ORA, è semplice e sicuro.

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend