Академический Документы
Профессиональный Документы
Культура Документы
1. OBJETIVO
O objetivo deste trabalho é construir uma estação meteorológica com a plataforma de
prototipagem eletrônica "arduino", coletando dados atmosféricos como: temperatura,
umidade, pressão, velocidade do vento, direção do vento, rajada de vento, radiação solar
e pluviosidade. indicando os dados coletados em um display, salvando os dados em um
cartão de memória e enviando os dados para um site especializado em hospedar dados
chamado ThingSpeak.
2. FUNCIONAMENTO
O funcionamento da estação se divide em cinco fases:
I - Coleta de dados - coleta os dados dos sensores e módulos agregados ao arduino;
II - Cálculos - calcula média do vento, radiação solar acumulada, converte dados e
unidades de medidas;
III - Exibição de dados no display - exibe dados instantâneos no display;
IV - Envio de dados para a internet - envia dados instantâneos a cada 15 minutos
para o site para o site ThingSpeak, para facilitar a leitura e compreensão de usuários
comuns a velocidade do vento é exibida em (Km/h), a radiação solar em (W/m²) e a
pluviosidade acumulada no dia sendo zerada às 00:00hs.
V - Gravação de dados no cartão de memória - os dados são gravados a cada hora
no cartão de memória no mesmo formato utilizado pelo INMET(Instituto Nacional
de Meteorologia) , sendo os dados tratados da seguinte forma:
- Temperatura, umidade, pressão e direção do vento instantâneas;
- Velocidade média do vento em (m/s), obtida através de 60 medições, uma a cada
minuto;
- Rajada de vento, obtido através da maior velocidade registrada na hora;
- Radiação solar acumulada, radiação medida a cada minuto e somada, resultado
em (Kj/m²) acumulada em uma hora.
- Pluviosidade acumulada em uma hora em (mm).
FUNCIONAMENTO DO PROGRAMA
3.1 RELÓGIO
O relógio tem a função de marcar o tempo que ocorre cada função e fornecer a
data e hora para registro de dados no cartão de memória, ele se comunica com o arduino
através do protocolo I2C.
Ele é formado pelo módulo DS1307 que funciona diretamente ligado ao arduino
conforme diagrama da Figura 2.
RTC_DS1307 rtc;
void setup() {
void loop()
{
DateTime now = rtc.now(); // atualiza hora no programa
Segue abaixo o programa utilizado para testar o sensor DHT22, a biblioteca "DHT.h"
para utilização do programa segue em anexo.
float pressao;
float pressaohpa;
Adafruit_BMP085 bmp;
void setup() {
Serial.begin(9600);
bmp.begin(); // inicia barômetro
}
void loop() {
pressao = bmp.readPressure(); // atualiza pressão em Pa
pressaohpa = pressao / 100; // transforma pressão Pa para hPa
Serial.print("Pressao = ");
Serial.print(pressao, 1); // imprime pressão em Pa com uma casa decimal
Serial.println(" Pa");
Serial.print("Pressao = ");
Serial.print(pressaohpa, 1); // imprimi pressão em hPa, com uma casa decimal
Serial.println(" hPa");
Serial.println();
delay(3000);
}
3.4 ANEMÔMETRO
3.4.1 CIRCUITO
O circuito do anemômetro é formado por um anemômetro de Robinson que possui
um uma chave magnética chamada “reed-switche” responsável por enviar um
pulso a cada volta do anemômetro, que serão contadas pelo arduino no intervalo
de 5 segundos, a fim de obter a velocidade do vento.
O sensor reed-switche é um interruptor de lâminas magnético, e como todo
interruptor mecânico sofre o efeito conhecido como Efeito Bounce (Figura 5), que
nada mais é que o aparecimento de diversos pulsos no momento do fechamento e
abertura da chave, levando a erro leitura no anemômetro.
3.4.2 ANEMOMETRO
O anemômetro utilizado pela estação meteorológica é fabricado pela
WRFCOMERCIAL (Figuras 8 e 9) e foi adquirido pelo site do mercado livre,
sofreu aferições dinâmicas e estáticas para fornecer dados para o algoritmo que
transformará os pulsos do anemômetro em velocidade do vento em m/s e Km/h.
7,5 cm
11,5 cm
Cd 1 1,40
α= = = 1,870
Cd 2 0,40
1 + 1,870 P
V= * W * Rc => 3,298 * 2 * π * * 0,115
1 − 1,870 5
V(m/s) = 0,4766 * P
V(Km/h) = 1,7154 * P
void setup() {
void loop() {
3.5 BIRUTA
A direção do vento é adquirida através de uma biruta fabricada pela
WRFCOMERCIAL (Figura 10) a biruta transforma a direção de vento em um sinal
elétrico, onde cada direção do vento representa uma tensão que será identificada
pelo programa do arduino indicando a direção do vento.
Figura 10: Biruta da WRFCOMERCIAL
3.5.1 ESQUEMA DE LIGAÇÃO
A biruta tem ligação simples, bastando adicionar uma resistência e um capacitor ao
circuito, conforme Figura 11:
void setup() {
Serial.begin(9600);
}
void loop() {
valor = analogRead(A0); // Variável valor = entrada analógica (0)
if (valor <= 119) {
direcao = "NW";
}
else if (valor <= 135) {
direcao = "W";
}
else if (valor <= 157) {
direcao = "SW";
}
else if (valor <= 186) {
direcao = "S";
}
else if (valor <= 229) {
direcao = "SE";
}
else if (valor <= 297) {
direcao = "E";
}
else if (valor <= 425) {
direcao = "NE";
}
else {
direcao = "N";
}
3.6.1 CIRCUITO
Por utilizar um sensor reed-switche é necessário a utilização do circuito
“debounce”, que tem a finalidade de filtrar estes pulsos deixando passar somente
o pulso do fechamento e abertura da chave (Figura14).
3.6.2 PLUVIOMETRO
O pluviômetro utilizado na estação meteorológica é fabricado pela
WRFCOMERCIAL (Figura 16) e mede a pluviosidade a cada 0,25mm.
3.6.4 PROGRAMA
void setup() {
void loop() {
Serial.print("chuva: ");
Serial.print(chuva); // imprime quantidade de chuva
Serial.println("mm");
delay(2000);
}
void addchuva(){
contchuva++;
}
3.7 PIRANÔMETRO
A função do piranômetro é medir a radiação solar, o piranômetro instalado na
estação utiliza uma célula fotovoltaica que converte a radiação solar em uma
tensão que será convertida pelo circuito em radiação solar em (W/m²) e em
(KJ/m².h)
3.7.1 CIRCUITO
O circuito consiste em uma célula solar de 5v e 0,2W de potência que é ligada em
paralelo com um resistor de 89 ohm e um capacitor de 4,7uF (Figura 17).
O objetivo do resistor é fornecer uma carga a célula solar com o objetivo de
ocorrer um variação de tensão de acordo com a intensidade de radiação solar.
Caso o circuito fique aberto a célula solar em questão indicará 5 volts com uma
quantidade mínima de radiação.
Obs: como não há no mercado resistores de 89 ohm, foi utilizado um resistor de
150ohm em paralelo com um de 220 ohm
8:00 9:00 10:00 11:00 12:00 13:00 14:00 15:00 16:00 17:00 18:00
Tensão na
1,58 1,87 2,86 3,12 3,40 3,40 3,00 2,80 1,40 1,00 0,28
célula solar
Radiação
solar 502 594 909 992 1081 1081 954 890 445 318 89
(W/m²)
Fórmula final
void setup() {
Serial.begin(9600);
void loop() {
tensao = analogRead(A0) * (5.0 / 1023.0); // Lê a entrada e converte para o valor da tensão
radiacao = tensao * 318; // Transforma a tensão em Radiação solar
Figura 18: Encaixe sobre o arduino uno Figura 19: Encaixe sobre o arduino mega
3.8.1 INTERNET
Para configurar o programa para envio de dados para o site https://thingspeak.com é
necessário cadastrar uma conta e criar um canal no site do thingspeak, após criada a
conta você vai na aba chave e copiar a API Key “ chave de escrita”, que é o código
utilizado pelo programa para enviar os dados para o site.
O canal possui 8 campos, onde é possível enviar dados de 8 tipos de medições.
A estação envia os dados instantâneos a cada 15 minutos.
3.8.3 PROGRAMA
Segue abaixo o programa utilizado para testar o módulo, as bibliotecas utilizadas
seguem em anexo.
byte mac[] = { 0xD4, 0x28, 0xB2, 0xFF, 0xA0, 0xA1 }; // Configuração internet
EthernetClient client; // Inicializa internet
File myFile; // cartão SD
void setup() {
Serial.begin(9600);
SD.begin(4); // Pino conectado ao CS do modulo
}
void loop() {
// CARTÃO DE MEMÓRIA
myFile = SD.open("data.txt", FILE_WRITE); // Abre ou cria arquivo data.txt
if (myFile) { // Verifica se arquivo foi aberto e inicializa gravação
Serial.print("Gravando dados ");
myFile.print(“Teste: ”); // Grava a palavra “Teste”
myFile.print(cont); // Grava a variavel cont
myFile.close(); // Fecha arquivo
} else {
Serial.print("Erro na gravação de dados ");
}
// INTERNET
client.stop();
Serial.println("Conectando arduino");
delay(1000);
delay(1000);
Segue abaixo o programa utilizado para testar o sensor Display LCD, a biblioteca
"LiquidCrystal_I2C.h" para utilização do programa segue em anexo.
void setup()
{
lcd.begin (20,4); // Inicio LCD
}
void loop()
{
lcd.setBacklight(HIGH); // Acende luz do LCD
lcd.setCursor(0,0); // Posiciona curso do LCD (nenhum espaço e linha 0)
lcd.print("Arduino e Cia !!"); // Escreve no LCD
lcd.setCursor(0,1); // Posiciona curso do LCD (nenhum espaço e linha 1)
lcd.print("LCD e modulo I2C");
delay(1000);
lcd.setBacklight(LOW); // Desliga LCD
delay(1000);
4 ESTAÇÃO METEOROLÓGICA
Devido a complexidade da estação meteorológica o projeto utiliza o arduino modelo
mega que possui uma quantidade maior de memória para suportar o algoritmo da
estação.
4.1 LIGAÇÃO
Os módulos da estação são ligados da seguinte forma:
a) Alimentação 5 volts fornecidos pelo arduino:
- DS1307;
- DHT22;
- ANEMÔMETRO;
- BIRUTA;
- PLUVIÔMETRO; e
- LCD
b) Alimetação 3,3 volts fornecidos pelo arduino:
- BMP180.
c) Pino 5, dados DHT22.
d) Pino 3, dados anemômetro.
e) Pino 2, dados pluviômetro.
f) Comuicação I2C, pino 20 (SDA) e pino 21 (SCL):
- LCD;
- BMP180; e
- DS1307.
g) Pino A2, dados biruta.
h) Pino A3, dados piranômetro.
i) Fonte 9V, pino Vin.
j) O módulo W5100 é encaixado sobre o arduino conforme Figura 19.
5.0 CONCLUSÃO
A estação funcionou perfeitamente conforme o esperado, manteve seu
funcionamento mesmo com cortes no fornecimento de energia da concessionária,
indicou os dados na tela, gravou os dados no cartão e enviou os dados para
internet sem problemas (Figuras 26, 27 e 28).