Skip to Content

Sensor de Fumo MEMS Fermion GM-202B com Arduino

Sensor de Fumo MEMS Fermion GM-202B com Arduino

O Fermion Smoke Sensor da DFRobot é uma placa compacta em torno do sensor GM-202B, projetada para integração com plataformas de microcontroladores como Arduino e ESP32.

Ele utiliza tecnologia de sistemas microeletromecânicos (MEMS) para fornecer alta sensibilidade a fumo e etanol na faixa de 10-1000 ppm. O sensor tem baixo consumo de energia (<20mA), resposta rápida e geração mínima de calor comparado com sensores de gás tradicionais.

Neste tutorial, aprenderás como detetar fumo com o sensor. Vamos construir um sistema de alarme simples que pisca um LED ou soa um buzzer se a concentração de fumo ficar demasiado alta.

Peças Necessárias

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

Para o nosso sistema de alarme, também precisaremos de um LED e um buzzer, que podes adquirir na Amazon. Além disso, usaremos um pequeno OLED SSD1306 para mostrar as concentrações de fumo medidas no ecrã.

Sensor de Odor MEMS Fermion

Buzzer Passivo

Kit de Resistores & LED

OLED display

Ecrã OLED

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 Smoke Sensor

O Fermion Smoke Sensor da DFRobot é uma placa compacta de deteção de gases projetada para detetar fumo (ou álcool).

Baseia-se no chip GM-202B, que usa tecnologia de sistemas microeletromecânicos (MEMS) para alcançar um formato pequeno com baixo consumo de energia e características de resposta rápida.

A placa mede aproximadamente 13 mm por 13 mm com uma espessura de cerca de 2,5 mm. A imagem abaixo mostra a placa com o sensor GM-202B no topo e um regulador de tensão por baixo:

Fermion Smoke Sensor Board with GM-202B
Placa Fermion Smoke Sensor com GM-202B

O módulo destina-se à deteção qualitativa de concentrações de fumo em vez de análise quantitativa precisa. Note que a DFRobot também oferece sensores calibrados, mas são maiores e mais caros (link).

Características Elétricas e Saída

O sensor opera numa faixa de tensão de alimentação de 3,3 V a 5 V, que corresponde aos níveis lógicos da maioria das placas Arduino e ESP32. Quando alimentado, o dispositivo consome menos de 20 mA de corrente operacional e gera muito pouco aquecimento próprio devido ao seu design MEMS.

A concentração de gás é representada por uma saída de tensão analógica que varia proporcionalmente à quantidade de fumo detetada no ar circundante. A tensão de saída está na faixa 0…VCC.

Faixa de Deteção e Sensibilidade

O sensor pode detetar compostos orgânicos voláteis comuns (VOCs) como etanol ou produtos de combustão como fumo numa faixa de 10 ppm a 1000 ppm. A sensibilidade é quantificada pela razão da resistência no ar limpo (R0) para a resistência numa concentração conhecida (Rs). Como mencionado, a saída do sensor não é um valor calibrado de concentração.

Especificações Ambientais e de Vida Útil

O elemento sensor é projetado para operar numa faixa de temperatura ambiente de aproximadamente -10 °C a +50 °C e humidade relativa de 15 % a 90 % (sem condensação). O fabricante especifica uma vida útil de pelo menos cinco anos quando o sensor é usado em condições atmosféricas normais sem contaminação excessiva.

Como os sensores respondem a uma ampla classe de gases orgânicos, fatores ambientais como humidade, temperatura e presença de outros gases podem também afetar a saída.

Pinout

Fisicamente, a placa expõe três pinos para ligação: saída analógica (A), tensão de alimentação (VCC) e terra (GND). A imagem abaixo mostra o pinout da placa:

Pinout of Fermion Smoke Sensor GM-202B Board
Pinout da Placa Fermion Smoke Sensor GM-202B

Esquemas

A imagem seguinte mostra o esquema da placa Fermion Smoke Sensor GM-202B:

Schematics of Fermion Smoke Sensor GM-202B
Esquema do Fermion Smoke Sensor GM-202B (source)

Podes ver o regulador de tensão e o chip sensor GM-202B com o resistor de carga de 4,7K na saída VOUT.

Preparação

O sensor vem com uma película protetora que precisas de remover. Se olhares para o topo do sensor, encontrarás uma película amarela a cobrir os orifícios de entrada de ar. Usa uma pinça para retirar a película. As fotos abaixo mostram o sensor com a película protetora, meio removida e completamente removida (da esquerda para a direita):

Remoção da película protetora

Note que o sensor requer um período de aquecimento para atingir estabilidade operacional. Isto pode levar vários minutos na primeira utilização até que as leituras se estabilizem. Se não usares o sensor por muito tempo, é recomendado deixá-lo funcionar entre 48 a 168 horas:

Preheating times for GM-202B Smoke sensor
Tempos de burn-in para o sensor de fumo GM-202B (source)

Especificação Técnica

A tabela seguinte resume a especificação técnica do Fermion Smoke Sensor GM-202B:

