«

»

Dic 17

Corso Arduino – Lezione 4 – Leggere la temperatura con Arduino

Ed eccoci al nostro primo progetto Arduino, la lettura dei valori rilevati da un sensore DHT22. Questo sensore è molto preciso, uno dei migliori sul mercato e ha un costo che varia dagli 8 ai 10 euro. Ne esistono di più economici ma una tolleranza del 2% lo rende un sensore molto molto preciso! Vale la spesa! Inoltre le librerie consentono di calcolare anche l’indice di calore, cioè la temperatura percepita!

In questo progetto useremo anche due resistenze da 10Kohm e un pulsantino! Questo progetto potrà essere integrato da un display LCD per la lettura dei valori, ma lo tratteremo nella prossima lezione!

Prima di tutto inserisco qui sotto la schermata di Fritzing così da consentirvi di appurare quanto sia valido come software e quanto renda più semplice capire come si connettono l’Arduino e la breadboard.

Fritzing

DHT fritzing

Una volta che avrete realizzato le connessioni come indicato sopra (fate attenzione che sia fatto tutto come si deve onde evitare danni alla scheda), passiamo alla gestione del codice e a capire perché i collegamenti siano stati realizzati in questo modo.

Osserviamo ora come gestire i componenti:

Pulsantino

Osserviamo che il pulsantino ha 4 pin connessi a due a due su una riga. Quindi due pin per volta sono connessi insieme, fate attenzione al verso di inserimento, sotto il pulsante di solito la banda indica quali pin sono connessi insieme. Connettiamo quindi il pulsante alla 5V sulla breadboard e l’altro pin a una resistenza. La resistenza a sua volta va a massa ma anche al pin di Arduino. Questo pin ci consente la lettura del valore. Essendo un pin digitale può assumere il valore alto o basso! Se premiamo il pulsante il pin avrà valore alto perchè è alimentato dalla 5V ed è connesso a massa! Pertanto leggendo il valore su Arduino posso decidere di attuare un determinato comportamento e tramite il codice potremo gestire i sensori, vedremo in seguito come e il codice sarà ben commentato.

Sensore DHT22

humidity-and-temperature-sensor-dht22

Il sensore naturalmente deve essere alimentato per essere gestito e deve essere letto da Arduino, pertanto deve essere connesso sia all’alimentazione che a quest’ultimo. Il sensore ha 4 pin ma se ne usano soltanto 3! Il primo serve per l’alimentazione e quindi si connette con un filo alla riga dei 5V sulla breadboard, il secondo serve per la lettura digitale e pertanto và connesso al Pin di Arduino, il quarto invece và connesso a massa. Naturalmente per leggere il valore di Arduino dobbiamo alimentare il pin di lettura e connetterlo anche alla 5V con una resistenza da 10Kohm. Non mi addentrerò nel perchè vada fatto ma dai datasheet si può facilmente intuire come funzioni questo sensore.

Codice Arduino IDE

Prima di tutto installiamo le librerie! Andiamo nel menu Sketch in alto e selezioniamo Inclusione librerie e successivamente Gestione Librerie. Cerchiamo quindi DHT e installiamola! Non è preinstallata!

Il codice è molto semplice! Dovremo includere le librerie tramite il comando #include “DHT.h” e inizializzare il pin del pulsante e del sensore nel metodo di setup(). Sempre nel metodo setup potremo inizializzare il monitor seriale con Serial.begin(9600) e il sensore DHT con dht.begin(). 9600 è il baud rate di lettura in seriale. Il pin deve essere impostato in lettura tramite il comando pinMode( numeroPinArduino, INPUT). Possiamo definire delle costanti tramite il comando #define così da usarle nel codice in modo molto semplice, ad esempio #define pinSensoreDHT e successivamente scrivere pinMode(pinSensoreDHT, INPUT).

La gestione è invece molto semplice, nel metodo loop useremo una variabile val per rilevare la pressione del pulsante. Leggeremo il valore del pin e se sarà 1 lo salveremo nella variabile. In seguito entreremo nel comando if, se la variabile è 1 leggiamo il valore dal sensore e lo stampiamo sul monitor seriale, reimpostiamo val a zero e inseriamo un ritardo con delay per permettere la lettura dei valori. Per leggere i valori si lancia il metodo readHumidity() o readTemperature(). Se viene restituito NaN c’è un errore e lo segnaliamo!

Il ciclo ricomincerà e non essendo val uguale a 1 non succederà nulla e il sensore non verrà letto. Premendo nuovamente il pulsante potremo di nuovo leggere i valori. Prima di avviare il caricamento del software su Arduino apriamo Monitor Seriale dal menu strumenti e colleghiamo Arduino per il caricamento. Selezioniamo dunque la porta dal menu Strumenti e premiamo il pulsante Carica.

//Creato da Mario Bonofiglio ar64sh@gmail.com 
#include "DHT.h"
 
DHT dht(2, DHT22); //Imposta il modello di sensore e il pin di Arduino a cui è collegato
int power_pin=9;                 // il pin del pulsantino
int powerdht_pin=10;             // pin di accensione DHT22

int val=0;                       // variabile di controllo pressione del pulsante
void setup()
{
  pinMode(power_pin,INPUT);     // inizializzo i PIN del pulsantino in input e quelli di dht 
  pinMode(powerdht_pin,OUTPUT); // e lcd in output per accensione tramite arduino alla 
  Serial.begin(9600);
  dht.begin();                  // avvio sensore DHT
}

void loop()
{
  val = digitalRead(power_pin); // leggo il valore del pulsante (PREMUTO = 1, NON PREMUTO = 0)
  // se è stato premuto
  if(val==HIGH){
    digitalWrite(powerdht_pin, HIGH); // accendo il sensore con ARDUINO
    
    Serial.println("Measuring....");       // messaggio informativo
    delay(1000);                      // pausa per la lettura
    float h = dht.readHumidity();     // leggi il valore di temperatura
    float t = dht.readTemperature();  // leggi il valore di umidità
    float index = dht.computeHeatIndex(t, h, false);  // calcolo la temp percepita
    Serial.print("Temp:  ");             // stampa Temp sul monitor  
   
    if(isnan(t))                      // se il valore di temperatura è NaN (Not a Number) 
      lcd.print("Errore!");           // stampo Errore su LCD
    else                              // altrimenti
    {
      Serial.print(t);                   // stampo la temperatura su LCD
      Serial.println("C");                 // e poi stampo 'C'
    }
    
    Serial.print("Umid:  ");             // stampo Umid su Monitor
  
    if(isnan(h))                      // se il valore di umidità è NaN (Not a Number)
      Serial.print("Errore!");           // stampo Errore su LCD
    else
    {
      Serial.print(h);                   // stampo l'umidità su LCD 
      Serial.println(" %");                // stampo il carattere di percentuale '%'
    }

    Serial.print("Indice di calore: ");
if(isnan(index))                      // se il valore di umidità è NaN (Not a Number)
      Serial.print("Errore!");           // stampo Errore su LCD
    else
    {
      Serial.print(index);                   // stampo l'umidità su LCD 
      Serial.println(" C");                // stampo il carattere di percentuale '%'
    }
    delay(4000);                      // attendo che vengano letti i valori
    val=LOW;
    digitalWrite(powerdht_pin, LOW);  // spengo il sensore DHT
   }
}
Nella prossima lezione visualizzeremo i valori su un display LCD 16 caratteri per due righe!