Índice:

Estação meteorológica pessoal usando Raspberry Pi com BME280 em Java: 6 etapas
Estação meteorológica pessoal usando Raspberry Pi com BME280 em Java: 6 etapas
Anonim
Image
Image
Lista de equipamentos essenciais
Lista de equipamentos essenciais

O mau tempo sempre parece pior através de uma janela

Sempre estivemos interessados em monitorar o clima local e o que vemos pela janela. Também queríamos um melhor controle sobre nosso sistema de aquecimento e A / C. Construir uma estação meteorológica pessoal é uma grande experiência de aprendizado. Quando terminar de construir este projeto, você terá um melhor entendimento de como funcionam as comunicações sem fio, como funcionam os sensores e como a plataforma Raspberry Pi pode ser poderosa. Com este projeto como base e a experiência adquirida, você poderá construir facilmente projetos mais complexos no futuro.

Etapa 1: lista de equipamentos essenciais

Lista de equipamentos essenciais
Lista de equipamentos essenciais
Lista de equipamentos essenciais
Lista de equipamentos essenciais
Lista de equipamentos essenciais
Lista de equipamentos essenciais

1. Um Raspberry Pi

O primeiro passo é colocar as mãos em uma placa de Raspberry Pi. Raspberry Pi é um computador de placa única com Linux. Seu objetivo é melhorar as habilidades de programação e compreensão do hardware. Ele foi rapidamente adotado por amadores e entusiastas da eletrônica para projetos inovadores.

2. Escudo I²C para Raspberry Pi

O INPI2 (adaptador I2C) fornece ao Raspberry Pi 2/3 uma porta I²C para uso com vários dispositivos I²C. Está disponível na Dcube Store

3. Sensor digital de umidade, pressão e temperatura, BME280

O BME280 é um sensor de umidade, pressão e temperatura com rápido tempo de resposta e alta precisão geral. Nós compramos este sensor na Dcube Store

4. Cabo de conexão I²C

Tínhamos o cabo de conexão I²C disponível na loja Dcube

5. Cabo micro USB

A fonte de alimentação do cabo micro USB é a escolha ideal para alimentar o Raspberry Pi.

6. Interpretar o acesso à Internet via EthernetCable / adaptador WiFi

Uma das primeiras coisas que você deve fazer é conectar o Raspberry Pi à Internet. Podemos nos conectar usando um cabo Ethernet. Outra possibilidade é que você pode se conectar a uma rede sem fio usando um adaptador sem fio USB.

7. Cabo HDMI (monitor e cabo de conectividade)

Qualquer monitor HDMI / DVI e qualquer TV devem funcionar como uma exibição para o Pi. Mas é opcional. A possibilidade de acesso remoto (como-SSH) também não pode ser descartada. Você também pode obter acesso com o software PUTTY.

Etapa 2: Conexões de hardware para configuração

Conexões de hardware para configuração
Conexões de hardware para configuração
Conexões de hardware para configuração
Conexões de hardware para configuração

Faça o circuito conforme o esquema mostrado.

Enquanto aprendíamos, nos aprofundamos no básico de eletrônica em relação ao conhecimento de hardware e software. Queríamos desenhar um esquema eletrônico simples para este projeto. Os esquemas eletrônicos são como um projeto para a eletrônica. Faça uma planta e siga o desenho cuidadosamente. Aplicamos alguns princípios básicos de eletrônica aqui. A lógica leva você de A a B, a imaginação o levará a qualquer lugar!

Conexão do Raspberry Pi e escudo I²C

Em primeiro lugar, pegue o Raspberry Pi e coloque o escudo I²C (com a porta I²C de face interna) nele. Pressione o escudo suavemente sobre os pinos GPIO de Pi e concluímos esta etapa tão fácil quanto torta (veja a foto).

Conexão do Sensor e Raspberry Pi

