Construa uma Estação Meteorológica Compacta com Arduino Nano – Guia DIY Fácil
Componentes e Materiais
- Arduino Nano R3 – 1 unidade
- Módulo DHT11 – 1 unidade
- Sensor de Pressão BMP280 – 1 unidade
- Display LCD 1.44" ST7735 – 1 unidade
- Caixa Impressa em 3D – 1 unidade
- Cabo USB A para Mini USB B – 1 unidade
Ferramentas e Máquinas Necessárias
- Ferro de solda (genérico)
- Impressora 3D (genérica)
- Fio de solda
- Fita dupla face
Aplicativos e Serviços Online
- Arduino IDE
- Autodesk Fusion 360
Sobre o Projeto
Introdução
Capturar dados físicos em tempo real é sempre fascinante. Neste projeto, você não só poderá capturar três parâmetros físicos fundamentais para previsão do tempo – temperatura, umidade e pressão atmosférica – mas também exibir os dados em tempo real em uma tela LCD.
Descrição e Princípio de Funcionamento
Os dois sensores usados são BMP280 e DHT11. O primeiro mede temperatura e pressão atmosférica; o segundo mede umidade relativa. O DHT11 poderia ser dispensado usando um BME280 (que também mede umidade) em vez do BMP280, mas considerando o custo, a combinação usada aqui é muito mais econômica para projetos DIY. Note que, embora o DHT11 possa medir temperatura e umidade, ele é usado apenas para umidade porque sua resolução de temperatura é ±2°C comparado a ±0.5°C do BMP280. O coração do projeto é a placa de desenvolvimento Arduino NANO. O NANO foi escolhido em vez do UNO por seu preço acessível. Uma tela TFT LCD ST7735 de 1.44" é usada como display. Uma tela maior foi evitada para não sobrecarregar o Arduino NANO.
Circuito e Programação
Uma combinação de diagrama de circuito e diagrama de blocos foi fornecida para ajudar a entender a configuração física e conexão dos componentes. Tabelas de pinagem dos componentes também são fornecidas. Ao analisar o diagrama e tabelas, notará que os pinos 5V e GND do header ICSP no Arduino NANO foram utilizados para alimentar os componentes junto com os pinos de alimentação e terra onboard. Isso evita fonte de alimentação adicional, mantendo o sistema compacto.
Quanto à programação, na primeira parte várias bibliotecas são incluídas para manter o código curto e simples. Além das óbvias, as bibliotecas Wire.h e SPI.h merecem destaque: Wire.h permite comunicação I2C/TWI com BMP280 e LCD ST7735; SPI.h fornece interface serial periférica com o LCD ST7735. Na segunda parte, os sensores são inicializados e o layout, cor da fonte, etc. do LCD são configurados para exibir dados conforme preferência. Na parte final, as leituras dos sensores são obtidas e exibidas com atraso conveniente entre cada leitura para manter a estabilidade.
Construção e Testes
No protótipo, os componentes foram mantidos modulares e conectados com jumpers em vez de solda. Isso permite fácil troubleshooting e reparo, além de tornar a montagem sem complicações. A caixa do dispositivo foi impressa em 3D sob medida para encaixe perfeito. A caixa possui ventilação adequada para expor os sensores aos measurands e dissipar calor gerado pelo sistema, que interferiria nos elementos sensores. O dispositivo é alimentado via cabo USB tipo A para mini USB tipo B, o mesmo usado para programar o Arduino. O protótipo foi testado em ambiente interno por algumas horas usando tanto porta USB do PC quanto carregador de smartphone 5V. Os resultados são bastante precisos comparados com dados meteorológicos online, considerando custo de produção e tempo de desenvolvimento.
Conclusão
Em conclusão, este projeto é bastante econômico, útil e, o mais importante, é divertido ter uma pequena estação meteorológica portátil que cabe no bolso.
Para comprar componentes eletrônicos, peça na UTSOURCE.
Bibliografia
- Google.com
- Arduino.cc
- Mytectutor.com