Especificação Valor
Tipo de sensor Sensor de deteção de fumo MEMS
Gás detetado Fumo (também responde a EtOH)
Faixa de deteção 10 – 1000 ppm
Tensão de alimentação 3,3 V – 5 V
Corrente operacional <20 mA
Sinal de saída Tensão analógica
Resistência de carga (RL) 4,7 kΩ
Sensibilidade R₀ (no ar) / Rₛ (em 200 ppm EtOH) ≥ 3
Temperatura de operação −10 °C a +50 °C
Humidade de operação 15 – 90 % HR (sem condensação)
Vida útil ≥ 5 anos (no ar)
Dimensões 13 × 13 × 2,5 mm

E aqui está um link para o Datasheet do sensor GM-202B com dados técnicos adicionais:

Sensor Fermion GM-202B versus Sensor MQ-2

Uma alternativa comum ao Fermion GM-202B Smoke Sensor é o mais antigo MQ-2 Sensor de Gás. A seguir, uma breve comparação dos dois sensores.

Tecnologia de Deteção e Mecanismo de Funcionamento

O sensor GM-202B usa tecnologia MEMS de semicondutor de óxido metálico, onde uma microplaca aquecida e uma camada sensível de óxido metálico mudam a resistência em resposta a VOCs e fumo, com baixo consumo de energia e resposta térmica rápida. A fabricação MEMS resulta num elemento sensor compacto que atinge rapidamente a temperatura de operação e consome relativamente pouca energia no aquecedor.

Em contraste, o MQ-2 usa um elemento sensor de gás semicondutor a granel (SnO₂) alojado numa caixa maior de metal ou baquelite. Deteta gases inflamáveis e fumo por uma mudança na resistividade do material sensor quando aquecido, mas requer maior potência no aquecedor e tempo de pré-aquecimento mais longo.

Faixa de Operação e Sensibilidade

A faixa de deteção para o GM-202B é tipicamente 10–1000 ppm para gases como propano ou vapor de etanol e fumo, oferecendo sensibilidade adequada para deteção de baixos níveis de fumo em aplicações de qualidade do ar ou alarmes. A sensibilidade é frequentemente expressa como a razão de resistência R₀/Rₛ ≥ 3 a 200 ppm de gás de teste.

Por outro lado, o MQ-2 tem uma faixa de deteção muito mais ampla para gases inflamáveis (≈300–10000 ppm) e um padrão de sensibilidade mais alto (R₀/Rₛ ≥ 5 em 2000 ppm de propano), indicando que é orientado para deteção mais ampla de gases, incluindo fugas de gases combustíveis, não apenas pequenas concentrações de fumo.

Requisitos Elétricos e Características do Aquecedor

Uma diferença prática chave é o consumo de energia. O aquecedor do GM-202B funciona a cerca de 2,5 V com consumo ≤50 mW, o que ajuda a manter o consumo total do módulo baixo e o aquecimento rápido.

O aquecedor do MQ-2 funciona a cerca de 5 V com consumo até ≈950 mW, significando que precisa de muito mais energia e um período de aquecimento substancial (frequentemente dezenas de minutos a horas antes de obter leituras estáveis).

Integração de Circuito e Saída

Ambos os sensores produzem uma saída analógica proporcional à concentração de gás via um divisor de tensão com um resistor de carga.

O módulo GM-202B normalmente usa um resistor de carga menor (≈4,7 kΩ em placas breakout integradas) e pode ser ligado diretamente a ADCs de microcontroladores de baixa tensão como os do Arduino ou ESP32 com níveis lógicos de 3,3–5 V.

Os módulos MQ-2 geralmente incluem um potenciômetro e comparador na placa breakout para saída digital de limiar, mas quando usados com entradas ADC o resistor de carga pode ser ≈10 kΩ ou mais. O MQ-2 faz parte de um divisor de tensão simples que requer calibração e frequentemente amplificação adicional para leituras precisas.

Tamanho Físico e Ciclo de Vida

Fisicamente, o elemento MEMS GM-202B é muito menor (≈5 × 5 × 1,55 mm no sensor nu e ~13 × 13 × 2,5 mm na breakout) com menor potência total e geralmente longa vida útil em ar limpo (≥5 anos em módulos breakout).

O sensor MQ-2 pode ser maior devido à sua embalagem convencional e montagem do aquecedor, e embora também tenha longa vida nominal, o seu alto consumo de energia no aquecedor e estrutura volumosa tornam-no menos otimizado para designs embutidos de baixo consumo.

Adequação à Aplicação

Devido ao seu baixo consumo e faixa de deteção menor, o GM-202B é mais apropriado para deteção de fumo e monitorização de VOCs onde pequenas concentrações são relevantes e a energia é limitada (ex.: projetos com microcontroladores alimentados por bateria).

O MQ-2 é mais adequado para deteção de gases inflamáveis e ambientes onde uma ampla faixa de deteção e robustez a múltiplos tipos de gases são valiosas (ex.: fugas de GPL, alarmes de gás em oficinas), ao custo de maior consumo e longo tempo de pré-aquecimento.