Pegue o sensor e conecte o cabo I²C com ele. Certifique-se de que a saída I²C SEMPRE se conecte à entrada I²C. O mesmo deve ser seguido para o Raspberry Pi com a blindagem I²C montada sobre os pinos GPIO. Temos a blindagem I²C e os cabos de conexão do nosso lado como um grande alívio e uma grande vantagem, pois ficamos apenas com o opção plug and play. Não há mais problemas com pinos e fiação e, portanto, a confusão se foi. Imagine-se na teia de fios e entrando nela. Um alívio para isso. Isso torna as coisas simples.

Nota: O fio marrom deve sempre seguir a conexão Terra (GND) entre a saída de um dispositivo e a entrada de outro dispositivo

Conectividade com a Internet é uma necessidade

Você tem uma escolha aqui, na verdade. Você pode conectar o Raspberry Pi com o cabo LAN ou o adaptador Nano USB sem fio para conectividade WIFI. De qualquer forma, o manifesto é para se conectar à Internet, o que é realizado.

Alimentação do circuito

Conecte o cabo Micro USB ao conector de alimentação do Raspberry Pi. Dê um soco e voila! Está tudo pronto e começaremos imediatamente.

Conexão para exibir

Podemos ter o cabo HDMI conectado a um monitor ou TV. Podemos acessar um Raspberry Pi sem conectá-lo a um monitor usando -SSH (Acesse a linha de comando do Pi de outro computador). Você também pode usar o software PUTTY para isso. Esta opção é para usuários avançados, portanto, não a cobriremos em detalhes aqui.

Ouvi dizer que vai haver uma recessão, decidi não participar

Etapa 3: Programação Raspberry Pi em Java

Programação Raspberry Pi em Java
Programação Raspberry Pi em Java

O código Java para o sensor Raspberry Pi e BME280. Ele está disponível em nosso repositório do Github.

Antes de prosseguir com o código, certifique-se de ler as instruções fornecidas no arquivo Leiame e configure seu Raspberry Pi de acordo com ele. Isso levará apenas alguns instantes. Uma estação meteorológica pessoal é um conjunto de instrumentos de medição do tempo operados por um indivíduo particular, clube, associação ou mesmo empresa. As estações meteorológicas pessoais podem ser operadas exclusivamente para o entretenimento e educação do proprietário, mas muitos operadores de estações meteorológicas pessoais também compartilham seus dados com terceiros, seja compilando manualmente e distribuindo-os, ou por meio do uso da Internet ou do rádio amador.

O código está na forma mais simples que você pode imaginar e você não deve ter nenhum problema com ele, mas pergunte se você tem. Mesmo que você saiba mil coisas, pergunte a alguém que sabe.

Você também pode copiar o código Java de trabalho para este sensor aqui.

// Distribuído com licença de livre arbítrio.// Use-o como quiser, com ou sem lucro, desde que se enquadre nas licenças das suas obras associadas. // BME280 // Este código é projetado para funcionar com o Mini Módulo BME280_I2CS I2C disponível em ControlEverything.com. //

import com.pi4j.io.i2c. I2CBus;

import com.pi4j.io.i2c. I2CDevice; import com.pi4j.io.i2c. I2CFactory; import java.io. IOException;

classe pública BME280

