segunda-feira, 9 de março de 2015

[Projeto] Estação meteorológica com Arduino - Parte 1


Recentemente tive a ideia de fazer uma pequena estação meteorológica utilizando Arduino, já que existem dezenas de sensores compatíveis com ele, com bibliotecas já prontas, bastando conectar o sensor e ler os dados.
O projeto será dividido em várias partes. Nesta primeira parte, vou explicar um pouco sobre os sensores utilizados, a conexão básica e o código necessário para ler os dados do sensor.
Para quem não conhece o Arduino, pode ler mais sobre ele aqui O que é um Arduino e o que pode ser feito com ele?

Componentes

  1. Arduino (eu estou utilizando o Arduino Uno, mas você pode utilizar outro)
  2. Protoboard
  3. Sensor de temperatura e umidade DHT11
  4. Sensor de temperatura, pressão e altitude BMP085
  5. Display JHD 162A
  6. Biblioteca de sensores da Adafruit
  7. 2x potenciômetros (para controle de brilho e luminosidade do display)
  8. Resistor de 5k Ohm

DHT11


Sensor de umidade e temperatura barato, recebe de 3V a 5V e só precisa de uma entrada analógica para receber as informações.

Características técnicas:
Umidade: 20-80%, com precisão de 5%
Temperatura: 0-50ºC, com precisão de +-2ºC
Tempo de resposta: 2 segundos. 
Mais informações da Adafruit: DHTxx Sensors

BMP085

BMP085
Sensor barométrico e de temperatura, também pode ser usado como altímetro. Recebe 3.3V (ATENÇÂO: se ligar aos 5V do Arduino irá queimar) e utiliza duas entradas análogicas do Arduino para transmitir as informações.

Pinos do sensor BMP085
Característiacs técnicas:
Pressão: 300-1100 hPa (9000m à -500m), resolução de 0.03hPa
Temperatura: -40ºC à +85ºC, precisão de +- 2ºC.
Mais informações da Adafruit: Bosch BMP085 Breakout Board


Display JHD 162A

Você pode usar qualquer display.
Um tutorial de como ligar o JDH 162A com o Arduino eu achei aqui: Projeto Arduino com display LCD.
Basicamente:
  • pino 1 do LCD ligado ao GND do arduino;
  • pino 2 do LCD ligado ao 5V do arduino;
  • pino 3 do LCD ligado ao pino central do primeiro potênciômetro (controle de contraste);
  • pino 4 do LCD ligado ao pino digital 9 do arduino;
  • pino 5 do LCD ligado ao GND do arduino;
  • pino 6 do LCD ligado ao pino digital 8 do arduino;
  • pino 11 do LCD ligado ao pino digital 5 do arduino;
  • pino 12 do LCD ligado ao pino digital 4 do arduino;
  • pino 13 do LCD ligado ao pino digital 3 do arduino;
  • pino 14 do LCD ligado ao pino digital 2 do arduino;
  • pino 15 do LCD ligado ao pino central do segundo potênciômetro (controle do brilho);
  • pino 16 do LCD ligado ao GND do arduino.


Biblioteca de sensores da Adafruit

Por fim, utilizaremos a biblioteca integrada de sensores da Adafruit: Adafruit Unified Sensor Driver.
Você pode ler mais sobre ela na página do GitHub, mas basicamente ela define um tipo sensors_event_t, e utiliza unidades padrão do S.I. Assim, é possível que futuramente você troque o sensor, sem precisar fazer grandes alterações no código.
Você precisará das seguintes bibliotecas:
Basta baixar a biblioteca compactada (.zip) e na IDE do Arduino: Sketch > Import Library > Add Library, selecionar o arquivo.zip da biblioteca.

Conetando tudo

Ligue o display conforme o esquema.
O sensor de umidade recebe 5V, GND e o pino analógico para a porta A1 do Arduino. O datasheet recomenda também conectar um resistor pull-up de 5K (alguns lugares recomendam um  de 10K) entre o pino de dados e os 5V.
O sensor BMP085 recebe 3.3V (não conecte aos 5V do Arduino, use a saída 3.3V), GND, SDA conectado à porta A4 e SDL conectado à porta A5.

Código

O código do projeto está hospedado no GitHub.
Basicamente, ele recolhe as informações dos sensores e exibe no display LCD.
A temperatura estou usando do BMP085, pois é mais precisa.
Apesar de estrar exibindo também a altura, ela não está precisa pois faltam algumas configurações.

Estação Meteorológica com Arduino - GitHub