Skip to Content

Fermion MEMS Carbon Monoxide CO Gas Sensor GM-702B with Arduino

Fermion MEMS Carbon Monoxide CO Gas Sensor GM-702B with Arduino

The Fermion: MEMS CO Gas Detection Sensor is a compact breakout-board sensor designed for detecting carbon monoxide (CO) gas using modern microelectromechanical system (MEMS) technology. It integrates a GM-702B MEMS sensing element that responds to CO concentrations in air by delivering an analog voltage proportional to gas presence.

CO is extremely poisonous and causes roughly 400 deaths annually in the U.S. Common sources include improperly maintained or used heating equipment, gas appliances, charcoal grills, and running engines in confined spaces. Because it is undetectable by human senses, a CO alarm is the only way to detect its presence.

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

Required Parts

You will need a Fermion CO 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 CO value on a display.

Fermion MEMS CO 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 Carbon Monoxide (CO) Sensor

The Fermion MEMS Carbon Monoxide (CO) Sensor breakout is built around a small MEMS gas sensing element. This element is a microelectromechanical structure coated with a proprietary sensing film that changes its electrical characteristics when exposed to CO molecules.

The breakout board includes supporting passive components and provides a single analog output signal. Power and ground are brought in through standard 3.3 V/5 V logic levels.

Sensing Principle

The sensing core uses MEMS technology to detect CO gas. This technology relies on the interaction between CO molecules and a chemically sensitive surface on the MEMS structure. When CO is present, the resistance of the sensing material changes.

The breakout board’s internal circuitry converts this resistance change into a proportional analog voltage at the output pin. There is no onboard digital processing, so the raw analog signal must be read and interpreted by the microcontroller.

Electrical Characteristics

The sensor operates from a supply voltage between 3.3 V and 5 V. Typical operating current is low, on the order of tens of milliamps, which allows use in battery-powered systems with proper power management.

The analog output voltage varies with gas concentration but is not referenced to calibrated units. The output must be sampled through an analog-to-digital converter on the host microcontroller.

Signal Behavior and Warm-Up

The sensor requires a short warm-up period after power is applied before readings stabilize. During this time, the MEMS element reaches a thermal and electrical equilibrium. After warm-up, the output voltage shifts in response to CO concentration changes.

Limitations

The sensor does not include onboard temperature or humidity compensation. These environmental factors can influence the analog output, so additional sensors may be used in a system requiring more stable measurements. Also, because the output is uncalibrated, absolute CO concentration estimates require external calibration against known reference levels.

Technical Specification

The following table summarizes the technical specification of the Fermion CO Sensor GM-702B:

ParameterSpecification
Sensing ElementGM-702B MEMS gas sensor
Target GasCarbon Monoxide (CO)
Detection Range5 ppm to 5000 ppm (typical)
Output SignalAnalog voltage
Operating Voltage3.3 V to 5 V DC
Operating Current< 20 mA (typical)
Interface TypeSingle analog output pin
Response TypeResistance change converted to voltage
Operating Temperature−10 °C to +50 °C
Operating Humidity15 % to 90 % RH (non-condensing)
CalibrationNo factory calibration provided

Pinout

Physically, the breakout for the sensor 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 CO Sensor GM-702B Board

Schematics

The following image shows the schematics of the Fermion CO Gas Sensor GM-702B board:

Schematics of Fermion CO Sensor GM-702B
Schematics of Fermion CO Sensor GM-702B (source)

You can see the voltage regulator, and the GM-702B sensor chip with a load resistor of 10K 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-702B Smoke sensor (source)

Technical Specification

The following table summarizes the technical specification of the Fermion CO Sensor GM-702B:

SpecificationDetail
Sensor ModelGM-702B
Detected GasCarbon Monoxide (CO)
Detection Range~5 ppm to 5000 ppm CO
Output TypeAnalog voltage (proportional/indicative)
Supply Voltage3.3 V – 5 V DC
Operating Current< 20 mA
SensitivityR₀(in air) / Rₛ(in 150 ppm CO) ≥ 3
Operating Temp.-10 °C to +50 °C
Operating Humidity15 % – 90 % RH (non-condensing)
Warm-Up TimeRecommended ≥ 5 min (longer after storage)
Life Expectancy≥ 5 years (in air)
Breakout Board Size~13×13×2.5 mm (PCB included)
Interface3-pin: A (analog out), VCC, GND
Typical ApplicationsCO leak alarms, environmental monitoring, safety detection systems

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

Fermion GM-702B CO Sensor versus MQ-7 CO Sensor

The Fermion MEMS Carbon Monoxide (CO) Sensor and the MQ-7 CO Gas Sensor are both commonly used in hobbyist applications for detecting carbon monoxide, but they differ in sensing principle, performance characteristics, and integration requirements.

Sensing Technology

The Fermion MEMS sensor uses a microelectromechanical systems (MEMS) sensing element that reacts to CO presence with a change in its electrical properties. This change is converted on the breakout board to a proportional analog voltage.

The MQ-7, by contrast, is a metal-oxide semiconductor (MOX) sensor. It relies on a heated tin-oxide surface whose resistance varies when CO molecules interact with the heated sensing layer. This mechanism means the MQ-7 typically has higher average power consumption than the Fermion MEMS sensor.

Power and Warm-Up

In terms of power and warm-up behavior, the MEMS sensor generally stabilizes more quickly and consumes less power because it does not drive a separate heater at high current.

The MQ-7, on the other hand, uses a periodic heater cycling scheme to achieve sensitivity and must be driven at specific voltages and timing to produce repeatable readings, which adds complexity in firmware and increases energy use.

Output

Both sensors provide an analog output that must be read by an analog-to-digital converter on a microcontroller like an Arduino or ESP32. However, neither sensor provides a calibrated digital concentration value out of the box.

Selectivity and Stability

In selectivity and stability, the MEMS sensor generally exhibits lower cross-sensitivity and better long-term baseline stability compared to MOX sensors like the MQ-7, which can respond to multiple reducing gases and are influenced by environmental humidity and temperature.

Summary

Overall, the Fermion MEMS CO sensor tends to be better suited to projects that value low power, faster response, and simpler integration, while the MQ-7 is attractive for basic CO detection at lower cost but demands more careful power control, calibration, and environmental compensation in firmware.

Connecting the Fermion CO 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 CO Sensor to Arduino UNO

Code Examples

Reading Carbon Monoxide 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 Carbon Monoxide in the environment.

If the sensor has not completely warmed up, you will see a continuously decreasing sequence of values on the Serial Monitor. See below:

After several minutes the measurements will stabilize. In my case at a value around 130. You can test the sensor by breathing on it. 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 Carbon Monoxide alarm, which we will do in the next section.

Carbon Monoxide Alarm with LED

The following code implements a simple Carbon Monoxide alarm. It switches an LED on if the measured CO value exceeds a predefined threshold of 160:

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

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. Alternatively you could also use a sliding window to compensate for the sensor drift due to temperature and humidity.

Carbon Monoxide 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 CO concentration exceeds the threshold:

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

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 Carbon Monoxide Concentration on OLED

In this last example we display the measured smoke concentration values on a small OLED. The code prints “CO” 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(50, 10);  
  oled.print("CO");

  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 CO sensor with an Arduino UNO to detect Carbon Monoxide. 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 Carbon Monoxide sensor is not calibrated and therefore cannot directly be used to measure actual concentrations in ppm units.

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 😉