nose_electronique.ino
Le BME688 transforme la carte en nez électronique : résistance du capteur MOX, T/RH, et surtout l’IAQ (index d’air intérieur) calculé par BSEC dans le hub. Un pincement de nez numérique pour surveiller une pièce, une cave ou un terrarium.
Matériel requis
Une Arduino Nicla Sense ME (nRF52832 dans un module ANNA-B112, BLE seul, pas de Wi-Fi) avec hub capteurs Bosch BHI260AP, magnétomètre BMM150, baromètre BMP390, capteur de gaz BME688, LED RVB sur pilote I2C et chargeur LiPo BQ25120. La carte seule. Laisser 10 s de préchauffe au premier cycle (scan typique 10,8 s d’après le datasheet) ; aérer avant de juger l’IAQ.
Câblage
Aucun câblage. Ne pas souffler dessus volontairement : le capteur MOX se calibre sur l’air ambiant, les vapeurs d’alcool ou solvants faussent l’apprentissage.
Fonctionnement
BHY2.enable(GAS_IAX) active le pipeline BSEC du hub ; bsec.iaq() donne l’index (0-500, plus bas = plus sain), readGasResistance la résistance brute du MOX en ohms.
Exécution
Programmation via Arduino IDE (core ArduinoCore-mbed, target NICLA_SENSE_ME) ; bibliothèques Arduino_BHY2 (capteurs) et Nicla_System (LED, chargeur) ; USB via pont série SAMD11.
Variantes
Stocker la courbe IAQ en CSV pour un historique qualité d’air, déclencher une ventilation sur seuil, ou comparer deux pièces avec deux cartes synchronisées en 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);
}