Sensor de Umidade, Pressão e Temperatura BME280

O BME280 de longe é um dos melhores sensores do mercado em termos de custo benefício e precisão. Esse minúsculo componente de apenas 2,5×2,5×0,95 mm³ é capaz de obter a temperatura ambiente, pressão atmosférica e até mesmo a umidade relativa do ar.

Aplicações

Segundo o datasheet do componente, ele pode ser implementado em diversas aplicações bastante interessantes como:

  • Automação residencial;
  • Internet of Things (IoT);
  • Indicador de velocidade vertical; 
  • Monitoramento ao ar livre; 
  • Previsão meteorológica;
  • Aprimorar navegação de GPS.

Especificações

  • Voltagem de Trabalho: 1,71V a 3,6V;
  • Consumo:
    • 1,8uA a 1Hz umidade e temperatura;
    • 2,8uA a 1Hz pressão e temperatura;
    • 3,6uA a 1Hz umidade, pressão e temperatura;
    • 0,1uA em sleep mode.
  • Tamanho: 2,5×2,5×0,95 mm³;
  • Interfaces de comunicação:
    • I²C até 3,4MHz;
    • SPI 3 e 4 fios até 10MHz.

Parâmetros para o Sensor de Umidade

  • Tempo de resposta: 1s;
  • Margem de erro tolerável: +/- 3;
  • Histerese: +/- 1;

Parâmetros para Pressão Atmosférica

  • RMS Noise: 0,2Pa, equivalente a 1,7cm;
  • Coeficiente de deslocamento da temperatura: +/-12,6cm a cada mudança 1°C de temperatura.

Faixas de leitura

  • Termômetro: -40 a  +85 °C;
  • Higrômetro: 0  a 100%; 
  • Barômetro: 300 a 1100hPa. 

Peculiaridades

A maioria dos sensores que trabalham com umidade relativa do ar são capacitivo mas o BOSCH Sensortec inovou com o BME280, trazendo um novo modelo que é mais preciso que os capacitivos.

Plots of measured vs. reference humidity for the nine hygrometers


No gráfico acima que foi retirado de um experimento do site kandrsmith que fez um comparativo entre diversos sensores de humidade relativa do ar para ver qual se sairia melhor. O BME280 levou o primeiro lugar por corresponder a margem de erro (faixa cinza) dada pela própria fabricante sendo um dos mais precisos do mercado.

Estrutura Interna

Estrutura interna do BME280

A imagem acima foi retirada do google da patente US20140116122 pertencente a Bosch Tool Corp sobre o BME280. Da composição a parte mais inovadora de fato é o item 46 que segundo a documentação da patente, corresponde a um material como polímero poroso configurado para absorver e reter moléculas de água em concentrações que são proporcionais à umidade ambiente. As imagens retiradas do site 41j evidencia melhor essa característica peculiar desse sensor.

Dimensões

Como já foi dito no inicio desse post, o sensor tem o incrível tamanho de 2,5×2,5×0,95mm³ o que pode ser algo positivo e negativo ao mesmo tempo.

Dimensões do BME280

Esse tamanho minúsculo de um sensor como esse sendo tão preciso e com um preço bastante acessível é impossível não se impressionar. Porém uma fator que me deixou intrigado em ralação a umidade relativa do ar com um diâmetro de apenas 0,3mm para passagem de ar mas funciona normalmente.

BME280 com Arduino e ESP32

Esse sensor pode ser usado com microcontroladores que trabalham com 3v3 sem nenhum problema como por exemplo o ESP32, no Arduino o ideal é usar um que já possua um conversor lógico de 3v3 /5v.

Código

Para que o código funcione é necessário que tenha a biblioteca da Adafruit para integrar o BME280 com o Arduino https://github.com/elcereza/Adafruit_BME280_Library

#include <Adafruit_BMP280.h>

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>


#define BMP_SCK 13
#define BMP_MISO 12
#define BMP_MOSI 11
#define BMP_CS 10

Adafruit_BMP280 bme; // I2C
//Adafruit_BMP280 bme(BMP_CS); // hardware SPI
//Adafruit_BMP280 bme(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);

void setup() {
  Serial.begin(9600);
  Serial.println(F("BMP280 test"));
  
  if (!bme.begin()) {
  Serial.println("Could not find a valid BMP280 sensor, check wiring!");
  while (1);
  }
}

void loop() {
  Serial.print("Temperature = ");
  Serial.print(bme.readTemperature());
  Serial.println(" *C");
  
  Serial.print("Pressure = ");
  Serial.print(bme.readPressure());
  Serial.println(" Pa");
  
  Serial.print("Approx altitude = ");
  Serial.print(bme.readAltitude(1013.25)); // this should be adjusted to your local forcase
  Serial.println(" m");
  
  Serial.println();
  delay(2000);
}

Diagrama

Alguns “módulos” do BME280 são ou para 3v3 ou para 5v, os que possuem 4 pinos geralmente contém um regulador de tensão e conversor de nível lógico já integrados mas os que possuem acima de 4 pinos geralmente trabalham com 3v3 e só tem componentes como resistores e capacitores recomendados pela fabricante do sensor. Para usar com o ESP32 é só por o SDA no G21 e o SCL no G22 e ligar no 3v3.



Funcionamento

Esse vídeo embora não seja necessariamente com o Arduino demonstra especificamente como o funcionamento do BME280 ao ascender um fosforo perto do sensor, onde os dados são exibidos em um intervalo programado de 2,5s para antigo protótipo do App Orion.

Considerações

O BME280 é um ótimo sensor do para as aplicações no qual ele foi fabricado, tendo um ótimo custo benéfico e uma precisão muito boa, porém um fator deixou muito a desejar foi a humidade relativa do ar por apresentar erros de leitura chegando aos 100% ou estabilizando em 80% em ambiente aberto não correspondendo com a humidade real.

Aparentemente o único fator desconsiderando condensação interna no encapsulamento e eletroestática foi a poeira do ambiente pois ficou exposto por mais de uma semana sem proteção mecânica adicional.

Enquanto a leitura da pressão atmosférica e temperatura ficou funcionando perfeitamente. Em alguns fóruns muitos relataram o mesmo problema, não só no BME260 mas também do BME680 que é ainda mais robusto e contem leitura da qualidade do ar, ambos com mesmo problema na humidade relativa.

Com apenas 0,3mm de abertura para passagem de ar, fica extremamente complicado fazer uma possível limpeza efetiva com álcool isopropílico, talvez se deixassem exposto o módulo de umidade relativa exposto como o HTU21D, muito provavelmente não ocorreria esse problema pois facilitaria muito a manutenção.