{public static void main (String args ) lança Exceção {// Criar barramento I2C I2CBus bus = I2CFactory.getInstance (I2CBus. BUS_1); // Obter dispositivo I2C, endereço BME280 I2C é 0x76 (108) I2CDevice device = bus.getDevice (0x76); // Lê 24 bytes de dados do endereço 0x88 (136) byte b1 = novo byte [24]; device.read (0x88, b1, 0, 24); // Converte os dados // coeficientes de temp int dig_T1 = (b1 [0] & 0xFF) + ((b1 [1] & 0xFF) * 256); int dig_T2 = (b1 [2] e 0xFF) + ((b1 [3] e 0xFF) * 256); if (dig_T2> 32767) {dig_T2 - = 65536; } int dig_T3 = (b1 [4] e 0xFF) + ((b1 [5] e 0xFF) * 256); if (dig_T3> 32767) {dig_T3 - = 65536; } // coeficientes de pressão int dig_P1 = (b1 [6] & 0xFF) + ((b1 [7] & 0xFF) * 256); int dig_P2 = (b1 [8] e 0xFF) + ((b1 [9] e 0xFF) * 256); if (dig_P2> 32767) {dig_P2 - = 65536; } dig_P3 int = (b1 [10] e 0xFF) + ((b1 [11] e 0xFF) * 256); if (dig_P3> 32767) {dig_P3 - = 65536; } dig_P4 int = (b1 [12] e 0xFF) + ((b1 [13] e 0xFF) * 256); if (dig_P4> 32767) {dig_P4 - = 65536; } dig_P5 int = (b1 [14] e 0xFF) + ((b1 [15] e 0xFF) * 256); if (dig_P5> 32767) {dig_P5 - = 65536; } int dig_P6 = (b1 [16] e 0xFF) + ((b1 [17] e 0xFF) * 256); if (dig_P6> 32767) {dig_P6 - = 65536; } int dig_P7 = (b1 [18] e 0xFF) + ((b1 [19] e 0xFF) * 256); if (dig_P7> 32767) {dig_P7 - = 65536; } dig_P8 int = (b1 [20] e 0xFF) + ((b1 [21] e 0xFF) * 256); if (dig_P8> 32767) {dig_P8 - = 65536; } dig_P9 int = (b1 [22] e 0xFF) + ((b1 [23] e 0xFF) * 256); if (dig_P9> 32767) {dig_P9 - = 65536; } // Lê 1 byte de dados do endereço 0xA1 (161) int dig_H1 = ((byte) device.read (0xA1) & 0xFF); // Lê 7 bytes de dados do endereço 0xE1 (225) device.read (0xE1, b1, 0, 7); // Converte os dados // coeficientes de umidade int dig_H2 = (b1 [0] & 0xFF) + (b1 [1] * 256); if (dig_H2> 32767) {dig_H2 - = 65536; } int dig_H3 = b1 [2] & 0xFF; int dig_H4 = ((b1 [3] e 0xFF) * 16) + (b1 [4] e 0xF); if (dig_H4> 32767) {dig_H4 - = 65536; } int dig_H5 = ((b1 [4] e 0xFF) / 16) + ((b1 [5] e 0xFF) * 16); if (dig_H5> 32767) {dig_H5 - = 65536; } int dig_H6 = b1 [6] & 0xFF; if (dig_H6> 127) {dig_H6 - = 256; } // Selecione o registro de umidade de controle // Umidade sobre a taxa de amostragem = 1 device.write (0xF2, (byte) 0x01); // Selecione o registro de medição de controle // Modo normal, temperatura e pressão sobre a taxa de amostragem = 1 device.write (0xF4, (byte) 0x27); // Selecione o registro de configuração // Tempo de espera = 1000 ms device.write (0xF5, (byte) 0xA0); // Lê 8 bytes de dados do endereço 0xF7 (247) // pressão msb1, pressão msb, pressão lsb, temp msb1, temp msb, temp lsb, umidade lsb, umidade msb byte dados = novo byte [8]; device.read (0xF7, data, 0, 8); // Converte os dados de pressão e temperatura em adc_p de 19 bits = (((longo) (dados [0] e 0xFF) * 65536) + ((longo) (dados [1] e 0xFF) * 256) + (longo) (dados [2] e 0xF0)) / 16; long adc_t = (((long) (data [3] & 0xFF) * 65536) + ((long) (data [4] & 0xFF) * 256) + (long) (data [5] & 0xF0)) / 16; // Converte os dados de umidade long adc_h = ((long) (data [6] & 0xFF) * 256 + (long) (data [7] & 0xFF)); // Cálculos de deslocamento de temperatura double var1 = (((double) adc_t) / 16384.0 - ((double) dig_T1) / 1024.0) * ((double) dig_T2); double var2 = ((((duplo) adc_t) / 131072.0 - ((duplo) dig_T1) / 8192,0) * (((duplo) adc_t) /131072.0 - ((duplo) dig_T1) /8192.0)) * ((duplo) dig_T3); duplo t_fino = (longo) (var1 + var2); cTemp duplo = (var1 + var2) / 5120,0; fTemp duplo = cTemp * 1,8 + 32; // Cálculos de deslocamento de pressão var1 = ((double) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((duplo) dig_P6) / 32768,0; var2 = var2 + var1 * ((duplo) dig_P5) * 2.0; var2 = (var2 / 4,0) + (((duplo) dig_P4) * 65536,0); var1 = (((duplo) dig_P3) * var1 * var1 / 524288,0 + ((duplo) dig_P2) * var1) / 524288,0; var1 = (1,0 + var1 / 32768,0) * ((duplo) dig_P1); duplo p = 1048576,0 - (duplo) adc_p; p = (p - (var2 / 4096,0)) * 6250,0 / var1; var1 = ((duplo) dig_P9) * p * p / 2147483648.0; var2 = p * ((duplo) dig_P8) / 32768,0; pressão dupla = (p + (var1 + var2 + ((duplo) dig_P7)) / 16,0) / 100; // Cálculos de compensação de umidade double var_H = (((double) t_fine) - 76800.0); var_H = (adc_h - (dig_H4 * 64,0 + dig_H5 / 16384,0 * var_H)) * (dig_H2 / 65536,0 * (1,0 + dig_H6 / 67108864,0 * var_H * (1,0 + dig_H3 / 67108864,0 * var_H))); umidade dupla = var_H * (1,0 - dig_H1 * var_H / 524288,0); se (umidade> 100,0) {umidade = 100,0; } senão se (umidade <0,0) {umidade = 0,0; } // Saída de dados para a tela System.out.printf ("Temperatura em Celsius:%.2f C% n", cTemp); System.out.printf ("Temperatura em Fahrenheit:%.2f F% n", fTemp); System.out.printf ("Pressão:%.2f hPa% n", pressão); System.out.printf ("Umidade relativa:%.2f %% RH% n", umidade); }}

Etapa 4: a praticidade do código

A Praticidade do Código
A Praticidade do Código

Agora, baixe (ou git pull) o código e abra-o no Raspberry Pi.

Execute os comandos para Compilar e Carregar o código no terminal e veja a saída no Monitor. Após alguns instantes, ele exibirá todos os parâmetros. Garantindo que você tenha uma transição de código suave e um resultado calmo (ish), você pensa em mais ideias para fazer mais alterações (todo projeto começa com uma história).

Etapa 5: Utilização no mundo construtivo

O BME280 atinge alto desempenho em todas as aplicações que requerem medição de umidade e pressão. Essas aplicações emergentes são Context Awareness, por exemplo, Detecção de pele, detecção de mudança de quarto, monitoramento de condicionamento físico / bem-estar, aviso sobre secura ou altas temperaturas, medição de volume e fluxo de ar, controle de automação residencial, controle de aquecimento, ventilação, ar condicionado (HVAC), Internet das coisas (IoT), Aprimoramento de GPS (por exemplo, Melhoria de tempo para a primeira correção, cálculo morto, detecção de declive), navegação interna (detecção de mudança de piso, detecção de elevador), navegação externa, aplicativos de lazer e esportes, previsão do tempo e indicação de velocidade vertical (aumento / redução Velocidade).

Etapa 6: Conclusão

Como você pode ver, este projeto é uma grande demonstração do que o hardware e o software são capazes. Em pouco tempo, pode-se construir um projeto tão impressionante! Claro, isso é apenas o começo. Fazer uma Estação Meteorológica Pessoal mais sofisticada como Estações Meteorológicas Pessoais Automatizadas de Aeroporto pode envolver mais alguns sensores como Anemômetro (velocidade do vento), Transmissômetro (visibilidade), Piranômetro (radiação solar) etc. Temos um tutorial em vídeo no Youtube com o funcionamento básico do Sensor I²C com Rasp Pi. É realmente incrível ver os resultados e o funcionamento das comunicações I²C. Verifique também. Divirta-se construindo e aprendendo! Por favor, deixe-nos saber o que você acha deste instrutível. Adoraríamos fazer algumas melhorias, se necessário.

Recomendado: