Arduino-Code und Video für DHT22-Temperatur- und Feuchtigkeitssensor mit TM1637-Display und Relais
In diesem Tutorial untersuchen wir, wie man einen DHT22-Temperatur- und Luftfeuchtigkeitssensor zusammen mit einem TM1637-Display und einem Relais verwendet, um eine Wechselstromlast, wie etwa eine Heizung oder einen Ventilator, zu steuern. Ziel ist es, die Last einzuschalten, wenn die Temperatur 50 Grad Celsius erreicht, und sie auszuschalten, wenn sie unter diese Schwelle fällt. Diese Einrichtung ist ideal, um gewünschte Temperaturwerte in einer kontrollierten Umgebung aufrechtzuerhalten.

Um dies zu erreichen, werden wir ein Arduino-Programm schreiben, das Temperatur- und Feuchtigkeitsdaten vom DHT22-Sensor liest, die Temperatur auf dem TM1637-Display anzeigt und das Relais anhand der Temperaturmesswerte steuert. Zur besseren Veranschaulichung können Sie sich das Video (ab 10:00) ansehen.
Hardware erklärt
Die Hauptkomponenten dieses Projekts sind der DHT22-Sensor, das TM1637-Display, das Relaismodul und ein Arduino-Board. Der DHT22-Sensor ist dafür verantwortlich, Temperatur und Luftfeuchtigkeit zu messen und liefert digitale Signale, die das Arduino-Board leicht auslesen kann. Das TM1637-Display wird verwendet, um die Temperaturwerte in einem benutzerfreundlichen Format anzuzeigen, während das Relaismodul es uns ermöglicht, Hochspannungsgeräte wie Heizungen und Ventilatoren sicher zu steuern.
Der DHT22-Sensor hat drei Pins: VCC (Stromversorgung), GND (Masse) und DATA (Ausgang). Das TM1637-Display verwendet vier Pins für Stromversorgung, Masse, Takt und Datenkommunikation. Das Relaismodul wird an den Arduino angeschlossen und fungiert als Schalter für die Wechselstromlast, wodurch ein sicherer Betrieb beim Steuern von Geräten gewährleistet wird, die höhere Spannung benötigen.
Details zum Datenblatt
| Hersteller | Adafruit |
|---|---|
| Teilenummer | DHT22 |
| Logik-/I/O-Spannung | 3,3 V - 5,5 V |
| Versorgungsspannung | 3.3 V - 6 V |
| Ausgangsstrom (pro Kanal) | 0.5 mA |
| Spitzenstrom (pro Kanal) | 2,5 mA |
| Hinweise zur PWM-Frequenz | nicht zutreffend |
| Schwellenwerte der Eingangslogik | 0.3 V - 0.7 V |
| Spannungsabfall / RDS(on)/ Sättigung | Nicht zutreffend |
| Thermische Grenzwerte | -40 °C bis 80 °C |
| Paket | 3-poliges Gehäuse |
| Notizen / Varianten | Auch bekannt als AM2302 |
- Stellen Sie sicher, dass der DHT22 die richtige Versorgungsspannung (3.3 V - 6 V) erhält.
- Verwenden Sie bei Bedarf Pull-up-Widerstände an der Datenleitung.
- Warten Sie, bis sich die Sensorwerte stabilisiert haben, um genaue Daten zu erhalten.
- Überprüfen Sie die Pinverbindungen doppelt, um Fehlkommunikation zu vermeiden.
- Achten Sie bei Wechselstromlasten auf ordnungsgemäße Isolierung und Sicherheit.
- Sorgen Sie für eine Wärmeableitung am Relais, wenn hohe Lasten geschaltet werden.
- Verwenden Sie bei Bedarf Entprelltechniken, wenn Sie Sensordaten auslesen.
- Schützen Sie den DHT22-Sensor vor direktem Sonnenlicht, um genaue Messwerte zu erhalten.
Verdrahtungsanleitung

Um die Komponenten zu verkabeln, beginnen Sie damit, den DHT22-Sensor anzuschließen. Verbinden Sie den VCC-Pin mit dem 5V-Pin am Arduino, den GND-Pin mit der Masse (GND) und den DATA-Pin mit dem digitalen Pin 9 am Arduino.
Als Nächstes verdrahten Sie das TM1637-Display. Verbinden Sie den VCC-Pin mit dem 5V-Pin des Arduino, den GND-Pin mit Masse, den CLK-Pin (Takt) mit dem digitalen Pin 2 und den DIO-Pin (Daten) mit dem digitalen Pin 3. Für das Relaismodul verbinden Sie den VCC-Pin mit dem 5V-Pin, den GND-Pin mit Masse und den Steuerpin (Signal) mit dem digitalen Pin 7. Stellen Sie abschließend sicher, dass die Wechselstromlast (AC) gemäß den Herstellerangaben sicher an das Relaismodul angeschlossen ist.
Codebeispiele & Schritt-für-Schritt-Anleitung
Der folgende Code initialisiert den DHT22-Sensor und das TM1637-Display. Er richtet die benötigten Pins ein und bereitet das Auslesen der Temperaturdaten vor.
#include
#define CLK 2
#define DIO 3
#define DHTPIN 9
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
pinMode(RELAY, OUTPUT);
dht.begin();
}
In diesem Ausschnitt binden wir die notwendigen Bibliotheken ein und definieren die Pins für das TM1637-Display und den DHT22-Sensor. Die setup-Funktion initialisiert die serielle Kommunikation und setzt den Relais-Pin als Ausgang.

