Skip to Content

Grove Multichannel Gas Sensor V2 with Arduino

Grove Multichannel Gas Sensor V2 with Arduino

In this tutorial you will learn how to use the Grove Multichannel Gas Sensor V2 with an Arduino UNO to detect gases. Note that there are two versions (V1, V2) of the sensor. Here we are going to use the V2 version, which can be identified easily by having for sensor elements.

The Grove Multichannel Gas Sensor V2 detects carbon monoxide (CO) and is also sensitive to nitrogen dioxide (NO₂). In addition, it responds to ethanol (C₂H₅OH), which is often used as a reference for alcohol gases. The module can also detect a range of volatile organic compounds (VOCs), such as those released from solvents, paints, or cleaning agents.

Note, however, that this sensor is intended for qualitative measurements. It can be used to monitor trends or detect relative changes in air quality but it is not calibrated to measure exact gas concentrations.

Required Parts

You will need a Grove Multichannel Gas Sensor V2 by Seeed Studio. Then you will need a microcontroller to read data from the sensor. Any Arduino or ESP32 will work but in this tutorial we will use an Arduino UNO. Also some cables and maybe a breadboard will come in handy.

Grove Multichannel Gas Sensor V2

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 the Grove Multichannel Gas Sensor V2

The Grove Multichannel Gas Sensor V2 integrates four independent gas sensing elements on a single board. These elements are labeled GM-102B, GM-302B, GM-502B, and GM-702B. Each sensing element has a different sensitivity curve and reacts to a different group of gases. The picture below shows the top of the sensor board with the four gas sensors clearly visible:

Front of Grove Multichannel Gas Sensor V2
Front of Grove Multichannel Gas Sensor V2 board

The module includes an STM32F030 microcontroller. This microcontroller handles sensor control, signal conditioning, and communication. It abstracts the low-level analog behavior of the sensors and provides processed data to the host system. You can find the processor on the back of the board:

Back of Grove Multichannel Gas Sensor V2 board

Communication Interface

The sensor uses an I2C interface for communication. This makes it compatible with Arduino, ESP32, and other microcontroller platforms. The default I2C address is 0x08, but you can also set a different I2C address.

Grove connector with I2C and power

The board comes with a Grove connector that provides power and I2C signals in a single cable. Since the Arduino UNO has no Grove connecter you can use Dupont cables to make the connection:

Dupont pins connected to Grove Connector

Electrical Characteristics

The module operates with a supply voltage between 3.3 V and 5 V. Each sensing element includes an internal heater. The heater maintains the required operating temperature for the sensing material. Typical heater voltages are around 2.0 V to 2.5 V depending on the sensor type but automatically provided by the board.

Note that the heaters consume power continuously during operation. This results in a noticeable warm-up phase and steady-state power consumption.

Gas Sensing Elements

Each of the four sensors is based on metal oxide semiconductor technology. The sensing material changes its resistance when exposed to gases. The resistance variation is used to estimate gas presence. The following table shows the main characteristics of the four sensors:

SensorTarget GasesTypical Detection RangeSensitivity Characteristics
GM-102BNO₂, oxidizing gasesLow ppm range (sub-ppm to tens of ppm)High sensitivity to oxidizing gases, fast response
GM-302BEthanol, VOCs1 ppm to 500 ppmStrong response to alcohol gases and organic vapors
GM-502BVOCs, air pollutants1 ppm to 500 ppmBroad VOC sensitivity with different curve than GM-302B
GM-702BCO, combustible gases5 ppm to 5000 ppmDesigned for higher concentration gases like CO

GM-102B Sensor

The GM-102B sensor is designed for detecting oxidizing gases, with a strong sensitivity to nitrogen dioxide. The sensor is optimized for the low ppm range and can respond to very small changes in gas levels. Its resistance changes significantly in the presence of NO₂, which makes it suitable for air quality monitoring applications. The sensor also reacts to other oxidizing gases, so the output must be interpreted together with the other channels. For more details see the datasheet linked below:

