Guide du capteur BME680 avec Arduino (gaz, température, humidité, pression)

Guide du capteur BME680 avec Arduino (gaz, température, humidité, pression)

Le BME680 est un capteur numérique environnemental qui mesure le gaz, la pression, l’humidité et la température. Dans ce guide, vous apprendrez à utiliser le module capteur BME680 avec la carte Arduino. Le capteur communique avec un microcontrôleur à l’aide des protocoles de communication I2C ou SPI.

Carte Arduino BME680 Capteur de gaz humidité pression barométrique température ambiante gaz qualité de l'air Arduino IDE

Vous apprendrez à connecter le capteur à la carte Arduino, à installer les bibliothèques requises et à utiliser un simple croquis pour afficher les lectures du capteur dans le moniteur série.

Présentation du module de capteur environnemental BME680

Le BME680 est un capteur environnemental qui combine des capteurs de gaz, de pression, d’humidité et de température. Le capteur de gaz peut détecter une large gamme de gaz comme les composés organiques volatils (COV). Pour cette raison, le BME680 peut être utilisé dans le contrôle de la qualité de l’air intérieur.

BME680 Capteur de gaz humidité pression barométrique température ambiante gaz qualité de l'air avant

Mesures du BME680

Le BME680 est un capteur numérique 4 en 1 qui mesure :

  • Température
  • Humidité
  • Pression barométrique
  • Gaz : Composés organiques volatils (COV) comme l’éthanol et le monoxyde de carbone

Capteur de gaz

Le BME680 contient un capteur MOX (oxyde métallique) qui détecte les COV dans l’air. Ce capteur vous donne une idée qualitative de la somme des COV/contaminants dans l’air ambiant – ce n’est pas spécifique pour une molécule de gaz spécifique.

Les capteurs MOX sont composés d’une surface en oxyde métallique, d’une puce de détection pour mesurer les changements de conductivité et d’un élément chauffant. Il détecte les COV par adsorption de molécules d’oxygène sur sa couche sensible. Le BME680 réagit à la plupart des COV polluant l’air intérieur (à l’exception du CO2).

Lorsque le capteur entre en contact avec les gaz réducteurs, les molécules d’oxygène réagissent et augmentent la conductivité à travers la surface. En tant que signal brut, le BME680 émet des valeurs de résistance. Ces valeurs changent en raison des variations des concentrations de COV :

Résistance du capteur de qualité de l'air de l'environnement de gaz BME680 Comment ça marche
  • Plus haute concentration de COV » Inférieur la résistance
  • Inférieur concentration de COV » Plus haute la résistance

Les réactions qui se produisent à la surface du capteur (donc la résistance) sont influencées par des paramètres autres que la concentration en COV comme la température et l’humidité.

Informations pertinentes concernant le capteur de gaz

Le capteur de gaz vous donne une idée qualitative des gaz COV dans l’air ambiant. Ainsi, vous pouvez obtenir des tendances, comparer vos résultats et voir si la qualité de l’air augmente ou diminue. Pour obtenir des mesures précises, vous devez étalonner le capteur par rapport à des sources connues et créer une courbe d’étalonnage.

Lorsque vous obtenez le capteur pour la première fois, il est recommandé de le faire fonctionner pendant 48 heures après avoir commencé à collecter des données « réelles ». Après cela, il est également recommandé de faire fonctionner le capteur pendant 30 minutes avant d’obtenir une lecture de gaz.

Précision BME680

Voici la précision des capteurs de température, d’humidité et de pression du BME680 :

Capteur Précision
Température +/- 1,0 ºC
Humidité +/- 3 %
Pression +/- 1 hPa

Plage de fonctionnement du BME680

Le tableau suivant indique la plage de fonctionnement des capteurs de température, d’humidité et de pression du BME680.

Capteur Opération Varier
Température -40 à 85 ºC
Humidité 0 à 100 %
Pression 300 à 1100 hPa

