⭐⭐ Principiante avanzado
⏱️ 20 minutos
Mini estación meteorológica
Vas a hacer una mini estación meteorológica. El DHT11 mide la temperatura y la humedad, y la pantallita OLED las muestra.
🧰 ¿Qué necesitas?
🗺️ Esquema de conexión
Sigue los cables desde el Arduino hasta cada pieza. Puedes elegir tú los colores de los cables.
| Desde | Hasta |
|---|---|
Arduino UNO · D2 |
Sensor de temperatura DHT11 · DAT |
Arduino UNO · 5V |
Sensor de temperatura DHT11 · VCC |
Arduino UNO · GND |
Sensor de temperatura DHT11 · GND |
Arduino UNO · A4 |
Pantallita OLED 0,91" · SDA |
Arduino UNO · A5 |
Pantallita OLED 0,91" · SCL |
Arduino UNO · 5V |
Pantallita OLED 0,91" · VCC |
Arduino UNO · GND |
Pantallita OLED 0,91" · GND |
🛠️ Así lo construyes
- Conecta el DHT11: DAT al pin 2, VCC a 5V y GND a GND.
- Conecta la pantalla OLED: SDA a A4, SCL a A5, VCC a 5V y GND a GND.
- Consejo: dos piezas necesitan 5V y GND. Usa las tiras + y − de tu breadboard.
💻 El código
// Mini estación meteorológica
// El DHT11 mide la temperatura y la humedad. La pantallita OLED lo muestra.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
const int DHT_PIN = 2; // DAT del DHT11 está en pin 2
DHT dht(DHT_PIN, DHT11);
Adafruit_SSD1306 pantalla(128, 32, &Wire, -1); // OLED de 128 x 32 píxeles (SDA = A4, SCL = A5)
void setup() {
Serial.begin(9600);
dht.begin();
if (!pantalla.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // 0x3C es la dirección de la pantalla
Serial.println(F("Pantalla no encontrada. Revisa los cables de SDA y SCL."));
while (true); // Parar: sin pantalla no tiene sentido
}
pantalla.setTextColor(SSD1306_WHITE);
}
void loop() {
float temperatura = dht.readTemperature(); // En grados Celsius
float humedad = dht.readHumidity(); // En porcentaje
pantalla.clearDisplay();
pantalla.setTextSize(2);
pantalla.setCursor(0, 0);
if (isnan(temperatura) || isnan(humedad)) { // ¿No se puede medir?
pantalla.setTextSize(1);
pantalla.print(F("No hay DHT11"));
} else {
pantalla.print(temperatura, 1);
pantalla.print((char)247); // El signo de grados
pantalla.println(F("C"));
pantalla.print(humedad, 0);
pantalla.print(F("% hum."));
Serial.print(F("Temperatura: "));
Serial.print(temperatura);
Serial.print(F(" C Humedad: "));
Serial.print(humedad);
Serial.println(F(" %"));
}
pantalla.display(); // Solo ahora aparece todo en la pantalla
delay(2000); // El DHT11 solo puede medir una vez cada 2 segundos
}
🧠 ¿Qué hace el código?
- El DHT11 está en el pin 2. Con
readTemperature()yreadHumidity()leemos los valores. - La pantalla OLED habla por SDA (A4) y SCL (A5). Con
print()ponemos texto en la pantalla. - Cada 2 segundos llega una nueva medición. ¿No se puede medir? Entonces ves un mensaje.
🎯 Prueba esto…
- Muestra también la temperatura en Fahrenheit
- Haz que un LED se encienda si hace más de 25 grados
- Recuerda la temperatura más alta de hoy y muéstrala también
🚀 Construye este proyecto con Codey: abre codey.online/es/starter-kits/uno/projects/weather-station y haz clic en HAZ ESTO. Entonces el código y el esquema de conexión estarán listos enseguida.
Codey Online es un producto de OTRONIC