Low Energy Air Quality Sensor

In ITP, Networked Sensors for Development

Our Brief

Our brief was to design a device that could operate for two weeks straight on one battery charge.


The problem we chose to look at

According to the World Health Organization, respiratory diseases attributed to inhaling smoke from the use of solid fuels (wood, animal dung, crop waste and coal) for cooking and heating kills an estimated 1.6 million people annually in developing counties. Only unsafe drinking water and poor sanitation kills more people. I was very surprised to hear that it posed a greater threat to health in the developing world than Malaria, yet we don’t hear about it all that often.


  • Click here for more info on the effects of burning solid
  • Click here to see of a geographic breakdown of which countries use the most solid fuels


We felt that a simple low energy air quality sensor could help families identify when they were endangering themselves. After doing a little research, we identified that Carbon Monoxide and general particulates in the air as the greatest threat posed by burning solid fuels. The amount of harmful contaminants rises when people try to burn solid fuels that have not properly dried, and therefore, generate more smoke. Given these two by-products, we chose to use the Sharp Dust sensor and an MQ-7 gas sensor, which measures Carbon Monoxide, in our device.


Unfortunately, due to the complexity of wiring up the MQ-7 and a couple missing parts, we were not able to get it working in time and only have the dust sensor working currently. Here is a post that could be a potential solution to wiring up the MQ-7 or we could purchase a breakout that would simplify the task considerable. The reason the MQ-7 is so tricky is because you need to provide the internal heater we an alternating voltage of 1.4V and 5V at set intervals for it to function properly. With all of that said, given that our task is ensuring long battery life, only using the dust sensor could actually be a blessing because it is known to use a very little amount of current (20mA max, 11mA typical). On the other hand, the MQ-7 consumes a large amount of current (approximately 150mA) which could drain our battery prematurely. And since we’re dealing with solid fuels, the levels of Carbon Monoxide most likely have a direct relationship with the amount of smoke/particulates in the air. This would not be the case is a household that uses LPG (liquid propane gas), where you can have high levels of Carbon Monoxide due to a gas leak.


Ensuring low energy consumption

We were able to build our own low energy Arduino using Kina’s very helpful post to ensure that we were being as energy efficient as possible. After reviewing Kina’s work, we knew that we could dramatically lessen the current used by a standard Arduino Uno. When there is no load (not driving any external output), the Arduino Uno R3 board draws 46.5mA of current vs.  34.4mA when you put the Uno to sleep (source).



In addition to building our own board, we used the Jeelib library to put our board into a very low-power sleep mode when we were not reading values. While we did not have the time to wait and see if the battery we selected would last the full two weeks, we knew that by combining the low-power sleep mode with are low-energy Arduino, we had a very good chance at meeting, and potentially exceeding the requirement of 2 weeks.



In addition to the components for our homemade Arduino and the dust sensor, we also included three LEDs (green, yellow and red) to provide feedback to the user. We knew that we had to engineer user feedback that was clear but at the same time not too intrusive. That, in addition to power concerns, is what ruled out using any form of audio feedback to alert users of a dangerous situation. For the purpose of testing, we have the sensor reading and blinking an LED every two seconds, however, this is not the ideal logic to use from a user experience and energy consumption perspective. For the production device, I would probably only have a Red LED that turns on permanently while the Air Quality is dangerous. At all other times the Arduino would be asleep, waking up every 30 seconds or so to check to read the Air Quality. This would dramatically increase the battery life of our device. Below our a couple images of the circuit and serial monitor reading values.




REsults on current draw

We’d like to just measure the amount of current that our homemade Arduino draws when there is no load on, however, we have not had a chance to do so yet. But even when we measured the current draw when the dust sensor was connected, the current consumed was drastically less. Without the Jeelib library implemented, our circuit drew 20mA when the LED was off and 30mA when the LED was on.



Once we implemented the Jeelib library sleep function, we were able to reduce that current draw to 10mA when the LED was off and 20mA when the LED was on.



Since the LED turns on and off at a regular interval of 2 seconds that means that our average current draw is 15mA. That is a 67.74% decrease from the Arduino UNO with no load on. That number could further increase if we were to implement the aforementioned logic change in the Circuit section.




Submit a comment