GM-302B Sensor

The GM-302B sensor targets volatile organic compounds and alcohol gases such as ethanol. The typical detection range is from about 1 ppm to 500 ppm. This sensor shows a strong response to organic vapors, making it useful for detecting solvents, fumes, and indoor air pollutants. Its sensitivity curve differs from the GM-502B, which allows better distinction when both sensors are used together. For more details see the datasheet linked below:

GM-502B Sensor

The GM-502B sensor is also sensitive to volatile organic compounds, but it has a different response profile compared to the GM-302B. The detection range is typically in the same order of magnitude, from low ppm to several hundred ppm. The difference lies in how the resistance changes for specific gases, which provides additional information when analyzing the combined sensor outputs. For more details see the datasheet linked below:

GM-702B Sensor

The GM-702B sensor is designed for detecting reducing gases, especially carbon monoxide. It supports a much higher detection range, from a few ppm up to several thousand ppm. The sensor uses a heating cycle to maintain proper operating conditions, which may involve different heater voltage levels during operation. Its response is slower compared to low-range sensors but more suitable for higher gas concentrations. For more details see the datasheet linked below:

Warm-up Time

The sensor requires a long preheating phase before accurate measurements are possible. The recommended warm-up time ranges from 24 to 72 hours depending on storage conditions.

Measurement Behavior

The module provides qualitative measurements rather than precise quantitative values. Each sensor responds to multiple gases, and there is significant overlap between sensitivity curves.

Gas identification requires analyzing the combined response of all four channels. The pattern of resistance changes across the sensors can be used to infer the presence of specific gases.

Note that environmental factors such as temperature and humidity affect the readings. You will need to compensate for temperature and humidity to achieve stable readings.

Technical Specification

The following table summarize the technical specification of the Grove Multichannel Gas Sensor V2:

ParameterValue
MicrocontrollerSTM32F030
Sensing TechnologyMEMS metal oxide semiconductor
Number of Sensors4 independent channels
Sensor TypesGM-102B, GM-302B, GM-502B, GM-702B
Detectable GasesCO, NO₂, ethanol, VOCs (and others via pattern response)
InterfaceI2C (Grove connector)
Default I2C Address0x08
Supply Voltage3.3 V to 5 V
Power Consumption< 150 mW
Output TypeDigital (processed sensor values)
Measurement TypeQualitative (trend detection)
Response Time≤ 30 seconds
Recovery Time≤ 60 seconds
Preheat Time24 to 72 hours (depending on storage)
Operating Temperature-20 °C to 50 °C
DimensionsApprox. 40 mm × 20 mm

Connecting Grove Multichannel Gas Sensor V2

Connecting the sensor to an Arduino is easy. Start by connecting A4 (SDA) and A5 (SCL) of the Arduino to the SDA and SCL pins of the sensor. Next connect GND to GND and 5V (or 3.3V) to VCC. The picture below shows the complete wiring:

Connecting Grove Multichannel Gas Sensor V2
Connecting Grove Multichannel Gas Sensor V2

As mentioned before, since the Arduino UNO has no Grove connector you need to use Dupont cables to connect the sensor to the Arduino UNO:

Installing the Multichannel_Gas_GMXXX Library

To read data from the Grove Multichannel Gas Sensor V2 you will need to use Multichannel_Gas_GMXXX Library. To install it download the Multichannel_Gas_GMXXX Library as ZIP file (Seeed_Arduino_MultiGas-master.zip) to your computer.

Then open a new Sketch, go to Sketch -> Include Library -> Add .ZIP Library … to install the downloaded ZIP library (Seeed_Arduino_MultiGas-master.zip):

Reading data from Grove Multichannel Gas Sensor V2

The following code demonstrates how to use the Grove Multichannel Gas Sensor V2 with an Arduino board. The sensor can detect multiple types of gases simultaneously, and the code reads the values from each gas sensor and prints them to the Serial Monitor every two seconds.

