Introduction: AEROBOT Air Quality Sensor V1.0

This instructable is about making an inexpensive and a highly accurate air quality sensor named AEROBOT. This project shows temperature,relative humidity, PM 2.5 dust density and alerts about the air quality of the surroundings. It uses a DHT11 sensor for temperature and relative humidity, a sharp optical dust sensor for dust density and an ultrasonic sensor to inform users about inaccurate readings due to blocking of the sensor. This project can be made easily and doesn't need any expertise in arduino. The dust sensor is very quick and can read even the slightest contamination in the surroundings. its maximum range is unknown but it usually is ineffective after the dust density goes over 600. But this is far more than the average contamination of 150. The measuring range of temperature is from -10 to 80 degree celsius and that of relative humidity is from 10% to 90%. Therefore this project is highly effective and efficient as a air quality sensor for homes and offices not in the radius of high pollution.

Things you would need:



• 1 Arduino uno/mega
• DHT11 sensor
• Sharp optical dust sensor
• Ultrasonic sensor
• 1 Button
• 3 LEDs (optional)
• 1 buzzer (optional)
• 220 µf capacitor
• 2*220 ohm resistors
• breadboard

https://youtu.be/gMohFgfUcN8

you can watch the project in working here

Step 1: Connecting the LCD

The first thing you need to do before working on the LCD is to check it. For this, do the connections as shown in the 1st diagram. Connect pin 15 on the LCD to Arduino’s 5V pin. Next, connect pin 16 on the LCD to the Arduino’s GND pin. These pins are used to power the LCD’s backlight.

Next, you need to set up the logic for the LCD. To do this, connect pin 1 on the LCD to the Arduino’s GND pin. Then, connect pin 2 on the LCD to the Arduino’s 5V pin. Next, you need to set up the contrast adjusting potentiometer. Take the 10K potentiometer and connect the first terminal to the Arduino’s 5V pin and the second terminal (middle pin) to the LCD’s pin 3 and the third terminal to the Arduino’s GND pin. Next, power up the Arduino. You will notice that the backlight on the LCD turns ON. Also, when you turn the knob on the potentiometer, the character blocks on the LCD turn bright/dim. Check out the picture on below to see what I’m talking about. If your LCD displayed what is shown in the photo below, it means that your LCD is correctly set up! If you were not able to achieve this, double check your connections and your potentiometer. Adjusting the contrast on the LCD

Completing the Connections Now, we need to connect the data lines and other pins that work with the LCD. Check out the connection in the 2nd diagram. Final connections between the Arduino, potentiometer, and LCD

Let’s start with connecting the control wires for the LCD. Connect the LCD’s pin 5 (RW) to the Arduino’s GND pin. This pin is not used, and serves as the Read/Write pin. Next, connect the LCD’s pin 4 (RS) to the Arduino’s digital pin 7. The RS pin is used to tell the LCD whether we are sending it data or commands (to change the position of the cursor). Next, connect the LCD’s pin 6 (EN) to the Arduino’s digital pin 8. EN is the enable pin on the LCD, this is used to tell the LCD that data is ready for reading. Next, we have to connect the four data pins on the LCD. Connect the LCD’s pin 14 (DB7) to the Arduino’s digital pin 12. Then, connect the LCD’s pin 13 (DB6) to the Arduino’s digital pin 11. Next, the LCD’s pin 12 (DB5) to the Arduino’s digital pin 10, then the LCD’s pin no 11 (DB4) to the Arduino’s digital pin 9.

Step 2: Connecting the DHT11 Sensor

Now connect the DHT11 sensor's input pin to arduino pin 7 and connect the Vcc and the ground wires respectively. Be sure to secure it and place it fare from the bunch of wires connected to the lcd.

Step 3: Connecting the Ultrasonic Sensor

The ultrasonic sensor i added in here is for a precaution so that whenever something is blocking the dust sensor(i would come to that later) the ultrasonic sensor senses it and gives a warning so that the dust sensor does not give improper readings.

Connect the trig pin of the sensor to arduino pin 6 an the echo pin of the sensor to arduino pin 5 and also place this sensor away from all the wires because the sensor is so sensitive that if there's a wire in front of it then it will show you the warning.

Step 4: Setting Up the Dust Sensor

Now comes the most difficult part and the most amazing sensor of this project-the dust sensor. Just set up the dust sensor as shown in diagram 2. and connect the dust pin to arduino pin 2 and the led pin to arduino pin 3 and dont forget to include the capacitor. After setting it up just check the dust values it gives with a real air quality sensor just to be sure.

Step 5: Finishing Up

I have added a buzzer so that it beeps when the air quality gets critical. Its just an extra setup, you can also add LEDs if you want to.

