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

Arduino Uno

USB Cable for Arduino UNO

Dupont Wire Set

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:
| Parameter | Specification |
|---|---|
| Sensing Element | GM-702B MEMS gas sensor |
| Target Gas | Carbon Monoxide (CO) |
| Detection Range | 5 ppm to 5000 ppm (typical) |
| Output Signal | Analog voltage |
| Operating Voltage | 3.3 V to 5 V DC |
| Operating Current | < 20 mA (typical) |
| Interface Type | Single analog output pin |
| Response Type | Resistance change converted to voltage |
| Operating Temperature | −10 °C to +50 °C |
| Operating Humidity | 15 % to 90 % RH (non-condensing) |
| Calibration | No 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:

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

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

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:

Technical Specification
The following table summarizes the technical specification of the Fermion CO Sensor GM-702B:
| Specification | Detail |
|---|---|
| Sensor Model | GM-702B |
| Detected Gas | Carbon Monoxide (CO) |
| Detection Range | ~5 ppm to 5000 ppm CO |
| Output Type | Analog voltage (proportional/indicative) |
| Supply Voltage | 3.3 V – 5 V DC |
| Operating Current | < 20 mA |
| Sensitivity | R₀(in air) / Rₛ(in 150 ppm CO) ≥ 3 |
| Operating Temp. | -10 °C to +50 °C |
| Operating Humidity | 15 % – 90 % RH (non-condensing) |
| Warm-Up Time | Recommended ≥ 5 min (longer after storage) |
| Life Expectancy | ≥ 5 years (in air) |
| Breakout Board Size | ~13×13×2.5 mm (PCB included) |
| Interface | 3-pin: A (analog out), VCC, GND |
| Typical Applications | CO 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:

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:

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

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:

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:

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:
- Fermion MEMS VOC Gas Sensor GM-502B with Arduino
- Fermion MEMS Smoke Sensor GM-202B with Arduino
- Fermion MEMS Odor Sensor GM-512B with Arduino
- Fermion MEMS Multi-Gas Sensor MiCS-5524 with Arduino
If you have any questions feel free to leave them in the comment section.
Happy Tinkering 😉
Stefan is a professional software developer and researcher. He has worked in robotics, bioinformatics, image/audio processing and education at Siemens, IBM and Google. He specializes in AI and machine learning and has a keen interest in DIY projects involving Arduino and 3D printing.

