I’m working with air quality monitor and using this quite easily available module/adapter: https://www.aliexpress.com/item/CJMCU-MICS-6814-Air-Quality-CO-VOC-NH3-Nitrogen-Oxygen-Gas-Sensor/32762216430.html
It’s main and only sensor component is MICS-6814: https://www.mouser.fi/datasheet/2/18/1143_Datasheet-MiCS-6814-rev-8-1144828.pdf
Using clone Mega2560 and reading values through serial monitor. Using old ATX-PSU as a power supply, stripped one IDE-power connector to get +12V, +5V and grounds. Expecting to ground to be common on PSU side, so didn’t wire them together on prototyping board.
I’m having very hard time trying to find anyone who has wired this particular model to Arduino boards and supplied photos of working configuration to the internet. Mostly I can find information about Grove-boards with I2C-communication (and their inbuilt weaknesses). Found some comments saying: “Just wire it up, you silly!”, meaning connecting adapter’s gas-labeled pins straight to Arduino’s analog ports and power up the board.
So tried to wire it like that (attached picture, point 1.), but only input I got on analog ports was just noise on level about 20/1024, (0.05V). Could not get sensor to react to tobacco smoke, gas stove nor alcohol.
Next I found this project: ESP32, PMS5003, BME280, MICS6814 Sensor Build - K. Stobbe
, which uses exactly same adapter board, but with 3.3V ESP32-board. His schematic includes pull up resistors for analog lines:
, so I gave it a shot and included 47kOhm pull ups to every gas channel (attached picture, point 2.). Now I got readings which made sense and 2 out of 3 sensors reacted to alcohol as expected. Clean air readings were about CO:950/1024, NH3: 900/1024 and NO2 200/1024.
Anyway, I was still unsure if I’m using the sensor the right way, so read these documents: https://www.cdiweb.com/datasheets/e2v/Load%20resistance%20for%20MiCS%20sensors%20measurements.pdf
According to those, I should (?) try to set basic level of readings to VCC/2, so I tweaked with pull up resistors a bit and changed CO-pull up to 680kOhm, NH3-pull up to 470kOhm and NO2-pull up to 20kOhm to get all the channels’ analog input near 500/1024.
I used Nis Wechselberg’s MICS-6814-I2C-library and stripped all the I2C-parts off to get easy start on conversions and calibration (this modified source attached). I got readings like NH3:1ppm, CO:5ppm and NO2:0.15ppm. NH3- and CO-sensors react to alcohol (60% et.) well: analog read diving to 50/1024 and ppm going up to 300, so good reaction on these. Anyhow NO2 value reacts a bit to alcohol (falls to 0.1ppm, shouldn’t), but not at all to nearby gas stove (below 20cm) nor daily fluctuation due city traffic (which should make figures double on heavy traffic hours, but still should be well below 0.1ppm at most.) Done pre-heating for few days now.
Datasheet tells me to resize pull down (load) resistors to make analog input = VCC/2 on normal level, but I can’t figure out how to do it with this adapter board, so had to go with pull up -option. I tried to look at components of the adapter board and found three resistors: 27 Ohm, 120 Ohm and 820 Ohm, which most certainly are heaters’ resistors. Then there’s two small yellow SMD-components which I can’t identify, but I guess they are capacitors (of unknown value). I’m pretty sure there’s no load resistors on board to read values on analog inputs straight out-of-the-box.
- Is pull up resistors the way to go with this adapter? Or should I just wire it differently?
- Are the pull up resistors’ values reasonable now or should I go back to 47-100kOhm which allowed more “space”, since expected reaction was analog input to fall on those which were high and to rise on NO2, which was low?
- Any ideas what’s up with the NO2-sensor? How to make sure it works? What figures I should expect nearby gas stove (or other obtainable source)?
MICS6814-lukija.ino (8.31 KB)