Skip to Content

Sensor de Olor MEMS Fermion GM-512B con Arduino

Sensor de Olor MEMS Fermion GM-512B con Arduino

El sensor de olores MEMS Fermion de DFRobot es un módulo de detección de gases diseñado para usarse con plataformas de microcontroladores como Arduino o ESP32. En su núcleo se encuentra un sensor GM-512B, que utiliza tecnología de sistemas microelectromecánicos (MEMS) para detectar gases relacionados con olores como sulfuro de hidrógeno, etanol y acetona.

En este tutorial aprenderás a detectar olores con este sensor. Construiremos un sistema de alarma simple que hace parpadear un LED o activa un zumbador si el olor se vuelve demasiado fuerte.

Piezas necesarias

Necesitarás un sensor de olores Fermion de DFRobot. En cuanto al microcontrolador, usé un Arduino Uno para este proyecto, pero cualquier otro Arduino o ESP32 también funcionará.

Para nuestro sistema de alarma también necesitaremos un LED y un zumbador, que puedes conseguir en Amazon. Además, usaremos una pequeña pantalla OLED SSD1306 para mostrar el valor medido del olor en un display.

Sensor de olores MEMS Fermion

Zumbador pasivo

Kit de resistencias y LED

OLED display

Pantalla OLED

Arduino

Arduino Uno

USB Data Sync cable Arduino

Cable USB para Arduino UNO

Dupont wire set

Juego de cables Dupont

Half_breadboard56a

Protoboard

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.

Hardware del sensor de olores Fermion

El SEN0571 utiliza un elemento sensor de olores GM-512B MEMS construido con tecnología de sistemas microelectromecánicos (MEMS). Esta arquitectura MEMS integra estructuras sensoriales a microescala para reducir tamaño y consumo de energía.

El elemento sensor reacciona a cambios en la composición química del aire circundante modificando sus características eléctricas, que luego se convierten en una salida de voltaje analógico. La fabricación MEMS permite una baja masa térmica, por lo que el sensor requiere menos corriente para funcionar y genera un calor mínimo durante la medición.

Características de detección

Este sensor es capaz de detectar una variedad de gases relacionados con olores, incluyendo sulfuro de hidrógeno (H₂S), etanol (EtOH) y acetona, dentro de un rango típico de detección de aproximadamente 0.5 ppm a 50 ppm.

La salida no está calibrada para valores precisos de concentración; en cambio, el nivel de voltaje indica cambios relativos en la presencia del gas.

Interfaz eléctrica

El SEN0571 funciona con un rango de alimentación de 3.3 V a 5 V, lo que lo hace compatible con plataformas Arduino y ESP32 sin necesidad de conversores de nivel adicionales.

El sensor consume menos de 20 mA de corriente en operación normal, manteniendo bajo el consumo promedio de energía.

Produce una única salida de voltaje analógico correspondiente a la concentración de gas detectada, que puede ser leída directamente por los pines ADC del microcontrolador.

Límites ambientales y vida útil

El dispositivo está diseñado para funcionar en un rango de temperatura de aproximadamente −10 °C a +50 °C y en condiciones de humedad relativa de 15 % a 90 % (sin condensación).

Los materiales estructurales y el diseño MEMS están pensados para una vida útil prolongada de alrededor de cinco años o más en aire, asumiendo un uso y exposición ambiental normales.

Pinout

Físicamente, el breakout del sensor expone tres pines para conexión: salida analógica (A), voltaje de alimentación (VCC) y tierra (GND). La imagen a continuación muestra el pinout de la placa:

Pinout of Fermion Smoke Sensor GM-202B Board
Pinout de la placa del sensor de olores Fermion GM-512B

Esquemas

La siguiente imagen muestra el esquema de la placa del sensor de olores Fermion GM-512B:

Schematics of Fermion Odor Sensor GM-512B
Esquema del sensor de olores Fermion GM-512B (source)

Puedes ver el regulador de voltaje y el chip sensor GM-512B con la resistencia de carga de 3K en la salida VOUT.

Preparación

El sensor viene con una película protectora que debes retirar. Si miras la parte superior del sensor, encontrarás una lámina amarilla cubriendo los orificios de entrada de aire. Usa unas pinzas para despegar la película. Las fotos a continuación muestran el sensor con la película protectora, a medio retirar y completamente retirada (de izquierda a derecha):

Despegado de la película protectora

Ten en cuenta que el sensor requiere un período de calentamiento para alcanzar estabilidad operativa. Esto puede tomar varios minutos en el primer uso hasta que las lecturas se estabilicen. Si no has usado el sensor por mucho tiempo, se recomienda dejarlo funcionando entre 24 y 72 horas:

Preheating times for GM-502B VOC Sensor
Tiempos de precalentamiento para el sensor de olores GM-512B (source)

Especificaciones técnicas

La siguiente tabla resume las especificaciones técnicas del sensor de olores Fermion GM-512B:

