Índice:

Cálculo de umidade, pressão e temperatura usando BME280 e interface de fóton: 6 etapas
Cálculo de umidade, pressão e temperatura usando BME280 e interface de fóton: 6 etapas

Vídeo: Cálculo de umidade, pressão e temperatura usando BME280 e interface de fóton: 6 etapas

Vídeo: Cálculo de umidade, pressão e temperatura usando BME280 e interface de fóton: 6 etapas
Vídeo: Aula 1.1: diagramas de equilíbrio e equações de estado / 1s 2020 SEM0551 Fenômenos de Transporte 2024, Julho
Anonim
Cálculo de umidade, pressão e temperatura usando BME280 e interface de fótons
Cálculo de umidade, pressão e temperatura usando BME280 e interface de fótons

Nos deparamos com diversos projetos que requerem monitoramento de temperatura, pressão e umidade. Assim, percebemos que esses parâmetros realmente desempenham um papel vital em ter uma estimativa da eficiência de funcionamento de um sistema em diferentes condições atmosféricas. Tanto no nível industrial quanto nos sistemas pessoais, um ótimo nível de temperatura, umidade e pressão barométrica é necessário para o desempenho adequado do sistema.

É por isso que fornecemos um tutorial completo sobre este sensor, neste tutorial vamos explicar o funcionamento do sensor de umidade, pressão e temperatura BME280 com fóton de partícula.

Etapa 1: Exploração BME280

Exploração BME280
Exploração BME280

O setor eletrônico intensificou seu jogo com o sensor BME280, um sensor ambiental com temperatura, pressão barométrica e umidade! Este sensor é ótimo para todos os tipos de detecção climática / ambiental e pode até ser usado em I2C.

Este sensor de precisão BME280 é a melhor solução de detecção para medir umidade com precisão de ± 3%, pressão barométrica com precisão absoluta de ± 1 hPa e temperatura com precisão de ± 1,0 ° C. Como a pressão muda com a altitude e as medições de pressão são tão boas, você também pode usá-lo como um altímetro com ± 1 metro ou melhor precisão! O sensor de temperatura foi otimizado para o ruído mais baixo e resolução mais alta e é usado para compensação de temperatura de o sensor de pressão e também pode ser usado para estimar a temperatura ambiente. As medições com o BME280 podem ser realizadas pelo usuário ou em intervalos regulares.

Folha de dados: Clique para visualizar ou baixar a folha de dados do sensor BME280.

Etapa 2: Lista de requisitos de hardware

Lista de Requisitos de Hardware
Lista de Requisitos de Hardware

Usamos inteiramente Dcube Store Parts porque são fáceis de usar e há algo sobre tudo que se encaixa perfeitamente em uma grade centimétrica realmente nos anima. Você pode usar o que quiser, mas o diagrama de fiação presumirá que você está usando essas peças.

  • BME280 Sensor I²C Mini Módulo
  • Escudo I²C para partícula de fóton
  • Particle Photon
  • Cabo I²C
  • Adaptador de energia

Etapa 3: interface

Interface
Interface

A seção de interface explica basicamente as conexões de fiação necessárias entre o sensor e o fóton da partícula. Garantir as conexões corretas é a necessidade básica ao trabalhar em qualquer sistema para a saída desejada. Portanto, as conexões necessárias são as seguintes:

O BME280 funcionará em I2C. Aqui está o diagrama de fiação de exemplo, demonstrando como conectar cada interface do sensor. Out-of-the-box, a placa é configurada para uma interface I2C, como tal, recomendamos usar esta interface se você for agnóstico de outra forma. Você só precisa de quatro fios! São necessárias apenas quatro conexões dos pinos Vcc, Gnd, SCL e SDA e estes são conectados com a ajuda do cabo I2C. Essas conexões são demonstradas nas fotos acima.

Etapa 4: Código de monitoramento de temperatura, pressão e umidade

Código de monitoramento de temperatura, pressão e umidade
Código de monitoramento de temperatura, pressão e umidade
Código de monitoramento de temperatura, pressão e umidade
Código de monitoramento de temperatura, pressão e umidade

A versão limpa do código que usaremos para executá-lo está disponível AQUI.

Ao usar o módulo sensor com o Arduino, incluímos as bibliotecas application.h e spark_wiring_i2c.h. A biblioteca "application.h" e spark_wiring_i2c.h contém as funções que facilitam a comunicação i2c entre o sensor e a partícula.

Clique AQUI para abrir a página de monitoramento de dispositivos

Carregue o código em sua placa e ele deve começar a funcionar! Todos os dados podem ser obtidos na página web conforme mostra a figura.

O código é fornecido abaixo:

