General ArduinoGravity

SEN0471 - NO2 Sensor Temperature Compensation

userHead ChronovaEngineering 2024-08-11 08:10:46 114 Views0 Replies

Dear DFRobot,

 

I'm trying to make sense of the temperature compensation for the SEN0471 - NO2 Sensor.

 

This is the temperature compensation code from the Arduino library:

 

case DFRobot_GAS::NO2:
         if (((_temp) > -20) && ((_temp) <= 0)){
           Con = ((Con / (0.005 * (_temp) + 0.9) - (-0.0025 * (_temp) + 0.005)));
         }else if (((_temp) > 0) && ((_temp) <= 20)){
           Con = ((Con / (0.005 * (_temp) + 0.9) - (0.005 * (_temp) + 0.005)));
         }else if (((_temp) > 20) && ((_temp) <= 40)){
           Con = ((Con / (0.005 * (_temp) + 0.9) - (0.0025 * (_temp) + 0.1)));
         }else{
           Con = 0.0;
         }
         break;

 

Using these calculations, if I plot the corrected NO2 concentration against temperature, using a raw reading of 0.2 ppm, this is the graph I get:

There's quite a significant jump at 20℃, which seems odd. Having worked with other similar sensors, I wouldn't expect to see such linear temperature compensation either. Likewise, it's strange that the corrected values are allowed to go negative if the NO2 concentration is low and the temperature is warm. 

 

I tried looking up the sensor datasheets for the ZE03-V13 sensor too but I can't find any further information about temperature compensation. On the Winsen ZE03 product page, it says “ It is with built-in temperature sensor to make temperature compensation, which makes it could detect the gas concentration accurately.” which suggests the temperature compensation might be done automatically inside the sensor.

 

Could you provide some more information about how the temperature compensation was derived and/or point me to a datasheet showing the temperature vs measured concentration curves for the sensor?

 

Thanks in advance!