Skip to Content

Sensor Multi-Gas MEMS Fermion MiCS-5524 con Arduino

Sensor Multi-Gas MEMS Fermion MiCS-5524 con Arduino

El Fermion MEMS Multi-Gas Sensor es un módulo compacto de sensor de concentración de gases basado en el sensor de gas MiCS-5524, diseñado para integrarse con microcontroladores como Arduino y ESP32.

Emplea tecnología de detección MEMS (Sistemas Microelectromecánicos) para detectar múltiples gases comunes, incluyendo monóxido de carbono (CO), metano (CH₄), etanol (C₂H₅OH), propano (C₃H₈), butano (C₄H₁₀), hidrógeno (H₂), sulfuro de hidrógeno (H₂S) y amoníaco (NH₃).

En este tutorial aprenderás cómo conectar el Fermion MEMS Multi-Gas Sensor a un Arduino UNO para medir estos gases.

Partes necesarias

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

Fermion MEMS Multi-Gas Sensor

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 Fermion MEMS Multi-Gas Sensor MiCS-5524

La placa de desarrollo del Fermion MEMS Multi-Gas Sensor para el MiCS-5524 mide aproximadamente 12 mm por 16 mm e incluye un conector de cuatro pads para líneas de alimentación y señal.

Pinout of Fermion MEMS Multi-Gas Sensor MiCS-5524
Pinout del Fermion MEMS Multi-Gas Sensor MiCS-5524

Los pads para la entrada de alimentación de 5 V, referencia de tierra (GND) y la salida analógica de voltaje (A0) correspondiente a la concentración de gas. El pin de habilitación (EN) puede usarse para encender o apagar la alimentación interna del sensor. Esto permite ponerlo en un estado de bajo consumo cuando no se requiere detección continua.

La imagen a continuación muestra el esquema de la placa de desarrollo del Fermion MEMS Multi-Gas Sensor:

Esquema del Fermion Multi-Gas Sensor MiCS-5524 (source)

Características eléctricas y de alimentación

El SEN0440 está diseñado para funcionar con una alimentación regulada de 5 V DC con una disipación nominal de potencia alrededor de 0.45 W.

Aunque la interfaz lógica del sensor entrega un voltaje analógico en el rango de 0–5 V, es compatible con microcontroladores y placas de desarrollo cuyos pines de entrada toleran niveles de 3.3 V a 5.5 V, como muchas variantes de Arduino y ESP32.

La salida principal es un voltaje analógico proporcional a la concentración del gas objetivo, y ese voltaje debe ser leído con un convertidor analógico-digital en el controlador anfitrión para su procesamiento o conversión a unidades de partes por millón.

Mecanismo de detección de gases y rango objetivo

En su núcleo, el SEN0440 utiliza el MiCS-5524 sensor resistivo MEMS de gas. Este elemento sensor contiene una capa de semiconductor de óxido metálico cuya resistencia varía en presencia de ciertos gases reductores.

El módulo está calibrado y ajustado para que los cambios en esta resistencia se traduzcan en una salida de voltaje analógico, que el código de ejemplo puede convertir en concentraciones aproximadas de gases comunes.

El sensor soporta la detección de monóxido de carbono (CO) desde aproximadamente 1 ppm hasta 1000 ppm, hidrógeno (H₂) en un rango similar, etanol (C₂H₅OH) desde unos 10 ppm hasta 500 ppm, y amoníaco (NH₃) desde aproximadamente 1 ppm hasta 500 ppm. Metano (CH₄) y otros hidrocarburos ligeros como propano y butano en concentraciones desde aproximadamente 3000 ppm hasta 15000 ppm. El siguiente gráfico muestra las características de sensibilidad a gases del sensor MiCS‑5524 para los diferentes gases:

Características de sensibilidad a gases del sensor MiCS‑5524 (source)

Rendimiento del sensor y límites ambientales

El elemento sensor en el SEN0440 requiere un período de calentamiento antes de que se puedan obtener mediciones significativas.

El módulo está especificado para operar en un amplio rango de temperatura ambiente desde aproximadamente −30 °C hasta 85 °C, y puede tolerar niveles de humedad relativa de aproximadamente 5 % a 95 % sin condensación.

Especificación técnica

La siguiente tabla resume la especificación técnica del Fermion MEMS Multi-Gas Sensor MiCS-5524:

