Custom Shield - Indoor Air Quality Monitor (Open Source Software)

I have been working on the software for the Indoor Air Quality Shield.

This is the open source code for it :

This is the live data (Live_Home is at my house) - the others are test data :

Hardware :

Many thanks go to my friend and sensor connoisseur Emmanuel Pierre. He gave me help and code for the sensor calibration and sensor reading calculations. Also he answered my questions about electronics and helped me determine which are better sensors.



  1. Sampling Synchronization - Takes a reading every n minutes which is synchronized from the start of the day. (e.g. 60m interval will be taken at 1:00, 2:00 etc).

  2. Http send of readings. Occurs at random time in the future before the next read in order to reduce load on server with all the synchronized readings.

  3. Temperature / Humidity Reading from DHT22

  4. Sewer Gas Reading from Figaro TGS2602

  5. Dust sensor reading from Grove dust sensor

  6. User Reading button - Takes a reading when user presses BTN1

  7. Calibration button - Calibrates sensors when user presses BTN2
    Waits for pre-heat time, then calibrates sensors and stores calibration results in eeprom. Orange LED flash means pre-heating. Blue LED flash means calibrating. Buzzes when calibration finished. This is so the user can take the shield to a field for clean air calibration.

  8. Web-based graphs to show history of sensor data.

  9. Web-based calendar to show which days in history reached poor air quality for each sensor.

  10. User can change the name of the room the shield is placed in to keep track of differences.

  11. Download csv so user can use raw sensor data in excel etc.

  12. Basic information about the particles/gases to tell the user about sources and symptoms


The Ozone / Chlorine sensor is not showing anything useful. This is abandoned because the sensor I am using is not sensitive enough. Ozone would be a useful gas to read but it would also complicate the clean air calibration procedure since many people don’t live in a place with 0 Ozone outdoors (likely would need to build a carbon filtering box to place the shield in for calibration).

To Do

a) There are still a lot of rough edges e.g. graph scales, valid air quality ranges
b) Waiting on WSP2110 Sensor to arrive to add code.
c) Need next revision of shield to include Carbon Monoxide and car exhaust sensor.
d) Later I plan to add a page to compare the air quality data between rooms in the same house or between different houses (e.g. other sensors)


Hey @Rockvole,

Seems like you are having tons of fun with your new toy. :wink:

Let me know if you need some help and i’ll what i can do for you.

Hi @kennethlimcp,
Yes I have been having fun. I think the most fun was testing the dust sensor - the approved method is to fry bacon to make sure it is working :wink:

Thanks for the offer of help - I will likely only be doing minor tweaks now until the next/final version of the shield is ready.

1 Like

I have updated my code to use the new temperature/humidity library. The previous version would hang infinitely on the acquiring loop every day - looks like its reliable now. Thanks to @mtnscott and @peekay123 for the excellent work.

I have also updated my code to use a queue to store unsent readings. If there is a failure in sending then the unsent reading will stay in the queue and will try again on the next send attempt. This has also improved the reliability since a send attempt fails most days.

1 Like

I have used the indoor air quality shield to diagnose a problem. I am renovating my basement and I have sealed off the door to it in order to reduce dust from reaching the main floor. I also have a fan blowing so the basement has negative pressure to help keep dust contained and I only enter the basement from the back door.
I started doing my Wi-Fi range testing - to decide if I need to switch to a ufl core and I noticed some strange readings by the back door of the basement. I poked around and found some rot at the bottom of the door frame. I sawed out a chunk and it looked like a few inches of rot - although I don’t really know because I will have to remove a whole bunch of siding to see properly - which is really a job for when the weather gets better next year.
So I started experimenting. I set up the IAQ shield and my Dylos Pro inside by the basement door. I stuffed a rag in the rotting hole to block air to the basement and then in the morning I go outside and remove the rag and wait a while and then go in and write down the Dylos hourly readings.
(I didn’t get the Dylos with the serial port because I just didn’t think it is practical to be able to move it around and connect to a laptop to get readings - besides I only have an android tablet).
When the rag was removed the Dylos noticed a change of about 25% (although still Ok readings) and the IAQ shield dust sensor didn’t notice much but the TGS2602(sewer gas) seemed to be affected. When the back door was opened they all went higher. So the only thing left I thought it could be is I have a pile of wood near the back door under the deck from the renos. I left it there because its out of sight from people walking past since its a mess. So I decided to just move the pile to the back of the garden next to the shed. Anyway when I got to the centre of the pile I found a couple of pieces of 10x10 drywall totally covered in black fuzzy mould plus some fungus growing near. So I disposed of of all that and the readings have plummeted since then.
I wish I kept the drywall in a sealed container for further testing. Its strange how much the TGS2602 reacted - I guess that the mould is emitting mycotoxins which I think are like chemicals.

This shows the results of opening the back door before the cleanup :

This shows the difference in the sensor readings when removing the wood pile :

This shows the results after when I’m not renovating in the basement.

1 Like

@Rockvole, nice work and interesting findings! I wonder if by exposing the sensors to different environments like the wood and the mouldy drywall, you can’t develop “profiles” of common pollutants. Mould is certainly a big one in homes. :smile:

@peekay123 - it would be good if that’s possible. I think I will need to add some notes about what the sensors can react to otherwise someone might be freaking out thinking they have a huge plumbing leak when really its a mould problem. I’m pleased the way the TGS2602 reacted though because as you say mould is a common problem.


I have been unable to get the temperature / humidity readings accurate on the shield even after using a separate grove sensor - its still too high by a couple of degrees - which in turn makes the humidity really wrong.

I have the first result from my humidity test. I initially tried to use a dehumidifier but it couldnt really bring the humidity down enough to get a result. Luckily I got a couple of fairly dry days and saw a difference. The difference is still noticeable with the incorrect humidity, but I transposed results from my separate sensor a few feet away - to get a more corresponding result. I added a histogram to the website to make the differences easier to see.

It looks like the sewer sensor (TGS2602) correlates with the humidity - this sensor also detects VOCs so I believe it is detecting the VOCs which are emitted by mold. I guess we will get a better idea after I complete the cleanup.

Look at the Humidity and Sewer gas on the 2 sets of histograms :

A more humid day :

Recently I changed the way events and locations / positions are shown and edited :

I also changed the way cores are treated, now you can combine cores with different sensors attached into one sensor group and they will all be shown on the same set of graphs. I needed this due to a broken humidity sensor and it was easier for me to do this than get a soldering iron out :smile:

1 Like

So I have some more results. I have been using Concrobium Salt to clean up (commercial name Mold Control). My bedroom seems to have higher VOC readings than the rest of the house and I haven’t identified the source exactly yet. I believe there could be a source of mold somewhere. I tried cleaning the outside windowsill in the bedroom, I powerwashed the wall outside the bedroom which had a black stain on it. I tried cleaning the bedroom walls with Concrobium Salt. I want to fog the bedroom with the salt but my Wife is not happy with that.

Anyway I thought perhaps the VOCs are coming up from the basement (its in the middle of Reno right now and has no drywall so its pretty open). I decided to fog the basement. After that I seem to have lowered the VOCs a bit in the bedroom - I fogged on the 13th. Its certainly not cured but its a step up.

Here is the readings before the fogging :

Here is the readings after the fogging :

Also, interestingly since the fogging my wife says she is sleeping better. She uses a fitbit which also tracks her sleep. And apparently it has some kind of sleep disturbance tracking and it was typically recording just under 25 incidences of disturbed sleep per night. Now she is down to just over 10 per night.