// 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. #include #include // endereço BME280 I2C é 0x76 (108) # define Addr 0x76 double cTemp = 0, fTemp = 0, pressão = 0, umidade = 0; void setup () {// Definir a variável Particle.variable ("i2cdevice", "BME280"); article.variable ("cTemp", cTemp); Particle.variable ("fTemp", fTemp); Variável de partícula ("pressão", pressão); Partícula.variable ("umidade", umidade); // Inicializar a comunicação I2C como MASTER Wire.begin (); // Inicializar a comunicação serial, definir a taxa de transmissão = 9600 Serial.begin (9600); atraso (300); } void loop () {unsigned int b1 [24]; dados internos não assinados [8]; int dig_H1 = 0; for (int i = 0; i <24; i ++) {// Iniciar I2C Transmission Wire.beginTransmission (Addr); // Selecione o registro de dados Wire.write ((136 + i)); // Parar a transmissão I2C Wire.endTransmission (); // Solicita 1 byte de dados Wire.requestFrom (Addr, 1); // Lê 24 bytes de dados if (Wire.available () == 1) {b1 = Wire.read (); }} // Converte os dados // coeficientes de temp int dig_T1 = (b1 [0] & 0xff) + ((b1 [1] & 0xff) * 256); int dig_T2 = b1 [2] + (b1 [3] * 256); int dig_T3 = b1 [4] + (b1 [5] * 256); // coeficientes de pressão int dig_P1 = (b1 [6] & 0xff) + ((b1 [7] & 0xff) * 256); int dig_P2 = b1 [8] + (b1 [9] * 256); int dig_P3 = b1 [10] + (b1 [11] * 256); int dig_P4 = b1 [12] + (b1 [13] * 256); int dig_P5 = b1 [14] + (b1 [15] * 256); int dig_P6 = b1 [16] + (b1 [17] * 256); int dig_P7 = b1 [18] + (b1 [19] * 256); int dig_P8 = b1 [20] + (b1 [21] * 256); int dig_P9 = b1 [22] + (b1 [23] * 256); for (int i = 0; i <7; i ++) {// Iniciar I2C Transmission Wire.beginTransmission (Addr); // Selecione o registro de dados Wire.write ((225 + i)); // Parar a transmissão I2C Wire.endTransmission (); // Solicita 1 byte de dados Wire.requestFrom (Addr, 1); // Lê 7 bytes de dados if (Wire.available () == 1) {b1 = Wire.read (); }} // Converte os dados // coeficientes de umidade int dig_H2 = b1 [0] + (b1 [1] * 256); int dig_H3 = b1 [2] & 0xFF; int dig_H4 = (b1 [3] * 16) + (b1 [4] e 0xF); int dig_H5 = (b1 [4] / 16) + (b1 [5] * 16); int dig_H6 = b1 [6]; // Iniciar I2C Transmission Wire.beginTransmission (Addr); // Selecione o registro de dados Wire.write (161); // Parar a transmissão I2C Wire.endTransmission (); // Solicita 1 byte de dados Wire.requestFrom (Addr, 1); // Lê 1 byte de dados if (Wire.available () == 1) {dig_H1 = Wire.read (); } // Iniciar I2C Transmission Wire.beginTransmission (Addr); // Seleciona o registro de controle de umidade Wire.write (0xF2); // Umidade sobre a taxa de amostragem = 1 Wire.write (0x01); // Parar a transmissão I2C Wire.endTransmission (); // Iniciar a transmissão I2C Wire.beginTransmission (Addr); // Selecione o registro de medição de controle Wire.write (0xF4); // Modo normal, temperatura e pressão sobre a taxa de amostragem = 1 Wire.write (0x27); // Parar a transmissão I2C Wire.endTransmission (); // Iniciar I2C Transmission Wire.beginTransmission (Addr); // Selecione o registro de configuração Wire.write (0xF5); // Tempo em espera = 1000ms Wire.write (0xA0); // Parar a transmissão I2C Wire.endTransmission (); for (int i = 0; i <8; i ++) {// Iniciar I2C Transmission Wire.beginTransmission (Addr); // Selecione o registro de dados Wire.write ((247 + i)); // Parar a transmissão I2C Wire.endTransmission (); // Solicita 1 byte de dados Wire.requestFrom (Addr, 1); // Lê 8 bytes de dados if (Wire.available () == 1) {data = Wire.read (); }} // 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; } // Dados de saída para o painel Particle.publish ("Temperatura em Celsius:", String (cTemp)); Particle.publish ("Temperatura em Fahrenheit:", String (fTemp)); Particle.publish ("Pressão:", Corda (pressão)); Particle.publish ("Umidade relativa:", String (umidade)); atraso (1000); }

Etapa 5: Aplicativos:

Formulários
Formulários

O sensor de temperatura, pressão e umidade relativa BME280 tem várias aplicações industriais, como monitoramento de temperatura, proteção térmica periférica de computador, monitoramento de pressão na indústria. Também empregamos esse sensor em aplicações de estações meteorológicas, bem como em sistemas de monitoramento de estufa.

Outras aplicações podem incluir:

  1. Conscientização do contexto, por exemplo detecção de pele, detecção de mudança de sala.
  2. Monitoramento de condicionamento físico / bem-estar - Aviso sobre ressecamento ou altas temperaturas.
  3. Medição de volume e fluxo de ar.
  4. Controle de automação residencial.
  5. Controle de aquecimento, ventilação, ar condicionado (HVAC).
  6. Internet das Coisas.
  7. Aprimoramento de GPS (por exemplo, melhoria do tempo para o primeiro reparo, cálculo morto, detecção de declive).
  8. Navegação interna (detecção de mudança de piso, detecção de elevador).
  9. Aplicações de navegação, lazer e esportes ao ar livre.
  10. Previsão do tempo.
  11. Indicação de velocidade vertical (velocidade de subida / descida).

Etapa 6: tutorial em vídeo

Assista ao nosso tutorial em vídeo para passar por todas as etapas de interface e conclusão do projeto.

Fique atento para a interface de outros sensores e blogs de trabalho.

Recomendado: