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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// 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 | |
// |
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