Időjárás állomás DHTxx típusú hőmérséklet és páratartalomszenzorral
by Roboworld Hobbielektronika
Rövid leírás:
Ebben a rövid projektben bemutatjuk neked, hogyan építheted meg saját időjárás állomásod. A projekt során vezetékes kommunikációt hozunk létre. A későbbi 21. projektünkben szó esik arról is, hogy a vezetékes csatlakozást, hogy tudjuk vezetéknélkülire kicserélni. A hőmérséklet méréséért egy DHT22-es hőmérséklet és páratartalom érzékelő fog segítségünkre lenni. A DHT22-es hőmérsékletérzékelő a DHT11-es nagytestvére.
Hardware:
1 db Arduino UNO mikrovezérlő
1 db DHT22-es hőmérsékletérzékelő
1 db DHT11-es hőmérsékletérzékelő
1 db 1602 I2C kommunikációs LCD kijelző
Jumper kábel
Áttekintés
Ezek az érzékelők nagyon népszerűek az elektronikai hobbisták számára, mert nagyon olcsóak, de mégis nagy teljesítményt nyújtanak. Itt vannak a fő jellemzők és különbségek a két érzékelő között:
A DHT22 a drágább verzió, amely nyilvánvalóan jobb specifikációkkal rendelkezik. Hőmérséklet-mérési tartománya -40 és +125 fok között + -0,5 fokos pontossággal, míg a DHT11 hőmérséklet-tartomány 0 és 50 Celsius fok között + -2 fokos pontossággal. A DHT22 érzékelő jobb szélesebb páratartalom tartománnyal rendelkezik, 0 és 100% közötti, 2-5% -os pontossággal, míg a DHT11 páratartalma 20% és 80% közötti, 5% pontossággal.
Csupán két tulajdonság az, ahol a DHT11 jobb, mint a DHT22. Az egyik a mintavételezési frekvencia, amely a DHT11 esetében 1Hz ami annyit jelent, hogy minden egyes másodpercenben képes a környezetének hőmérsékletét megmérni, míg a DHT22 mintavételi frekvencia 0,5Hz, vagyis egy mintavételezés 2 másodpercenként. A másik különbség a méretük. A DHT11 kisebb testmérettel rendelkezik. Mindkét érzékelő működési feszültsége 3-5 V, míg a maximális áramuk a mérés közben 2,5mA
Kapcsolási rajz
Mintakód, programozás
A mintakód helyes lefutásához szükségünk van a DHT szenzor és a 1602 LCD kijelző(LiquidCrystal), valamint az Adafruit Sensor librarykre. Ha ezeket nem adjuk hozzá az Arduino IDE-hez akkor a mintakód hibára fut a fordítás során.
Az Arduinora feltöltött programkód tulajodképpen nem csinál mást, mint a szenzorról jövő jeleket fogadja majd kiírja azokat az értékeket a kijelzőre. Abban az esetben a szenzortól semmilyen adat nem érkezik úgy a mintaprogram jelzi felénk.
A mintakód minkét DHT szenzorral üzemel. Ha a DHT11-es szenzort szeretnénk használni akkor a mintakódban a „#define DHTTYPE DHT22” sort a „#define DHTTYPE DHT11” -re kell módosítani.
A DHTxx szenzorok saját adatátviteli protokollt használnak. Ez a protokoll pontos időzítést igényel, ehhez segítségünkre vannak a szenzor adatlapjában megtalálható időzítési diagrammok. Azonban nem kell aggódnunk, mivel a DHT libraryk ezekere az időzítésekre gondosan figyelnek, ezzel megkönnyítve a helyzetünket.
Mintakód:
#include <Wire.h>
#include "DHT.h"
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
#define DHTPIN 4 // D4-es pinhez csatlakoztatva a hőmérséklet szenzor DATA pinje.
#include <LiquidCrystal_I2C.h> // LiquidCrystal_I2C könyvtár használata
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // LiquidCrystal_I2C könyvtárat használjuk
// Szükséges megadni a kommunikációs csatornát. Esetünkben ez 0x3F azonban ez eltérhet.
// Ha nem működik a 0x3F akkor i2c_scanner.ino futtatása szükséges,
//amely kiírja a megfelelő értéket. 0x3F-et átírva pl: 0x27 -re megoldhatja a kommunikációs hibát.
DHT dht(DHTPIN, DHTTYPE);
void setup() {
lcd.begin(16, 2);
Serial.begin(9600);
Serial.println("DHTxx teszt!");
dht.begin();
}
void loop() {
delay(2000);
float h = dht.readHumidity(); // Olvassa a szenzor által mért páratartalomértéket
float t = dht.readTemperature(); // Olvassa a szenzor által mért hőmérsékletértéket
float f = dht.readTemperature(true);
lcd.setCursor(0, 0); // a kurzort a 0 karakterhez és az 1 sorhoz helyezi
lcd.print("Hom.: "); // Kiírja hogy "Hom: "
lcd.print(t);
delay(10);
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Nem sikerult adatot fogadni a DHT erzekelotol");
return;
}
// float hif = dht.computeHeatIndex(f, h);
// float hic = dht.computeHeatIndex(t, h, false);
lcd.setCursor(0, 1); // a kurzort a 0 karakterhez és az 1 sorhoz helyezi
lcd.print("Paratart: "); // Kiírja hogy "Paratart: "
lcd.print(h);
delay(10);
Serial.print("Paratartalom: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Homerseklet: ");
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.println(" *F\t");
// Serial.print("Heat index: ");
// Serial.print(hic);
// Serial.print(" *C ");
// Serial.print(hif);
// Serial.println(" *F");
}
LetöltésA libraryket innen tudod letölteni
Megjegyzések
Megjegyzés küldése