Skip to Content

Fermion MEMS Smoke Sensor GM-202B with Arduino

Fermion MEMS Smoke Sensor GM-202B with Arduino

The Fermion Smoke Sensor by DFRobot is a compact breakout board around the GM-202B sensor that designed for integration with microcontroller platforms like Arduino and ESP32.

It employs microelectromechanical systems (MEMS) technology to provide high sensitivity to Smoke and Ethanol in the 10-1000ppm range. The sensor has a low power consumption (<20mA), rapid response and minimal heat generation compared with traditional gas sensors.

In this tutorial you will learn how to detect smoke with the sensor. We will build a simple alarm system that flashes an LED or sounds a buzzer if the smoke concentration gets too high.

Required Parts

You will need a Fermion Smoke sensor by DFRobot. As for the microcontroller, I used an Arduino Uno for this project, but any other Arduino or ESP32 will work as well.

For our alarm system we also will need an LED and a buzzer, which you can get at Amazon. Furthermore, we will use an small SSD1306 OLED to show the measured smoke concentrations on a display.

Fermion MEMS Odor Sensor

Passive Buzzer

Resistor & LED kit

OLED display

OLED Display

Arduino

Arduino Uno

USB Data Sync cable Arduino

USB Cable for Arduino UNO

Dupont wire set

Dupont Wire Set

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

The Fermion Smoke Sensor by DFRobot is a compact gas sensing board designed to detect smoke (or alcohol).

It is based on the GM-202B chip, which uses microelectromechanical systems (MEMS) technology to achieve a small form factor with low power consumption and rapid response characteristics.

The breakout measures approximately 13 mm by 13 mm with a thickness of about 2.5 mm. The picture below shows the breakout board with the GM-202B sensor at the top and a voltage regulator underneath:

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

The module is intended for qualitative detection of smoke concentrations rather than precise quantitative analysis. Note that DFRobot also offers calibrated sensors but they are larger and more expensive (link).

Electrical Characteristics and Output

The sensor operates over a supply voltage range from 3.3 V to 5 V, which matches the logic levels of most Arduino and ESP32 development boards. When powered, the device draws less than 20 mA of operating current, and it generates very little self-heating due to its MEMS design.

The gas concentration is represented by an analog voltage output that varies in proportion to the amount of smoke detected in the surrounding air. The output voltage is in the range 0…VCC.

Detection Range and Sensitivity

The sensor can detect common volatile organic compounds (VOCs) such as ethanol or combustion products such as smoke over a range of 10 ppm to 1000 ppm. Sensitivity is quantified by the ratio of resistance in clean air (R0) to resistance in a known concentration (Rs). As mentioned before the sensors output is not a calibrated concentration value, however.

Environmental and Lifespan Specifications

The sensing element is designed to operate within an ambient temperature range of approximately -10 °C to +50 °C and relative humidity from 15 % to 90 % (non-condensing). The manufacturer specifies a lifespan of at least five years when the sensor is used in normal atmospheric conditions without excessive contamination.

Because sensors respond to a broad class of organic gases, environmental factors such as humidity, temperature, and the presence of other gases can affect the output as well.

Pinout

Physically, the breakout exposes three pins for connection: analog output (A), supply voltage (VCC), and ground (GND). The picture below shows the pinout of the board:

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

Schematics

The following image shows the schematics of the Fermion Smoke Sensor GM-202B board:

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

You can see the voltage regulator, and the GM-202B sensor chip with the load resistor of 4.7K at the output VOUT.

Preparation

The sensor comes with a protective film you need to remove. If you look at the top of sensor, you will find a yellow foil covering the air inlet holes. Use a pair of tweezers to peel the film of. The photos below show the sensor with the protective film, half-way removed and completely removed (from left to right):

Peeling of protective film

Note that the sensor requires a warm-up period to reach operational stability. This may take several minutes on first use until the readings are stable. If you haven’t use the sensor for a long time it is recommended to let it run for 48 up to 168 hours:

Preheating times for GM-202B Smoke sensor
Burn-in times for GM-202B Smoke sensor (source)

Technical Specification

The following table summarizes the technical specification of the Fermion Smoke Sensor GM-202B:

SpecificationValue
Sensor typeMEMS smoke detection sensor
Detected gasSmoke (also responds to EtOH)
Detection range10 – 1000 ppm
Supply voltage3.3 V – 5 V
Operating current<20 mA
Output signalAnalog voltage
Load resistance (RL)4.7 kΩ
SensitivityR₀ (in air) / Rₛ (in 200 ppm EtOH) ≥ 3
Operating temperature−10 °C to +50 °C
Operating humidity15 – 90 % RH (non-condensing)
Lifespan≥ 5 years (in air)
Dimensions13 × 13 × 2.5 mm

And here is a link to the Datasheet for the GM-202B sensor with additional technical data:

Fermion GM-202B Sensor versus MQ-2 Sensor

A common alternative to the Fermion GM-202B Smoke Sensor is the older MQ-2 Gas Sensor. In the following a short comparison of the two sensors.

Sensing Technology and Detection Mechanism

The GM-202B sensor uses MEMS metal-oxide semiconductor technology, where a micro-fabricated hotplate and gas-sensitive metal-oxide layer change resistance in response to VOCs and smoke with low power consumption and rapid thermal response. The MEMS fabrication results in a compact sensor element that reaches operating temperature quickly and consumes comparatively little heater power.

In contrast, the MQ-2 uses a bulk semiconductor gas sensing element (SnO₂) housed in a larger metal or bakelite can. It detects flammable gases and smoke by a change in resistivity of its sensing material when heated but requires a larger heater power and longer preheat time.

Operating Range and Sensitivity

The detection range for GM-202B is typically 10–1000 ppm for gases like propane or ethanol vapor and smoke, giving it manageable sensitivity for low-level smoke detection in air quality or alarm applications. Sensitivity is often expressed as the resistance ratio R₀/Rₛ ≥ 3 at 200 ppm test gas.

By contrast, the MQ-2 has a much wider detection range for flammable gases (≈300–10000 ppm) and a higher sensitivity benchmark (R₀/Rₛ ≥ 5 in 2000 ppm propane), indicating it is geared toward broader gas detection including combustible gas leaks, not just small concentrations of smoke.

Electrical Requirements and Heater Characteristics

A key practical difference is in power consumption. The GM-202B’s heater runs at about 2.5 V with ≤50 mW consumption, which helps keep the overall module power low and warm-up rapid.

The MQ-2’s heater runs at about 5 V with up to ≈950 mW consumption, meaning it needs significantly more power and a substantial warm-up period (often tens of minutes to hours before stable readings are obtained).

Circuit Integration and Output

Both sensors produce an analog output proportional to gas concentration via a voltage divider with a load resistor.

The GM-202B module typically uses a smaller load resistor (≈4.7 kΩ on integrated breakout boards) and can interface directly with low-voltage microcontroller ADCs like those on Arduino or ESP32 at 3.3–5 V logic levels.

The MQ-2 modules commonly include a potentiometer and comparator on the breakout board for digital threshold output, but when used with ADC inputs the load resistor may be ≈10 kΩ or more. The MQ-2 forms part of a simple voltage divider that requires calibration and often additional amplification for accurate readings.

Physical Size and Lifecycle

Physically, the MEMS GM-202B element is much smaller (≈5 × 5 × 1.55 mm on the bare sensor and ~13 × 13 × 2.5 mm on breakout) with lower overall power, and generally a long lifespan in clean air (≥5 years on breakout modules).

The MQ-2 sensor can be larger due to its conventional packaging and heater assembly, and while it also boasts a long nominal life, its high heater energy and bulk structure make it less optimized for low-power embedded designs.

Application Fit

Because of its low power and smaller detection range, the GM-202B is more appropriate for smoke detection and VOC monitoring where small concentrations are relevant and power is limited (e.g., battery-powered microcontroller projects).

The MQ-2 is more suited to flammable gas detection and environments where broad detection range and robustness to multiple gas types are valuable (e.g., LPG leaks, workshop gas alarms), at the cost of higher power and long preheat time.

In both cases, neither sensor outputs an absolute gas concentration without calibration. Both provide relative changes that must be interpreted against a baseline for each target application.

Connecting the Smoke Sensor to Arduino UNO

Connecting the sensor to an Arduino UNO is simple. Connect VCC to 5V (or 3.3V), GND to ground and A to the analog input A0 as shown below:

Connecting Smoke Sensor to Arduino UNO
Connecting Smoke Sensor to Arduino UNO

Code Examples

Reading Smoke concentration

In this first example we simply read the values measured by the sensor and print them to the Serial Monitor every second:

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

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

You will see values between 0 and 1023, depending on the amount of smoke in the environment.

If the sensor has not completely warmed up, you will see a continuously decreasing sequence of values on the Serial Monitor. After several minutes the measurements will stabilize. In my case at a value around 135.

If you then expose the sensor to smoke (or alcohol), you will see a sudden increase in the measurement value:

Since the sensor is not calibrated, you cannot use it to measure actual ppm (parts-per-million) or mg/m3 concentrations. However, you can use it to build a smoke alarm, which we will do in the next section.

Smoke Alarm with LED

The following code implements a simple smoke alarm. It switches an LED on if the measured smoke value exceeds a predefined threshold of 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);
}

I connected the LED with a 220 Ohm resistor to GPIO 13 as an alarm LED as shown below:

Connecting alarm LED to Arduino UNO

Note that for a reliable alarm system you may want to add a temperature and a humidity sensor as well, since the readings of the sensor are affected by temperature and a humidity. The figure below shows the dependency of the sensor resistance, which is proportional to the voltage the Arduino reads and the relative humidity:

Typical temperature/humidity characteristics (source)

Smoke Alarm with passive Buzzer

Instead of an LED you can also sound a buzzer as an alarm signal. In the following code a passive buzzer is activated if the measured smoke concentration exceeds the threshold:

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

The following picture shows you how to add the buzzer to the circuit. Start by connecting the negative terminal of the buzzer with GND of the Arduino (black wire). Then connect the positive terminal via a 100Ω resistor to GPIO 11 (red wire):

Connecting alarm buzzer to Arduino UNO
Connecting alarm buzzer to Arduino UNO

Make sure that the polarity of the buzzer is correct and that it is a passive buzzer that is connected to a PWM-able GPIO port. For more information see the Active and Passive Piezo Buzzers with Arduino tutorial.

If you have an active buzzer, you must use the previous LED alarm code, since it will not properly work with the tone() command.

Display Smoke Concentration on OLED

In this last example we display the measured smoke concentration values on a small OLED. The code prints “Smoke” and the value to the center of the display and updates the displayed value every 100ms:

#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 that you need the Adafruit_SSD1306 library to control the OLED. You can install it via the Library Manager as usual:

Adafruit_SSD1306 library installed in Library Manager
Adafruit_SSD1306 library installed in Library Manager

Connecting the OLED to the Arduino is easy. Connect SDA and SCL of the OLED to the A4 and A5 pins of the Arduino. As for the power supply: since the OLED can run on 5V, we can share the power supply lines. Connect VCC to 5V and GND to GND. The picture below shows the complete wiring:

Connecting OLED and Sensor to Arduino UNO
Connecting OLED and Sensor to Arduino UNO

If you need help with the OLED, have a look at the Use SSD1306 I2C OLED Display With Arduino tutorial.

Conclusion

In this tutorial you learned how to use the Fermion Smoke sensor with an Arduino UNO to detect smoke. The sensor can be easily used with other microcontrollers such as an ESP32 as well.

MEMS gas sensors have the advantage of being small, consuming very little power (< 20mA), and having a short warm-up time. However, they are still affected by ambient temperature and humidity.

Furthermore, the Fermion Smoke sensor is not calibrated and therefore cannot directly be used to measure actual concentrations in ppm units. In theory, you could calibrate the sensor yourself but in practice this would be difficult. DFRobot also offers calibrated sensors but they are larger and more expensive (link).

Note that there is an entire series of different MEMS sensors available. For an overview see the Review of the DFRobot Fermion MEMS Gas Sensor Series article and for specifics our dedicated posts:

If you have any questions feel free to leave them in the comment section.

Happy Tinkering 😉