Temp, Humidity CO2 sensor and library.

Just calibrate via fresh air which gives a value of about 380, maybe your in an area of high co2, I have a main road next to my house with a lot of traffic and average values were 420-450, are your values wildly out of range?

What program did you use to display the graphs of the temperature, humidity, co2?


I'm using a COZIR™ Wide Range Sensor, http://www.gassensing.co.uk/wp-content/uploads/2013/02/COZIR_-WideRange_-Datasheet_GSS.pdf, and I tried to use the cozir.h library as mentioned in the first post, but without success. Must I observe some particular attention? I'm tryng it with only usb cable attached to my Arduino UNO, perhaps I need an external 12V input for Arduino? I need only 3.3v to power the sensor.

I receive nothing from sensor, all zeroed values...

I tried also the sample from Cozir for this sensor to read byte-to-byte from serial but I receive only 255 and never 0x0A for end transmission.

please help me thx.


One often occuring problem with rs322 devices is that rx and tx need to be reversed. Did you try that?

Furthermore the sensor high bit is only 3.3Volt. The UNO needs at least 4.5 volt to recognize it as a HIGH signal. Check this with a voltmeter.
You might need a 3.3<->5 voltage converter for this.

Furthermore you could check if the analog out gives a (changing) voltage. Can you check?

Hi robtillaart

which pin I could check for analog voltage?

I have an external max3232 interface, which pins I must connect? I found that:

sensor tx: t1n sensor rx: r1out arduino tx: r1n arduino rx: t1out

it's correct? I receive nothing :-(

which pin I could check for analog voltage?

according to - http://www.gassensing.co.uk/wp-content/uploads/2013/02/COZIR_-WideRange_-Datasheet_GSS.pdf -

pin 9 is analogue

I receive nothing :frowning:

A voltmeter should be able to detect a signal from the TX pin of the sensor.

this is the way to connect serial devices.
sensor TX → Arduino RX
senosr RX ← Arduino TX

(disclaimer, I don’t have this sensor myself)

Hi robtillaart,

I connected the sensor as you hint, with 5v instead of 3.3v and it works correctely.


Good to hear that!

If you have remarks wrt the lib please post it in this thread that might be things missing, buggy, etc ;)

Does anybody have a picture of the inside of the enclosure or DirtGambit, would it be too much trouble to see the inside of the box? Also, does anybody have a link for that enclosure?


You can send him a PM with your request...

Hi DirtGambit ,
I have some difficulties to work with Cozir unit, to change mode and try in Mode2.
I try to send this lines : mySerial.print(“K 2\r\n”);
and then verify cozir received the message, expecting Response: “K #\r\n” like explain in " cozir software user’s guide"
to test the response, I proceed like following:

//essai pour verifie rchangement de mode
while(buffer[ind-1] != 0x0A)
buffer[ind] = mySerial.read();

for(int i=0; i < ind+1; i++)
but the response is
? ? ?
So, should it be possible to have your library to understand how it works?
Best regards

Hi DirtGambit,

I have copied your library and your code, and my Arduino uno is happy with the code. I have attached the sensor to my arduino how you did. But when i look at the readings, they are just repeated every 0.5 Seconds and the co2, humidity and temperature reading first 3 digits are always the same.

Can you please suggest what i could be doing wrong

thank you very much!!

a link from the manufacturer - schematic + simple code see - http://www.co2meters.com/Documentation/AppNotes/AN128-%20Cozir_Arduino.pdf -

I don't get it to work, I hope someone can point out what's going wrong.

The sample sketch provided by Cozir, as posted earlier here, gives me weird values:

Co2 = ovf ppm
Co2 = ovf ppm
Co2 = ovf ppm
Co2 = ovf ppm
Co2 = -1152925184.00 ppm
Co2 = -1152925184.00 ppm
Co2 = ovf ppm
Co2 = ovf ppm
Co2 = ovf ppm
Co2 = ovf ppm
Co2 = ovf ppm
Co2 = ovf ppm
Co2 = ovf ppm
Co2 = ovf ppm
Co2 = ovf ppm
Co2 = ovf ppm
Co2 = -4208868864.00 ppm
Co2 = -4208868864.00 ppm
Co2 = ovf ppm

