O DFRobot Fermion MEMS Odor Sensor é um módulo de deteção de gases projetado para uso com plataformas de microcontroladores como Arduino ou ESP32. No seu núcleo está um sensor GM-512B, que utiliza tecnologia de sistema microeletromecânico (MEMS) para detetar gases relacionados com odores, como sulfeto de hidrogénio, etanol e acetona.
Neste tutorial, vais aprender a detetar odores com este sensor. Vamos construir um sistema de alarme simples que pisca um LED ou soa um buzzer se o odor ficar demasiado forte.
Peças Necessárias
Vais precisar de um sensor Fermion Odor 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 comprar na Amazon. Além disso, vamos usar um pequeno OLED SSD1306 para mostrar o valor do odor medido no ecrã.

Fermion MEMS Odor Sensor

Buzzer Passivo

Kit de Resistores & LED

Ecrã OLED

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 Odor Sensor
O SEN0571 usa um elemento sensor de odor GM-512B MEMS construído com tecnologia de sistema microeletromecânico (MEMS). Esta arquitetura MEMS integra estruturas sensoriais à escala microscópica para reduzir o tamanho e o consumo de energia.
O elemento sensor reage a mudanças na composição química do ar circundante alterando as suas características elétricas, que são então convertidas numa saída de tensão analógica. A fabricação MEMS permite uma baixa massa térmica, pelo que o sensor requer menos corrente para funcionar e gera calor mínimo durante a medição.
Características de Deteção
Este sensor é capaz de detetar uma gama de gases relacionados com odores, incluindo sulfeto de hidrogénio (H₂S), etanol (EtOH) e acetona, dentro de um intervalo típico de deteção de aproximadamente 0,5 ppm a 50 ppm.
A saída não é calibrada para valores precisos de concentração; em vez disso, o nível de tensão indica mudanças relativas na presença do gás.
Interface Elétrica
O SEN0571 opera numa faixa de alimentação de 3,3 V a 5 V, o que o torna compatível com plataformas Arduino e ESP32 sem necessidade de conversores de nível adicionais.
O sensor consome menos de 20 mA de corrente em operação normal, mantendo o consumo médio de energia baixo.
Produz uma única saída de tensão analógica correspondente à concentração do gás detetado, que pode ser lida diretamente pelos pinos ADC do microcontrolador.
Limites Ambientais e Vida Útil
O dispositivo foi projetado para funcionar numa faixa de temperatura de aproximadamente −10 °C a +50 °C e em condições de humidade relativa de 15 % a 90 % (sem condensação).
Os materiais estruturais e o design MEMS visam uma longa vida útil na ordem de cinco anos ou mais no ar, assumindo uso e exposição ambiental normais.
Pinout
Fisicamente, o breakout do sensor expõe três pinos para conexão: saída analógica (A), tensão de alimentação (VCC) e terra (GND). A imagem abaixo mostra o pinout da placa:

Esquemas
A imagem seguinte mostra o esquema da placa Fermion Odor Sensor GM-512B:

Podes ver o regulador de tensão e o chip sensor GM-512B com o resistor de carga de 3K 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, a meio de ser removida e completamente removida (da esquerda para a direita):

Nota 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 um longo tempo, é recomendado deixá-lo funcionar entre 24 a 72 horas:

Especificações Técnicas
A tabela seguinte resume as especificações técnicas do Fermion Odor Sensor GM-512B:
| Especificação | Valor |
|---|---|
| Elemento Sensor | Sensor de odor MEMS (GM-512B) |
| Alvo de Deteção | Gases relacionados com odores (ex.: H₂S, etanol, acetona) |
| Intervalo Típico de Deteção | ~0,5 ppm a ~50 ppm |
| Tipo de Saída | Tensão analógica |
| Tensão de Alimentação | 3,3 V a 5 V |
| Corrente de Operação | < 20 mA |
| Temperatura de Operação | −10 °C a +50 °C |
| Humidade de Operação | 15 % a 90 % HR (sem condensação) |
| Característica de Resposta | Mudança relativa na resistência/tensão |
| Tamanho Físico (Elemento Sensor) | ~13 mm × 13 mm × 2,5 mm |
| Vida Útil Típica | ~5 anos no ar em uso normal |
E aqui está um link para a folha de dados do sensor GM-512B com dados técnicos adicionais:
Ligação do Sensor de Odor ao Arduino UNO
Ligar o sensor a um Arduino UNO é simples. Liga o VCC a 5V (ou 3,3V), o GND ao terra e o A à entrada analógica A0, como mostrado abaixo:

Exemplos de Código
Leitura da concentração de odor
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 odor no ambiente.
Se o sensor ainda não estiver completamente aquecido, verás uma sequência de valores a diminuir continuamente no Monitor Serial. Vê abaixo:

Após vários minutos, as medições estabilizam. No meu caso, num valor em torno de 300. Se depois soprar no sensor, 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 concentrações em mg/m 3 . No entanto, podes usá-lo para construir um alarme de odor, que faremos na próxima secção.
Alarme de Odor com LED
O código seguinte implementa um alarme simples de odor. Liga um LED se o valor medido de odor ultrapassar um limiar 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);
}
Liguei o LED com um resistor de 220 Ohm ao GPIO 13 como LED de alarme, conforme mostrado abaixo:

Nota que para um sistema de alarme fiável, podes querer adicionar também um sensor de temperatura e um de humidade, pois as leituras do sensor são afetadas por temperatura e humidade. Alternativamente, podes usar uma janela deslizante para compensar a deriva lenta do sensor devido à temperatura e humidade.
Alarme de Odor 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 odor medida ultrapassar o limiar:
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);
}
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):

Certifica-te de que a polaridade do buzzer está correta e que é um buzzer passivo ligado a um pino GPIO com capacidade PWM. Para mais informações, vê o Active and Passive Piezo Buzzers with Arduino tutorial.
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 Odor no OLED
Neste último exemplo, mostramos os valores medidos de concentração de fumo num pequeno OLED. O código imprime “Odor” 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("Odor");
sprintf(text, " %d ", val);
oled.setTextSize(2);
oled.setCursor(35, 40);
oled.print(text);
oled.display();
delay(100);
}
Nota que precisas da Adafruit_SSD1306 biblioteca para controlar o OLED. Podes instalá-la via o Library Manager como de costume:

Ligar o OLED ao Arduino é fácil. Liga o SDA e o 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 o VCC a 5V e o GND ao GND. A imagem abaixo mostra a ligação completa:

Se precisares de ajuda com o OLED, dá uma vista de olhos ao Use SSD1306 I2C OLED Display With Arduino tutorial.
Conclusão
Neste tutorial aprendeste a usar o sensor Fermion Odor com um Arduino UNO para detetar fumo. O sensor pode ser facilmente usado com outros microcontroladores, como o ESP32.
Os sensores de gás MEMS têm a vantagem de serem pequenos, consumirem muito pouca energia (< 20mA) e terem um tempo de aquecimento curto. No entanto, ainda são afetados pela temperatura ambiente e humidade.
Além disso, o sensor Fermion Odor não está calibrado e, portanto, não pode ser usado diretamente para medir concentrações reais em unidades ppm.
Nota que existe toda uma série de diferentes sensores MEMS disponíveis. Para uma visão geral, vê o Review of the DFRobot Fermion MEMS Gas Sensor Series artigo e para detalhes os nossos posts dedicados:
- Fermion MEMS VOC Gas Sensor GM-502B with Arduino
- Fermion MEMS Smoke Sensor GM-202B with Arduino
- Fermion MEMS Carbon Monoxide CO Gas Sensor GM-702B with Arduino
- Fermion MEMS Multi-Gas Sensor MiCS-5524 with Arduino
Se tiveres alguma dúvida, não hesites em deixar nos comentários.
Boas experiências 😉

