I got the Grove V2 multichannel gas sensor and have been trying to get accurate values in ppm. Using the V2 library they provide (https://github.com/Seeed-Studio/Seeed_Multichannel_Gas_Sensor/archive/master.zip). I’m getting values that are way off, so I suspect the values aren’t actually being returned in ppm, but I don’t know how to convert them. Either I need new code, or my sensor is not working properly. Here are the values I’m getting:
VOC: ~300
NO2: ~450
CO: ~500
Ethyl Alcohol: ~389
These would all be pretty harmful levels of the gasses and I am in a low air pollution environment.
I’m having the same problem, I was able to mirror code from c++ to Elixir (nerves), since clear specs are missing, it’s not clear wich units am I reading.
It’s also unclear how long preheat must be done and on which schedule it should be done : Only for the beginning of life of the product, or preheat should be done before each measure ?
After you get the INT (and do the logic check on the ‘value_max’) for the specific sensor, then you need to pass it to the ‘gas.calcVol(int value)’ function which will return a float value.
Hi Kevin,
Thanks for taking the time to try and point out that all of us are just “doing it wrong”…
However, I have already been using that exact code sequence you suggested and linked to, and it is simply not working. The values outputted using the float value calculated from gas.calcVol() are just not right. So far, this problem is still not solved and at this point I believe it can only be from a faulty sensor.
The gas.calcVol() takes the raw counts returned by the sensor and converts it to a voltage, not the gas concentration. It’s the same calculation for all 4 detectors, and is based on the a/d resolution and V ref.
From the Multichannel_Gas_GMXXXX.h file in the Seeed library for this sensor:
inline float calcVol(uint32_t adc, float verf = GM_VERF, int resolution = GM_RESOLUTION) {
return (adc * verf) / (resolution * 1.0);
};
where GM_VERF is the V ref for the A/D and is set as
Hello. I am currently implementing a LORAWAN based Gas Sensing Solution using the Multichannel V2 Gas sensor + S2110 Sensor Builder + S2100 Data Logger.
As per the S2110 Sensor Builder firmware, the sensorMultiGas.hpp file mentions that the unit of gas measurement is in ppm as shown below
enum
{
GAS_NO2 = 0x00, // unit : PPM
GAS_C2H5OH = 0x01,
GAS_VOC = 0x02,
GAS_CO = 0x03,
MAX
};
This is being calculated as per the following snippet