Em ambos os casos, nenhum sensor fornece uma concentração absoluta de gás sem calibração. Ambos fornecem variações relativas que devem ser interpretadas em relação a uma linha base para cada aplicação alvo.

Ligação do Sensor de Fumo ao Arduino UNO

Ligar o sensor a um Arduino UNO é simples. Liga VCC a 5V (ou 3,3V), GND ao terra e A à entrada analógica A0 como mostrado abaixo:

Connecting Smoke Sensor to Arduino UNO
Ligação do Sensor de Fumo ao Arduino UNO

Exemplos de Código

Leitura da concentração de fumo

Neste primeiro exemplo, simplesmente lemos os valores medidos pelo sensor e imprimimos no Monitor Serial a cada segundo:

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

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

Verás valores entre 0 e 1023, dependendo da quantidade de fumo no ambiente.

Se o sensor ainda não estiver completamente aquecido, verás uma sequência de valores a diminuir continuamente no Monitor Serial. Após vários minutos, as medições estabilizam. No meu caso, em torno de 135.

Se expuseres o sensor a fumo (ou álcool), verás um aumento súbito no valor medido:

Como o sensor não está calibrado, não podes usá-lo para medir ppm (partes por milhão) ou mg/m 3 de concentrações reais. No entanto, podes usá-lo para construir um alarme de fumo, que faremos na próxima secção.

Alarme de Fumo com LED

O código seguinte implementa um alarme simples de fumo. Liga um LED se o valor medido de fumo ultrapassar um limiar pré-definido de 140:

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

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

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

Liguei o LED com um resistor de 220 Ohm ao GPIO 13 como LED de alarme, conforme mostrado abaixo:

Ligação do LED de alarme ao Arduino UNO

Note que para um sistema de alarme fiável, podes querer adicionar também um sensor de temperatura e humidade, pois as leituras do sensor são afetadas por temperatura e humidade. A figura abaixo mostra a dependência da resistência do sensor, que é proporcional à tensão que o Arduino lê, em função da humidade relativa:

Características típicas de temperatura/humidade (source)

Alarme de Fumo com Buzzer Passivo

Em vez de um LED, podes também usar um buzzer como sinal de alarme. No código seguinte, um buzzer passivo é ativado se a concentração de fumo medida ultrapassar o limiar:

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

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

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

A imagem seguinte mostra como adicionar o buzzer ao circuito. Começa por ligar o terminal negativo do buzzer ao GND do Arduino (fio preto). Depois liga o terminal positivo através de um resistor de 100Ω ao GPIO 11 (fio vermelho):

Connecting alarm buzzer to Arduino UNO
Ligação do buzzer de alarme ao Arduino UNO

Certifica-te de que a polaridade do buzzer está correta e que é um buzzer passivo ligado a uma porta GPIO com capacidade PWM. Para mais informações, vê o tutorial Active and Passive Piezo Buzzers with Arduino.

Se tiveres um buzzer ativo, deves usar o código do alarme com LED anterior, pois não funcionará corretamente com o comando tone().

Mostrar a Concentração de Fumo no OLED

Neste último exemplo, mostramos os valores medidos da concentração de fumo num pequeno OLED. O código imprime “Smoke” e o valor no centro do ecrã e atualiza o valor mostrado a 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("Smoke");

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

  oled.display();

  delay(100);
}

Note que precisas da biblioteca Adafruit_SSD1306 para controlar o OLED. Podes instalá-la via o Library Manager como de costume:

Adafruit_SSD1306 library installed in Library Manager
Biblioteca Adafruit_SSD1306 instalada no Library Manager

Ligar o OLED ao Arduino é fácil. Liga SDA e SCL do OLED aos pinos A4 e A5 do Arduino. Quanto à alimentação: como o OLED pode funcionar a 5V, podemos partilhar as linhas de alimentação. Liga VCC a 5V e GND a GND. A imagem abaixo mostra a ligação completa:

Connecting OLED and Sensor to Arduino UNO
Ligação do OLED e Sensor ao Arduino UNO

Se precisares de ajuda com o OLED, dá uma vista de olhos ao tutorial Use SSD1306 I2C OLED Display With Arduino.

Conclusão

Neste tutorial aprendeste a usar o sensor Fermion Smoke com um Arduino UNO para detetar fumo. O sensor pode ser facilmente usado com outros microcontroladores como o ESP32 também.

Sensores de gás MEMS têm a vantagem de serem pequenos, consumirem muito pouca energia (< 20mA) e terem um tempo curto de aquecimento. No entanto, ainda são afetados pela temperatura ambiente e humidade.

Além disso, o sensor Fermion Smoke não está calibrado e, portanto, não pode ser usado diretamente para medir concentrações reais em unidades ppm. Em teoria, poderias calibrar o sensor tu mesmo, mas na prática isso seria difícil. A DFRobot também oferece sensores calibrados, mas são maiores e mais caros (link).

Note que existe uma série inteira 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, os nossos posts dedicados:

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

Boas experiências 😉