I use the MiCS5524 gas sensor, mainly because it is sensitive to carbon monoxide. Carbon monoxide is a highly toxic, colorless, odorless, and tasteless gas. The gas sensor can also detect other gases, but except for hydrogen, our sense of smell can detect and assign them with the exception of methane, propane, and iso-butane, which smell very similar. Here is an excerpt from the data sheet showing the resistance Rs as a function of the concentration of the various gases:
In the laboratory, a steady stream of carbon monoxide can be produced by dropping formic acid into warm, concentrated sulfuric or phosphoric acid:
That will help us to calibrate the sensor. In fact, we need a second point to calculate the straight-line equation. The sensor must be aged for 24 hours before any characterization or calibration. That is, it must run in clear air for 24 hours.
The two-point form of the linear equation is given by:
y is thereby the analogRead() value and x is the concentration. To calculate the concentration, we need to solve the linear equation for x:
The experimental setup for calibration was as follows. I used 96% sulfuric acid and 70% formic acid. As soon as the formic acid comes into contact with the sulfuric acid, carbon monoxide is produced:
The highest analogRead() value I obtained was 1005 in the carbon monoxide stream. In clean air, the analogRead() value is about 25. If we assume that an analogRead() value of 25 corresponds to 1ppm and an analogRead() value of 1005 corresponds to 1000ppm, we can plug the numbers into the straight line equation and get:
Of course, the whole thing is not particularly accurate, but I'll settle for it for now.