DHT 22
Il mio primo approccio con la stazione metereologica è stato con questo sensore DHT22.
È un sensore di temperatura e umidità molto facile da usare e abbastanza preciso (per la precisione voluta) dato il prezzo. Comunica solamente con 3 collegamenti totali senza problemi con la distanza.
Lo schema di collegamento è il seguente:
L'immagine è presa dalla rete. Si vede che i collegamenti sono semlicissimi, basta inserire una resistenza, come segnato, da 4,7kohm o 10kohm.
Il codice per iniziare può essere il seguente che interfaccia il sensore con un display lcd.
Il codice è stato preso da esempi in rete e poi successivamente modificato:
#include <dht.h> //includo la libreira per il sensore #include <LiquidCrystal.h> //includo la libreria per l'LCD dht DHT; //dichiaro una variabile globale per la classe del sensore #define DHT22_PIN 8 //imposto il pin a cui è connesso il sensore LiquidCrystal lcd(7, 6, 5, 4, 3, 2); //dichiaro la variabile lcd definendo i pin utilizzati void setup() void loop() switch (chk) //controllo
lcd.print("U:");
lcd.print("Checksum error"); case -2: //valore di ritorno : -2 -> Nessuna lettura effettuata, ho atteso troppo tempo lcd.print("Time out error"); default: //qualsiasi altro valore di ritorno definisce un errore diverso lcd.print("Unknown error"); } |
Successivamente, nel corso dell'inverno, mi sono accorto che non misurava le temperature sotto lo zero e restava bloccato apparentemente. Leggendo dalla seriale mi dava l'errore "Checksum error". Alquanto dispiaciuto mi sono chiesto perché visto che il sensore può leggere fino a -40°C. Andando a fondo del problema, ne è uscito che la libreria usata per il sensore non era scritta correttamente. facendo un po di ricerca ho trovato quella giusta su Adafruit. Ecco uno sketch di esempio preso dal sito per testare il sensore:
// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain #include "DHT.h" #define DHTPIN 2 // what pin we're connected to #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); void loop() { // Reading temperature or humidity takes about 250 milliseconds! Serial.print("Humidity: "); |
L'esempio completo lo potete trovare qui assieme alla libreria da aggiungere alla cartella di Arduino.
L'esempio qui sopra è un estratto dell'originale.