Introducción a BME680
El BME680 es un sensor de detección ambiental digital cuatro en uno que puede medir la temperatura, la humedad, la presión del aire y los compuestos orgánicos volátiles (COV) del entorno circundante. El elemento sensible al óxido de metal interno se usa para medir los COV en el aire.La conductividad de la superficie del óxido de metal es diferente bajo diferentes concentraciones de COV y, por lo tanto, genera diferentes valores de resistencia. Este sensor puede dar una idea cualitativa de la suma de COV/contaminantes en el aire circundante, en lugar de moléculas de gas específicas.
componentes sensibles | Rango de medición | precisión |
---|---|---|
temperatura | -40 a 85 ºC | +/- 1,0ºC |
humedad | 0 a 100 % | +/- 3 % |
presión del aire | 300 a 1100 hPa | +/- 1hPa |
Descripción de la interfaz
VCC Fuente de alimentación positiva 3.3-5V
GND Fuente de alimentación negativa
SCL Entrada de señal de reloj en modo SPI/IIC Modo
SDA SPI Entrada de señal de datos MOSI, entrada y salida
de señal de datos en modo IIC Salida de señal de datos MISO en modo SDO SPI, en modo IIC: Configuración de dirección de dispositivo IIC pin, cuando se conecta a GND, la dirección del dispositivo es 1110110 (0x76), cuando se conecta a VCC, la dirección del dispositivo es 1110111 (0x77)
pin de selección de modo CS SPI/IIC, cuando se conecta a VCC es el modo IIC, cuando se conecta a GND para el modo SPI
Cableado y programa BME680 y Arduino UNO
BME680 | Método de cableado SPI | Método de cableado IIC |
---|---|---|
SCL | D13 | A5 |
ASD | D11 | A4 |
SDO | D12 | / |
CS | D10 | / |
Método de cableado IIC
El administrador de la biblioteca Arduino IDE instala la biblioteca Adafruit_BME680 El administrador de la biblioteca Arduino IDE instala el código de ejemplo
Adafruit Unified SensorOpen
/***************************************************************************
This is a library for the BME680 gas, humidity, temperature & pressure sensor
Designed specifically to work with the Adafruit BME680 Breakout
----> http://www.adafruit.com/products/3660
These sensors use I2C or SPI to communicate, 2 or 4 pins are required
to interface.
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing products
from Adafruit!
Written by Limor Fried & Kevin Townsend for Adafruit Industries.
BSD license, all text above must be included in any redistribution
***************************************************************************/
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include "Adafruit_BME680.h"
#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10
#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(9600);
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);
}
// Set up oversampling and filter initialization
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 for 150 ms
}
void loop() {
// Tell BME680 to begin measurement.
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.
// There's no need to delay() until millis() >= endTime: bme.endReading()
// takes care of that. It's okay for parallel work to take longer than
// BME680's measurement time.
// Obtain measurement results from BME680. Note that this operation isn't
// instantaneous even if milli() >= endTime due to I2C/SPI latency.
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);
}
Abra el monitor serie para mostrar los datos medidos por el sensor
Resumir
Cuando utilice el sensor por primera vez, se recomienda que los datos medidos sean relativamente estables y precisos después de 48 horas de funcionamiento. Este experimento permite utilizar de forma rápida e intuitiva el sensor para obtener los parámetros del entorno.