Sensor ambiental BME680 usando o Arduino IDE(gás, pressão, umidade, temperatura)

Apresentando o módulo de sensor ambiental BME680

O BME680 é um sensor ambiental que combina sensores de gás, pressão, umidade e temperatura. O sensor de gás pode detectar uma ampla gama de gases, como compostos orgânicos voláteis (VOC). Por esse motivo, o BME680 pode ser usado no controle da qualidade do ar interno.

BME680 Measurements

O BME680 é um sensor digital 4 em 1 que mede:

  • Principais Medições

    🌡️ 1. Temperatura

    • Mede a temperatura ambiente com alta precisão.
    • Faixa típica: -40 °C a +85 °C
    • Exemplo de aplicação: monitoramento climático, termostatos inteligentes.

    💧 2. Umidade Relativa

    • Mede a quantidade de vapor de água no ar.
    • Faixa: 0% a 100% UR
    • Importante para controle de ambientes fechados e conforto térmico.

    📈 3. Pressão Barométrica

    • Mede a pressão atmosférica.
    • Faixa: 300 hPa a 1100 hPa
    • Pode ser usado para estimar a altitude com precisão (barômetro digital).
    • Aplicações em drones, GPS, meteorologia.

    🧪 4. Gás (VOCs)

    • Mede a presença de Compostos Orgânicos Voláteis (VOCs).
    • Ex: Etanol, monóxido de carbono, acetona, tolueno, entre outros.
    • Fornece um índice de qualidade do ar (IAQ).
    • Importante: não identifica gases individualmente — fornece uma leitura qualitativa da poluição.

Sensor de gás

O BME680 contém um sensor MOX (Metal-oxide) que detecta VOCs no ar. Esse sensor lhe dá uma ideia qualitativa da soma de COVs/contaminantes no ar circundante – ele não é específico para uma molécula de gás específica.

Os sensores MOX são compostos por uma superfície de óxido metálico, um chip sensor para medir alterações na condutividade e um aquecedor. Ele detecta VOCs por meio da adsorção de moléculas de oxigênio em sua camada sensível. O BME680 reage à maioria dos COVs que poluem o ar interno (exceto CO2).

Quando o sensor entra em contato com os gases redutores, as moléculas de oxigênio reagem e aumentam a condutividade na superfície. Como um sinal bruto, o BME680 emite valores de resistência. Esses valores mudam devido a variações nas concentrações de VOC:

  • Maior concentração de VOCs » Menor resistência
  • Menor concentração de VOCs » Maior resistência

As reações que ocorrem na superfície do sensor (portanto, a resistência) são influenciadas por outros parâmetros além da concentração de VOC, como temperatura e umidade.

Informações relevantes sobre o sensor de gás

O sensor de gás fornece uma indicação qualitativa da presença de compostos orgânicos voláteis (VOCs) no ar ambiente. Com ele, é possível identificar tendências, comparar medições ao longo do tempo e avaliar se a qualidade do ar está melhorando ou piorando.
Para garantir leituras mais precisas, é essencial calibrar o sensor utilizando fontes conhecidas e desenvolver uma curva de calibração adequada.
Ao adquirir o sensor, recomenda-se mantê-lo em funcionamento contínuo por 48 horas antes de iniciar a coleta de dados válidos. Após esse período, também é indicado aguardar cerca de 30 minutos de operação antes de realizar qualquer leitura de gás.

Precisão do BME680
Aqui está a precisão dos sensores de temperatura, umidade e pressão do BME680:

Faixa de operação do BME680
A tabela a seguir mostra a faixa de operação dos sensores de temperatura, umidade e pressão do BME680.

Interface do BME680
O BME680 é compatível com as interfaces I2C e SPI.

BME680 I2C
Esse sensor se comunica usando o protocolo de comunicação I2C, portanto, a ligação é muito simples. Você pode usar os pinos I2C padrão do ESP8266, conforme mostrado na tabela a seguir:

O GPIO 5 (SCL) e o GPIO 4 (SDA) são os pinos I2C padrão do ESP8266. Você pode usar outros pinos, desde que os defina corretamente no código.

BME680 SPI
Para usar o protocolo de comunicação SPI, use os seguintes pinos:

Esses são os pinos SPI padrão do ESP8266. Você pode usar outros pinos, desde que os defina corretamente no código.

Peças necessárias

Para concluir este tutorial, você precisa dos seguintes componentes:

  • Módulo de sensor BME680
  • ESP8266 (Qualquer versão, preferencialmente as mais novas)
  • ProtoBoard
  • Fios de jumper

