Código y vídeo de Arduino para el sensor de temperatura y humedad DHT22 con pantalla TM1637 y relé
En este tutorial exploraremos cómo usar un sensor de temperatura y humedad DHT22 junto con una pantalla TM1637 y un relé para controlar una carga de corriente alterna (CA), como un calentador o un ventilador. El objetivo es encender la carga cuando la temperatura alcance los 50 grados Celsius y apagarla cuando descienda por debajo de ese umbral. Esta configuración es ideal para mantener los niveles de temperatura deseados en un entorno controlado.

Para lograr esto, escribiremos un programa para Arduino que lea los datos de temperatura y humedad del sensor DHT22, muestre la temperatura en la pantalla TM1637 y controle el relé según las lecturas de temperatura. Para mayor claridad, puedes consultar el video (en el minuto 10:00).
Hardware explicado
Los componentes principales de este proyecto incluyen el sensor DHT22, la pantalla TM1637, el módulo de relés y una placa Arduino. El sensor DHT22 se encarga de medir la temperatura y la humedad, proporcionando una salida digital que la placa Arduino puede leer fácilmente. La pantalla TM1637 se utiliza para mostrar las lecturas de temperatura en un formato fácil de usar, mientras que el módulo de relés nos permite controlar de forma segura dispositivos de alto voltaje como calefactores y ventiladores.
El sensor DHT22 tiene tres pines: VCC (alimentación), GND (masa) y DATA (salida). La pantalla TM1637 utiliza cuatro pines para alimentación, masa, reloj y comunicación de datos. El módulo relé se conecta al Arduino y actúa como un interruptor para la carga de corriente alterna, asegurando una operación segura al controlar dispositivos que requieren mayor voltaje.
Detalles de la ficha técnica
| Fabricante | Adafruit |
|---|---|
| Número de pieza | DHT22 |
| Voltaje lógico/E/S | 3.3 V - 5.5 V |
| Tensión de alimentación | 3.3 V - 6 V |
| Corriente de salida (por canal) | 0.5 mA |
| Corriente de pico (por canal) | 2.5 mA |
| Guía de frecuencia PWM | No aplica |
| Umbrales lógicos de entrada | 0.3 V - 0.7 V |
| Caída de tensión / RDS(on)/ saturación | No aplica |
| Límites térmicos | -40 °C a 80 °C |
| Paquete | paquete de 3 pines |
| Notas / variantes | También conocido como AM2302 |
- Asegúrese de proporcionar una alimentación adecuada (3.3 V - 6 V) al DHT22.
- Use resistencias pull-up en la línea de datos si es necesario.
- Permita que las lecturas del sensor se estabilicen para obtener datos precisos.
- Verifique dos veces las conexiones de los pines para evitar errores de comunicación.
- Tenga cuidado con las cargas de CA; asegúrese de un aislamiento y medidas de seguridad adecuados.
- Instale un disipador de calor en el relé si controla cargas elevadas.
- Utilice técnicas de antirrebote si es necesario al leer los datos del sensor.
- Mantenga el sensor DHT22 protegido de la luz solar directa para obtener lecturas precisas.
Instrucciones de cableado

Para cablear los componentes, comience conectando el sensor DHT22. Conecte el pin VCC al pin de 5V del Arduino, el pin GND a tierra (GND) y el pin DATA al pin digital 9 del Arduino.
A continuación, cablee la pantalla TM1637. Conecte el pin VCC al pin de 5V del Arduino, el pin GND a tierra, el pin CLK (reloj) al pin digital 2 y el pin DIO (datos) al pin digital 3. Para el módulo de relé, conecte el pin VCC al pin de 5V, el pin GND a tierra y el pin de control (señal) al pin digital 7. Finalmente, asegúrese de que la carga de CA esté conectada de forma segura al módulo de relé siguiendo las indicaciones del fabricante.
Ejemplos de código y guía paso a paso
El siguiente código inicializa el sensor DHT22 y la pantalla TM1637. Configura los pines necesarios y se prepara para leer datos de temperatura.
#include
#define CLK 2
#define DIO 3
#define DHTPIN 9
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
pinMode(RELAY, OUTPUT);
dht.begin();
}
En este fragmento de código, incluimos las bibliotecas necesarias y definimos los pines para la pantalla TM1637 y el sensor DHT22. La función setup inicializa la comunicación serie y configura el pin del relé como salida.

La función loop obtiene la temperatura y controla el relé en función de la lectura de temperatura. Si la temperatura supera los 50 grados, se activa el relé.
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);
}
}
Este fragmento de código muestra cómo leer la temperatura, mostrarla y controlar el relé. La temperatura se redondea y se muestra en el TM1637, y el relé se activa o desactiva según el umbral de temperatura.
Para una comprensión más completa, consulte el código completo incluido más abajo en el artículo.
Demostración / Qué esperar
Al ejecutar el programa, debería ver la temperatura mostrada en el TM1637. Cuando la temperatura supere los 50 grados Celsius, el relé se activará, encendiendo la carga de CA conectada. Por el contrario, cuando la temperatura baje por debajo de 50 grados, el relé se desactivará, apagando la carga. Tenga cuidado con la polaridad invertida y asegúrese de que las conexiones sean correctas para evitar daños en los componentes (en el video a las 12:30).
Marcas de tiempo del vídeo
- 00:00- Introducción
- 02:15- Explicación del cableado
- 05:00- Recorrido por el código
- 10:00- Demostración
- 12:30- Problemas comunes
/*
* 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
}
}
Cosas que podrías necesitar
-
Amazonas
-
AliExpressCompra módulo de relé de 1 2 4 6 8 canales de 5v 12v.s.click.aliexpress.com
Recursos y referencias
-
Externo
Archivos📁
Bibliotecas de Arduino (zip)
-
Módulo PCB DHT22 rojo
DHT22-module-red.fzpz0.01 MB
Archivo de Fritzing
-
Sensor de temperatura DHT11
Temperature Sensor DHT11.fzpz0.01 MB -
Sensor de Humedad y Temperatura DHT22
DHT22 Humidity and Temperature Sensor.fzpz0.01 MB -
Módulo PCB DHT22 rojo
DHT22-module-red.fzpz0.01 MB -
Módulo DHT22 blanco
DHT22-module-white.fzpz0.01 MB -
Módulo de siete segmentos TM1637
TM1637.fzpz0.01 MB -
Sensor de humedad y temperatura DHT11 (3 pines)
DHT11 Humitidy and Temperature Sensor (3 pins).fzpz0.20 MB
Manual del Usuario
-
Manual del usuario del sensor de temperatura y humedad DHT22
robojax-DHT22_manual.pdf0.36 MB