Código
O CÓDIGO C/C++
ESTE É O SKETCH RELEVANTE PARA O PROJETO, OS COMENTÁRIOS EXPLICAM O FUNCIONAMENTO
#include <SPI.h> // Interface Serial Periférica
#include <Wire.h> // Interface Dois Fios (I2C)
#include <Adafruit_GFX.h> // Biblioteca gráfica Adafruit
#include <Adafruit_ST7735.h> // Biblioteca Adafruit ST7735 TFT
#include <Adafruit_BMP280.h> // Biblioteca sensor Adafruit BMP280
#include "DHT.h" // Biblioteca sensor DHTXX
#define DHTPIN 2 // Pino de dados DHT11 no pino D2 do Arduino
#define DHTTYPE DHT11 // Tipo de sensor DHT usado
#define TFT_RST 8 // Pino RST do TFT no pino D8 do Arduino
#define TFT_CS 10 // Pino CS do TFT no pino D9 do Arduino
#define TFT_DC 9 // Pino DC do TFT no pino D10 do Arduino
// Inicializa biblioteca ST7735 SERIES TFT
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
// Endereço I2C do dispositivo: 0x76 ou 0x77 (0x77 é padrão da biblioteca)
#define BMP280_I2C_ADDRESS 0x76
Adafruit_BMP280 bmp280; // Inicializa biblioteca Adafruit BMP280
DHT dht(DHTPIN, DHTTYPE); // Inicializa sensor DHT
void setup(void) {
dht.begin(); // Sincroniza sensor DHT
tft.initR(INITR_144GREENTAB); // Inicializa chip ST7735S, aba verde
tft.fillScreen(ST77XX_BLACK); // Fundo preto
tft.drawFastHLine(0, 15, tft.width(), ST77XX_CYAN); // Linha horizontal separadora em (0,15)
tft.setTextColor(ST77XX_CYAN, ST77XX_BLACK); // Cor texto ciano, fundo preto
tft.setTextSize(1); // Tamanho texto 1
tft.setCursor(25, 5); // Cursor em (25,5)
tft.print("WEATHER BUDDY"); // Título
// Inicializa sensor BMP280
if (bmp280.begin(BMP280_I2C_ADDRESS) == 0) {
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); // Trava aqui
}
tft.drawFastHLine(0, 55, tft.width(), ST77XX_CYAN); // Linha em (0,55)
tft.drawFastHLine(0, 95, tft.width(), ST77XX_CYAN); // Linha em (0,95)
tft.setTextColor(ST77XX_RED, ST77XX_BLACK);
tft.setCursor(30, 20);
tft.print("TEMPERATURE ");
tft.setTextColor(ST77XX_CYAN, ST77XX_BLACK);
tft.setCursor(40, 60);
tft.print("HUMIDITY ");
tft.setTextColor(ST77XX_GREEN, ST7735_BLACK);
tft.setCursor(40, 100);
tft.print("PRESSURE ");
tft.setTextSize(2);
}
// Loop principal
void loop() {
char _buffer[8];
// Lê temperatura, umidade e pressão do BMP280
float temp = bmp280.readTemperature(); // Temperatura em °C
float hum = dht.readHumidity(); // Umidade em %rH
float pres = bmp280.readPressure(); // Pressão em hPa (Pa na verdade, convertemos depois)
// 1: Imprime temperatura (em °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 de grau (°)
tft.setCursor(95, 34);
tft.print("C");
// 2: Imprime umidade (em %)
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: Imprime pressão (em 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); // Aguarda 1 segundo antes da próxima leitura
}
Peças Personalizadas e Caixas
ESTE É O ARQUIVO STL PARA AS PEÇAS IMPRESSAS EM 3D QUE USEI
Esquemático
BASTA SEGUIR A FIAÇÃO MOSTRADA.

Processo de manufatura
- Construindo Estação Meteorológica Externa com Raspberry Pi 2 e ADS‑WS1
- Construa Estação Meteorológica Raspberry Pi que Envia Dados Diários por Email
- Monitoramento Remoto do Tempo com Raspberry Pi 3 e PubNub
- Estação Meteorológica Avançada v2.0: Monitoramento em Tempo Real de Temperatura, Pressão, Umidade e Altitude
- Console de Controle DIY para Photoshop com Arduino Nano RP2040
- Relógio Preciso de 7 Segmentos com Arduino Pro Mini e RTC DS1302
- Estação Meteorológica Portátil Arduino por $10 – DIY com Nano, DHT22, BMP180 e LCD
- eDOT: Relógio de Precisão e Estação Meteorológica Arduino com Controle IR Embutido
- Construa um Rádio FM Compacto com Arduino Nano e RDA5807M
- Monitoramento Meteorológico em Tempo Real com Arduino e ThingSpeak IoT