Especificación Detalles
Modelo del sensor Sensor de gas MEMS MiCS-5524
Principio de detección Detección resistiva de gas con semiconductor de óxido metálico
Gases detectables CO, H₂, C₂H₅OH, NH₃, CH₄, C₃H₈, C₄H₁₀ (multi-gas, selectividad limitada)
Rango de concentración de gas CO: ~1 ppm–1000 ppm; H₂: ~1 ppm–1000 ppm; Etanol: ~10 ppm–500 ppm; NH₃: ~1 ppm–500 ppm; Hidrocarburos detectables a ppm más altos
Tipo de salida Voltaje analógico proporcional a la concentración
Rango de voltaje de salida 0 V–5 V (proporcional al nivel de gas)
Voltaje de alimentación 5 V DC nominal
Tiempo de calentamiento Decenas de segundos (típico para lecturas estables)
Temperatura de operación −30 °C a +85 °C
Humedad de operación 5 % a 95 % HR (sin condensación)
Consumo típico de energía ~0.45 W (a 5 V)
Compatibilidad de interfaz Compatible con entrada analógica de microcontroladores de 3.3 V a 5.5 V
Vida útil >2 años

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

Conectando el Fermion MEMS Multi-Gas Sensor al Arduino UNO

Conectar el sensor a un Arduino UNO es sencillo. Conecta VCC a 5V, GND a tierra, A0 a la entrada analógica A0, y EN a GPIO 10 como se muestra a continuación:

Connecting Fermion MEMS Multi-Gas Sensor to Arduino
Conectando Fermion MEMS Multi-Gas Sensor a Arduino

Instalando la biblioteca DFRobot_MICS

Vamos a usar la biblioteca DFRobot_MICS para leer datos del sensor MiCS-5524. Para instalarla, descarga la DFRobot_MICS biblioteca como archivo ZIP (DFRobot_MICS-master.zip) en tu ordenador.

Luego abre un nuevo Sketch, ve a Sketch -> Include Library -> Add .ZIP Library … para instalar la biblioteca ZIP descargada (DFRobot_MICS-master.zip):

Código para leer concentraciones de gas

El siguiente código demuestra cómo usar el Fermion MEMS Multi-Gas Sensor MiCS-5524 con una placa Arduino.

El sensor detecta gases como monóxido de carbono, metano, etanol, hidrógeno, amoníaco y dióxido de nitrógeno, proporcionando sus concentraciones en partes por millón (PPM).

El programa inicializa el sensor, realiza una calibración de calentamiento y luego lee y muestra continuamente las concentraciones de gas a través del monitor serial.

// https://github.com/dfrobot/DFRobot_MICS  V 1.0.0
// www.makerguides.com

#include "DFRobot_MICS.h"

#define CALIBRATION_TIME 3  // mins
#define ADC_PIN A0
#define POWER_PIN 10

DFRobot_MICS_ADC mics(ADC_PIN, POWER_PIN);

void display(const char* text, float value) {
  Serial.print(text);
  Serial.print(value, 1);
  Serial.println(" PPM");
}

void setup() {
  Serial.begin(115200);

  while (!mics.begin()) {
    Serial.println("Can't find Sensor!");
    delay(1000);
  }

  uint8_t mode = mics.getPowerState();
  if (mode == SLEEP_MODE) {
    mics.wakeUpMode();
    Serial.println("Sensor is awake!");
  }

  Serial.print("Warming up, do not touch sensor");
  while (!mics.warmUpTime(CALIBRATION_TIME)) {
    Serial.print(".");
    delay(1000);
  }
  Serial.println("ready!");
}

void loop() {
  Serial.println("\nGas concentrations ----------");
  display("CO (Carbon Monoxide)  : ", mics.getGasData(CO));
  display("CH4 (Methane)         : ", mics.getGasData(CH4));
  display("C2H5OH (Ethanol)      : ", mics.getGasData(C2H5OH));    
  display("H2 (Hydrogen)         : ", mics.getGasData(H2));
  display("NH3 (Ammonia)         : ", mics.getGasData(NH3));
  display("NO2 (Nitrogen Dioxide): ", mics.getGasData(NO2));      

  delay(1000);   
  mics.sleepMode();
}

Vamos a desglosar el código en sus componentes principales para entender cómo funciona.

Importaciones

El código comienza incluyendo la DFRobot_MICS.h biblioteca, que proporciona las funciones y definiciones necesarias para la interfaz con el sensor MiCS-5524.

#include "DFRobot_MICS.h"

Constantes

A continuación, se definen varias constantes. CALIBRATION_TIME especifica la duración del calentamiento del sensor en minutos, esencial para lecturas precisas. ADC_PIN y POWER_PIN definen el pin analógico de entrada del Arduino conectado a la salida del sensor y el pin digital que controla la alimentación del sensor, respectivamente.

#define CALIBRATION_TIME 3  // mins
#define ADC_PIN A0
#define POWER_PIN 10

Objeto sensor

Se crea una instancia de la DFRobot_MICS_ADC clase llamada mics, pasando el pin ADC y el pin de alimentación a su constructor. Este objeto gestiona la comunicación con el sensor y controla su funcionamiento.

