SMART POLLUTION AND GARBAGE CONTROL AND MONITORNIG SYSTEM
this project is a smart air pollution and garbage monitoring system for a city. in this project we make a network of smart garbage bins all over the city and with this we make a network of smart bins placed all over the city and each bin will send the data to central servers via public wifi connections if available and if not will use gsm modeules to send the data to the server and will give following information:-
1.status of all dustbins of city . we will be able to monitor all the garbage bins of city .
2. we can also monitor the air quality of all parts of the city as there will be air quality sensors placed outside the bins which will sense the environment around them.
so we will be better able to monitor the bins and air quality in that area and making us more able to effctively use the resources of municipality.
as we know the flow of people varies on different parts and areas of city so garbage filling rate is not same. but municipality garbage vans have a interval in which they collect garbage. which is not efficient as in some areas the garbage will overflow and in some areas it will never fill. this results in inefficient management.
but this can be managed by our project as we can monitor the garbage and direct the resources where they are needed .
another application of this project is that we can keep track of air pollution of every part of the the city so the authorities can take actions if they want to in order to manage or reduce the pollution.air pollution now a days in kathmandu is one of the biggest problems for civilian's
but this project might be able to help civilian's as it can keep track of air quality of every part or area of the city by using this data general public can find the least least polluted path to their and stay away from the pollution.
this project is not complet yet And is still ongoing. here is the arduino and wifi module code used in this project.
Arduino code to take data from senors which will than be transmitted to wifi module or gsm module to be transmitted to central server.
arduino code
#include <SoftwareSerial.h>
#include <Servo.h>
SoftwareSerial s(5,6);
#include <SimpleDHT.h>
#include <math.h>
Servo myservo;int j;
int k;
int l;
int m;
int n;
const int trigPin = A4;
const int echoPin = A5;
long duration;
int distance;
const int trigPin1 = A0;
const int echoPin1 = A1;
long duration1;
int distance1;
int pinDHT11 = 3;
int light =A3;
int gaspin = A2;
int gdata = 0;
float lux = 0.00,av=0.0048828125,lv;
String str;
SimpleDHT11 dht11(pinDHT11);
void setup() {
s.begin(9600);
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
pinMode(trigPin1, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin1, INPUT); // Sets the echoPin as an Input
pinMode(light,INPUT);
myservo.attach(9);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculating the distance
distance= duration*0.034/2;
digitalWrite(trigPin1, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin1, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin1, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration1 = pulseIn(echoPin1, HIGH);
// Calculating the distance
distance1= duration1*0.034/2;
if(distance > 30)
{myservo.write(90);
delay(300);}
else if(distance <30)
{myservo.write( 10);
delay(300);}
if(distance1<20)
{m=1;}
else if(distance1>20)
{m =0;}
gdata = analogRead(gaspin);
if(gdata > 100)
{n = 2;}
else if(gdata >30 && gdata < 100)
{n= 3;}
else if(gdata > 15 && gdata <30)
{n =4;}
else if (gdata <15)
{n =5;}
byte temperature = 0;
byte humidity = 0;
int err = SimpleDHTErrSuccess;
if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
return;
}
lv = analogRead(light);
lux = (250.000/(av*lv))-50.000;
l = (int)lux+100;
k =(int)humidity;
j = (int)temperature;
//j =17;
//k =40;
if(s.available()>0)
{
s.write(j);
delay(100);
s.write(k);
delay(100);
s.write(l);
delay(100);
s.write(m);
delay(100);
s.write(n);
delay(100);
}
#include <Servo.h>
SoftwareSerial s(5,6);
#include <SimpleDHT.h>
#include <math.h>
Servo myservo;int j;
int k;
int l;
int m;
int n;
const int trigPin = A4;
const int echoPin = A5;
long duration;
int distance;
const int trigPin1 = A0;
const int echoPin1 = A1;
long duration1;
int distance1;
int pinDHT11 = 3;
int light =A3;
int gaspin = A2;
int gdata = 0;
float lux = 0.00,av=0.0048828125,lv;
String str;
SimpleDHT11 dht11(pinDHT11);
void setup() {
s.begin(9600);
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
pinMode(trigPin1, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin1, INPUT); // Sets the echoPin as an Input
pinMode(light,INPUT);
myservo.attach(9);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculating the distance
distance= duration*0.034/2;
digitalWrite(trigPin1, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin1, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin1, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration1 = pulseIn(echoPin1, HIGH);
// Calculating the distance
distance1= duration1*0.034/2;
if(distance > 30)
{myservo.write(90);
delay(300);}
else if(distance <30)
{myservo.write( 10);
delay(300);}
if(distance1<20)
{m=1;}
else if(distance1>20)
{m =0;}
gdata = analogRead(gaspin);
if(gdata > 100)
{n = 2;}
else if(gdata >30 && gdata < 100)
{n= 3;}
else if(gdata > 15 && gdata <30)
{n =4;}
else if (gdata <15)
{n =5;}
byte temperature = 0;
byte humidity = 0;
int err = SimpleDHTErrSuccess;
if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
return;
}
lv = analogRead(light);
lux = (250.000/(av*lv))-50.000;
l = (int)lux+100;
k =(int)humidity;
j = (int)temperature;
//j =17;
//k =40;
if(s.available()>0)
{
s.write(j);
delay(100);
s.write(k);
delay(100);
s.write(l);
delay(100);
s.write(m);
delay(100);
s.write(n);
delay(100);
}
}
wifi module code
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <SoftwareSerial.h>
SoftwareSerial s(D6,D5);
float data;
#define ssid "kali" // WiFi SSID
#define password "0TSspwyV" // WiFi password
#define DHTTYPE DHT22 // DHT type (DHT11, DHT22)
#define DHTPIN D4 // Broche du DHT / DHT Pin
const uint8_t GPIOPIN[4] = {D5,D6,D7,D8}; // Led
float t = 0 ;
float h = 0 ;
float p = 0;
float t1 = 0 ;
float h1 = 0 ;
float p1 = 0;
float t2 = 0 ;
float h2 = 0 ;
float p2 = 0;
float t3 = 0 ;
float h3 = 0 ;
float p3 = 0;
String etatGpio[4] = {"","","",""};
String filling1 = "-----------";
String full1 = "-------";
String filling2 = "-----------";
String full2 = "-------";
String filling3 = "-----------";
String full3 = "-------";
String filling4 = "-----------";
String full4 = "-------";
String gstatus = "-----";
String gstatus1 = "-----";
String gstatus2 = "-----";
String gstatus3 = "-----";
// Création des objets / create Objects
ESP8266WebServer server ( 80 );
String getPage(){
String page = "<html lang='fr'><head><meta http-equiv='refresh' content='60' name='viewport' content='width=device-width, initial-scale=1'/>";
page += "<link rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css'><script src='https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js'></script><script src='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js'></script>";
page += "<title>Smart pollution monitoring and control</title></head><body>";
page += "<div class='container-fluid'>";
page += "<div class='row'>";
page += "<div class='col-md-12'>";
page += "<center><h1>Smart Pollution Monitering And Garbage Control System</h1></center>";
page += "<h3>Air pollution monitoring</h3>";
page += "</ul>";
page += "<table class='table'>"; // Tableau des relevés
page += "<thead><tr><th>Parameters</th><th>Ratnapark</th><th>Asan</th><th>Bhotahiti</th><th>Jamal</th></tr></thead>"; //Entête
page += "<tbody>"; // Contenu du tableau
page += "<tr><td>Temperature</td><td>"; // Première ligne : température
page += t;
page += "°C</td><td>";
page += t1;
page += "°C</td><td>";
page += t2;
page += "°C</td><td>";
page += t3;
page += "°C</td><td>";
page += "</td></tr>";
page += "<tr class='active'><td>Humidity;</td><td>"; // 2nd ligne : Humidité
page += h;
page += "%</td><td>";
page += h1;
page += "%</td><td>";
page += h2;
page += "%</td><td>";
page += h3;
page += "%</td><td>";
page += "</td></tr>";
page += "<tr><td>light</td><td>"; // 3ème ligne : PA (BMP180)
page += p;
page += "cd</td><td>";
page += p1;
page += "cd</td><td>";
page += p2;
page += "cd</td><td>";
page += p3;
page += "cd</td><td>";
page += "</td></tr>";
page += "<tr><td>CO2 content</td><td>"; // 3ème ligne : PA (BMP180)
page += gstatus;
page += "</td><td>";
page += gstatus1;
page += "</td><td>";
page += gstatus2;
page += "</td><td>";
page += gstatus3;
page += "</td><td>";
page += "</td></tr>";
page += "</tbody></table>";
page += "<h3>GARBAGE_MONITORING</h3>";
page += "<div class='row'>";
page += "<div class='col-md-4'><h4 class ='text-left'>Ratnapark";
page += "<span class='badge'>";
page += etatGpio[0];
page += "</span></h4></div>";
page += "<div class='col-md-4'><form action='/' method='POST'><button type='button submit' name='Ratnapark' value='1' class='btn btn-success btn-lg'>"+filling1+"</button></form></div>";
page += "<div class='col-md-4'><form action='/' method='POST'><button type='button submit' name='Ratnapark' value='0' class='btn btn-danger btn-lg'>"+full1+"</button></form></div>";
page += "<div class='col-md-4'><h4 class ='text-left'>Bhotahiti";
page += "<span class='badge'>";
page += etatGpio[1];
page += "</span></h4></div>";
page += "<div class='col-md-4'><form action='/' method='POST'><button type='button submit' name='Asan' value='1' class='btn btn-success btn-lg'>"+filling2+"</button></form></div>";
page += "<div class='col-md-4'><form action='/' method='POST'><button type='button submit' name='Asan' value='0' class='btn btn-danger btn-lg'>"+full2+"</button></form></div>";
page += "<div class='col-md-4'><h4 class ='text-left'>Asan";
page += "<span class='badge'>";
page += etatGpio[2];
page += "</span></h4></div>";
page += "<div class='col-md-4'><form action='/' method='POST'><button type='button submit' name='Bhotahiti' value='1' class='btn btn-success btn-lg'>"+filling3+"</button></form></div>";
page += "<div class='col-md-4'><form action='/' method='POST'><button type='button submit' name='Bhotahiti' value='0' class='btn btn-danger btn-lg'>"+full3+"</button></form></div>";
page += "<div class='col-md-4'><h4 class ='text-left'>Jamal";
page += "<span class='badge'>";
page += etatGpio[3];
page += "</span></h4></div>";
page += "<div class='col-md-4'><form action='/' method='POST'><button type='button submit' name='Jamal' value='1' class='btn btn-success btn-lg'>"+filling4+"</button></form></div>";
page += "<div class='col-md-4'><form action='/' method='POST'><button type='button submit' name='Jamal' value='0' class='btn btn-danger btn-lg'>"+full4+"</button></form></div>";
page += "</div>";
page += "<br><p><a href='http://www.projetsdiy.fr'>www.projetsdiy.fr</p>";
page += "</div></div></div>";
page += "</body></html>";
return page;
}
void handleRoot(){
server.send ( 200, "text/html", getPage() );
}
void handleD5() {
String D5Value;
updateGPIO(0,server.arg("D5"));
}
void handleD6() {
String D6Value;
updateGPIO(1,server.arg("D6"));
}
void handleD7() {
String D7Value;
updateGPIO(2,server.arg("D7"));
}
void handleD8() {
String D8Value;
updateGPIO(3,server.arg("D8"));
}
void updateGPIO(int gpio, String DxValue) {
Serial.println("");
Serial.println("Update GPIO "); Serial.print(GPIOPIN[gpio]); Serial.print(" -> "); Serial.println(DxValue);
if ( DxValue == "1" ) {
digitalWrite(GPIOPIN[gpio], HIGH);
etatGpio[gpio] = "On";
server.send ( 200, "text/html", getPage() );
} else if ( DxValue == "0" ) {
digitalWrite(GPIOPIN[gpio], LOW);
etatGpio[gpio] = "Off";
server.send ( 200, "text/html", getPage() );
} else {
Serial.println("Err Led Value");
}
}
void setup() {
for ( int x = 0 ; x < 5 ; x++ ) {
pinMode(GPIOPIN[x],OUTPUT);
}
Serial.begin ( 9600 );
s.begin(9600);
// Initialisation du BMP180 / Init BMP180
WiFi.begin ( ssid, password );
// Attente de la connexion au réseau WiFi / Wait for connection
while ( WiFi.status() != WL_CONNECTED ) {
delay ( 500 ); Serial.print ( "." );
}
// Connexion WiFi établie / WiFi connexion is OK
Serial.println ( "" );
Serial.print ( "Connected to " ); Serial.println ( ssid );
Serial.print ( "IP address: " ); Serial.println ( WiFi.localIP() );
// On branche la fonction qui gère la premiere page / link to the function that manage launch page
server.on ( "/", handleRoot );
server.begin();
Serial.println ( "HTTP server started" );
}
void loop() {
// put your main code here, to run repeatedly:
server.handleClient();
if (s.available()>0)
{
data=s.read();
Serial.println(data);
}
if(data<25 && data >10)
{t = data;}
else if (data>25 && data<100)
{h = data;}
else if(data > 100 && data <200)
{p = data-100;}
else if(data > 200)
{p = data + 200;}
else if(data == 0)
{filling1 = "FILLING";
full1 = "-------";}
else if(data == 1)
{filling1 = "-----------";
full1 = "FULL";}
if(data == 2)
{gstatus = "H.Dence";}
else if (data ==3)
{gstatus = "_.Dence";}
else if(data == 4 )
{gstatus = "Normal";}
else if (data == 5)
{gstatus = "__Low";}
delay(100);
}
#include <ESP8266WebServer.h>
#include <SoftwareSerial.h>
SoftwareSerial s(D6,D5);
float data;
#define ssid "kali" // WiFi SSID
#define password "0TSspwyV" // WiFi password
#define DHTTYPE DHT22 // DHT type (DHT11, DHT22)
#define DHTPIN D4 // Broche du DHT / DHT Pin
const uint8_t GPIOPIN[4] = {D5,D6,D7,D8}; // Led
float t = 0 ;
float h = 0 ;
float p = 0;
float t1 = 0 ;
float h1 = 0 ;
float p1 = 0;
float t2 = 0 ;
float h2 = 0 ;
float p2 = 0;
float t3 = 0 ;
float h3 = 0 ;
float p3 = 0;
String etatGpio[4] = {"","","",""};
String filling1 = "-----------";
String full1 = "-------";
String filling2 = "-----------";
String full2 = "-------";
String filling3 = "-----------";
String full3 = "-------";
String filling4 = "-----------";
String full4 = "-------";
String gstatus = "-----";
String gstatus1 = "-----";
String gstatus2 = "-----";
String gstatus3 = "-----";
// Création des objets / create Objects
ESP8266WebServer server ( 80 );
String getPage(){
String page = "<html lang='fr'><head><meta http-equiv='refresh' content='60' name='viewport' content='width=device-width, initial-scale=1'/>";
page += "<link rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css'><script src='https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js'></script><script src='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js'></script>";
page += "<title>Smart pollution monitoring and control</title></head><body>";
page += "<div class='container-fluid'>";
page += "<div class='row'>";
page += "<div class='col-md-12'>";
page += "<center><h1>Smart Pollution Monitering And Garbage Control System</h1></center>";
page += "<h3>Air pollution monitoring</h3>";
page += "</ul>";
page += "<table class='table'>"; // Tableau des relevés
page += "<thead><tr><th>Parameters</th><th>Ratnapark</th><th>Asan</th><th>Bhotahiti</th><th>Jamal</th></tr></thead>"; //Entête
page += "<tbody>"; // Contenu du tableau
page += "<tr><td>Temperature</td><td>"; // Première ligne : température
page += t;
page += "°C</td><td>";
page += t1;
page += "°C</td><td>";
page += t2;
page += "°C</td><td>";
page += t3;
page += "°C</td><td>";
page += "</td></tr>";
page += "<tr class='active'><td>Humidity;</td><td>"; // 2nd ligne : Humidité
page += h;
page += "%</td><td>";
page += h1;
page += "%</td><td>";
page += h2;
page += "%</td><td>";
page += h3;
page += "%</td><td>";
page += "</td></tr>";
page += "<tr><td>light</td><td>"; // 3ème ligne : PA (BMP180)
page += p;
page += "cd</td><td>";
page += p1;
page += "cd</td><td>";
page += p2;
page += "cd</td><td>";
page += p3;
page += "cd</td><td>";
page += "</td></tr>";
page += "<tr><td>CO2 content</td><td>"; // 3ème ligne : PA (BMP180)
page += gstatus;
page += "</td><td>";
page += gstatus1;
page += "</td><td>";
page += gstatus2;
page += "</td><td>";
page += gstatus3;
page += "</td><td>";
page += "</td></tr>";
page += "</tbody></table>";
page += "<h3>GARBAGE_MONITORING</h3>";
page += "<div class='row'>";
page += "<div class='col-md-4'><h4 class ='text-left'>Ratnapark";
page += "<span class='badge'>";
page += etatGpio[0];
page += "</span></h4></div>";
page += "<div class='col-md-4'><form action='/' method='POST'><button type='button submit' name='Ratnapark' value='1' class='btn btn-success btn-lg'>"+filling1+"</button></form></div>";
page += "<div class='col-md-4'><form action='/' method='POST'><button type='button submit' name='Ratnapark' value='0' class='btn btn-danger btn-lg'>"+full1+"</button></form></div>";
page += "<div class='col-md-4'><h4 class ='text-left'>Bhotahiti";
page += "<span class='badge'>";
page += etatGpio[1];
page += "</span></h4></div>";
page += "<div class='col-md-4'><form action='/' method='POST'><button type='button submit' name='Asan' value='1' class='btn btn-success btn-lg'>"+filling2+"</button></form></div>";
page += "<div class='col-md-4'><form action='/' method='POST'><button type='button submit' name='Asan' value='0' class='btn btn-danger btn-lg'>"+full2+"</button></form></div>";
page += "<div class='col-md-4'><h4 class ='text-left'>Asan";
page += "<span class='badge'>";
page += etatGpio[2];
page += "</span></h4></div>";
page += "<div class='col-md-4'><form action='/' method='POST'><button type='button submit' name='Bhotahiti' value='1' class='btn btn-success btn-lg'>"+filling3+"</button></form></div>";
page += "<div class='col-md-4'><form action='/' method='POST'><button type='button submit' name='Bhotahiti' value='0' class='btn btn-danger btn-lg'>"+full3+"</button></form></div>";
page += "<div class='col-md-4'><h4 class ='text-left'>Jamal";
page += "<span class='badge'>";
page += etatGpio[3];
page += "</span></h4></div>";
page += "<div class='col-md-4'><form action='/' method='POST'><button type='button submit' name='Jamal' value='1' class='btn btn-success btn-lg'>"+filling4+"</button></form></div>";
page += "<div class='col-md-4'><form action='/' method='POST'><button type='button submit' name='Jamal' value='0' class='btn btn-danger btn-lg'>"+full4+"</button></form></div>";
page += "</div>";
page += "<br><p><a href='http://www.projetsdiy.fr'>www.projetsdiy.fr</p>";
page += "</div></div></div>";
page += "</body></html>";
return page;
}
void handleRoot(){
server.send ( 200, "text/html", getPage() );
}
void handleD5() {
String D5Value;
updateGPIO(0,server.arg("D5"));
}
void handleD6() {
String D6Value;
updateGPIO(1,server.arg("D6"));
}
void handleD7() {
String D7Value;
updateGPIO(2,server.arg("D7"));
}
void handleD8() {
String D8Value;
updateGPIO(3,server.arg("D8"));
}
void updateGPIO(int gpio, String DxValue) {
Serial.println("");
Serial.println("Update GPIO "); Serial.print(GPIOPIN[gpio]); Serial.print(" -> "); Serial.println(DxValue);
if ( DxValue == "1" ) {
digitalWrite(GPIOPIN[gpio], HIGH);
etatGpio[gpio] = "On";
server.send ( 200, "text/html", getPage() );
} else if ( DxValue == "0" ) {
digitalWrite(GPIOPIN[gpio], LOW);
etatGpio[gpio] = "Off";
server.send ( 200, "text/html", getPage() );
} else {
Serial.println("Err Led Value");
}
}
void setup() {
for ( int x = 0 ; x < 5 ; x++ ) {
pinMode(GPIOPIN[x],OUTPUT);
}
Serial.begin ( 9600 );
s.begin(9600);
// Initialisation du BMP180 / Init BMP180
WiFi.begin ( ssid, password );
// Attente de la connexion au réseau WiFi / Wait for connection
while ( WiFi.status() != WL_CONNECTED ) {
delay ( 500 ); Serial.print ( "." );
}
// Connexion WiFi établie / WiFi connexion is OK
Serial.println ( "" );
Serial.print ( "Connected to " ); Serial.println ( ssid );
Serial.print ( "IP address: " ); Serial.println ( WiFi.localIP() );
// On branche la fonction qui gère la premiere page / link to the function that manage launch page
server.on ( "/", handleRoot );
server.begin();
Serial.println ( "HTTP server started" );
}
void loop() {
// put your main code here, to run repeatedly:
server.handleClient();
if (s.available()>0)
{
data=s.read();
Serial.println(data);
}
if(data<25 && data >10)
{t = data;}
else if (data>25 && data<100)
{h = data;}
else if(data > 100 && data <200)
{p = data-100;}
else if(data > 200)
{p = data + 200;}
else if(data == 0)
{filling1 = "FILLING";
full1 = "-------";}
else if(data == 1)
{filling1 = "-----------";
full1 = "FULL";}
if(data == 2)
{gstatus = "H.Dence";}
else if (data ==3)
{gstatus = "_.Dence";}
else if(data == 4 )
{gstatus = "Normal";}
else if (data == 5)
{gstatus = "__Low";}
delay(100);
}