Esquema – ESP8266 NodeMCU com BME680

O BME680 pode se comunicar usando os protocolos de comunicação I2C ou SPI.

ESP8266 com BME680 usando I2C

Siga o próximo diagrama esquemático para conectar o BME680 ao ESP8266 usando os pinos I2C padrão.

ESP8266 com BME680 usando SPI

Como alternativa, talvez você queira usar o protocolo de comunicação SPI. Nesse caso, siga o próximo diagrama esquemático para conectar o BME680 ao ESP8266 usando os pinos SPI padrão.

Observação: se você usar o protocolo de comunicação SPI, conecte o sensor somente depois de carregar o código.

Instalando a biblioteca BME680

Para obter leituras do módulo sensor BME680, usaremos a biblioteca Adafruit_BME680. Siga as próximas etapas para instalar a biblioteca em seu Arduino IDE:

Abra o IDE do Arduino e vá para Sketch > Include Library > Manage Libraries. O Gerenciador de bibliotecas deve ser aberto.

Procure por “adafruit bme680” na caixa de pesquisa e instale a biblioteca.

Instalação da biblioteca Adafruit_Sensor

Para usar a biblioteca BME680, você também precisa instalar a biblioteca Adafruit_Sensor. Siga as próximas etapas para instalar a biblioteca em seu Arduino IDE:

Vá para Sketch > Include Library > Manage Libraries e digite “Adafruit Unified Sensor” na caixa de pesquisa. Role a tela até o final para encontrar a biblioteca e instalá-la.

Depois de instalar as bibliotecas, reinicie o Arduino IDE.

Código – Leitura de gás, pressão, umidade e temperatura do BME680

Para ler gás, pressão, temperatura e umidade, usaremos um exemplo de esboço da biblioteca.

Depois de instalar a biblioteca BME680 e a biblioteca Adafruit_Sensor, abra o Arduino IDE e vá para File > Examples > Adafruit BME680 Library > bme680async.

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

/*#define BME_SCK 14
#define BME_MISO 12
#define BME_MOSI 13
#define BME_CS 15*/

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME680 bme; // I2C
//Adafruit_BME680 bme(BME_CS); // hardware SPI
//Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK);

void setup() {
  Serial.begin(115200);
  while (!Serial);
  Serial.println(F("BME680 async test"));

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

  // Configurar a sobreamostragem e a inicialização do filtro
  bme.setTemperatureOversampling(BME680_OS_8X);
  bme.setHumidityOversampling(BME680_OS_2X);
  bme.setPressureOversampling(BME680_OS_4X);
  bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
  bme.setGasHeater(320, 150); // 320*C por 150 ms
}

void loop() {
  // Informe ao BME680 para iniciar a medição.
  unsigned long endTime = bme.beginReading();
  if (endTime == 0) {
    Serial.println(F("Failed to begin reading :("));
    return;
  }
  Serial.print(F("Reading started at "));
  Serial.print(millis());
  Serial.print(F(" and will finish at "));
  Serial.println(endTime);

  Serial.println(F("You can do other work during BME680 measurement."));
  delay(50); // This represents parallel work.
  // Não há necessidade de delay() até millis() >= endTime: bme.endReading()
  // cuida disso. Não há problema se o trabalho paralelo demorar mais do que
  // o tempo de medição do BME680.

  // Obter resultados de medição do BME680. Observe que essa operação não é
  // instantânea mesmo se milli() >= endTime devido à latência I2C/SPI.
  if (!bme.endReading()) {
    Serial.println(F("Failed to complete reading :("));
    return;
  }
  Serial.print(F("Reading completed at "));
  Serial.println(millis());

  Serial.print(F("Temperature = "));
  Serial.print(bme.temperature);
  Serial.println(F(" *C"));

  Serial.print(F("Pressure = "));
  Serial.print(bme.pressure / 100.0);
  Serial.println(F(" hPa"));

  Serial.print(F("Humidity = "));
  Serial.print(bme.humidity);
  Serial.println(F(" %"));

  Serial.print(F("Gas = "));
  Serial.print(bme.gas_resistance / 1000.0);
  Serial.println(F(" KOhms"));

  Serial.print(F("Approx. Altitude = "));
  Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
  Serial.println(F(" m"));

  Serial.println();
  delay(2000);
}

Fizemos algumas alterações no sketch para torná-lo totalmente compatível com o ESP8266.

Você está gostando do projeto, ele completo é encontrado no Ebook com este e outros, abaixo.

Guia de Esp8266 com sensores e módulos

Please follow and like us:
error0
fb-share-icon
Tweet 20
fb-share-icon20