nose_electronique.ino
El BME688 convierte la placa en nariz electrónica: resistencia del sensor MOX, T/H y sobre todo el IAQ (índice de aire interior) calculado por BSEC en el hub. Un pellizco de nariz digital para vigilar una sala, un sótano o un terrario.
Hardware
Una Arduino Nicla Sense ME (nRF52832, solo BLE) con hub Bosch BHI260AP, BMM150, BMP390, BME688, LED RGB en driver I2C y cargador LiPo. La placa sola. Dejar 10 s de precalentamiento en el primer ciclo (escaneo típico de 10,8 s según el datasheet); ventilar antes de juzgar el IAQ.
Cableado
Sin cableado. No soplar a propósito: el sensor MOX se calibra con el aire ambiente y los vapores de alcohol o disolventes falsean el aprendizaje.
Funcionamiento
BHY2.enable(GAS_IAX) activa el pipeline BSEC del hub; bsec.iaq() da el índice (0-500, menor = más sano), readGasResistance la resistencia bruta del MOX en ohmios.
Ejecución
Programación desde Arduino IDE (core ArduinoCore-mbed); librerías Arduino_BHY2 y Nicla_System; USB por puente serie.
Variantes
Guardar la curva IAQ en CSV para un historial de calidad del aire, disparar ventilación por umbral, o comparar dos salas con dos placas sincronizadas por BLE.
nose_electronique.ino
// BME688 : MOX gaz + T/RH/pression, avec sorties BSEC (IAQ)
// calculées par le hub. Cycle de préchauffe du capteur : ~10 s.
#include "Arduino_BHY2.h"
SensorBSEC bsec(0); // IAQ / bVOC / CO2-eq calculés par le hub
void setup() {
Serial.begin(115200);
BHY2.begin();
BHY2.enable(BHY2_ENABLE_GAS_IAX); // index d'air intérieur
BHY2.enable(BHY2_ENABLE_AMBIENT_TEMPERATURE);
BHY2.enable(BHY2_ENABLE_RELATIVE_HUMIDITY);
BHY2.update();
Serial.println("Préchauffe BME688 (~10 s), puis lecture 1 Hz");
}
void loop() {
BHY2.update();
static unsigned long t = 0;
if (millis() - t > 1000) {
t = millis();
Serial.print("IAQ="); Serial.print(bsec.iaq());
Serial.print(" T="); Serial.print(BHY2.readTemperature());
Serial.print(" C RH="); Serial.print(BHY2.readHumidity());
Serial.print(" % Rgaz="); Serial.print(BHY2.readGasResistance());
Serial.println(" ohm");
}
delay(5);
}