Skip to Content

Sensor Multi-Gás MEMS Fermion MiCS-5524 com Arduino

Sensor Multi-Gás MEMS Fermion MiCS-5524 com Arduino

O Fermion MEMS Multi-Gas Sensor é um módulo compacto de sensor de concentração de gases baseado no sensor de gás MiCS-5524, projetado para integração com microcontroladores como Arduino e ESP32.

Utiliza tecnologia de deteção MEMS (Micro-Electro-Mechanical Systems) para identificar vários gases comuns, incluindo monóxido de carbono (CO), metano (CH₄), etanol (C₂H₅OH), propano (C₃H₈), butano (C₄H₁₀), hidrogénio (H₂), sulfureto de hidrogénio (H₂S) e amoníaco (NH₃).

Neste tutorial, vais aprender como ligar o Fermion MEMS Multi-Gas Sensor a um Arduino UNO para medir estes gases.

Peças Necessárias

Vais precisar de um Fermion Multi-Gas Sensor da DFRobot. Quanto ao microcontrolador, usei um Arduino Uno para este projeto, mas qualquer outro Arduino ou ESP32 também funciona.

Fermion MEMS Multi-Gas Sensor

Arduino

Arduino Uno

USB Data Sync cable Arduino

Cabo USB para Arduino UNO

Dupont wire set

Conjunto de fios Dupont

Half_breadboard56a

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.

Hardware do Fermion MEMS Multi-Gas Sensor MiCS-5524

A placa breakout do Fermion MEMS Multi-Gas Sensor para o MiCS-5524 mede aproximadamente 12 mm por 16 mm e inclui uma área de quatro pads para ligação de alimentação e sinais.

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

Os pads são para uma entrada de alimentação de 5 V, referência de terra (GND) e a saída analógica de tensão (A0) correspondente à concentração de gás. O pino enable (EN) pode ser usado para ligar ou desligar a alimentação interna do sensor. Isto permite colocá-lo num estado de baixo consumo quando a deteção contínua não é necessária.

A imagem abaixo mostra o esquema da placa breakout do Fermion MEMS Multi-Gas Sensor:

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

Características Elétricas e de Alimentação

Eletricamente, o SEN0440 foi projetado para operar com uma alimentação DC regulada de 5 V, com uma dissipação de potência nominal em torno de 0,45 W.

Embora a interface lógica do sensor forneça uma tensão analógica na faixa de 0–5 V, é compatível com microcontroladores e placas de desenvolvimento cujos pinos de entrada toleram níveis entre 3,3 V e 5,5 V, como muitas variantes de Arduino e ESP32.

A saída principal é uma tensão analógica proporcional à concentração do gás alvo, que deve ser lida com um conversor analógico-digital no controlador hospedeiro para processamento ou conversão para unidades em partes por milhão (PPM).

Mecanismo de Deteção de Gás e Faixa Alvo

No seu núcleo, o SEN0440 utiliza o MiCS-5524 sensor resistivo MEMS de gás. Este elemento de deteção contém uma camada semicondutora de óxido metálico cuja resistência varia na presença de certos gases redutores.

O módulo é calibrado e ajustado de modo que as variações nesta resistência sejam traduzidas numa saída de tensão analógica, que o código de exemplo acompanha pode converter em concentrações aproximadas de gases comuns.

O sensor suporta a deteção de monóxido de carbono (CO) desde cerca de 1 ppm até 1000 ppm, hidrogénio (H₂) numa faixa semelhante, etanol (C₂H₅OH) de cerca de 10 ppm a 500 ppm, e amoníaco (NH₃) de cerca de 1 ppm a 500 ppm. Metano (CH₄) e outros hidrocarbonetos leves como propano e butano em concentrações de cerca de 3000 ppm a 15000 ppm. O gráfico seguinte mostra as características de sensibilidade do sensor MiCS‑5524 para os diferentes gases:

Características de sensibilidade do sensor MiCS‑5524 (source)

Desempenho do Sensor e Limites Ambientais

O elemento de deteção no SEN0440 requer um período de aquecimento antes que medições significativas possam ser obtidas.

O módulo está especificado para operar numa ampla faixa de temperatura ambiente, desde cerca de −30 °C até 85 °C, e pode tolerar níveis de humidade relativa entre aproximadamente 5 % e 95 % sem condensação.

Especificação Técnica

A tabela seguinte resume a especificação técnica do Fermion MEMS Multi-Gas Sensor MiCS-5524:

Especificação Detalhes
Modelo do Sensor Sensor de Gás MEMS MiCS-5524
Princípio de Deteção Deteção resistiva de gás por semicondutor de óxido metálico
Gases Detectáveis CO, H₂, C₂H₅OH, NH₃, CH₄, C₃H₈, C₄H₁₀ (multi-gás, seletividade limitada)
Faixa de Concentração de Gás CO: ~1 ppm–1000 ppm; H₂: ~1 ppm–1000 ppm; Etanol: ~10 ppm–500 ppm; NH₃: ~1 ppm–500 ppm; Hidrocarbonetos detectáveis em ppm mais elevados
Tipo de Saída Tensão analógica proporcional à concentração
Faixa de Tensão de Saída 0 V–5 V (proporcional ao nível de gás)
Tensão de Alimentação 5 V DC nominal
Tempo de Aquecimento Dezenas de segundos (típico para leituras estáveis)
Temperatura de Operação −30 °C a +85 °C
Humidade de Operação 5 % a 95 % HR (sem condensação)
Consumo Típico de Energia ~0,45 W (a 5 V)
Compatibilidade de Interface Entrada analógica de microcontrolador compatível com 3,3 V–5,5 V
Vida Útil >2 anos