Especificación Valor
Elemento sensor Sensor de olores MEMS (GM-512B)
Objetivo de detección Gases relacionados con olores (p. ej., H₂S, etanol, acetona)
Rango típico de detección ~0.5 ppm a ~50 ppm
Tipo de salida Voltaje analógico
Voltaje de alimentación 3.3 V a 5 V
Corriente de operación < 20 mA
Temperatura de operación −10 °C a +50 °C
Humedad de operación 15 % a 90 % HR (sin condensación)
Característica de respuesta Cambio relativo en resistencia/voltaje
Tamaño físico (elemento sensor) ~13 mm × 13 mm × 2.5 mm
Vida útil típica ~5 años en aire bajo uso normal

Y aquí tienes un enlace a la hoja de datos del sensor GM-512B con datos técnicos adicionales:

Conexión del sensor de olores al Arduino UNO

Conectar el sensor a un Arduino UNO es sencillo. Conecta VCC a 5V (o 3.3V), GND a tierra y A a la entrada analógica A0 como se muestra a continuación:

Connecting Smoke Sensor to Arduino UNO
Conexión del sensor de humo al Arduino UNO

Ejemplos de código

Lectura de concentración de olores

En este primer ejemplo simplemente leemos los valores medidos por el sensor y los imprimimos en el Monitor Serial cada segundo:

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

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

Verás valores entre 0 y 1023, dependiendo de la cantidad de olor en el ambiente.

Si el sensor no se ha calentado completamente, verás una secuencia de valores que disminuye continuamente en el Monitor Serial. Mira abajo:

Después de varios minutos las mediciones se estabilizarán. En mi caso alrededor de un valor de 300. Si luego soplas sobre el sensor, verás un aumento repentino en el valor medido:

Como el sensor no está calibrado, no puedes usarlo para medir ppm (partes por millón) o mg/m 3 de concentración reales. Sin embargo, puedes usarlo para construir una alarma de olores, que haremos en la siguiente sección.

Alarma de olores con LED

El siguiente código implementa una alarma simple de olores. Enciende un LED si el valor medido de olor supera un umbral predefinido 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);
}

Conecté el LED con una resistencia de 220 Ohm a GPIO 13 como LED de alarma, como se muestra a continuación:

Conexión del LED de alarma al Arduino UNO

Ten en cuenta que para un sistema de alarma confiable puede que quieras añadir también un sensor de temperatura y humedad, ya que las lecturas del sensor se ven afectadas por la temperatura y la humedad. Alternativamente, podrías usar una ventana deslizante para compensar la deriva lenta del sensor debido a temperatura y humedad.

Alarma de olores con zumbador pasivo

En lugar de un LED, también puedes activar un zumbador como señal de alarma. En el siguiente código se activa un zumbador pasivo si la concentración de olor medida supera el umbral:

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

La siguiente imagen muestra cómo añadir el zumbador al circuito. Comienza conectando el terminal negativo del zumbador al GND del Arduino (cable negro). Luego conecta el terminal positivo a través de una resistencia de 100Ω al GPIO 11 (cable rojo):

Connecting alarm buzzer to Arduino UNO
Conexión del zumbador de alarma al Arduino UNO

Asegúrate de que la polaridad del zumbador sea correcta y que sea un zumbador pasivo conectado a un puerto GPIO con capacidad PWM. Para más información, consulta el Active and Passive Piezo Buzzers with Arduino tutorial.

Si tienes un zumbador activo, debes usar el código de alarma con LED anterior, ya que no funcionará correctamente con el comando tone().

Mostrar concentración de olores en OLED

En este último ejemplo mostramos los valores medidos de concentración de humo en una pequeña pantalla OLED. El código imprime «Odor» y el valor en el centro de la pantalla y actualiza el valor mostrado cada 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);
}

Ten en cuenta que necesitas la Adafruit_SSD1306 librería para controlar la OLED. Puedes instalarla a través del Library Manager como de costumbre:

Adafruit_SSD1306 library installed in Library Manager
Librería Adafruit_SSD1306 instalada en Library Manager

Conectar la OLED al Arduino es fácil. Conecta SDA y SCL de la OLED a los pines A4 y A5 del Arduino. En cuanto a la alimentación: dado que la OLED puede funcionar a 5V, podemos compartir las líneas de alimentación. Conecta VCC a 5V y GND a GND. La imagen a continuación muestra el cableado completo:

Connecting OLED and Sensor to Arduino UNO
Conexión de OLED y sensor al Arduino UNO

Si necesitas ayuda con la OLED, echa un vistazo al Use SSD1306 I2C OLED Display With Arduino tutorial.

Conclusión

En este tutorial aprendiste a usar el sensor de olores Fermion con un Arduino UNO para detectar humo. El sensor también puede usarse fácilmente con otros microcontroladores como un ESP32.

Los sensores de gas MEMS tienen la ventaja de ser pequeños, consumir muy poca energía (< 20mA) y tener un tiempo de calentamiento corto. Sin embargo, aún se ven afectados por la temperatura y humedad ambiente.

Además, el sensor de olores Fermion no está calibrado y por lo tanto no puede usarse directamente para medir concentraciones reales en unidades ppm.

Ten en cuenta que existe toda una serie de diferentes sensores MEMS disponibles. Para una visión general, consulta el Review of the DFRobot Fermion MEMS Gas Sensor Series artículo y para detalles específicos nuestras publicaciones dedicadas:

Si tienes alguna pregunta, no dudes en dejarla en la sección de comentarios.

¡Feliz bricolaje! 😉