Estação Meteorológica com Arduino Deixe um comentário

Apresentamos um projeto de Estação Meteorológica com Arduino, utilizando vários componentes compactos e de baixo custo para exibir em um display gráfico informações sobre temperatura, umidade e pressão:

Para a montagem dessa estação, usaremos: um sensor de temperatura e umidade DHT22, um sensor de pressão BMP180 e um display LCD Nokia 5110. Vamos apresentar mais informações sobre eles antes de mostrar o processo de montagem da Estação Meteorológica com Arduino.

Sensor de Temperatura e umidade DHT22

O DHT22  é um sensor de temperatura e umidade sucessor do DHT11. Efetua medições de temperatura entre -40 e 125 ºC, e umidade entre 0 e 100%. Pode ser alimentado com tensões entre 3.3 e 6V e, como o DHT11, possui 4 pinos mas apenas 3 são utilizados: Vcc, Data e GND.

Sensor de temperatura e umidade DHT22

O DHT22 tem baixo consumo de corrente (2,5 mA durante as medições e entre 100 e 150 µA em standby), possuindo internamente um sensor de umidade capacitivo e um termistor. Nesse sensor, o intervalo recomendado entre medições é de 2 segundos (contra 1 segundo no DHT11). Você pode obter mais informações sobre como usar este sensor através deste tutorial aqui no nosso blog.

Sensor de temperatura e pressão BMP180

O sensor de temperatura e pressão BMP180 também é uma evolução de um outro sensor, o BMP085, sendo totalmente compatível em termos de firmware, interface e software (pode utilizar inclusive a mesma biblioteca).

A comunicação com o Arduino é feita por meio da interface I2C, e suporta alimentação de 1.8 à 3.6V, sendo portanto necessário tomar um certo cuidado ao ligar esse sensor ao Arduino.

Sensor de pressão BMP180

Apesar dessa limitação na alimentação do sensor, um regulador de tensão na placa permite que os pinos de dados (SCL e SDA) sejam utilizados normalmente em placas com nível de sinal de 5V, como o Arduino Uno. Descubra como controlar pressão e temperatura seguindo este post também aqui do nosso blog.

Display LCD Nokia 5110

O display LCD Nokia 5110 que vamos utilizar no projeto é um display gráfico de 84×48 pixels, 1,6 polegadas e backlight (luz de fundo) azul, com tensão de alimentação de 5V. Sua conexão com o Arduino utiliza 5 fios, e a configuração dos pinos de ligação é feita via software, assim podemos utilizar praticamente qualquer pino do Arduino. Para o backlight (pino BL), a tensão máxima suportada é de 3.3V.

Display Nokia 5110

 No nosso projeto, vamos ligar esse display da seguinte maneira:

  • Pino RST ligado ao pino 12 do Arduino
  • Pino CE ligado ao pino 11 do Arduino
  • Pino DC ligado ao pino 10 do Arduino
  • Pino Din ligado ao pino 9 do Arduino
  • Pino Clk ligado ao pino 8 do Arduino
  • Pino Vcc ligado ao pino 5V do Arduino
  • Pino BL ligado ao pino 3.3V do Arduino
  • Pino GND ligado ao GND do Arduino

Se você deseja montar esse projeto utilizando o display Nokia 5110 vermelho, consulte as especificações do fabricante, pois existem muitos modelos desse display que funcionam apenas com nível de sinal de 3.3V.

Circuito Estação Meteorológica

Vamos apresentar duas opções de circuito, sendo uma com o Arduino Uno, para quem deseja apenas testar o projeto na protoboard, e outra com o Arduino Nano, ideal para montagens definitivas e que pode ser colocado em uma caixa plástica por exemplo.

No Arduino Uno, utilizamos os pinos de 8 à 12 mencionados anteriormente para ligação do display, e o pino 3 como entrada de dados do DHT22 com um resistor de 10K funcionando como pull-up. O sensor BMP180 utiliza os pinos da interface I2C, que são os pinos analógicos A4 e A5:

Circuito Estação Meteorológica - Arduino Uno

No Arduino Nano, são utilizados os mesmos pinos. Verifique na imagem abaixo a pinagem dessa placa e a conexão dos componentes:

Arduino Nano - Pinos

Circuito Estação Meteorológica - Arduino Nano

Para deixar o projeto mais compacto usamos uma case de modem para proteção e transporte mas você pode usar qualquer outra caixa para obter o mesmo resultado:

