Lezione 2 su Arduino: Leggiamo la temperatura

Lezione 2 su Arduino: Leggiamo la temperatura

In questa seconda puntata, vedremo come utilizzare Arduino per leggere la temperatura di casa, attraverso un sensore. Prossimamente vedremo come fare una vera e propria stazione meteo, che permetterà di leggere la temperatura di casa, oppure quella fuori anche in giro, sfruttando una connessione ad Internet. Il funzionamento dei sensori di temperatura è abbastanza semplice; al variare della temperatura, varia la resistenza presente e attraverso una semplice lettura della corrente che passa in tale elemento, è possibile capire l’attuale temperatura, con un errore di 0.5°.

 

Requisiti per leggere la temperatura 

  • DHT22 humidity-temperature-sensor-dht22 Costo 10 Euro
  • Resistenza da 10 K 2905Costo meno di 1 Euro

 

1° Programma: Leggiamo la temperatura e l’umidità di casa

Per utilizzare questo programma, è necessario scaricare alcune librerie, che contengono le funzioni per tradurre il valore di tensione in temperatura, dal seguente sito. Tale cartella dovrà essere inserita in Arduino/Libraries, in modo che il compilatore, possa leggere correttamente. Per quanto riguarda i collegamenti, basta seguire l’immagine riportati qui sotto.

url

 

Ora possiamo finalmente caricare il programma sul nostro Arduino !

// Programma che permette di leggere la temperatura, attraverso un sensore

#include "DHT.h"

#define DHTPIN 2     // Il pin a cui è collegato il sensore

// Togli il commmento al sensore che vuoi usare
//#define DHTTYPE DHT11   // DHT 11 
#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Connettere il pin 1 (a sinistra) a +5V
// Connettere il pin 2 del sensore alla porta 2
// Connettere il pin 4 (a destra) del sensore  a GROUND
// Connettere una resistenza da 10K tra il pin 2 (data) e il pin 1 (power) del sensore

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600); 
  Serial.println("DHTxx test!");

  dht.begin();
}

void loop() {
  // Legge la temperatura e l'umidità ogni 250 millisecondi!
  // Vengono inizializzate le variabili in cui vengono scritti i valori letti
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  // Controlla se la lettura è andata a buon fine
  if (isnan(t) || isnan(h)) {
    Serial.println("Failed to read from DHT");
  } else {
    Serial.print("Humidity: "); 
    Serial.print(h); // Stampa nel seriale la percentuale dell'umidità
    Serial.print(" %t");
    Serial.print("Temperature: "); 
    Serial.print(t); // Stampa nel seriale il valore della temperatura
    Serial.println(" *C");
  }
}

Schermata 2013-06-09 alle 14.50.56
Il valore della temperatura verrà visualizzato nella seriale di Arduino.

console_temperatura

2° Programma: Utilizziamo i LED per capire la temperatura

Ora che abbiamo capito come poter leggere la temperatura con Arduino, possiamo utilizzare i LED, che ci permettono di capire l’attuale temperatura, senza dover accedere il computer. Per esempio possiamo scegliere di far accedere il LED rosso, qualora la temperatura fosse superiore a 30°, e far accedere il LED blu, qualora la temperatura scendesse sotto i 15°. Per quanto riguarda il collegamento, basterà connettere i LED alle porte 7 e 6 di Arduino (l’anodo) mentre il catodo a massa. Nulla varia per quanto riguarda il sensore di temperatura. Si può mettere una resistenza di poche centinai di Ohm ai LED, per ridurre la corrente.

// Programma che permette di leggere la temperatura, attraverso un sensore

#include "DHT.h"

#define DHTPIN 2     // Il pin a cui è collegato il sensore

// Togli il commmento al sensore che vuoi usare
//#define DHTTYPE DHT11   // DHT 11 
#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Connettere il pin 1 (a sinistra) a +5V
// Connettere il pin 2 del sensore alla porta 2
// Connettere il pin 4 (a destra) del sensore  a GROUND
// Connettere una resistenza da 10K tra il pin 2 (data) e il pin 1 (power) del sensore

DHT dht(DHTPIN, DHTTYPE);

// Vengono indicate le temperature per cui i LED si devono accendere
int temp_max = 30; 
int temp_min = 15;

// Vegngono inizializzati i pin a cui sono connessi i LED
int led_red = 7;
int led_blue = 6;
int ritardo = 1000;

void setup() {
  Serial.begin(9600); 
  Serial.println("DHTxx test!");
  pinMode(led_red, OUTPUT);
  pinMode(led_blue, OUTPUT);
  dht.begin();
}

void loop() {
  // Legge la temperatura e l'umidità ogni 250 millisecondi!
  // Vengono inizializzate le variabili in cui vengono scritti i valori letti
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  // Controlla se la lettura è andata a buon fine
  if (isnan(t) || isnan(h)) {
    Serial.println("Failed to read from DHT");
  } else {
    Serial.print("Humidity: "); 
    Serial.print(h); // Stampa nel seriale la percentuale dell'umidità
    Serial.print(" %t");
    Serial.print("Temperature: "); 
    Serial.print(t); // Stampa nel seriale il valore della temperatura
    Serial.println(" *C");
  }

  // I prossimi due IF fanno accedere i LED, a seconda della temperatura
  if (t >= temp_max) {
    digitalWrite(led_red, HIGH);   // Viene accesso il LED rosso
    delay(ritardo);  
    digitalWrite(led_red, LOW);   // Viene spento il LED rosso
  }

  if (t <= temp_min) {
    digitalWrite(led_blue, HIGH);   // Viene accesso il LED blu
    delay(ritardo);  
    digitalWrite(led_blue, LOW);   // Viene spento il  LED blu
  }

}

Schermata 2013-06-09 alle 14.49.07
Ora non ci resterà altro che verificare il corretto funzionamento. Per far variare i valori di temperatura per cui i LED si accendono, basterà modificare i valori di temp_max e temp_min.

Blogger

2 pensieri su “Lezione 2 su Arduino: Leggiamo la temperatura

  1. ciao, il mio sensore non rileva la temperatura, sul lcd esce scritto temp e hum 0, mentre sul monitor seriale dice failed to read from dht… è possibile che il sensore sia rotto?

    1. Salve,
      a me era capitato che un sensore fosse rotto, però la mancata lettura della temperatura, può avere diverse ragioni. Ha inserito correttamente una resistenza da 4.7 k oppure 10 k ? I fili sono collegati correttamente ?

I commenti sono chiusi.