Zum Hauptinhalt springen

Umweltsensor

Mit dem Sensor BME680 kannst du eine verschiedene Auswahl an Phänomenen messen. Lufttemperatur, relative Luftfeuchtigkeit, Luftdruck und Luftqualität können mit dem BME680 bestimmt werden. Er ist also ein echter Alleskönner.

BME680 Umweltsensor

Technische Details

  • Schnelle Reaktionszeit von weniger als 10 Sekunden
  • "Plug-in-and-Go" senseBox kompatibel
  • Abweichung bei Gasmessungen von +-15%

Anschluss und Programmierung

Anschluss

i2c port

Die Komponente wird am I2C Port angeschlossen.

warning

Achtung Der BME Gassensor ist nicht mit dem BMP280 Luftdrucksensor kompatibel. Das heißt du kannst nur einen der beiden gleichzeitig anschließen und auslesen!

Programmierung (Arduino)

Software Bibliothek

Um den Sensor in Arduino zu Programmieren musst du die Software Bibliothek BSEC Software Library installieren.

Code

Dieser Code liest die Temperatur des BME680 Sensors und gibt sie im Seriellen Monitor aus. Über die Variablen bmeTemperatur, bmeHumidity, bmePressure, bmeIAQ, bmeIAQAccuracy, bmeCO2 und bmeBreathVocEquivalent kannst du auf die anderen Messwerte zugreifen.

#include <senseBoxIO.h>
#include <bsec.h> // http://librarymanager/All#BSEC_Software_Library

float bmeTemperatur;
float bmeHumidity;
double bmePressure;
float bmeIAQ;
float bmeIAQAccuracy;
int bmeCO2;
float bmeBreathVocEquivalent;

Bsec iaqSensor;

void checkIaqSensorStatus(void)
{
if (iaqSensor.bsecStatus != BSEC_OK) {
if (iaqSensor.bsecStatus < BSEC_OK) {
for (;;)
errLeds(); /* Halt in case of failure */
}
}

if (iaqSensor.bme68xStatus != BME68X_OK) {
if (iaqSensor.bme68xStatus < BME68X_OK) {
for (;;)
errLeds(); /* Halt in case of failure */
}
}
}


void errLeds(void)
{
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
delay(100);
digitalWrite(LED_BUILTIN, LOW);
delay(100);
}


void setup() {
Wire.begin();
iaqSensor.begin(BME68X_I2C_ADDR_LOW, Wire);
checkIaqSensorStatus();

bsec_virtual_sensor_t sensorList[13] = {
BSEC_OUTPUT_IAQ,
BSEC_OUTPUT_STATIC_IAQ,
BSEC_OUTPUT_CO2_EQUIVALENT,
BSEC_OUTPUT_BREATH_VOC_EQUIVALENT,
BSEC_OUTPUT_RAW_TEMPERATURE,
BSEC_OUTPUT_RAW_PRESSURE,
BSEC_OUTPUT_RAW_HUMIDITY,
BSEC_OUTPUT_RAW_GAS,
BSEC_OUTPUT_STABILIZATION_STATUS,
BSEC_OUTPUT_RUN_IN_STATUS,
BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE,
BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY,
BSEC_OUTPUT_GAS_PERCENTAGE
};


iaqSensor.updateSubscription(sensorList, 13, BSEC_SAMPLE_RATE_LP);
checkIaqSensorStatus();



}


void loop() {

if (iaqSensor.run()) {
bmeTemperatur = iaqSensor.temperature;
bmeHumidity = iaqSensor.humidity;
bmePressure = iaqSensor.pressure;
bmeIAQ = iaqSensor.iaq;
bmeIAQAccuracy = iaqSensor.iaqAccuracy;
bmeCO2 = iaqSensor.co2Equivalent;
bmeBreathVocEquivalent = iaqSensor.breathVocEquivalent;
} else {
checkIaqSensorStatus();
}

Serial.println(bmeTemperatur);

}

Programmierung (Blockly)

In Blockly kann der Sensor über folgenden Block ausgelesen werden:

Im Block kannst du zwischen den verschiedenen Parametern des Umweltsensors auswählen:

  • Temperatur in Grad Celsius (°C)
  • Luftfeuchtigkeit in %
  • Luftdruck in Pa
  • Innenraumluftqualität (IAQ)
  • Kalibrierungswert
  • CO2 Äquivalent
  • Atemluft VOC Äquivalent

Kalibrierungswert

Den Status der Kalibrierung kann über den Wert IAQ Accuracy abgelesen werden. Er ist entweder 0, 1, 2 oder 3 und sagt folgendes aus:

  • IAQ Accuracy = 0 heißt Sensor wird stabilisiert (dauert ca. 25 Minuten) oder dass es eine Zeitüberschreitung gab (which should be indicated by a warning/error flag by BSEC ← Muss in Blockly abgefangen werden),
  • IAQ Accuracy = 1 heißt Wert ist ungenau,
  • IAQ Accuracy = 2 heißt Sensor wird kalibriert,
  • IAQ Accuracy = 3 heißt Sensor erfolgreich kalibriert.

Der IAQ Index ist also nur aussagekräftig bei IAQ Accuracy = 3. Neben dem Wert für IAQ stellt uns BSEC noch K und VOC äquivalente Werte bereit.