Brochage du BME680

Voici le brochage du BME680 :

VCC Alimente le capteur
GND GND commun
SCL Broche SCL pour la communication I2C
Broche SCK pour la communication SPI
SDA Broche SDA pour la communication I2C
Broche SDI (MOSI) pour la communication SPI
SDO Broche SDO (MISO) pour la communication SPI
CS Broche de sélection de puce pour la communication SPI

Interface BME680

Le BME680 prend en charge les interfaces I2C et SPI.

BME680 Capteur de gaz humidité pression barométrique température ambiante gaz qualité de l'air retour

BME680 I2C

Pour utiliser le protocole de communication I2C, utilisez les broches suivantes :

BME680 SPI

Pour utiliser le protocole de communication SPI, utilisez les broches suivantes :

BME680 Arduino
SCL (horloge SCK SPI) D13
SDA (SDI MOSI) D11
SDO (MISO) D12
CS (sélection de puce) D10

Pièces requises

Schémas de câblage du circuit du capteur de gaz de la carte Arduino BME680

Pour terminer ce tutoriel, vous avez besoin des pièces suivantes :

Vous pouvez utiliser les liens précédents ou aller directement sur MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !

Guide du capteur BME680 avec Arduino gaz temperature humidite pression

Schéma – Arduino avec BME680

Le BME680 peut communiquer en utilisant les protocoles de communication I2C ou SPI.

Arduino avec BME680 en utilisant I2C

Suivez le schéma suivant pour câbler le BME680 à l’Arduino à l’aide des broches I2C.

Schéma du circuit de câblage du capteur environnemental Arduino BME680 Communication I2C

Arduino avec BME680 utilisant SPI

Vous pouvez également utiliser le protocole de communication SPI à la place. Dans ce cas, suivez le schéma suivant pour câbler le BME680 à l’Arduino à l’aide des broches SPI.

Arduino BME680 Schéma de câblage Circuit Communication SPI

Installation de la bibliothèque BME680

Pour obtenir des lectures du module de capteur BME680, nous utiliserons le Bibliothèque Adafruit_BME680. Suivez les étapes suivantes pour installer la bibliothèque dans votre IDE Arduino :

Ouvrez votre IDE Arduino et accédez à Esquisser > Inclure la bibliothèque > Gérer les bibliothèques. Le gestionnaire de bibliothèque devrait s’ouvrir.

Rechercher « adafruit bme680  » dans la zone de recherche et installez la bibliothèque.

Installez BM6280 Adafruit Library Arduino IDE Library Manager

Installation de la bibliothèque Adafruit_Sensor

Pour utiliser la bibliothèque BME680, vous devez également installer le Bibliothèque Adafruit_Sensor. Suivez les étapes suivantes pour installer la bibliothèque dans votre IDE Arduino :

Aller à Esquisser > Inclure la bibliothèque > Gérer les bibliothèques et tapez « Capteur unifié Adafruit » dans le champ de recherche. Faites défiler jusqu’en bas pour trouver la bibliothèque et l’installer.

Installation de la bibliothèque de pilotes de capteurs unifiés Adafruit

Après avoir installé les bibliothèques, redémarrez votre IDE Arduino.

Code Arduino – Lecture du gaz, de la pression, de l’humidité et de la température BME680

Pour lire le gaz, la pression, la température et l’humidité, nous utiliserons un exemple de croquis de la bibliothèque.

Après avoir installé la bibliothèque BME680 et la bibliothèque Adafruit_Sensor, ouvrez l’IDE Arduino et accédez à Déposer > Exemples > Bibliothèque Adafruit BME680 > bme680async.

/***
  Read Our Complete Guide: https://Raspberryme.com/bme680-sensor-arduino-gas-temperature-humidity-pressure/
  
  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(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);
  }

  // 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);
}

Afficher le code brut

Comment fonctionne le code

Continuez à lire cette section pour savoir comment fonctionne le code, ou passez à la Manifestation section.

Bibliothèques

Le code commence par inclure les bibliothèques nécessaires : le fil bibliothèque pour utiliser I2C, le SPI bibliothèque (si vous souhaitez utiliser SPI au lieu d’I2C), le Adafruit_Sensor et Adafruit_BME680 bibliothèques pour s’interfacer avec le capteur BME680.

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

Communication SPI

Nous préférons utiliser le protocole de communication I2C avec le capteur. Cependant, le code est préparé si vous souhaitez utiliser SPI. Il vous suffit de décommenter les lignes de code suivantes qui définissent les broches SPI.

/*#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10*/

Pression au niveau de la mer

Une variable appelée SEALEVELPRESSURE_HPA est créé.

#define SEALEVELPRESSURE_HPA (1013.25)

Cette variable enregistre la pression au niveau de la mer en hectopascal (équivalent au milibar). Cette variable permet d’estimer l’altitude pour une pression donnée en la comparant à la pression au niveau de la mer. Cet exemple utilise la valeur par défaut, mais pour des résultats précis, remplacez la valeur par la pression actuelle au niveau de la mer à votre emplacement.

I2C

Cet exemple utilise le protocole de communication I2C par défaut. La ligne suivante crée un Adafruit_BME680 objet appelé bme sur les broches Arduino I2C : D5 (SCL), D4 (SDA).

Adafruit_BME680 bme; // I2C

Pour utiliser SPI, vous devez commenter cette ligne précédente et décommenter la ligne suivante.

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

mettre en place()

Dans le mettre en place() démarrer une communication série.

Serial.begin(115200);

Init BME680 Capteur

Initialisez le capteur BME680 :

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

Configurez les paramètres suivants (suréchantillonnage, filtre et chauffage au gaz) pour le capteur.

// 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

Pour augmenter la résolution des données brutes du capteur, il prend en charge le suréchantillonnage. Nous utiliserons les paramètres de suréchantillonnage par défaut, mais vous pouvez les modifier.

  • setTemperatureSuréchantillonnage(): régler le suréchantillonnage de la température.
  • setHumiditySuréchantillonnage(): régler le suréchantillonnage d’humidité.
  • setPressureSuréchantillonnage(): régler le suréchantillonnage de la pression.

Ces méthodes peuvent accepter l’un des paramètres suivants :

  • BME680_OS_NONE: désactiver la lecture ;
  • BME680_OS_1X
  • BME680_OS_2X
  • BME680_OS_4X
  • BME680_OS_8X
  • BME680_OS_16X

Le capteur BME680 intègre un filtre IIR interne pour réduire les changements à court terme des valeurs de sortie du capteur causés par des perturbations externes. le setIIRFilterSize() La méthode définit le filtre IIR. Il accepte la taille du filtre en paramètre :

  • BME680_FILTER_SIZE_0 (pas de filtrage)
  • BME680_FILTER_SIZE_1
  • BME680_FILTER_SIZE_3
  • BME680_FILTER_SIZE_7
  • BME680_FILTER_SIZE_15
  • BME680_FILTER_SIZE_31
  • BME680_FILTER_SIZE_63
  • BME680_FILTER_SIZE_127

Le capteur de gaz intègre un réchauffeur. Réglez le profil de chauffage à l’aide du setGasHeater() méthode qui accepte comme arguments :

  • la température du radiateur (en degrés centigrades)
  • l’heure à laquelle le chauffage doit être allumé (en millisecondes)

Nous utiliserons les paramètres par défaut : 320 ºC pendant 150 ms.

boucler()

Dans le boucler(), nous obtiendrons les mesures du capteur BME680.

D’abord, dites au capteur de démarrer une lecture asynchrone avec bme.beginReading(). Cela renvoie l’heure à laquelle la lecture serait prête.

// 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);

