sabato 19 aprile 2014

Parte 3/6: Utilizzare i sensori DHT11 e DHT22

Nel progetto che ho realizzato in precedenza, ho utilizzato i sensori di temperatura e di umidità, DHT11 (vedi caratteristiche) per l'interno e il DHT22 (vedi caratteristiche) per l'esterno.
Di seguito la piedinatura del DHT11. DATA verrà collegato direttamente al PIN digitale di Arduino, nel mio caso il 13.

Qui invece il collegamento con il DHT22, dove va collegata una resistenza di 1kΩ tra VCC+ e il piedino DATA.




Nello sketch qui sotto troverete tutti i commenti necessari per comprendere le funzionalità del programma, dalla comunicazione della seriale a come si realizzano e richiamano funzioni o procedure.
Nella cartella dello sketch inserite anche le librerie DHT.cpp e DHT.h altrimenti la compilazione vi restituirà un errore. Una volta caricato lo sketch con l'DE di Arduino, appariranno anche le schede relative alle librerie che avete inserito.
Per visualizzare le stringhe trasmesse dalla seriale aprite il Monitor seriale dal menu Strumenti.

#include "DHT.h"             //legge i valori di temp. e umidità dai sensori DHT##, la libreria è VIRGOLETTATA perché localizzata nella cartella del programma

#define DHTPIN_11 13         //PIN 13 dove è collegato il DHT11, interno
#define DHTTYPE_11 DHT11     //Definisco il tipo di sensore (DHT11, DHT21, DHT22)

#define DHTPIN_22 2          //PIN 2 dove è collegato il DHT22, esterno
#define DHTTYPE_22 DHT22     //Definisco il tipo di sensore (DHT11, DHT21, DHT22)

DHT dht_11(DHTPIN_11, DHTTYPE_11);  //creo l'istanza dell'oggetto dht_11
DHT dht_22(DHTPIN_22, DHTTYPE_22);  //creo l'istanza dell'oggetto dht_22


void setup() 
{
  Serial.begin(9600); 
  Serial.println("Avvio la SERIALE");

  dht_11.begin();    //attivo la lettura del sensore DHT11
  dht_22.begin();    //attivo la lettura del sensore DHT22
}

void loop() 
{
  dht11_read();  //richiamo la procedura dht11_read()
  delay(1500);   //attendo 1500 millisecondi
  dht22_read();  //richiamo la procedura dht22_read()
  delay(1500);   //attendo 1500 millisecondi

}

void dht11_read() {
  float h_11 = dht_11.readHumidity();     //Leggo il valore di umidità
  float t_11 = dht_11.readTemperature();  //Leggo il valore di temperatura

 // Verifico che i numeri siano validi, altrimenti restituisco un errore.
  if (isnan(t_11) || isnan(h_11)) 
  {
    Serial.println(" DHT11 non collegato!");
  } 
  else
  {
    Serial.print("DHT11: ");
    Serial.print("Umidita': "); 
    Serial.print(h_11);
    Serial.print(" %\t");
    Serial.print("Temperatura: "); 
    Serial.print(t_11);
    Serial.println(" C");
  }
}

void dht22_read(){
  float h_22 = dht_22.readHumidity();     //Leggo il valore di umidità
  float t_22 = dht_22.readTemperature();  //Leggo il valore di temperatura

  // Verifico che i numeri siano validi, altrimenti restituisco un errore
  if (isnan(t_22) || isnan(h_22)) 
  {
    Serial.println("DHT22 non collegato!");
  } 
  else
  {
    Serial.print("DHT22: ");
    Serial.print("Umidita': "); 
    Serial.print(h_22);
    Serial.print(" %\t");
    Serial.print("Temperatura: "); 
    Serial.print(t_22);
    Serial.println(" C");
  }
}

Nessun commento:

Posta un commento