Hőmérséklet és páratartalom érzékelő

Ez a cikk az olcsó DHT érzékelőkről szól. Az érzékelők két részből állnak a kapacitív páratartalom érzékelőből és egy termisztorból állnak. A DHT-ba beépített analóg-digitális átalakító ic is található így a szenzor feldolgozott digitális jelet továbbit a rácsatlakoztatott mikrovezérlő felé.
Többféle szenzor van forgalomban de Arduinohoz legtöbbet használt a DHT11 és a DHT22.

DHT'11
3-5V és 2.5mA
20%-80%-os páratartalom mérés 5%-os pontossággal
0-50C fok hőmérséklet mérés 2C fok pontossággal.
1Hz mintavételezési sebesség


DHT22
3-5V és 2.5mA
0%-100%-os páratartalom mérés 2-5%-os pontossággal.
-40C-tol 125C-ig 0.5C fokos pontossággal.
0.5Hz mintavételezés





Mindkét szenzor 1 digitális kimenetet használ, pontosságból a DHT22
egy kicsit többet tud, érdemes ezt használni.

DHT négy érintkezője
VCC(3V 5V)
Adat out
Nem kapcsolódik
GND

Készítsük el a kapcsolást, a digitális kimenetet egy 10kOhm-os felhúzó ellenállással csatlakoztassuk
a VCC-hez, Bár van az Arduinonak belső felhúzó ellenállása de ez itt egy kicsit kevés ezért használjuk a 10k külsőt inkább.

A kód:

// Hőmérséklet és páratartalom mérés DHT érzékelőkkel
// Written by ladyada, public domain

#include "DHT.h"

#define DHTPIN 2 //2pin hozzárendelve a DHT-hez

// Válaszd ki a DHT-d típusát és töröld előle a törtjeleket
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)

// A sensor 1.lába (balról) a +5V
// A szenzor 2. lába a te DHTPIN bemeneted
// A 4. láb GROUND
// Csatlakoztass a szenzor 1. és 2. lába közé egy 10k ellenállást


DHT dht(DHTPIN, DHTTYPE);

void setup() {
Serial.begin(9600); //Soros monitor beállítása
Serial.println("DHTxx test!");// cím kiíratása a soros monitorra

dht.begin();
}

void loop() {
// A mérések közti várakozási idő beállítása
delay(2000);

// Álltalába 250ms-onként frissítik az értékeket
// mi 2ms-onként gondolva a gyengébb szenzorokra
float h = dht.readHumidity();//h a páratartalom értékét adja

// t-be olvassa be a hőmérséklet értékét Celsiusban
float t = dht.readTemperature();
// f-be olvassa be a hőmérséklet értékét Fahrenheitben
float f = dht.readTemperature(true);

// ha sikertelen a szenzorból való beolvasás kiír egy hiba üzenetet és újra kezdi a beolvasást.
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}

// A PC hőindexét adja Fahrenheitbe a hi változó
float hi = dht.computeHeatIndex(f, h);

Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: "); //Kiírja az értékeket a soros monitorra
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *F\t");
Serial.print("Heat index: ");
Serial.print(hi);
Serial.println(" *F");
}

A kódot és a DHT könyvtárat Töltsük le a https://github.com/adafruit/DHT-sensor-library oldalról.
(a letöltés a jobb oldalon elhelyezkedő Download ZIP gombra kattintva indítható).
Tömörítsd ki a könyvtárat az Program Files/Arduino/examples könyvtárba a többi példa könyvtár közé. Indítsd újra az Arduino IDE-t. Keresd meg a File/Minták/DHT library könyvtár tesztprogramját és már indíthatod is az ellenőrzést és a feltöltést.

A DHT szenzor által mért értékeket 2 másodpercenként kiíratja a soros monitorra.

Nagyából ennyit erről. Jó Szórakozást!


Tovább fejlesztése a projektnek:


LCD-re íratjuk ki a DHT szenzor mért értékeit.

#include "DHT.h"
#define DHTPIN 2 //2pin hozzárendelve a DHT-hez
// Válaszd ki a DHT-d típusát és töröld előle a törtjeleket
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// A sensor 1.lába (balról) a +5V
// A szenzor 2. lába a te DHTPIN bemeneted
// A 4. láb GROUND
// Csatlakoztass a szenzor 1. és 2. lába közé egy 10k ellenállást
#include <LiquidCrystal.h>//LCD könyvtár aktiválása
int tempPin = 0;//változók rendelése az A0-ás és A1-es lábhoz
int lightPin = 1;
// BS E D4 D5 D6 D7
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);//az LCD hozzárendelése az Arduino kivezetéseihez
DHT dht(DHTPIN, DHTTYPE);
void setup() {
  lcd.begin(16, 2);//LCD oszlopok száma ,sorok szám

dht.begin();
}
void loop() {
// A mérések közti várakozási idő beállítása
delay(2000);
// Álltalába 250ms-onként frissítik az értékeket
// mi 2ms-onként gondolva a gyengébb szenzorokra
float h = dht.readHumidity();//h a páratartalom értékét adja
// t-be olvassa be a hőmérséklet értékét Celsiusban
float t = dht.readTemperature();
// f-be olvassa be a hőmérséklet értékét Fahrenheitben
float f = dht.readTemperature(true);
// ha sikertelen a szenzorból való beolvasás kiír egy hiba üzenetet és újra kezdi a beolvasást.
if (isnan(h) || isnan(t) || isnan(f)) {
  lcd.setCursor(0,0);
  lcd.print("Nincs beolvasott ertek!");
  lcd.setCursor(0,0);
return;
}
// A PC hőindexét adja
float hi = dht.computeHeatIndex(f, h);
lcd.print("Homers.:");// a Temp sablon kiiratás
//lcd.setCursor(10, 0);// a kurzor pozicionálása a Temp sablon üres közepére
lcd.print(t);//
lcd.print("C");
lcd.setCursor(0,1);
lcd.print("Paratar.:");
lcd.print(h);
lcd.print("%");
lcd.setCursor(0,0);
}

Jó programozást!