Circuito Estação Meteorológica

Bibliotecas e programa

Antes de carregar o programa faça o download das bibliotecas abaixo :

Descompacte cada uma delas e copie para dentro da pasta LIBRARIES da IDE do Arduino.

A Adafruit_GFX é a biblioteca gráfica, responsável pelas funções de desenho de retângulos, círculos, linhas, etc. A Adafruit_PCD8544 é a biblioteca utilizada para gerenciar a comunicação entre o Arduino e o display. A biblioteca BMP085 serve tanto para o sensor BMP085 como para o BMP180, utilizado neste projeto.

O mesmo programa pode ser carregado no Arduino Uno ou no Arduino Nano. O programa desenha três retângulos com as bordas arredondadas, e dentro deles mostra as informações de temperatura, umidade e pressão, atualizando as informações à cada 5 segundos.

// Programa : Estacao Meteorologica com Arduino
// Autor : FILIPEFLOP

// Carrega bibliotecas graficas e sensores
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <DHT.h>
#include <Adafruit_BMP085.h>
#include <Wire.h>
#include <SPI.h>

// Pinagem ligacao display Nokia 5110
// pin 8 - Serial clock out (SCLK)
// pin 9 - Serial data out (DIN)
// pin 10 - Data/Command select (D/C)
// pin 11 - LCD chip select (CS/CE)
// pin 12 - LCD reset (RST)

// Inicializa o display nos pinos acima
Adafruit_PCD8544 display = Adafruit_PCD8544(8, 9, 10, 11, 12);

// Define pino e tipo do sensor DHT
DHT dht(3, DHT22);

Adafruit_BMP085 bmp180;

void setup()   
{
  Serial.begin(9600);
  // Informacoes iniciais no display
  display.begin();
  // Ajusta o contraste do display
  display.setContrast(48);
  // Apaga o buffer e o display
  display.clearDisplay();
  // Define tamanho do texto e cor
  display.setTextSize(1);
  display.setTextColor(BLACK);
  
  // Retangulo temperatura
  display.drawRoundRect(0,0, 44,24, 3, 2);
  // Texto inicial temperatura
  display.setCursor(11,3);  // Seta a posição do cursor
  display.println("TEMP");  
  display.setCursor(5,14);
  display.println("----"); 
  display.setCursor(29,14);
  display.drawCircle(31, 15, 1,1);
  display.println(" C");
  
  // Retangulo umidade
  display.drawRoundRect(45,0, 39 ,24, 3, 2);
  // Texto inicial Umidade
  display.setCursor(52,3);  
  display.println("UMID");
  display.setCursor(50,14); 
  display.println("----"); 
  display.setCursor(75,14);
  display.println("%");  
  
  // Retangulo pressao
  display.drawRoundRect(0,25, 84 ,23, 3, 2);
  // Texto inicial Pressao
  display.setCursor(22,28); 
  display.println("PRESSAO");
  display.setCursor(55,38);
  display.println("hPa");
  display.setCursor(11,38);
  display.println("------"); 
  display.display();
  
  delay(1000);
  // Inicializa o sensor BMP180
  if (!bmp180.begin()) 
  {
    Serial.println("Sensor BMP180 nao encontrado !!");
    while (1) {}
  }
  // Inicializa o DHT22
  dht.begin();
}

void loop()
{
  // Leitura temperatura, umidade e pressao
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float p = bmp180.readPressure()/100.0;
  
  // Atualiza valor da temperatura
  display.fillRect(4,13, 25 , 10, 0);
  display.setCursor(4,14);
  display.println(t,1); 
  
  // Atualiza valor da umidade
  display.fillRect(50,13, 23 , 10, 0);
  display.setCursor(50,14);
  display.println(h,1); 
  
  // Atualiza valor da pressao
  display.fillRect(4, 37, 46 , 10, 0);
  display.setCursor(11,38);
  display.println(p,2); 
   
  display.display();
  // Aguarda 5 segundos para efetuar nova leitura
  delay(5000);
}

Você pode utilizar também o sensor de temperatura DHT11 no projeto, utilizando a mesma biblioteca DHT mostrada acima. Para isso, altere a linha DHT dht(3, DHT22), substituindo DHT22 por DHT11.

Display Estação Meteorológica

 Gostou? Deixe seu comentário logo abaixo. Em caso de dúvidas, caso queira trocar uma ideia, ou até mesmo dividir seu projeto, acesse nosso Fórum!

Faça seu comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *