Skip to Content

Capteur d’odeur MEMS Fermion GM-512B avec Arduino

Capteur d’odeur MEMS Fermion GM-512B avec Arduino

Le capteur d’odeurs MEMS Fermion de DFRobot est un module de détection de gaz conçu pour être utilisé avec des plateformes microcontrôleurs telles qu’Arduino ou ESP32. Au cœur se trouve un capteur GM-512B, qui utilise la technologie des systèmes microélectromécaniques (MEMS) pour détecter des gaz liés aux odeurs comme le sulfure d’hydrogène, l’éthanol et l’acétone.

Dans ce tutoriel, vous apprendrez à détecter des odeurs avec ce capteur. Nous allons construire un système d’alarme simple qui fait clignoter une LED ou émettre un buzzer si l’odeur devient trop forte.

Pièces requises

Vous aurez besoin d’un capteur d’odeurs Fermion de DFRobot. Pour le microcontrôleur, j’ai utilisé un Arduino Uno pour ce projet, mais tout autre Arduino ou ESP32 fonctionnera également.

Pour notre système d’alarme, nous aurons aussi besoin d’une LED et d’un buzzer, que vous pouvez trouver sur Amazon. De plus, nous utiliserons un petit écran OLED SSD1306 pour afficher la valeur d’odeur mesurée.

Capteur d’odeurs MEMS Fermion

Buzzer passif

Kit Résistance & LED

OLED display

Écran OLED

Arduino

Arduino Uno

USB Data Sync cable Arduino

Câble USB pour Arduino UNO

Dupont wire set

Jeu de fils Dupont

Half_breadboard56a

Plaque d’essai (breadboard)

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Matériel du capteur d’odeurs Fermion

Le SEN0571 utilise un élément de détection d’odeurs MEMS GM-512B construit avec la technologie des systèmes microélectromécaniques (MEMS). Cette architecture MEMS intègre des structures de détection à l’échelle microscopique pour réduire la taille et la consommation d’énergie.

L’élément de détection réagit aux changements dans la composition chimique de l’air ambiant en modifiant ses caractéristiques électriques, qui sont ensuite converties en une sortie de tension analogique. La fabrication MEMS permet une faible masse thermique, donc le capteur nécessite moins de courant pour fonctionner et génère peu de chaleur pendant la mesure.

Caractéristiques de détection

Ce capteur est capable de détecter une gamme de gaz liés aux odeurs, notamment le sulfure d’hydrogène (H₂S), l’éthanol (EtOH) et l’acétone, dans une plage de détection typique d’environ 0,5 ppm à 50 ppm.

La sortie n’est pas calibrée pour des valeurs de concentration précises ; le niveau de tension indique plutôt des variations relatives de la présence de gaz.

Interface électrique

Le SEN0571 fonctionne avec une alimentation de 3,3 V à 5 V, ce qui le rend compatible avec les plateformes Arduino et ESP32 sans conversion de niveau supplémentaire.

Le capteur consomme moins de 20 mA en fonctionnement normal, ce qui maintient une faible consommation moyenne.

Il produit une sortie de tension analogique unique correspondant à la concentration de gaz détectée, qui peut être lue directement par les broches ADC du microcontrôleur.

Limites environnementales et durée de vie

L’appareil est conçu pour fonctionner dans une plage de température d’environ −10 °C à +50 °C et dans des conditions d’humidité relative de 15 % à 90 % (sans condensation).

Les matériaux structurels et la conception MEMS visent une longue durée de vie d’environ cinq ans ou plus en air, en supposant une utilisation et une exposition environnementale normales.

Brochage

Physiquement, le breakout du capteur expose trois broches pour la connexion : sortie analogique (A), alimentation (VCC) et masse (GND). L’image ci-dessous montre le brochage de la carte :

Pinout of Fermion Smoke Sensor GM-202B Board
Brochage de la carte du capteur d’odeurs Fermion GM-512B

Schémas

L’image suivante montre les schémas de la carte du capteur d’odeurs Fermion GM-512B :

Schematics of Fermion Odor Sensor GM-512B
Schémas du capteur d’odeurs Fermion GM-512B (source)

