Example of a Nitrox & CO analyzer. The CO is increasing while smoke enters the tube with the sensors. Using air from my scuba tanks results in a neat 0.0ppm (hopcalite filter installed).
Part list:
- Arduino Uno/Nano
- ADS1115 analog-digital converter
- OLED or TFT display
- Citicel AO2 or another oxygen cell
- ZE07-CO carbonmonoxide sensor
- 9V battery
There's one last thing which I haven't figured out 100%: linear drift. Theoretically, a cell that provides 10.5mV in 20.9% oxygen, should provide 50.24mV in 100% oxygen. In real life, the cell provides 49mV in 100% oxygen:
There should be a correction factor. To do this, I programmed a 2-point-calibration:
First calibration at startup, when the analyzer is in air.
Second calibration when 100% oxygen is flowing over the cell. This value is stored in the eeprom of the Arduino.
With these two calibration points (airVoltage and oxygenVoltage in the calculation below), the correction can be calculated, to make the purple line behave like the theoretical green line. My attempts for oxygen levels above 21%:
correction = (100 / oxygenVoltage) - (20.9 / airVoltage)
oxygenPercentage = measuredVoltage * (20.9 / ( airVoltage - correction) )
This results in a displayed percentage that is within 0.1% of what a Divesoft and Analox analyzer show. But if any bright mathematics wizard can doublecheck and improve my idea, please do!
Anyone?