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:

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

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.

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.

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: 

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.

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

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

Figura 12 – Interligação dos componentes em protoboard.
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.

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.

Figura 15 – Saída digital do sensor de material particulado
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.

Figura 17 – Gráficos de temperatura, umidade, pressão e luminosidade no ThingSpeak.

Código completo

Referências