Skip to Content

Sensor de Odores MEMS Fermion GM-512B com Arduino

Sensor de Odores MEMS Fermion GM-512B com Arduino

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

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 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:

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

Esquemas

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

Schematics of Fermion Odor Sensor GM-512B
Esquema do Fermion Odor Sensor GM-512B (source)

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):

Remoção da película protetora

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:

Preheating times for GM-502B VOC Sensor
Tempos de pré-aquecimento para o Sensor de Odor GM-512B (source)

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:

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

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:

Ligação do LED de alarme ao Arduino UNO

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):

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 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:

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

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:

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 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:

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

Boas experiências 😉