E aqui está um link para a folha de dados do sensor MiCS-5524 com dados técnicos adicionais:

Ligação do Fermion MEMS Multi-Gas Sensor ao Arduino UNO

Ligar o sensor a um Arduino UNO é simples. Liga o VCC ao 5V, o GND à terra, o A0 à entrada analógica A0, e o EN ao GPIO 10 conforme mostrado abaixo:

Connecting Fermion MEMS Multi-Gas Sensor to Arduino
Ligação do Fermion MEMS Multi-Gas Sensor ao Arduino

Instalar a Biblioteca DFRobot_MICS

Vamos usar a biblioteca DFRobot_MICS para ler dados do sensor MiCS-5524. Para a instalar, descarrega o DFRobot_MICS arquivo ZIP da biblioteca (DFRobot_MICS-master.zip) para o teu computador.

Depois abre um novo Sketch, vai a Sketch -> Include Library -> Add .ZIP Library … para instalar a biblioteca ZIP descarregada (DFRobot_MICS-master.zip):

Código para leitura das concentrações de gás

O código seguinte demonstra como usar o Fermion MEMS Multi-Gas Sensor MiCS-5524 com uma placa Arduino.

O sensor deteta gases como monóxido de carbono, metano, etanol, hidrogénio, amoníaco e dióxido de azoto, fornecendo as suas concentrações em partes por milhão (PPM).

O programa inicializa o sensor, realiza uma calibração de aquecimento e depois lê e exibe continuamente as concentrações de gás através do 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 decompor o código nos seus principais componentes para entender como funciona.

Importações

O código começa por incluir a DFRobot_MICS.h biblioteca, que fornece as funções e definições necessárias para comunicar com o sensor MiCS-5524.

#include "DFRobot_MICS.h"

Constantes

De seguida, são definidas várias constantes. CALIBRATION_TIME especifica a duração do aquecimento do sensor em minutos, essencial para leituras precisas. ADC_PIN e POWER_PIN definem o pino analógico do Arduino ligado à saída do sensor e o pino digital que controla a alimentação do sensor, respetivamente.

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

Objeto Sensor

É criada uma instância da DFRobot_MICS_ADC classe chamada mics, passando o pino ADC e o pino de alimentação ao seu construtor. Este objeto gere a comunicação com o sensor e controla a sua operação.

DFRobot_MICS_ADC mics(ADC_PIN, POWER_PIN);

Função de Exibição

A função display() é uma função auxiliar que recebe um texto descritivo e um valor de concentração de gás em ponto flutuante. Imprime o texto seguido do valor formatado com uma casa decimal e acrescenta a unidade “PPM” no monitor serial. Esta função simplifica a formatação da saída no loop principal.

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

Função Setup

Na função setup(), a comunicação serial é inicializada a 115200 baud para permitir a saída de dados no monitor serial. O programa tenta então inicializar o sensor chamando mics.begin() num ciclo até ter sucesso, imprimindo uma mensagem de erro a cada segundo se o sensor não for encontrado.

Após a inicialização bem-sucedida, o estado de alimentação do sensor é verificado. Se o sensor estiver em modo de repouso, é despertado usando wakeUpMode() e uma mensagem de confirmação é impressa.

O sensor requer um período de aquecimento para calibração, garantindo medições precisas de gás. O código imprime uma mensagem e espera até que o tempo de aquecimento especificado por CALIBRATION_TIME minutos tenha passado, imprimindo pontos a cada segundo para indicar progresso. Quando estiver pronto, imprime uma confirmação.

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

Função Loop

A função loop() executa-se repetidamente após o setup. Começa por imprimir um cabeçalho no monitor serial para indicar o início das leituras de concentração de gás. Depois, chama a função display() para cada tipo de gás suportado pelo sensor: monóxido de carbono (CO), metano (CH4), etanol (C2H5OH), hidrogénio (H2), amoníaco (NH3) e dióxido de azoto (NO2). Para cada gás, obtém a concentração em PPM usando mics.getGasData() com o identificador correspondente do gás.

Após imprimir todas as concentrações de gás, o programa espera um segundo. Podes colocar o sensor em modo de repouso usando mics.sleepMode() para poupar energia até ao próximo ciclo de leitura.

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

Exemplo de Saída

O exemplo seguinte mostra a saída no Monitor Serial. Após o aquecimento, o código imprime as concentrações de gás para uma primeira amostra, que são todas 0.

Durante o segundo período de amostragem, pulverizei um limpa-vidros perto do sensor e podes ver os valores aumentados para Metano e Amoníaco nos dados do 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

Conclusão

Neste tutorial aprendeste a usar o Fermion MEMS Multi-Gas Sensor com um Arduino UNO para detetar vários gases. O sensor pode ser facilmente usado com outros microcontroladores como o ESP32 também.

Note que existe uma série completa de diferentes sensores MEMS disponíveis. Para uma visão geral, vê o artigo Review of the DFRobot Fermion MEMS Gas Sensor Series e para detalhes específicos, os nossos posts dedicados:

Se tiveres alguma dúvida, não hesites em deixar nos comentários.

Boa bricolage 😉