Industri Parkir Cerdas telah melihat sejumlah inovasi seperti Sistem Manajemen
Parkir Cerdas, Kontrol Gerbang Cerdas, Kamera Cerdas yang dapat mendeteksi jenis
kendaraan, ANPR (Pengenalan Plat Nomor Otomatis), Sistem Pembayaran Cerdas, Sistem
Entri Cerdas dan banyak lagi. Hari ini pendekatan serupa akan diikuti dan solusi parkir pintar
akan dibangun yang akan menggunakan sensor ultrasonik untuk mendeteksi keberadaan
kendaraan dan memicu gerbang untuk membuka atau menutup secara otomatis. ESP8266
NodeMCU akan digunakan di sini sebagai pengontrol utama untuk mengontrol semua
periferal yang terpasang padanya.
Dalam Sistem Parkir Cerdas IoT ini, User akan mengirimkan data ke server web
untuk mencari ketersediaan ruang untuk parkir kendaraan. Proyek ini menggunakan firebase
sebagai basis data Iot untuk mendapatkan data ketersediaan parkir. Untuk ini, kita perlu
menemukan alamat host Firebase dan kunci rahasia untuk otorisasi. Jika Anda sudah tahu
menggunakan firebase dengan NodeMCU maka Anda dapat melanjutkannya terlebih dahulu.
Anda harus terlebih dahulu belajar menggunakan Google Firebase Console dengan ESP8266
NodeMCU untuk mendapatkan alamat host dan kunci rahasia.
Komponen yang di butuhkan
ESP8266 NodeMCU
Sendor Ultrasonik
DC Servo Motor
IR Sensor
16x2 i2c LCD Display
Jumper
Diagram Sirkuit
Diagram sirkuit untuk sistem parkir kendaraan berbasis IoT ini melibatkan dua sensor
IR, dua motor servo, satu sensor ultrasonik dan satu LCD 16x2.
Di sini ESP8266 akan mengontrol proses lengkap dan juga mengirim informasi
ketersediaan parkir ke Google Firebase sehingga dapat dipantau dari mana saja di dunia melalui
internet. Dua sensor IR digunakan di gerbang masuk dan keluar untuk mendeteksi keberadaan
mobil dan secara otomatis membuka atau menutup gerbang. Sensor IR digunakan untuk
mendeteksi objek apa pun dengan mengirim dan menerima sinar IR, pelajari lebih lanjut
tentang sensor IR di sini.
Dua servo akan bertindak sebagai gerbang masuk dan keluar dan mereka berputar untuk
membuka atau menutup gerbang. Akhirnya sensor Ultrasonik digunakan untuk mendeteksi
apakah slot parkir tersedia atau ditempati dan mengirim data ke ESP8266.
Listing Program
#include <ESP8266WiFi.h>
#include <Servo.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <FirebaseArduino.h>
#define FIREBASE_HOST "smart-parking-7f5b6.firebaseio.com" // the project name
address from firebase id
#define FIREBASE_AUTH "suAkUQ4wXRPW7nA0zJQVsx3H2LmeBDPGmfTMBHCT" // the
secret key generated from firebase
#define WIFI_SSID "CircuitDigest" // input your home or public wifi name
#define WIFI_PASSWORD "circuitdigest101" //password for Wifi
String Available = ""; //availability string
String fireAvailable = "";
LiquidCrystal_I2C lcd(0x27, 16, 2); //i2c display address 27 and 16x2 lcd display
Servo myservo; //servo as gate
Servo myservos; //servo as gate
int Empty; //available space integer
int allSpace = 90;
int countYes = 0;
int carEnter = D0; // entry sensor
int carExited = D4; //exi sensor
int TRIG = D7; //ultrasonic trig pin
int ECHO = D8; // ultrasonic echo pin
int led = D3; // spot occupancy signal
int pos;
int pos1;
long duration, distance;
void setup() {
delay(1000);
Serial.begin (9600); // serial debugging
Wire.begin(D2, D1); // i2c start
myservo.attach(D6); // servo pin to D6
myservos.attach(D5); // servo pin to D5
pinMode(TRIG, OUTPUT); // trig pin as output
pinMode(ECHO, INPUT); // echo pin as input
pinMode(led, OUTPUT); // spot indication
pinMode(carExited, INPUT); // ir as input
pinMode(carEnter, INPUT); // ir as input
WiFi.begin(WIFI_SSID, WIFI_PASSWORD); //try to connect with wifi
Serial.print("Connecting to ");
Serial.print(WIFI_SSID); // display ssid
while (WiFi.status() != WL_CONNECTED) {
Serial.print("."); // if not connected print this
delay(500);
}
Serial.println();
Serial.print("Connected to ");
Serial.println(WIFI_SSID);
Serial.print("IP Address is : ");
Serial.println(WiFi.localIP()); //print local IP address
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH); // begin firebase authentication
lcd.begin(); //begin lcd
lcd.home();
lcd.setCursor(0, 0); // 0th row and 0thh column
lcd.print("Smart Parking");
}
void loop() {
digitalWrite(TRIG, LOW); // make trig pin low
delayMicroseconds(2);
digitalWrite(TRIG, HIGH); // make trig pin high
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
duration = pulseIn(ECHO, HIGH);
distance = (duration / 2) / 29.1; // take distance in cm
Serial.print("Centimeter: ");
Serial.println(distance);
int carEntry = digitalRead(carEnter); // read ir input
if (carEntry == HIGH) { // if high then count and send data
countYes++; //increment count
Serial.print("Car Entered = " ); Serial.println(countYes );
lcd.setCursor(0, 1);
lcd.print("Car Entered");
for (pos = 140; pos >= 45; pos -= 1) { // change servo position
myservos.write(pos);
delay(5);
}
delay(2000);
for (pos = 45; pos <= 140; pos += 1) { // change servo position
// in steps of 1 degree
myservos.write(pos);
delay(5);
}
Firebase.pushString("/Parking Status/", fireAvailable ); // send string to firebase
lcd.clear();
}
int carExit = digitalRead(carExited); //read exit ir sensor
if (carExit == HIGH) { //if high then count and send
countYes--; //decrement count
Serial.print("Car Exited = " ); Serial.println(countYes);
lcd.setCursor(0, 1);
lcd.print("Car Exited");
for (pos1 = 140; pos1 >= 45; pos1 -= 1) { // change servo position
myservo.write(pos1);
delay(5);
}
delay(2000);
for (pos1 = 45; pos1 <= 140; pos1 += 1) { // change servo position
// in steps of 1 degree
myservo.write(pos1);
delay(5);
}
Firebase.pushString("/Parking Status/", fireAvailable ); // send string to firebase
lcd.clear();
}
if (distance < 6) { //if distance is less than 6cm then on led
Serial.println("Occupied ");
digitalWrite(led, HIGH);
}
if (distance > 6) { //if distance is greater than 6cm then off led
Serial.println("Available ");
digitalWrite(led, LOW);
}
Empty = allSpace - countYes; //calculate available data
Gagasan ini didapatkan ketika kami mengamati bahwa truk sampah digunakan untuk
berkeliling kota untuk mengumpulkan sampah dua kali sehari. Meskipun sistem ini
menyeluruh, itu sangat tidak efisien. Sebagai contoh, katakanlah jalan A adalah jalan yang
sibuk dan kita melihat bahwa sampah terisi dengan sangat cepat sedangkan mungkin jalan B
bahkan setelah dua hari, tempat sampahnya bahkan belum penuh.
Apa yang dilakukan sistem kami adalah memberikan indikator waktu nyata tingkat
sampah di tempat sampah pada waktu tertentu. Dengan menggunakan data itu, kita dapat
mengoptimalkan rute pengumpulan limbah dan akhirnya mengurangi konsumsi bahan bakar.
Ini memungkinkan pengumpul sampah untuk merencanakan jadwal pengambilan harian /
mingguan mereka.
Untuk memulainya Anda harus memasukkan ketinggian tempat sampah. Ini akan
membantu kami menghasilkan persentase sampah di tempat sampah. Kami kemudian
memiliki dua kriteria yang perlu dipenuhi untuk menunjukkan bahwa bin tertentu perlu
dikosongkan:
Jumlah sampah, dengan kata lain katakanlah jika bin Anda setengah penuh Anda
tidak perlu mengosongkannya. Ambang kami, atau jumlah maksimum yang kami izinkan dari
tempat sampah, adalah 75% dari tempat sampah. (Anda dapat mengubah ambang sesuai
dengan preferensi Anda.)
Jika seandainya sampah tertentu mengisi hingga 20% dan kemudian selama seminggu
tidak berubah, itu masuk ke kriteria kedua kami, waktu. Seiring waktu, jumlah kecil pun akan
mulai membusuk yang mengarah ke lingkungan yang bau. Untuk menghindari tingkat
toleransi kita adalah 2 hari, jadi jika tempat sampah kurang dari 75% tetapi sudah dua hari
maka juga perlu dikosongkan.
Elektronik
Sensor ultrasonik akan ditempatkan di sisi interior tutup, yang menghadap limbah
padat. Saat sampah meningkat, jarak antara ultrasonik dan sampah berkurang. Data langsung
ini akan dikirim ke pengontrol mikro kami.
Pengontrol mikro kami, Arduino 101 kemudian memproses data dan melalui bantuan
WiFi mengirimkannya ke suatu aplikasi. Apa yang dilakukan aplikasi secara visual mewakili
jumlah sampah di tempat sampah dengan animasi kecil. Proses ini akan menunjukkan semua
tempat sampah yang membutuhkan perhatian, mengarahkan pengguna untuk mengambil rute
yang paling efektif.
Komponen
Untuk dapat memprogram Arduino 101, Anda harus menginstal driver yang
diperlukan terlebih dahulu. Untuk memeriksa apakah Anda telah menginstalnya, buka
Arduino IDE, klik pada alat, lalu papan dan lihat apakah Arduino atau Genuino 101 ada
dalam daftar. Jika ada, lompat ke langkah berikutnya, jika tidak ikuti.
Sekarang di bilah pencarian, cari "intel curie boards", pilih versi IDE Arduino Anda
dan unduh yang datang
Setelah driver Anda diinstal, silakan dan unduh perpustakaan yang diperlukan. Agar
program kami dapat berjalan, kami membutuhkan perpustakaan WiFi101, perpustakaan
blynk, dan perpustakaan ultrasonik, ketiganya dapat ditemukan di pengelola perpustakaan
bawaan Arduino. Buka untuk membuat sketsa lalu sertakan perpustakaan. kemudian manajer
perpustakaan.
GPS
Rencana untuk menggabungkan proyek kami dengan Google Maps. Begini caranya:
Anda harus secara manual pergi tentang kota mengambil lokasi GPS dari setiap
tempat sampah. Kemudian simpan di Google Maps Anda. Setelah Anda melakukan itu,
dengan cara yang sama kami membuat sistem dalam model kami sebelum satu LED Anda
harus melakukan hal yang sama untuk jumlah tempat sampah yang ada. Katakanlah ada 20.
Ketika pengemudi truk memulai harinya, dia membuka Blynk dan melihat semua
tempat sampah yang memerlukan perhatian kemudian dia memilih setiap tempat sampah
(masing-masing ketika memiliki nomor spesifik mereka) dan kemudian menghasilkan rute
terpendek dan paling efisien!
Listing Program
#include <BlynkSimpleCurieBLE.h>
#include <CurieBLE.h>
#include <Ultrasonic.h>
BLEPeripheral blePeripheral;
WidgetLED green(V1);
WidgetLED orange(V2);
WidgetLED red(V3);
Ultrasonic ultrasonic(7);
int distance = 0;
int thresh [3] = {20,12,4};
void setup() {
Serial.begin(9600);
delay(1000);
blePeripheral.setLocalName("garbage");
blePeripheral.setDeviceName("garbage");
blePeripheral.setAppearance(384);
Blynk.begin(blePeripheral, auth);
blePeripheral.begin();
Serial.println("Waiting for connections...");
}
void loop() {
distance = ultrasonic.distanceRead();
Serial.print(distance);
Blynk.run();
if(distance<=thresh[0]&&distance>=thresh[1]&&distance>=thresh[2]){
green.on();
Serial.println(1);
}
else
if(distance<=thresh[0]&&distance<=thresh[1]&&distance>=thresh[2]){
green.on();
orange.on();
Serial.println(2);
}
else
if(distance<=thresh[0]&&distance<=thresh[1]&&distance<=thresh[2]){
green.on();
orange.on();
red.on();
Serial.println(3);
}
else{
green.off();
orange.off();
red.off();
Serial.println(0);
}
delay(100);