Dienstag, 1. Dezember 2015

DHT11 Temperatur und Luftfeuchtigkeitssensor

In diesem Post geht es darum, wie man den DHT11 Temperatur und Luftfeuchtigkeitssensor mit dem Arduino verbindet und ausließt. Dadurch erhält man die genaue aktuelle Temperatur und Luftfeuchtigkeit.

Dieser Post ist Teil der Artikelserie über das Ultimate Arduino Sensor Kit mit 37 Sensoren. Das Kit, inklusiv DHT11, gibt es hier auf Amazon. Den Temperatur und Luftfeuchtigkeitssensor einzeln findet ihr hier auf Amazon.

Die Verbindung des Sensors mit dem Arduino gestaltet sich denkbar einfach. Abgesehen vom Ground (rechter Pin) und  +5V (mittlerer Pin), muss man nur den linken Pin als Datenleitung mit dem Arduino verbinden. Im unteren Beispielsketch wird Pin 2 verwendet, man kann jedoch auch einen beliebigen Anderen verwenden.

Um den DHT11 auszulesen, gibt es die dht11 Bibliothek. Diese muss man sich jedoch erst "zusammen basteln". Dazu muss man im libraries Unterordner eures Arduino Ordners der Arduino IDE, einen Ordner namens "dht11" erstellen. In diesem Ordner müsst ihr nun über den Windows Editor zwei Dateien erstellen: dht11.h und dht11.cpp . Den Quellcode für beide Dateien findet ihr hier.

Ihr müsst unbedingt darauf achten, dass die Datein auch wirklich die passende Dateiendung und nicht .txt haben. Dann erscheint nach einem Neustart eurerer Arduino IDE auch die neue dht11 Bibliothek.

Zu dieser gibt es auch schon einen Beispielsketch, mithilfe dessen ihr einen DHT11 Sensor, angeschlossen an Pin 2 des Arduino, auslesen könnt.

//
// FILE: dht11_test1.pde
// PURPOSE: DHT11 library test sketch for Arduino
//
//Celsius to Fahrenheit conversion
double Fahrenheit(double celsius)
{
return 1.8 * celsius + 32;
}
// fast integer version with rounding
//int Celcius2Fahrenheit(int celcius)
//{
// return (celsius * 18 + 5)/10 + 32;
//}
//Celsius to Kelvin conversion
double Kelvin(double celsius)
{
return celsius + 273.15;
}
// dewPoint function NOAA
// reference (1) : http://wahiduddin.net/calc/density_algorithms.htm
// reference (2) : http://www.colorado.edu/geography/weather_station/Geog_site/about.htm
//
double dewPoint(double celsius, double humidity)
{
// (1) Saturation Vapor Pressure = ESGG(T)
double RATIO = 373.15 / (273.15 + celsius);
double RHS = -7.90298 * (RATIO - 1);
RHS += 5.02808 * log10(RATIO);
RHS += -1.3816e-7 * (pow(10, (11.344 * (1 - 1/RATIO ))) - 1) ;
RHS += 8.1328e-3 * (pow(10, (-3.49149 * (RATIO - 1))) - 1) ;
RHS += log10(1013.246);
// factor -3 is to adjust units - Vapor Pressure SVP * humidity
double VP = pow(10, RHS - 3) * humidity;
// (2) DEWPOINT = F(Vapor Pressure)
double T = log(VP/0.61078); // temp var
return (241.88 * T) / (17.558 - T);
}
// delta max = 0.6544 wrt dewPoint()
// 6.9 x faster than dewPoint()
// reference: http://en.wikipedia.org/wiki/Dew_point
double dewPointFast(double celsius, double humidity)
{
double a = 17.271;
double b = 237.7;
double temp = (a * celsius) / (b + celsius) + log(humidity*0.01);
double Td = (b * temp) / (a - temp);
return Td;
}
#include <dht11.h>
dht11 DHT11;
#define DHT11PIN 2
void setup()
{
Serial.begin(115200);
Serial.println("DHT11 TEST PROGRAM ");
Serial.print("LIBRARY VERSION: ");
Serial.println(DHT11LIB_VERSION);
Serial.println();
}
void loop()
{
Serial.println("\n");
int chk = DHT11.read(DHT11PIN);
Serial.print("Read sensor: ");
switch (chk)
{
case DHTLIB_OK:
Serial.println("OK");
break;
case DHTLIB_ERROR_CHECKSUM:
Serial.println("Checksum error");
break;
case DHTLIB_ERROR_TIMEOUT:
Serial.println("Time out error");
break;
default:
Serial.println("Unknown error");
break;
}
Serial.print("Humidity (%): ");
Serial.println((float)DHT11.humidity, 2);
Serial.print("Temperature (°C): ");
Serial.println((float)DHT11.temperature, 2);
Serial.print("Temperature (°F): ");
Serial.println(Fahrenheit(DHT11.temperature), 2);
Serial.print("Temperature (°K): ");
Serial.println(Kelvin(DHT11.temperature), 2);
Serial.print("Dew Point (°C): ");
Serial.println(dewPoint(DHT11.temperature, DHT11.humidity));
Serial.print("Dew PointFast (°C): ");
Serial.println(dewPointFast(DHT11.temperature, DHT11.humidity));
delay(2000);
}
//
// END OF FILE
//
Um einen anderen Pin zu verwenden, müsst ihr einfach nur die Zeile #define DHT11PIN ändern. Jetzt bekommt ihr nach dem Upload des Sketches die aktuelle Temperatur und Luftfeuchtigkeit in der seriellen Konsole (Baudrate 115200) angezeigt.


Um das Auslesen zu vereinfachen, damit euer eigentlicher Sketch nicht zu groß wird, könnt ihr einfach die Umrechenfunktionen von Grad Celsius in Grad Fahrenheit und Kelvin löschen. Auch die Berechnung des Taupunkts, also ab welcher Temperatur sich mit der gemessenen Luftfeuchtigkeit Tau bilden würde, ist oft uninteressant. Dadurch wird der Sketch wesentlich kleiner.

Keine Kommentare:

Kommentar veröffentlichen

Mit dem Veröffentlichen eines Kommentars erklären Sie sich mit unserer Datenschutzerklärung einverstanden.
https://michaelsarduino.blogspot.de/p/datenschutzerklarung.html