Vous pouvez voir le régulateur de tension, ainsi que la puce capteur GM-512B avec la résistance de charge de 3K à la sortie VOUT.

Préparation

Le capteur est livré avec un film protecteur que vous devez retirer. Si vous regardez le dessus du capteur, vous trouverez un film jaune couvrant les trous d’entrée d’air. Utilisez une pince à épiler pour décoller le film. Les photos ci-dessous montrent le capteur avec le film protecteur, à moitié retiré, puis complètement retiré (de gauche à droite) :

Décollage du film protecteur

Notez que le capteur nécessite une période de chauffe pour atteindre une stabilité opérationnelle. Cela peut prendre plusieurs minutes lors de la première utilisation jusqu’à ce que les mesures soient stables. Si vous n’avez pas utilisé le capteur depuis longtemps, il est recommandé de le faire fonctionner pendant 24 à 72 heures :

Preheating times for GM-502B VOC Sensor
Temps de préchauffage pour le capteur d’odeurs GM-512B (source)

Spécifications techniques

Le tableau suivant résume les spécifications techniques du capteur d’odeurs Fermion GM-512B :

Spécification Valeur
Élément de détection Capteur d’odeurs MEMS (GM-512B)
Cible de détection Gaz liés aux odeurs (ex. H₂S, éthanol, acétone)
Plage de détection typique ~0,5 ppm à ~50 ppm
Type de sortie Tension analogique
Tension d’alimentation 3,3 V à 5 V
Courant de fonctionnement < 20 mA
Température de fonctionnement −10 °C à +50 °C
Humidité de fonctionnement 15 % à 90 % HR (sans condensation)
Caractéristique de réponse Variation relative de résistance/tension
Taille physique (élément capteur) ~13 mm × 13 mm × 2,5 mm
Durée de vie typique ~5 ans en air en usage normal

Voici un lien vers la fiche technique du capteur GM-512B avec des données techniques supplémentaires :

Connexion du capteur d’odeurs à Arduino UNO

Connecter le capteur à un Arduino UNO est simple. Connectez VCC à 5V (ou 3,3V), GND à la masse et A à l’entrée analogique A0 comme montré ci-dessous :

Connecting Smoke Sensor to Arduino UNO
Connexion du capteur de fumée à Arduino UNO

Exemples de code

Lecture de la concentration d’odeur

Dans ce premier exemple, nous lisons simplement les valeurs mesurées par le capteur et les affichons dans le moniteur série toutes les secondes :

void setup() {
  Serial.begin(9600);
}

void loop() {
  int val = analogRead(A0);
  Serial.println(val);
  delay(1000);
}

Vous verrez des valeurs entre 0 et 1023, selon la quantité d’odeur dans l’environnement.

Si le capteur n’est pas complètement chauffé, vous verrez une séquence de valeurs en diminution continue dans le moniteur série. Voir ci-dessous :

Après plusieurs minutes, les mesures se stabiliseront. Dans mon cas, autour de 300. Si vous soufflez ensuite sur le capteur, vous verrez une augmentation soudaine de la valeur mesurée :

Comme le capteur n’est pas calibré, vous ne pouvez pas l’utiliser pour mesurer des concentrations réelles en ppm (parties par million) ou en mg/m 3 . Cependant, vous pouvez l’utiliser pour construire une alarme d’odeur, ce que nous ferons dans la section suivante.

Alarme d’odeur avec LED

Le code suivant implémente une alarme d’odeur simple. Il allume une LED si la valeur d’odeur mesurée dépasse un seuil prédéfini de 320 :

byte sensorPin = A0;
byte ledPin = 13;
int threshold = 320;

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  int val = analogRead(sensorPin);
  digitalWrite(ledPin, val > threshold ? HIGH: LOW);
  delay(100);
}

J’ai connecté la LED avec une résistance de 220 Ohms au GPIO 13 comme LED d’alarme, comme montré ci-dessous :

Connexion de la LED d’alarme à Arduino UNO

Notez que pour un système d’alarme fiable, vous voudrez peut-être ajouter un capteur de température et d’humidité, car les mesures du capteur sont affectées par la température et l’humidité. Alternativement, vous pouvez aussi utiliser une fenêtre glissante pour compenser la dérive lente du capteur due à la température et à l’humidité.

Alarme d’odeur avec buzzer passif

Au lieu d’une LED, vous pouvez aussi faire sonner un buzzer comme signal d’alarme. Dans le code suivant, un buzzer passif est activé si la concentration d’odeur mesurée dépasse le seuil :

byte sensorPin = A0;
byte buzzerPin = 11;
int threshold = 320;

void setup() {
  pinMode(buzzerPin, OUTPUT);
}

void loop() {
  int val = analogRead(sensorPin);
  if (val > threshold) {
     tone(buzzerPin, 500);
  } else {
    noTone(buzzerPin);
  }
  delay(100);
}

L’image suivante montre comment ajouter le buzzer au circuit. Commencez par connecter la borne négative du buzzer à la masse de l’Arduino (fil noir). Puis connectez la borne positive via une résistance de 100Ω au GPIO 11 (fil rouge) :

Connecting alarm buzzer to Arduino UNO
Connexion du buzzer d’alarme à Arduino UNO

Assurez-vous que la polarité du buzzer est correcte et qu’il s’agit d’un buzzer passif connecté à un port GPIO capable de PWM. Pour plus d’informations, voir le Active and Passive Piezo Buzzers with Arduino tutoriel.

Si vous avez un buzzer actif, vous devez utiliser le code d’alarme LED précédent, car il ne fonctionnera pas correctement avec la commande tone().

Afficher la concentration d’odeur sur OLED

Dans ce dernier exemple, nous affichons les valeurs de concentration d’odeur mesurées sur un petit écran OLED. Le code affiche « Odor » et la valeur au centre de l’écran et met à jour la valeur affichée toutes les 100 ms :

#include "Adafruit_SSD1306.h"  // Version 2.5.16

Adafruit_SSD1306 oled(128, 64, &Wire, -1);

void setup() {
  oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  oled.setTextColor(WHITE, BLACK);
  oled.clearDisplay();
}

void loop() {
  static char text[30];

  int val = analogRead(A0);

  oled.setTextSize(2);
  oled.setCursor(40, 10);  
  oled.print("Odor");

  sprintf(text, " %d ", val);
  oled.setTextSize(2);
  oled.setCursor(35, 40);
  oled.print(text);

  oled.display();

  delay(100);
}

Notez que vous avez besoin de la Adafruit_SSD1306 bibliothèque pour contrôler l’OLED. Vous pouvez l’installer via le Library Manager comme d’habitude :

Adafruit_SSD1306 library installed in Library Manager
Bibliothèque Adafruit_SSD1306 installée dans le Library Manager

Connecter l’OLED à l’Arduino est facile. Connectez SDA et SCL de l’OLED aux broches A4 et A5 de l’Arduino. Pour l’alimentation : comme l’OLED peut fonctionner en 5V, nous pouvons partager les lignes d’alimentation. Connectez VCC à 5V et GND à la masse. L’image ci-dessous montre le câblage complet :

Connecting OLED and Sensor to Arduino UNO
Connexion de l’OLED et du capteur à Arduino UNO

Si vous avez besoin d’aide avec l’OLED, consultez le Use SSD1306 I2C OLED Display With Arduino tutoriel.

Conclusion

Dans ce tutoriel, vous avez appris à utiliser le capteur d’odeurs Fermion avec un Arduino UNO pour détecter la fumée. Le capteur peut également être facilement utilisé avec d’autres microcontrôleurs comme un ESP32.

Les capteurs de gaz MEMS ont l’avantage d’être petits, de consommer très peu d’énergie (< 20mA) et d’avoir un temps de chauffe court. Cependant, ils sont toujours affectés par la température ambiante et l’humidité.

De plus, le capteur d’odeurs Fermion n’est pas calibré et ne peut donc pas être utilisé directement pour mesurer des concentrations réelles en unités ppm.

Notez qu’il existe toute une série de capteurs MEMS différents. Pour un aperçu, voir l’article Review of the DFRobot Fermion MEMS Gas Sensor Series et pour des détails, nos articles dédiés :

Si vous avez des questions, n’hésitez pas à les laisser dans la section commentaires.

Bon bricolage 😉