#include <Wire.h>
#include <Multichannel_Gas_GMXXX.h>

GAS_GMXXX<TwoWire> sensor;

void setup() {
  Serial.begin(9600);
  sensor.begin(Wire, 0x08);  // hardware I2C
}

void loop() {
  static uint32_t val;

  val = sensor.getGM102B();
  Serial.print("GM102B:");
  Serial.println(val);

  val = sensor.getGM302B();
  Serial.print("GM302B:");
  Serial.println(val);

  val = sensor.getGM502B();
  Serial.print("GM502B:");
  Serial.println(val);

  val = sensor.getGM702B();
  Serial.print("GM702B:");
  Serial.println(val);

  delay(1000);
}

Imports

At the beginning, the code includes two libraries. The Wire.h library is the Arduino’s built-in library for I2C communication, which allows the Arduino to communicate with the sensor over the I2C bus. The Multichannel_Gas_GMXXX.h library provides the necessary functions to interact with the Grove Multichannel Gas Sensor V2.

#include <Wire.h>
#include <Multichannel_Gas_GMXXX.h>

Sensor Object

Next, the code creates an instance of the sensor object using a template class. The GAS_GMXXX<TwoWire> sensor; line declares a sensor object that will use the Wire I2C interface to communicate with the hardware.

GAS_GMXXX<TwoWire> sensor;

Setup Function

In the setup() function, the serial communication is initialized at a baud rate of 9600 using Serial.begin(9600);. This allows the Arduino to send data to the Serial Monitor for debugging or monitoring purposes.

Then, the sensor is initialized with sensor.begin(Wire, 0x08);. This function starts the sensor communication over the hardware I2C bus (Wire) and specifies the I2C address of the sensor, which is 0x08 in this case.

void setup() {
  Serial.begin(9600);
  sensor.begin(Wire, 0x08);  // hardware I2C
}

Loop Function

The loop() function runs repeatedly after the setup is complete. Inside the loop, a static variable val of type uint32_t is declared to store the sensor readings.

The code then reads the gas concentration values from four different channels of the sensor using the functions getGM102B(), getGM302B(), getGM502B(), and getGM702B(). Each function corresponds to a specific gas sensor element embedded in the multichannel sensor.

After reading each value, the code prints the gas type label followed by the measured value to the Serial Monitor using Serial.print() and Serial.println(). This allows you to observe the sensor readings in real time.

Finally, the program waits for 2000 milliseconds (2 seconds) before repeating the process, which controls the update rate of the sensor readings.

void loop() {
  static uint32_t val;

  val = sensor.getGM102B();
  Serial.print("GM102B:");
  Serial.println(val);

  val = sensor.getGM302B();
  Serial.print("GM302B:");
  Serial.println(val);

  val = sensor.getGM502B();
  Serial.print("GM502B:");
  Serial.println(val);

  val = sensor.getGM702B();
  Serial.print("GM702B:");
  Serial.println(val);

  delay(2000);
}

Example Output

If you run this code, you will see the values measured by the four different gas sensors printed to the Serial Monitor:

GM102B:415
GM302B:769
GM502B:725
GM702B:921
GM102B:415
GM302B:769
GM502B:725
GM702B:921
GM102B:415

As mentioned before, these are not calibrated gas concentrations. However, you can use these values to detect relative changes in gas concentration.

For instance, the picture below shows the measurements of the four sensors displayed on the Serial Plotter. You can see a clear spike, for the GM102B sensor, after I sprayed Isopropyl alcohol close to it:

Don’t spray any chemical directly on the sensor, since it will damage it!

Conclusions

In this tutorial you learned how to use the Grove Multichannel Gas Sensor V2 with an Arduino UNO to detect various gases. The sensor can be easily used with other microcontrollers such as an ESP32 as well.

Additional information about the sensor can be found at Seeed Studio’s Wiki and the Github repo for the library. For other MEMS gas sensors have a look at the following tutorials:

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

Happy Tinkering 😉