Kemp’s Blog

A technical blog about technical things

GSS C20 CO2 Sensor

This post discusses the C20 CO2 sensor from GSS (Gas Sensing Solutions). It appears to be distributed by Air Monitors and Europa Environmental as the “Miniature CO2 sensor”. Specifically, I will discuss the differences between the datasheet and the actual implementation on the device.

Note that I am not considering the carrier/interface board to be a separate entity to the sensor itself as they are purchased as a single unit and treated the same way in the datasheet. Also note that I am not an authoritive source on this and the implementation details could change at any time. I am simply recounting my own experiences with the specific units I worked with.

Edit since original publication:
The datasheet for the device has been updated and expanded into several documents available here. It appears that the device itself has also been updated in several ways, so confirm that my advice is applicable before using it.

Before I go any further, I should also mention that their tech support were very helpful in ironing out any issues I had interfacing to and using the sensor.

The differences I encountered were during interfacing this sensor (on separate occasions) to a Gumstix Verdex device and to a PIC18F microcontroller. They are not differences which affect the usefulness of the device, but they may catch you unexpectedly. There are two main differences I have observed. I also have some additional notes related to usage of the device.

Connector pin-out

To my knowledge, all of the alternate connection points are as stated in the datasheet. I have confirmed this for the alternate points for power and serial to each side of the main connector (standard pin headers fit here quite nicely), but not for the alternate ground points as I’ve never had to use those. The functional difference observed is pin 2 of the connector, which is stated in the datasheet to be a 0v (GND) connection. This is not the case, it is not connected to the GND rail on the board (nor used for any purpose as far as I can tell), and pin 10 should be used instead. This has been confirmed by their tech support, but it’s good practice not to rely on this behaviour (the pin being unconnected) as it could be changed at any time, either to bring it in line with the datasheet or to use the pin for a different purpose.

Communication data format

This difference is related to the format used for sending data to the host device. This is stated in the datasheet as


When in fact it appears to be


(with underscores representing spaces). Not a problem if you read a full line at a time and search for the value identifiers, but potentially a problem if you are reading samples in fixed size blocks, or if you are trying to save processing time by simply extracting a specific range of characters from the sample.

As a minor aside, I have also had problems obtaining the LED signal strength value (code “O”). The two temperature values are given as described. Admittedly the LED signal strength and the temperatures are not very useful due to being the raw ADC output, not converted or calibrated in any way. However, it is a discrepancy between the datasheet and the device and thus is included here.


The sensor will need calibrating before use. Their tech support says that zeroing should be enough and the span value shouldn’t need adjustment from the default. I’ve found this to be 50/50 though, best to always check both. My procedure for calibration is as follows:

  1. Turn the sensor on, set the filter response to 16, the span to 8192, and allow to warm up for 3 minutes.
  2. Expose to 100% nitrogen flow for 1 minute.
  3. Send “Zero in nitrogen” command or apply signal to relevant pin.
  4. Expose to high CO2 concentration flow (around the upper end of your intended sensing range) for 1 minute or until value has stabilised.
  5. Calculate correct span value and send to device.

Other notes

Apparently the concentration in the sensing head should diffuse to 90% of the final value within 4 seconds. I assume this is without any sort of pumping or direct flow.

External physical pressure on the sensing head (i.e. if it is clamped or pressed against something) will affect the readings gathered. If it is calibrated in the same condition it will be used then this will be ok. If calibrated and then put under pressure, it will return to calibration once the pressure is removed.