Ensuite, appelez le finLecture() méthode pour terminer une lecture asynchrone. Si la lecture asynchrone est toujours en cours, bloquer jusqu’à ce qu’elle se termine.

if (!bme.endReading()) {
  Serial.println(F("Failed to complete reading :("));
  return;
}

Après cela, nous pouvons obtenir les lectures comme suit :

  • bme.température: renvoie la lecture de la température
  • bme.pression: renvoie la lecture de la pression
  • bme.humidité: renvoie la lecture de l’humidité
  • bme.gas_resistance: renvoie la résistance au gaz
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"));

Pour plus d’informations sur les méthodes de la bibliothèque, consultez le Adafruit_BME680 Référence de classe.

Manifestation

Téléchargez le code sur votre carte Arduino. Aller à Outils > Conseil et sélectionnez la carte Arduino que vous utilisez. Aller à Outils > Port et sélectionnez le port auquel votre carte est connectée. Ensuite, cliquez sur le bouton de téléchargement.

Ouvrez le moniteur série à un débit en bauds de 115 200, appuyez sur le bouton RST intégré. Les mesures du capteur seront affichées.

BME680 Arduino IDE Exemple d'affichage des lectures d'humidité et de pression de la température du gaz Moniteur série

Conclusion

Le module capteur BME680 est un capteur numérique 4 en 1 qui combine des capteurs de gaz, de pression, de température et d’humidité. Le BME680 contient un capteur MOX qui détecte la présence de la plupart des gaz COV. Ce capteur vous donne une idée qualitative de la somme des COV/contaminants dans l’air ambiant. Pour cette raison, le BME680 peut être utilisé pour surveiller la qualité de l’air intérieur.

Nous espérons que vous avez trouvé ce guide de démarrage utile. Nous avons des guides pour d’autres capteurs populaires :

En savoir plus sur l’Arduino avec nos ressources :

Merci d’avoir lu.

  • BME680 capteur de pression atmosphérique température capteur d'humidité Breakout pour Arduino, Capteur de température et d'humidité, Capteur de température et d'humidité
    Le capteur BME680 est la solution de détection de précision à faible coût pour mesurer la pression barométrique avec une précision absolue de ± 1 hPa et la température avec une précision de ± 1,0 ° C. vous pouvez également l'utiliser comme altimètre avec une précision de ± 1 mètre. Il s'agit d'une carte de capteur de température, d'humidité et de pression. Fabriqué à partir de composants électroniques haut de gamme, le capteur est durable. Petite taille et poids léger, pratique à utiliser. Le capteur est sensible, une carte de développement de grande hauteur.
  • Adafruit Capteur de température, Pression, humidité et gaz BME680
    Ce petit capteur contient la température, l'humidité, la pression barométrique et les capacités de détection de gaz COV. All over SPI or I2C at a great price! Précision de ± 3 %, pression barométrique avec une précision absolue de ± 1 hPa et une précision de ± 1,0 °C. Veuillez noter ce capteur, comme tous les capteurs de COV/gaz, a une variabilité et pour obtenir des mesures précises que vous voudrez calibrer contre les sources connues
  • Capteur BME680, capteur d'humidité de température CJMCU-680 carte de développement de hauteur de pression Ultra-petite
    BONNE DURABILITÉ: Fabriqué à partir de composants électroniques de qualité supérieure, le capteur est durable. HAUTE PRÉCISION ET HAUTE SENSIBILITÉ: Ce capteur de capteur BME680 est sensible, une carte de développement de grande hauteur. CHAMP D'APPLICATION: Il s'agit d'une carte de capteur de température, d'humidité et de pression. Il est très approprié pour détecter la qualité de l'air. PRATIQUE À UTILISER: Le capteur est de petite taille et faible consommation d'énergie, il convient donc également aux applications à faible consommation telles que les appareils portables. BONNE COMPATIBILITÉ: la puce de régulateur de tension d'alimentation intégrée et la puce de conversion de signal de niveau ont une bonne compatibilité