Für meine ersten Schritte im Mikrocontroller-Umfeld abseits der vorgetrampelten Pfade von Starter Kit oder Adventskalender wollte ich mich mit der Luftfeuchtigkeitsmessung beschäftigen. Dabei ist mir der Temperatur- und Luftfeuchtigkeits-Sensor DHT-11 über den Weg gelaufen.
Der DHT-11 ist ein einfacher und günstiger Sensor, der die Temperatur und die Luftfeuchtigkeit misst und über ein einfaches Protokoll ausgibt. Wenn eine höhere Genauigkeit gefordert ist kann der etwas grössere und teurere DHT-22 eingesetzt werden. Für die Ansteuerung der beiden Sensoren kann dabei die selbe Bibliothek verwendet werden, es muss bei der Instanzierung nur der passende Typ angegeben werden.
Der erste einfache Aufbau benötigt nur einen Arduino (in meinem Fall kam der Arduino Nano aus dem Adventskalender zum Einsatz) und den Sensor auf einem Modul. Dieses Modul beinhaltet den Pull-up-Widerstand bereits, beim Einsatz des „nackten“ Sensors muss dieser noch entsprechend hinzugefügt werden. Beim Modul muss noch beachtet werden dass es Versionen mit verschiedenen Pin-Belegungen gibt. Beim von mir eingesetzten Modul ist die Belegung VCC / Data / GND, es gibt aber auch Module mit Data / VCC / GND.
Das erste Programm soll dabei nur die Daten auslesen und über die Schnittstelle zum PC ausgeben. Dazu muss die Bibliothek „DHT sensor library“ von Adafruit in der Arduino IDE unter Tools->Manage Libraries… hinzugefügt werden. Beim Erstellen des Programmes war die Version 1.3.8 aktuell. Danach kann der untenstehende Code in die IDE übernommen werden:
* Read data from DHT-11 sensor via an arduino nano *
* *
* based on a script by Philippe Keller (www.bastelgarage.ch) *
*******************************************************************************************/
// import used library
#include "DHT.h"
// definitions
#define DHTPIN 2 // pin of the arduino where the sensor is connected to
#define DHTTYPE DHT11 // define the type of sensor (DHT11 or DHT22)
// create instance of DHT
DHT dht(DHTPIN, DHTTYPE, 6);
void setup()
{
Serial.begin(9600);
Serial.println("DHT11 test program");
dht.begin();
}
void loop()
{
// Wait two seconds between measurements as the sensor will not measure faster
delay(2000);
float h = dht.readHumidity();
float t = dht.readTemperature();
// validate values
if (isnan(h) || isnan(t)) {
Serial.println("Error while reading data!");
return;
}
// send data via serial connection to pc
Serial.print("Luftfeuchtigkeit: ");
Serial.print(h);
Serial.print("%\t");
Serial.print("Temperatur: ");
Serial.print(t);
Serial.println("°C");
}
Dieses Programm wird dann auf den Arduino übertragen. Dabei musste ich für meinen Arduino Nano den Prozessor auf „ATMega 328P (Old Bootlaoder)“ und den Programmer auf „AVRISP mkII“ einstellen. Nach dem Übertragen produziert das Programm dann im Serial Monitor eine Ausgabe wie folgende:
DHT11 test program Luftfeuchtigkeit: 36.00% Temperatur: 25.60°C Luftfeuchtigkeit: 36.00% Temperatur: 25.40°C Luftfeuchtigkeit: 36.00% Temperatur: 25.50°C Luftfeuchtigkeit: 36.00% Temperatur: 25.60°C Luftfeuchtigkeit: 36.00% Temperatur: 25.40°C Luftfeuchtigkeit: 36.00% Temperatur: 25.40°C Luftfeuchtigkeit: 36.00% Temperatur: 25.40°C Luftfeuchtigkeit: 36.00% Temperatur: 25.40°C Luftfeuchtigkeit: 36.00% Temperatur: 25.60°C Luftfeuchtigkeit: 36.00% Temperatur: 25.50°C Luftfeuchtigkeit: 35.00% Temperatur: 25.50°C Luftfeuchtigkeit: 35.00% Temperatur: 25.50°C Luftfeuchtigkeit: 36.00% Temperatur: 25.50°C
Natürlich möchte man nicht die ganze Zeit einen PC oder Laptop mitschleppen um die Teperatur und Luftfeuchtigkeit zu messen. In einem nächsten Ausbauschritt wird deshalb eine Anzeige hinzukommen.