Construye una estación meteorológica compacta con Arduino Nano: Guía DIY fácil
Componentes y materiales
| Arduino Nano R3 | × | 1 |
| Módulo DHT11 | × | 1 |
| Sensor de presión BMP-280 | × | 1 |
| Pantalla LCD 1.44" ST7735 | × | 1 |
| Caja impresa en 3D | × | 1 |
| Cable USB A a mini USB B | × | 1 |
Herramientas y máquinas necesarias
- Soldador (genérico)
- Impresora 3D (genérica)
- Hilo de soldar
- Cinta de doble cara
Aplicaciones y servicios en línea
- Arduino IDE
- Autodesk Fusion 360
Sobre este proyecto
Introducción
Capturar datos físicos en tiempo real es siempre fascinante. En este proyecto, no solo podrás capturar tres parámetros físicos fundamentales para predicción meteorológica (temperatura, humedad y presión atmosférica), sino también mostrar los datos en tiempo real en una pantalla LCD.
Descripción y principio de funcionamiento
Los dos sensores usados son el BMP-280 y el DHT-11. El primero detecta temperatura y presión atmosférica, el segundo la humedad relativa. Se podría haber usado un BME-280 (que también mide humedad) en lugar del BMP-280, pero considerando el coste, la combinación usada aquí es mucho más económica para proyectos DIY. También cabe notar que aunque el DHT-11 puede medir temperatura y humedad, se usa solo para humedad porque su resolución de temperatura es ±2°C frente a ±0.5°C del BMP-280. El corazón del proyecto es la placa de desarrollo Arduino NANO. Se eligió NANO sobre el popular UNO por su precio asequible. Se usa una pantalla TFT LCD ST7735 de 1.44" como display. Se evitó una pantalla mayor para no sobrecargar el Arduino NANO.
Circuito y programación
Se proporciona una combinación de diagrama de circuito y diagrama de bloques para ayudar a entender la configuración física y conexiones. También se incluyen tablas de pinout de los componentes. Al revisar el diagrama y tablas, notará que los pines 5V y GND del header ICSP en el Arduino NANO se han utilizado para alimentar los componentes junto con los pines de alimentación y tierra de la placa. Esto evita una fuente de alimentación adicional que haría el sistema más voluminoso.
En cuanto a la programación, en la primera parte se incluye un array de librerías para mantener el código corto y simple. Además de las obvias, vale la pena mencionar Wire.h y SPI.h porque Wire.h permite al Arduino comunicarse con dispositivos I2C/TWI como el BMP-280 y el LCD ST7735, y SPI.h proporciona la interfaz serial periférica con el LCD ST7735. En la segunda parte, se inicializan los sensores y se configuran el diseño, color de fuente, etc. del LCD para mostrar los datos según preferencias. En la parte final, se obtienen las lecturas de los sensores y se muestran con un delay conveniente entre cada lectura para mantener la estabilidad.
Construcción y pruebas
En el prototipo, los componentes se mantuvieron modulares y conectados con cables jumper en lugar de soldar. Esto no solo permite fácil solución de problemas y reparación, sino que también hace el ensamblaje sin complicaciones. La carcasa se imprimió en 3D a medida para un ajuste perfecto. La caja tiene ventilación adecuada para exponer los sensores a los measurands y disipar el calor generado que interferiría con los elementos sensores. El dispositivo se alimenta vía el mismo cable USB tipo A a mini USB tipo B usado para programar el Arduino. El prototipo se probó en interiores durante varias horas usando tanto puerto USB de PC como cargador de smartphone 5V. Los resultados son bastante precisos comparados con datos meteorológicos en línea, considerando el coste de producción y tiempo de desarrollo.
Conclusión
En conclusión, este proyecto es bastante económico, útil por decir lo menos, y lo más importante, ¡es divertido tener una pequeña estación meteorológica portátil que cabe en tu bolsillo!
Para comprar componentes electrónicos, pídalos en UTSOURCE
Bibliografía
- Google.com
- Arduino.cc
- Mytectutor.com