DFRobot_MICS_ADC mics(ADC_PIN, POWER_PIN);

Función de visualización

La función display() es una ayuda que toma un texto descriptivo y un valor flotante de concentración de gas. Imprime el texto seguido del valor formateado con un decimal y añade la unidad «PPM» en el monitor serial. Esta función simplifica el formato de salida en el bucle principal.

void display(const char* text, float value) {
  Serial.print(text);
  Serial.print(value, 1);
  Serial.println(" PPM");
}

Función setup

En la función setup(), se inicializa la comunicación serial a 115200 baudios para permitir la salida de datos al monitor serial. Luego, el programa intenta inicializar el sensor llamando a mics.begin() en un bucle hasta que tiene éxito, imprimiendo un mensaje de error cada segundo si no se encuentra el sensor.

Después de la inicialización exitosa, se verifica el estado de alimentación del sensor. Si el sensor está en modo de suspensión, se despierta usando wakeUpMode() y se imprime un mensaje de confirmación.

El sensor requiere un período de calentamiento para calibrarse y asegurar mediciones precisas de gas. El código imprime un mensaje y espera hasta que transcurra el tiempo de calentamiento especificado por CALIBRATION_TIME minutos, imprimiendo puntos cada segundo para indicar el progreso. Una vez listo, imprime una confirmación.

void setup() {
  Serial.begin(115200);

  while (!mics.begin()) {
    Serial.println("Can't find Sensor!");
    delay(1000);
  }

  uint8_t mode = mics.getPowerState();
  if (mode == SLEEP_MODE) {
    mics.wakeUpMode();
    Serial.println("Sensor is awake!");
  }

  Serial.print("Warming up, do not touch sensor");
  while (!mics.warmUpTime(CALIBRATION_TIME)) {
    Serial.print(".");
    delay(1000);
  }
  Serial.println("ready!");
}

Función loop

La función loop() se ejecuta repetidamente después del setup. Comienza imprimiendo un encabezado en el monitor serial para indicar el inicio de las lecturas de concentración de gases. Luego, llama a la función display() para cada tipo de gas soportado por el sensor: monóxido de carbono (CO), metano (CH4), etanol (C2H5OH), hidrógeno (H2), amoníaco (NH3) y dióxido de nitrógeno (NO2). Para cada gas, obtiene la concentración en PPM usando mics.getGasData() con el identificador correspondiente del gas.

Después de imprimir todas las concentraciones de gases, el programa espera un segundo. Puedes poner el sensor en modo de suspensión usando mics.sleepMode() para ahorrar energía hasta el siguiente ciclo de lectura.

void loop() {
  Serial.println("\nGas concentrations ----------");
  display("CO (Carbon Monoxide)  : ", mics.getGasData(CO));
  display("CH4 (Methane)         : ", mics.getGasData(CH4));
  display("C2H5OH (Ethanol)      : ", mics.getGasData(C2H5OH));    
  display("H2 (Hydrogen)         : ", mics.getGasData(H2));
  display("NH3 (Ammonia)         : ", mics.getGasData(NH3));
  display("NO2 (Nitrogen Dioxide): ", mics.getGasData(NO2));      

  delay(1000);   
  // mics.sleepMode();
}

Ejemplo de salida

El siguiente ejemplo muestra la salida en el Monitor Serial. Después del calentamiento, el código imprime las concentraciones de gas para una primera muestra, que son todas 0.

Durante el segundo período de muestreo, rocié un limpiacristales cerca del sensor y puedes ver los valores aumentados para Metano y Amoníaco en los datos del sensor.

Sensor is awake!
Warming up, do not touch sensor.....................ready!

Gas concentrations ----------
CO (Carbon Monoxide)  : 0.0 PPM
CH4 (Methane)         : 0.0 PPM
C2H5OH (Ethanol)      : 0.0 PPM
H2 (Hydrogen)         : 0.0 PPM
NH3 (Ammonia)         : 0.0 PPM
NO2 (Nitrogen Dioxide): 0.0 PPM

Gas concentrations ----------
CO (Carbon Monoxide)  : 0.0 PPM
CH4 (Methane)         : 5402.4 PPM
C2H5OH (Ethanol)      : 0.0 PPM
H2 (Hydrogen)         : 0.0 PPM
NH3 (Ammonia)         : 87.7 PPM
NO2 (Nitrogen Dioxide): 0.0 PPM

Conclusión

En este tutorial aprendiste cómo usar el Fermion MEMS Multi-Gas Sensor con un Arduino UNO para detectar varios gases. El sensor también puede usarse fácilmente con otros microcontroladores como un ESP32.

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! 😉