Step 6: The Code

So here's the code:

#include<LiquidCrystal.h>
#include<dht.h>

int dustPin=2;

int ledPower=3;

int dustVal=0;

int delayTime=280;

int delayTime2=40;

float offTime=9680;

dht DHT;

#define DHT11_PIN 7

#define trigPin 6

#define echoPin 5

int buzzer=3;

const int buttonPin = A0;

int buttonState = 0;

int flag = 0;

// initialize the libuttonPinrary with the numbuttonPiners of the interface pins

LiquidCrystal lcd(13, 8, 9, 10, 11, 12);

void setup() { // set up the LCD's numbuttonPiner of columns and rows:

lcd.begin(16, 2);

Serial.begin(9600);

pinMode(buttonPin, INPUT);

pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

pinMode(dustPin,INPUT);

pinMode(buzzer,OUTPUT);

for (int i = 1; i <= 100; i++) {

lcd.setCursor(2, 0);

lcd.print("AEROBOT v1.0");

lcd.setCursor(1, 1);

lcd.print("booting up-");

lcd.print(i);

lcd.print("%");

delay(100); }

lcd.clear();

lcd.setCursor(1, 0);

lcd.print("AEROBOT is now");

lcd.setCursor(0, 1);

lcd.print("checking the air");

delay(3000);

lcd.clear();

}

void loop() {

digitalWrite(ledPower,LOW);//powerontheLED

delayMicroseconds(delayTime);

dustVal=analogRead(dustPin);//readthedustvalueviapin5onthesensor

delayMicroseconds(delayTime2);

digitalWrite(ledPower,HIGH);//turntheLEDoff

delayMicroseconds(offTime);

long duration, distance;

digitalWrite(trigPin, LOW);

delayMicroseconds(2);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH);

distance = (duration / 2) / 29.1;

if (distance < 6) {

lcd.setCursor(3, 0);

lcd.print("please move");

lcd.setCursor(5, 1);

lcd.print(" aside");

delay(1000);

lcd.clear(); }

else {

buttonState = digitalRead(buttonPin);

if (buttonState == HIGH)

{ ++flag;

delay(500); }

int chk = DHT.read11(DHT11_PIN);

if (buttonState == HIGH && flag%2==1) {

lcd.clear();

Serial.print("reading");

lcd.clear();

lcd.setCursor(0, 0);

lcd.print("Temperature=");

lcd.print(DHT.temperature);

lcd.print((char)223);

lcd.print("C");

lcd.setCursor(1, 1);

lcd.print("R.Humidity=");

lcd.print(DHT.humidity);

lcd.print("%");

delay(5000);

lcd.clear();

}

else if (buttonState==HIGH && flag%2==0)

{ lcd.clear();

lcd.setCursor(0, 0);

lcd.print("PM 2.5=");

lcd.print(dustVal);

lcd.print("ug/m^3");

if (dustVal <= 100)

{ digitalWrite(buzzer,LOW);

lcd.setCursor(0, 1);

lcd.print("YOU ARE SAFE"); }

else if (dustVal <= 200) {

digitalWrite(buzzer,LOW);

lcd.setCursor(0, 1);

lcd.print("MOPUP SUGGESTED"); }

else if (dustVal <= 300) {

digitalWrite(buzzer,LOW);

lcd.setCursor(0, 1);

lcd.print("WARNING! CLEANUP"); }

else if (dustVal <= 400) {

digitalWrite(buzzer,HIGH);

lcd.setCursor(0, 1);

lcd.print("STATUS CRITICAL!"); }

delay(5000);

lcd.clear(); }

else {

lcd.setCursor(0, 0);

lcd.print("Temperature=");

lcd.print(DHT.temperature);

lcd.print((char)223);

lcd.print("C");

lcd.print((char)32);

lcd.print("|");

lcd.print((char)32);

lcd.print("PM 2.5=");

lcd.print((char)32);

lcd.print((String)dustVal);

lcd.setCursor(31,0);

lcd.print(" ug/m^3");

lcd.setCursor(1, 1);

lcd.print("R.Humidity=");

lcd.print(DHT.humidity);

lcd.print("%");

lcd.print((char)32);

lcd.print((char)32);

lcd.print("|");

lcd.print((char)32);

lcd.print((char)32);

if (dustVal <= 100)

{ lcd.print("NO THREATS FOUND!");

digitalWrite(buzzer,LOW); }

else if (dustVal <= 200) {

lcd.print("CLEANUP SUGGESTED");

digitalWrite(buzzer,LOW); }

else if (dustVal <= 300) {

lcd.print("WARNING! CLEANUP ");

digitalWrite(buzzer,LOW); }

else if (dustVal <= 450) {

lcd.print("!STATUS CRITICAL!");

digitalWrite(buzzer,HIGH); }

delay(500); lcd.scrollDisplayLeft(); }

}

}//that pretty much explains itself.

