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 Uno

Cabo USB para Arduino UNO

Conjunto de fios Dupont

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.

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:

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:

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:

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:
- Fermion MEMS VOC Gas Sensor GM-502B with Arduino
- Fermion MEMS Smoke Sensor GM-202B with Arduino
- Fermion MEMS Odor Sensor GM-512B with Arduino
- Fermion MEMS Carbon Monoxide CO Gas Sensor GM-702B with Arduino
Se tiveres alguma dúvida, não hesites em deixar nos comentários.
Boa bricolage 😉

