Capacitación Arduino · Temperatura y humedad
El DHT11 mide temperatura y humedad del aire: el Monitor serie muestra los dos valores y el LED rojo avisa sobre 30 °C. Simulado en Tinkercad y en OpenCircuits.
El componente
analogRead. Envía 40 bits (humedad y temperatura) por el pin S y se lee con la biblioteca DHT.Cómo funciona
readTemperature() y readHumidity().Truco de simulación
Un solo módulo entrega temperatura y humedad por el pin S, con la biblioteca DHT.
| Parte del kit | La reemplazamos con | Arduino |
|---|---|---|
| Temperatura | Sensor de temperatura TMP36 (sí existe en Tinkercad) | A0 |
| Humedad | Potenciómetro 0 a 100 % con «asignar al rango» | A1 |
| Biblioteca DHT | Bloques «leer el sensor de temperatura» y «leer pin analógico» | — |
| LEDs de aviso | LED verde (bien) y LED rojo (calor), con 220 Ω | D4 · D6 |
Paso 1 · Componentes
Buscar: Arduino
Buscar: Placa de pruebas
Buscar: temperatura. Hace de temperatura.
Hace de humedad (0 a 100 %).
Una para cada LED.
Temperatura bien.
¡Calor! Sobre 30 °C.
Paso 2 · Circuito
Paso 2 · Conexiones
| Alimentación | ||
| Arduino 5V | Riel + inferior | |
| Arduino GND | Riel − inferior | |
| Temperatura (TMP36, fila e, cara plana al frente) | ||
| — | TMP36 + / señal / − | Columnas 24, 25, 26 |
| Columna 24 | Riel + | |
| Columna 26 | Riel − | |
| Columna 25 | Arduino A0 | |
| Humedad (potenciómetro) | ||
| — | Potenciómetro (fila e) | Columnas 18, 19, 20 |
| Columna 18 / 20 | Riel − / + | |
| Columna 19 (cursor) | Arduino A1 | |
| LED verde · temperatura bien | ||
| — | LED cátodo / ánodo (fila e) | Columna 3 / 4 |
| — | 220 Ω | Columna 4 → 8 (fila c) |
| Arduino D4 | Columna 8 | |
| Columna 3 | Riel − | |
| LED rojo · calor | ||
| — | LED cátodo / ánodo (fila e) | Columna 10 / 11 |
| — | 220 Ω | Columna 11 → 15 (fila c) |
| Arduino D6 | Columna 15 | |
| Columna 10 | Riel − | |
Paso 3 · Código en bloques
Variables → Crear variable: temperatura y humedad.
Paso 3 · Código C++
// C++ code // int temperatura = 0; int humedad = 0; void setup() { pinMode(A0, INPUT); pinMode(A1, INPUT); Serial.begin(9600); pinMode(6, OUTPUT); pinMode(4, OUTPUT); }
void loop() { temperatura = (-40 + 0.488155 * (analogRead(A0) - 20)); humedad = map(analogRead(A1), 0, 1023, 0, 100); Serial.print("Temperatura: "); Serial.print(temperatura); Serial.print(" C Humedad: "); Serial.print(humedad); Serial.println(" %"); if (temperatura > 30) { digitalWrite(6, HIGH); digitalWrite(4, LOW); } else { digitalWrite(6, LOW); digitalWrite(4, HIGH); } delay(1000); // Wait for 1000 millisecond(s) }
Paso 4 · Simular
| Temperatura rara (−40 o 125) | El TMP36 está al revés o la señal no va a A0. |
| Monitor vacío | Falta abrir el Monitor en serie o el programa no se está simulando. |
| Humedad no cambia | Revisa el cable de la columna 19 a A1. |
| Ningún LED enciende | Revisa la orientación (pata doblada = ánodo, hacia la resistencia). |
Paso 5 · Kit real
| DHT11 | Arduino |
|---|---|
| S (datos) | D7 |
| + | 5V |
| − | GND |
En el Arduino IDE instala la biblioteca DHT sensor library (de Adafruit; acepta instalar también Adafruit Unified Sensor): Programa → Incluir biblioteca → Administrar bibliotecas.
Arriba de todo agrega la biblioteca y el sensor; en setup(), dht.begin();. Las dos lecturas quedan así:
#include <DHT.h> DHT dht(7, DHT11); ... temperatura = dht.readTemperature(); humedad = dht.readHumidity(); delay(2000); // el DHT11 mide cada 2 s
El código completo, ya listo, es el de OpenCircuits (diapositiva 12 → Código).
Alternativa · OpenCircuits
La categoría DHT11 usa la biblioteca DHT: un bloque muestra temperatura y humedad en el Monitor serie y otro compara la temperatura. No hacen falta variables.
La espera de 2 s va primero: el DHT11 no da lecturas más seguido.
// C++ code // #include <DHT.h> DHT dht_7(7, DHT11); void setup() { dht_7.begin(); Serial.begin(9600); pinMode(6, OUTPUT); pinMode(4, OUTPUT); }
void loop() { delay(2000); // Wait for 2000 millisecond(s) Serial.print("Temperatura: "); Serial.print(dht_7.readTemperature(), 1); Serial.print(" C Humedad: "); Serial.print(dht_7.readHumidity(), 0); Serial.println(" %"); if (dht_7.readTemperature() > 30) { digitalWrite(6, HIGH); digitalWrite(4, LOW); } else { digitalWrite(6, LOW); digitalWrite(4, HIGH); } }
Para seguir
Agrega un LED azul que se encienda si la humedad baja de 40 %.
Muestra temperatura y humedad en la LCD I2C en vez del Monitor serie.
Sobre 30 °C, enciende un motor (ventilador) en vez del LED rojo.
Guarda la temperatura más alta medida y muéstrala junto a la actual.