Comments

author
Ben jee ub (author)2017-04-16

Hey,
My Son (11) and me are bilding our First project (yours!). I find it wondrful!
We are almost there ... the LCD is connected ... but I can't find this: "Just set up the dust sensor as shown in diagram 2". I also dont see how you installed the button.
Please help us ... Thx!

author
sachinv12 (author)Ben jee ub2017-04-20

sry for the late reply but I am not able to get what u r saying,please explain

author
ArkadiuszO2 (author)sachinv122017-04-20

I think Ben jee ub is asking for the same thing I asked you via PM. Is it possible for you to give us more detailed instructiuon how to connect dust sensor? In other words where do we connect each of the cables from picture in Step 4.

author
Ben jee ub (author)ArkadiuszO22017-04-20

Indeed ;-)

author
sachinv12 (author)Ben jee ub2017-04-20

I am not getting the link of the page from where I learnt abt it but I found an instructable close to what I have done.you will automatically understand where to connect the input and output pins according to the code!

author
sachinv12 (author)sachinv122017-04-20

this instructable will help you (there's a small problem in the share section)

temp_-1032381634.jpg
author
Ben jee ub (author)sachinv122017-04-20

Thanks for the search & thanks for the inspiration ;-)

author
sachinv12 (author)Ben jee ub2017-04-22

you are welcome and be inspired!

author
ArkadiuszO2 (author)Ben jee ub2017-04-20

I've got the schematics from sachinv12, you can find them here: https://www.sparkfun.com/datasheets/Sensors/gp2y10...

Is this helpfull or do you need 1 to 1 instruction (can do it tommorow).

author
Ben jee ub (author)ArkadiuszO22017-04-20

Beautiful! thanks for the follow up ;-)

Super proposal for a 1 on 1 but I have to try it myself first. Thank you very much!

I began to think it was because of air the quality ... LOL

author
selinaguo (author)2017-04-07

That looks so cool! I'm trying to make something like this. I had nearly no clue how to do it before until I saw your wonderful Aerobot! Just wondering if it is possible to connect the output PM value to a motor in this program. For example, if the value exceeds a certain value, the motor starts.. Is there a way to use this PM value sort of like a analog switch? I don't know much about Arduino so please excuse me if this question looks quite obvious. Thank you so much!

author
ArkadiuszO2 (author)selinaguo2017-04-11

selinaguo i think it can be easily done with relay and simple if in main loop. I do not understand why the author has dustVal <= 450 (i would wrie dustVal >= 450), but as for adding that if:

1. You need to declare relaly on some pin (const int relay1 = 18;)

2. In void setup() add:

pinMode(relay1, OUTPUT);

3. In void loop() add:

if (dustVal >= 450)

digitalWrite(relay1, HIGH);

else

digitalWrite(relay1, LOW);

This way if dustVal will reach 450 or more relay1 will turn on anything connected to it (you need to have soth like this https://tinyurl.com/m2lcamm). Keep in mind i'm still learning how to do stuff (beginner here) so correct me if i wrote smth wrong. If you need help with wiring the relay ask, i will help.

author
selinaguo (author)ArkadiuszO22017-04-20

Wow gosh so sorry for my late reply! That looks feasible! Thank you sooo much for your help!! I'll try it when I get back and if there are any more problems I might still come back for help:) Again thanks a lot!!

author
sachinv12 (author)ArkadiuszO22017-04-20

than you for your contribution ,this really taught me a good amount

author
sachinv12 (author)selinaguo2017-04-20

that's a great idea and it can be daily used but I have never worked with relays and connecting motors, this was my first moderately difficult project

author
sachinv12 (author)sachinv122017-04-20

done easily*

author
sachinv12 (author)2017-04-01

thank you all for ur wishes! hope to improve next time

author
T.L.J.S (author)2017-03-21

Good Work. Congrats Sachin

author
AnisulH (author)2017-03-21

Good work

author
AbhinavC11 (author)2017-03-20

Congrats and Well Done.
Best of Luxk for Future Endeavours.
Regards
Abhinav Chhibber

author
Kishor_cit (author)2017-03-20

Good work Sachin

author
pradeepls (author)2017-03-20

Thats awesome Sachin, keep up the good work.

author
GirishB15 (author)2017-03-20

Great job Sachin...
Keep it up

About This Instructable

2,567views

51favorites

License:

More by sachinv12:AEROBOT Air Quality Sensor V1.0
Add instructable to: