Estação meteorológica com Arduino

Estação meteorológica

Este artigo apresenta o projeto de uma mini estação meteorológica utilizando um Arduino UNO, capaz de realizar medição de luminosidade, temperatura, umidade, índice UV, pressão atmosférica e material particulado, além de se comunicar com a internet através de um módulo wi-fi ESP8266 ESP-01 utilizando a plataforma ThingSpeak.

Neste artigo são abordados:

  • Montagem do hardware: conexão dos sensores e módulo de comunicação ESP8266 com o Arduino UNO;
  • Desenvolvimento do firmware para leitura dos sensores e postagem dos dados no Thingspeak;
  • Publicação e consulta dos dados através do Thingspeak.

Esse projeto foi desenvolvido por Igor Fonseca Albuquerque, e apresentado no Genuino Day – Santos, SP, em 02 de abril de 2016.

Apresentação do projeto de estação metereológica com arduino no primeiro Genuino Day de Santos, SP.
Figura 1 - Apresentação do projeto no primeiro Genuino Day de Santos, SP.

Motivação

A Baixada Santista é uma das principais atrações turísticas do estado de São Paulo, atraindo milhares de visitantes às suas praias todos os anos. São comuns as notícias de engarrafamentos quilométricos rumo à região em feriados prolongados e nos finais de semana ensolarados do verão. Conhecidas pelo elevado número de dias nublados, em virtude da proximidade à Serra do Mar, as cidades litorâneas veem sua população se multiplicar em qualquer sinal de dias de sol e calor.

A região abriga ainda um dos maiores portos do país, o qual realiza o escoamento de boa parte da produção de grãos das regiões sudeste e centro-oeste do Brasil, além do transporte e armazenamento de produtos químicos, combustíveis e conteiners. O transporte da soja, em particular, é uma das atividades que mais trazem transtornos à população dos bairros próximos aos terminais portuários, devido às emissões de materiais particulados e aos odores exalados pela fermentação dos grãos.

Nos últimos anos, notícias envolvendo incêndios de grandes proporções na área portuária têm sido frequentes na mídia, divulgando negativamente a imagem da região, com potencial de dano para a saúde da população e de impactos ao meio ambiente.

Todas essas características relacionadas ao clima e qualidade do ar da região serviram de motivação para o desenvolvimento da plataforma aberta de monitoramento do clima apresentada nesse trabalho.

Santos na mídia.
Figura 2 - Santos na mídia.

Montagem do hardware

Nesse projeto foi proposto um sistema capaz de coletar dados ambientais de diversos sensores, processar as variáveis medidas e disponibilizá-las publicamente na internet para acesso remoto.

Projeto conceitual da mini estação meteorológica.
Figura 3 - Projeto conceitual da mini estação meteorológica.

Foram selecionados sensores capazes de realizar a medição de pressão atmosférica, temperatura, umidade relativa do ar, luminosidade, índice UV e material particulado.

Os seguintes componentes foram especificados para o projeto: 

  • Arduino UNO: placa de microcontrolador baseado no ATmega328P, com 14 pinos de entrada/saída digital, 6 entradas analógicas, conexão USB (Figura 4);
  • Sensor de luminosidade: módulo baseado em um LDR (light dependent resistor). Apresenta uma saída analógica proporcional à intensidade luminosa do ambiente, sendo que a sua resistência cai quando a intensidade luminosa aumenta (Figura 5);
  • Sensor de intensidade UV: mede a intensidade do sinal luminoso na faixa de 200 a 400 nm, gerando um sinal analógico que pode ser usado para o cálculo de índice UV (Figura 6);
  • Sensor de pressão atmosférica (BMP085): sensor de pressão atmosférica baseado no chip BMP085, para pressão entre 300 e 1100 hPa. Comunicação com microcontrolador através protocolo I2C (Figura 7);
  • Sensor de temperatura e umidade (DHT-22): permite a leitura de temperaturas entre -40 a +80 °C e umidade entre 0 a 100%. Comunicação com o Arduino através de sinal digital (Figura 8);
  • Sensor de material particulado: indica a concentração de material particulado de 1.0 a 2.5 μm (Figura 9);
  • Módulo wi-fi (ESP8266 ESP-01): módulo wi-fi capaz de realizar a interface do microcontrolador, através de comunicação serial, com uma rede 802.11b/g/n (Figura 10).