At first I didn't even get these values, but in the code Rx and Tx seem to be exchanged. Just switch the wires if you get no results at all.

I also tried the sketch in the first post of this topic the library 1.03 by Rob Tillaart & Michael Hawthorne, nothing happens. When I use the same sketch with the old library that's attached with the first post, I get this on my monitor:

Celcius : 0.00
Fahrenheit : 32.00
Humidity : 0.00
CO2 : 0
Digital Filter : 0

Sometimes after a reset, the values are a bit different, I think due to calibration or lack thereof:

Celcius : 0.20
Fahrenheit : 32.36
Humidity : 0.20
CO2 : 2
Digital Filter : 2

I uncommented the line below, because I read the sketch is supposed to work with polling and the default mode is streaming. The line implicates it's used to enable polling:


However, with the other line activated, to set streaming, I get similar readings:

Celcius : 0.10
Fahrenheit : 32.18
Humidity : 0.10
CO2 : 1
Digital Filter : 1

As I still have no such sensor (my wishlist is too long) I cannot replicate your problem, sorry

Hey there! I need assistance on my project using the COZIR sensor.

The first thing I did was hook up the sensor to my arduino and tested the sample code found on the COZIR website but I am getting the same results as Toledor. I would like the sensor to output co2, temp, and humidity readings.

Question for Dirt Gambit and Jon:

How do I use your C library in my arduino sketch? Is there a certain directory I need to save the library in? When I try to run the sketch that you had posted at first, I get several errors:

test1.ino:2:20: error: cozir.h: No such file or directory
test1:5: error: ‘COZIR’ does not name a type
test1.ino: In function ‘void setup()’:
test1:7: error: redefinition of ‘void setup()’
Sen_design:32: error: ‘void setup()’ previously defined here
test1.ino: In function ‘void loop()’:
test1:15: error: redefinition of ‘void loop()’
Sen_design:42: error: ‘void loop()’ previously defined here
test1:17: error: ‘czr’ was not declared in this scope

Help would be so much appreciated :slight_smile:

about installation of libraries - http://arduino.cc/en/Guide/Libraries -

should be enough to get things compiling.

Thanks for the quick response Rob! I got the code to work in conjunction with the library however I seem to have the same issue that Toledor is having. My readings are :

Celcius : 0.20 Fahrenheit : 32.36 Humidity : 0.20 CO2 : 2 Digital Filter : 2

There is no change to these results, any idea what the cause might be?

Also the polling mode doesn't seem to be working properly . I un-commented the line which allowed the CZR_POLLING mode, however the code still spits out readings infinitely.

Please disregard my last post I just needed to switch my Rx and Tx to pins 3 and 2 on my arduino board to match with the code :cold_sweat:

However I would still like to operate in polling mode. I am getting a constant flush of data from the sensor even though I am attempting to operate in polling mode. Here is my sketch:

#include <SoftwareSerial.h>
#include "cozir.h"

SoftwareSerial nss(3,2);
COZIR czr(nss);

void setup()

void loop()
  float t = czr.Celsius();
  float f = czr.Fahrenheit();
  float h = czr.Humidity();
  int c = czr.CO2();
  int digi = czr.GetDigiFilter();
  Serial.print("Celcius : ");Serial.println(t);
  Serial.print("Fahrenheit : ");Serial.println(f);
  Serial.print("Humidity : ");Serial.println(h);
  Serial.print("CO2 : ");Serial.println(c);
  Serial.print("Digital Filter : ");Serial.println(digi);    

Notice I un-commented the line where CZR_POLLING is. I may be going about the whole process wrong though…
Any ideas?

apparently your code always return 2. (Fahrenheit is a 0.2Celsius converted)

I peeked into the library and saw that there are open ends e.g. in the request function (which is at the core)

I have attached a datasheet with another Arduino program, you might give that a try.

AN128- Cozir_Arduino.pdf (106 KB)