Código
EL CÓDIGO (C/C++)
ESTE ES EL SKETCH RELEVANTE PARA EL PROYECTO, LOS COMENTARIOS EXPLICAN EL FUNCIONAMIENTO
#include <SPI.h> // Interfaz Serial Periférica
#include <Wire.h> // Interfaz Dos Hilos (I2C)
#include <Adafruit_GFX.h> // Librería gráfica Adafruit
#include <Adafruit_ST7735.h>// Librería Adafruit ST7735 TFT
#include <Adafruit_BMP280.h>// Librería sensor Adafruit BMP280
#include "DHT.h" // Librería sensor DHTXX
#define DHTPIN 2 // Pin datos DHT11 en D2
#define DHTTYPE DHT11 // Tipo de sensor DHT
#define TFT_RST 8 // TFT RST en D8
#define TFT_CS 10 // TFT CS en D9
#define TFT_DC 9 // TFT DC en D10
// Inicializar librería ST7735 SERIES TFT
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
// Dirección I2C del dispositivo: 0x76 o 0x77 (0x77 es default de la librería)
#define BMP280_I2C_ADDRESS 0x76
Adafruit_BMP280 bmp280; // Inicializar librería BMP280
DHT dht(DHTPIN, DHTTYPE); // Inicializar sensor DHT
void setup(void) {
dht.begin(); // Sincronizar sensor DHT
tft.initR(INITR_144GREENTAB); // Inicializar chip ST7735S, pestaña verde
tft.fillScreen(ST77XX_BLACK); // Fondo negro
tft.drawFastHLine(0, 15, tft.width(), ST77XX_CYAN); // Línea separadora en (0,15)
tft.setTextColor(ST77XX_CYAN, ST77XX_BLACK); // Color texto cian, fondo negro
tft.setTextSize(1); // Tamaño texto 1
tft.setCursor(25, 5); // Cursor en (25,5)
tft.print("WEATHER BUDDY"); // Título
// Inicializar sensor BMP280
if (bmp280.begin(BMP280_I2C_ADDRESS) == 0) {
// Error de conexión o dirección incorrecta
tft.setTextColor(ST77XX_RED, ST77XX_CYAN);
tft.setTextSize(2);
tft.setCursor(5, 76);
tft.print("Connection");
tft.setCursor(35, 100);
tft.print("Error");
while (1); // Bucle infinito
}
tft.drawFastHLine(0, 55, tft.width(), ST77XX_CYAN); // Línea en (0,55)
tft.drawFastHLine(0, 95, tft.width(), ST77XX_CYAN); // Línea en (0,95)
tft.setTextColor(ST77XX_RED, ST77XX_BLACK);
tft.setCursor(30, 20);
tft.print("TEMPERATURA");
tft.setTextColor(ST77XX_CYAN, ST77XX_BLACK);
tft.setCursor(40, 60);
tft.print("HUMEDAD");
tft.setTextColor(ST77XX_GREEN, ST7735_BLACK);
tft.setCursor(40, 100);
tft.print("PRESION");
tft.setTextSize(2); // Tamaño texto 2 para valores
}
// Bucle principal
void loop() {
char _buffer[8];
// Leer sensores
float temp = bmp280.readTemperature(); // Temperatura en °C
float hum = dht.readHumidity(); // Humedad en %HR
float pres = bmp280.readPressure(); // Presión en Pa
// 1: Imprimir temperatura (°C)
if (temp < 0)
sprintf(_buffer, "-%02u.%02u", (int)abs(temp), (int)(abs(temp) * 100) % 100);
else
sprintf(_buffer, " %02u.%02u", (int)temp, (int)(temp * 100) % 100);
tft.setTextColor(ST77XX_YELLOW, ST77XX_BLACK);
tft.setCursor(11, 34);
tft.print(_buffer);
tft.drawCircle(89, 34, 2, ST77XX_YELLOW); // Símbolo grado (°)
tft.setCursor(95, 34);
tft.print("C");
// 2: Imprimir humedad (%)
sprintf(_buffer, "%02u ", (int)(hum));
tft.setTextColor(ST77XX_MAGENTA, ST77XX_BLACK);
tft.setCursor(45, 74);
tft.print(_buffer);
tft.setCursor(75, 74);
tft.print("%");
// 3: Imprimir presión (hPa)
sprintf(_buffer, "%04u.%02u", (int)(pres/100), (int)((uint32_t)pres % 100));
tft.setTextColor(ST77XX_ORANGE, ST77XX_BLACK);
tft.setCursor(3, 112);
tft.print(_buffer);
tft.setCursor(91, 112);
tft.print("hPa");
delay(1000); // Espera 1 segundo antes de siguiente lectura
}
Piezas personalizadas y cajas
ARCHIVO STL PARA LAS PIEZAS IMPRESAS EN 3D QUE USÉ
Esquemático
SOLO NECESITAS SEGUIR EL CABLEADO MOSTRADO.

Proceso de manufactura
- Construcción de una estación meteorológica exterior con Raspberry Pi 2 y ADS‑WS1
- Construya una estación meteorológica con Raspberry Pi que envíe datos diarios por email
- Monitorización meteorológica remota con Raspberry Pi 3 y PubNub
- Estación Meteorológica Avanzada v2.0: Monitorización en Tiempo Real de Temperatura, Presión, Humedad y Altitud
- Construye una consola de control DIY para Photoshop con Arduino Nano RP2040
- Reloj Preciso de 7 Segmentos con Arduino Pro Mini y RTC DS1302
- Estación Meteorológica Portátil Arduino por $10 – Nano, DHT22, BMP180 y LCD
- eDOT: Reloj Preciso y Estación Meteorológica Arduino con Control IR Integrado
- Construye una Radio FM Compacta con Arduino Nano y RDA5807M
- Monitorización Meteorológica en Tiempo Real con Arduino y ThingSpeak IoT
- Estación meteorológica Arduino Nano: Sensores BMP280, DHT11, UV y RTC en OLED 0,96"