Podem ser utilizados diferentes modelos de sensores, de diferentes fabricantes, desde que respeitados os tipos de sinais trocados entre o controlador (Arduino) e os sensores.

Para facilitar a montagem do protótipo, foi utilizado um protoshield (Figura 11), simplificando assim a interligação dos componentes.

Arduino Uno.
Figura 4 - Arduino Uno.
Sensor de luminosidade.
Figura 5 - Sensor de luminosidade.
Sensor de Índice UV.
Figura 6 - Sensor de Índice UV.
Sensor de pressão barométrica.
Figura 7 - Sensor de pressão barométrica.
Sensor de material particulado.
Figura 8 - Sensor de material particulado.
 Sensor de umidade e temperatura.
Figura 9 - Sensor de umidade e temperatura.
Módulo wi-fi ESP8266.
Figura 10 - Módulo wi-fi ESP8266.
Protoshield.
Figura 11 - Protoshield.

As figuras abaixo ilustram a interligação entre os componentes e uma foto do circuito com todos os sensores conectados.

Estação-metereológica-arduino-123
Figura 12 - Interligação dos componentes em protoboard.
Montagem dos componentes da estação metereológica com arduino
Figura 13 - Montagem dos componentes.

Desenvolvimento do firmware

O código utilizado foi desenvolvido utilizando-se o Arduino IDE 1.0.5. A figura abaixo apresenta um diagrama de blocos do programa que foi desenvolvido.

Após a inicialização dos sensores e da conexão com o módulo wi-fi, na etapa de setup, o Arduino entra em um loop infinito no qual realizada a leitura dos sensores, tratamento e transmissão dos dados.

Estação meteorológica
Figura 14 - Diagrama de blocos do firmware

Leitura dos sensores e tratamento dos dados

O projeto utiliza sensores analógicos (de luminosidade e UV) e digitais (de umidade, temperatura, pressão e material particulado).

O valor medido nos sensores analógicos deve ser processado para convertê-los para a unidade desejada. O trecho de código abaixo apresenta como é feita a leitura e conversão dos valores lidos de luminosidade e índice UV.

A transmissão dos dados entre o sensor de temperatura e umidade DHT22 e o Arduino é realizada através de um protocolo de comunicação digital próprio, utilizando-se a biblioteca existente para Arduino.

A leitura do sensor de pressão é realizada através de protocolo I2C, no qual o Arduino solicita os dados ao sensor e aguarda a chegada de um evento (que pode contar os dados de pressão ou temperatura do sensor).

Para realizar a leitura da concentração de material particulado é utilizada uma das entradas digitais do Arduino. O sensor é composto por um laser e um fotodetector. Na ausência de material particulado, o laser incide diretamente sobre o detector, levando a saída do sensor para nível lógico alto. A passagem de material particulado faz com que o feixe seja obstruído, levando a saída para zero (Figura 15).

A estimativa da concentração de material particulado é feita verificando-se a porcentagem do tempo no qual a entrada digital do Arduino fica em nível lógico baixo, conforme representado abaixo.

Estação meteorológica
Figura 15 - Saída digital do sensor de material particulado
Estação meteorológica
Figura 16 - Curva do sensor de material particulado (concentração x tempo de ocupação).

O trecho de código abaixo ilustra a rotina de estimativa da concentração de material particulado. No exemplo abaixo o controlador calcula o tempo em que a entrada digital ficou em nível lógico baixo durante um período de amostragem de 30 segundos, e calcula a porcentagem de tempo para a qual permaneceu nesse estado.

Conexão com wi-fi

A conexão com um roteador específico é realizada durante o setup() do Arduino. Para isso, deve ser informado o SSID e a senha para conexão da rede.

Durante a conexão, o módulo wi-fi é colocado no modo station e solicitado para se conectar com o roteador informado. O módulo deverá permanecer conectado indefinidamente.

Envio dos dados para o Thingspeak

O Thingspeak é uma plataforma de armazenamento de dados na nuvem, ideal para desenvolvimento de dispositivos IoT. Os dados são acessíveis através do site ThingSpeak, por qualquer dispositivo com acesso à internet, podendo ser categorizados como dados públicos ou privados.

Os dados enviados pelos dispositivos são organizados em canais, cada um capaz de armazenar os dados históricos de até 8 variáveis medidas, que podem ser consultados ou exportados em formato CSV. É possível ajustar os gráficos de visualização de cada variável, configurando-se título dos gráficos, escala de tempo e tratamento dos dados (cálculo dos valores médios, medianos ou somados).

