Introducción
Hoy quiero compartir con ustedes uno de mis proyectos recientes favoritos: un sistema de alarma de temperatura utilizando la Raspberry Pi Pico. Este proyecto nació de la necesidad de monitorear la temperatura en mi pequeño invernadero casero, pero rápidamente me di cuenta de que tiene muchas más aplicaciones.
Lo que hace especial a este sistema es su simplicidad y efectividad. Con componentes económicos y un poco de código, podemos crear un dispositivo que nos alerta cuando la temperatura sale de los rangos que consideramos seguros.
Componentes necesarios
Para recrear este proyecto necesitarás:
- Raspberry Pi Pico
- Sensor de temperatura y humedad DHT11
- Pantalla OLED SSD1306
- Buzzer
- Cables para conexiones
- Computadora para programar la Pico
Lo mejor es que todo esto se puede conseguir por menos de $15, haciendo de este un proyecto muy accesible incluso para principiantes.
Conexiones
Las conexiones son bastante sencillas:
- El sensor DHT11 va conectado al pin 2 de la Raspberry Pi Pico
- La pantalla OLED SSD1306 utiliza conexión I2C:
- SCL → GP5 de la Pico
- SDA → GP4 de la Pico
- El buzzer lo conectamos al pin 15
El código
El código que he desarrollado para este proyecto cumple varias funciones:
- Lee constantemente la temperatura y humedad del sensor DHT11
- Muestra estos valores en la pantalla OLED, junto con los límites configurados
- Activa diferentes alarmas según la situación:
- Un tono grave y pausado para temperaturas bajas
- Un tono agudo y rápido para temperaturas altas
Lo interesante es que podemos configurar fácilmente los límites de temperatura modificando las variables TEMP_BAJA
y TEMP_ALTA
en el código. Por defecto, he establecido el límite inferior en 20°C y el superior en 30°C, pero pueden ajustarse según tus necesidades.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
#include <DHT.h> #include <U8g2lib.h> #include <Wire.h> // Definición del display OLED - Cambiado para SSD1306 U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ 5, /* data=*/ 4); // Definición de pines #define DHTPIN 2 #define BUZZER_PIN 15 // Configuración del sensor DHT #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); // Límites de temperatura const float TEMP_BAJA = 33.0; const float TEMP_ALTA = 35.0; void setup() { // Inicializar comunicación serial Serial.begin(9600); // Inicializar sensor DHT dht.begin(); // Inicializar display OLED u8g2.begin(); u8g2.setFont(u8g2_font_6x10_tr); // Fuente más legible // Configurar pin del buzzer pinMode(BUZZER_PIN, OUTPUT); } void soundAlarmLow() { // Tono para temperatura baja for(int i = 0; i < 3; i++) { tone(BUZZER_PIN, 500); delay(200); noTone(BUZZER_PIN); delay(200); } } void soundAlarmHigh() { // Tono para temperatura alta for(int i = 0; i < 5; i++) { tone(BUZZER_PIN, 1000); delay(100); noTone(BUZZER_PIN); delay(100); } } void updateDisplay(float temp, float hum) { char buf[20]; // Buffer para convertir números a texto u8g2.clearBuffer(); // Mostrar temperatura u8g2.drawStr(0, 10, "Temperatura:"); dtostrf(temp, 4, 1, buf); strcat(buf, " C"); u8g2.drawStr(0, 20, buf); // Mostrar humedad u8g2.drawStr(0, 30, "Humedad:"); dtostrf(hum, 4, 1, buf); strcat(buf, " %"); u8g2.drawStr(0, 40, buf); // Mostrar límites u8g2.drawStr(0, 50, "Limites:"); // Preparar string de límites strcpy(buf, "Min:"); char tempStr[6]; dtostrf(TEMP_BAJA, 2, 1, tempStr); strcat(buf, tempStr); strcat(buf, "C Max:"); dtostrf(TEMP_ALTA, 2, 1, tempStr); strcat(buf, tempStr); strcat(buf, "C"); u8g2.drawStr(0, 60, buf); u8g2.sendBuffer(); } void loop() { // Leer sensor DHT11 float temp = dht.readTemperature(); float hum = dht.readHumidity(); // Verificar si la lectura fue exitosa if (isnan(temp) || isnan(hum)) { Serial.println("Error al leer el sensor DHT11!"); return; } // Actualizar display updateDisplay(temp, hum); // Verificar límites y activar alarmas if (temp < TEMP_BAJA) { soundAlarmLow(); } else if (temp > TEMP_ALTA) { soundAlarmHigh(); } // Esperar antes de la siguiente lectura delay(2000); } |
Componentes electrónicos
26 pines GPIO multifunción
Pines hembra
Un Sensor de temperatura y humedad DHT11
Este módulo consta de un sensor digital de humedad y temperatura DHT11 y una resistencia de 1 kΩ. El DHT11 utiliza un termistor interno y un sensor de humedad capacitivo para determinar las condiciones ambientales, un chip interno es responsable de convertir las lecturas a una señal digital en serie.
Tensión de funcionamiento | 3.3V a 5.5V |
Rango de medición de humedad | 20% a 90% HR |
Precisión de medición de humedad | ± 5% HR |
Resolución de medición de humedad | 1% HR |
Rango de medición de temperatura | 0ºC a 50ºC [32ºF a 122ºF] |
Precisión de medición de temperatura | ± 2ºC |
Resolución de medición de temperatura | 1ºC |
Rango de transmisión de señal | 20m |
Display Oled SSD1306
Módulo Buzzer
PCB
Circuito
Funcionamiento
Una vez que todo está conectado y programado, el sistema funciona de manera autónoma. La pantalla OLED muestra en tiempo real:
- La temperatura actual
- El porcentaje de humedad
- Los límites configurados para temperatura baja y alta
Cuando la temperatura cae por debajo del límite inferior, el buzzer emite una secuencia de tonos graves para alertarnos. Si la temperatura supera el límite superior, el patrón cambia a tonos agudos y más rápidos.
Lo que más me gusta de este sistema es que es completamente personalizable. Puedes ajustar los límites de temperatura, cambiar los patrones de sonido e incluso añadir más funcionalidades como el envío de alertas por correo electrónico o el control de ventiladores para regular la temperatura.
Aplicaciones prácticas
Este proyecto tiene múltiples aplicaciones en la vida real:
- Invernaderos y cultivos: Monitorea la temperatura para plantas sensibles
- Acuarios: Mantén el agua en la temperatura ideal para tus peces
- Servidores y equipos electrónicos: Evita el sobrecalentamiento de equipos sensibles
- Almacenamiento de alimentos o medicamentos: Asegura condiciones óptimas
- Proyectos educativos: Enseña sobre electrónica, programación y control ambiental
Reflexión personal
Lo que comenzó como una simple solución a un problema personal se ha convertido en uno de mis proyectos DIY favoritos. Me sorprende cómo algo que programé en poco tiempo puede ser tan útil en mi día a día.
Creo que lo más valioso de proyectos como este no es solo la tecnología, sino cómo podemos utilizarla para resolver problemas reales. La Raspberry Pi Pico ha demostrado ser una plataforma versátil y accesible para crear soluciones personalizadas.
Conclusión
Este proyecto demuestra que no necesitamos tecnología costosa o complicada para crear soluciones útiles. Con componentes básicos y conocimientos de programación podemos desarrollar sistemas que nos ayuden en nuestra vida diaria.
¿Has construido algo similar o tienes ideas para mejorar este proyecto? ¡Me encantaría leer tus comentarios y experiencias!
No te pierdas ningún video más suscríbete a nuestro canal de telegram https://t.me/carlosvolt_electronica_robotica
PROYECTO RECOMENDADO