Die Loop-Funktion liest die Temperatur aus und steuert das Relais anhand des Messwerts. Wenn die Temperatur 50 Grad überschreitet, wird das Relais aktiviert.
void loop() {
delay(TEST_DELAY);
int temp = round(getTemp("c"));
display.showNumberDec(temp, false, 3, 1);
if(temp > 50) {
digitalWrite(RELAY, LOW);
} else {
digitalWrite(RELAY, HIGH);
}
}
Dieser Codeausschnitt zeigt, wie man die Temperatur liest, sie anzeigt und das Relais steuert. Die Temperatur wird gerundet und auf dem TM1637 angezeigt, und das Relais wird je nach Temperaturschwelle ein- oder ausgeschaltet.
Für ein umfassenderes Verständnis sehen Sie sich bitte den vollständigen Code an, der unter dem Artikel geladen ist.
Demonstration / Was Sie erwartet
Wenn Sie das Programm ausführen, wird die Temperatur auf dem TM1637 angezeigt. Überschreitet sie 50 °C, schaltet das Relais ein und die angeschlossene Wechselstromlast wird eingeschaltet. Fällt die Temperatur unter 50 °C, schaltet das Relais ab und die Last wird ausgeschaltet. Achten Sie auf verpolte Anschlüsse und stellen Sie korrekte Verbindungen sicher, um Beschädigungen der Bauteile zu vermeiden (im Video bei 12:30).
Video-Zeitstempel
- 00:00- Einführung
- 02:15- Erläuterung der Verdrahtung
- 05:00- Code-Durchgang
- 10:00- Demonstration
- 12:30- Häufige Probleme
/*
* Original code from TM1637 https://github.com/avishorp/TM1637
* Original code and library for DHT22 https://github.com/adafruit/DHT-sensor-library
* Watch the video for this code https://youtu.be/xD8wHXDzLkQ
* Other Arduino library and videos https://robojax.com
*/
/*
* Modified for Robojax video on January 10, 2018
* by Ahmad Nejrabi, in Ajax, Ontario, Canada
*/
// ****** Start of TM1637 Display code
#include <Arduino.h>
#include <TM1637Display.h>
// Module connection pins (Digital Pins)
#define CLK 2
#define DIO 3
// The amount of time (in milliseconds) between tests
#define TEST_DELAY 1000
TM1637Display display(CLK, DIO);
// ****** end of TM1637 Display code
// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain
// updated by Ahmad for Robojax.com videos.
// on January 10, 2018 in Ajax, Ontario, Canada
// ****** Start of DHT code
#include "DHT.h"
#define DHTPIN 9 // what digital pin we're connected to
// Uncomment whatever type you're using!
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
// ********** end of DHT22 code
#define RELAY 7 // the pin connected to relay
void setup()
{
Serial.begin(9600);
Serial.println("DHT22 Robojax Test with Display");
pinMode(RELAY,OUTPUT);// set RELAY pin as output
dht.begin();
}
void loop()
{
delay(TEST_DELAY);// wait
// **** TM1637 code start
display.setBrightness(0x0f);// set brightness
uint8_t data[] = { 0x0, 0x0, 0x0, 0x0 };// clear display values
display.setSegments(data);//clear display
// **** TM1637 code end
// Robojax.com test video
Serial.println(getTemp("c"));
int temp = round(getTemp("c"));
display.showNumberDec(temp, false, 3,1);
if(temp >50 )
{
digitalWrite(RELAY, LOW);
}else{
digitalWrite(RELAY, HIGH);
}
}// loop end
/*
* getTemp(String req)
* returns the temperature related parameters
* req is string request
* getTemp("c") will return temperature in Celsius
* getTemp("hic") will return heat index in Celsius
* getTemp("f") will return temperature in Fahrenheit
* getTemp("hif") will return temperature in Fahrenheit
* getTemp("h") will return humidity
*/
float getTemp(String req)
{
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);
// Compute heat index in Fahrenheit (the default)
float hif = dht.computeHeatIndex(f, h);
// Compute heat index in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return 0.0;
}
// Compute heat index in Kelvin
float k = t + 273.15;
if(req =="c"){
return t;//return Celsius
}else if(req =="f"){
return f;// return Fahrenheit
}else if(req =="h"){
return h;// return humidity
}else if(req =="hif"){
return hif;// return heat index in Fahrenheit
}else if(req =="hic"){
return hic;// return heat index in Celsius
}else if(req =="k"){
return k;// return temperature in Kelvin
}else{
return 0.000;// if no request found, return 0.000
}
}
Dinge, die Sie vielleicht brauchen
-
Amazon4-Kanal-Relaismodul auf Amazonamzn.to
-
AliExpressKaufen Sie ein 5V 12V 1 2 4 6 8 Kanal Relaismodul.s.click.aliexpress.com
Ressourcen & Referenzen
-
Extern
Dateien📁
Arduino-Bibliotheken (zip)
-
DHT22 PCB-Modul rot
DHT22-module-red.fzpz0.01 MB
Fritzing-Datei
-
Temperatursensor DHT11
Temperature Sensor DHT11.fzpz0.01 MB -
DHT22 Feuchtigkeits- und Temperatursensor
DHT22 Humidity and Temperature Sensor.fzpz0.01 MB -
DHT22 PCB-Modul rot
DHT22-module-red.fzpz0.01 MB -
DHT22 Modul weiß
DHT22-module-white.fzpz0.01 MB -
TM1637 Sieben-Segment-Modul
TM1637.fzpz0.01 MB -
DHT11 Feuchtigkeits- und Temperatursensor (3 Pins)
DHT11 Humitidy and Temperature Sensor (3 pins).fzpz0.20 MB
|||Benutzerhandbuch
-
DHT22 Temperatur- und Luftfeuchtigkeitssensor Benutzerhandbuch
robojax-DHT22_manual.pdf0.36 MB