Após a conexão do módulo ESP8266 ao roteador, deve-se abrir uma conexão http com o ThingSpeak (através do IP 184.106.153.149), informar a quantidade de bytes da mensagem que será transmitida e na sequência enviar os dados através de uma instrução GET. Na mensagem enviada deve ser apresentada a chave (API key) do canal (channel) que armazenará os dados, juntamente com os valores medidos para cada campo (field1, field2, …, field8). O trecho de código abaixo ilustra como é feito o envio dos dados lidos para um canal do ThingSpeak. 

A figura abaixo ilustra os gráficos que podem ser obtidos da estação através do ThingSpeak, o qual teve seus dados definidos como públicos.

Estação meteorológica
Figura 17 - Gráficos de temperatura, umidade, pressão e luminosidade no ThingSpeak.

Código completo

Referências

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Arduino » Estação meteorológica com Arduino
Comentários:
Notificações
Notificar
guest
94 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Estudante
Estudante
20/08/2019 23:09

Olá Igor, outras versões do ESP8266 daria certo?

Taciano Santos
Taciano
06/08/2018 00:10

Boa noite Igor na linha 11 codigo eu coloco o que por favor amigo me esclarece ai porfavor. Sobre a linha 9 #define IP qual eu uso corretamente

Taciano Santos
Taciano
15/07/2018 20:55

Boa noite sobre esse projeto como eu faço para configurar o ESP8266 para enviar ao Thingspeak. Qual o procedimento faz alguma mudança no codigo?

Afonso
Afonso
13/05/2018 16:53

Igor projeto maravilhoso

só senti falta de não poder visualizar os dados também em display o que vc acha de implementar

Igor Albuquerque
Igor
Reply to  Afonso
18/05/2018 10:07

É uma boa ideia. Estou trabalhando em outros projetos, porém em breve pretendo publicar uma nova versão da estação, com direito a display e outros sensores (anemômetro, por exemplo).

Italo Coutinho
Italo Coutinho
Reply to  Igor
02/03/2019 19:09

Igor, parabens pelo projeto! vc ja implementou o codigo do anemometro?

Alex Bilato
Alex Bilato
20/03/2018 01:11

Boa noite Igor!

Parabéns pelo projeto!
Estou cursando automação industrial e escolhi fazer uma estação meteorológica para meu trabalho semestral, no momento não é necessário eu montar a estação, só preciso apenas conceituar o projeto (funcionamento, onde liga o que, como é feita a coleta de dados, configuração), resumindo um passo a passo descrito do projeto.
É possível vc passar essas informações.
Desde já agradeço.

Igor Albuquerque
Igor
Reply to  Alex Bilato
18/05/2018 10:14

Obrigado! 🙂
Acredito que as informações que você precisa se encontram no tutorial.
Fico a disposição caso surjam dúvidas, ok?

Rener
Rener
05/02/2018 10:18

Bom dia.
Qual o valor dos resistores mostrados na sua montagem ?
Obrigado

Taciano Santos
Taciano
01/02/2018 09:12

Igor bom dia! Eu ja comprei tudo mais eu nao estou conseguindo fazer o upload do codigo está dando erro no DHT. Ja fiz o procedimento mais mesmo assim da erro. Quando eu faço o download eu tenho que renomeiar so essa biblioteca?

Taciano Santos
Taciano
31/01/2018 08:48

Quando eu fizer o download eu tenho que renomeiar, Qual o nome que eu coloco? Mais primeiro eu tenho que descompatar.

Taciano Santos
Taciano
30/01/2018 21:25

Amigo me ajuda a montar esse projeto . Eu nao estou conseguindo baixar as bibliotecas . Sobre o codigo eu tenho que copiar o que está no anuncio. Por favor me ajuda ai

Taciano Santos
Taciano
30/01/2018 09:06

Bom dia! Está dando um erro ao eu verificar o codigo na linha 14 dht DHT;
Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(1008. Será porque eu nao tinha alterado as linhas 7, 8 e 11?
Na linha 11 eu coloco o meu ID.

Talvez você goste:

Séries

Menu

WEBINAR
 
RISC-V:
Novidades de 2020

 

Data: 26/08 às 19:30h - Apoio: Mouser Elecctronics
 
INSCREVA-SE AGORA »



 
close-link