Membuat Sensor Parkir Wireless Portable
Sensor parkir atau sensor mundur digunakan untuk membantu pengemudi memarkir kendaraannya.
Sensor ini akan memberitahu pengemudi jarak bagian belakang mobil dengan objek di belakangnya. Bisa tembok, tong, atau mobil lain.
Untuk sensornya biasanya menggunakan sensor jarak jenis ultrasonic atau sonar.
Dan untuk tampilannya, biasanya berupa display jarak dan grafik disertai suara buzzer.
Bahkan yang versi lebih hemat hanya menggunakan buzzer sebagai penanda, semakin cepat bunyi buzzer menandakan jarak yang semakin dekat.
Daftar isi
Sensor Parkir Tanpa Kabel
Pada percobaan kali ini, kita akan mencoba membuat sensor parkir, tapi yang berbeda.
Sensor parkir yang akan coba kita buat adalah sensor parkir portable tanpa kabel alias wireless.
Bisa dibawa kemana-mana, dan pemasangannya akan cepat dan mudah.
Alat ini akan menjadi berguna jika suatu saat ada mobil yang akan parkir di tempat sulit, namun belum ada sensor parkirnya. Maka dengan mudah dan cepat bisa menggunakan sensor parkir portable ini.
Perancangan Sistem
Sistem yang akan dibuat terdiri dari 2 bagian
- Sensor Jarak, untuk mengukur jarak benda dibelakang mobil
- Display & alert, tampilan jarak dan peringatan dengan menggunakan buzzer
Kedua bagian ini akan berkomunikasi menggunakan sinyal WiFi, masing-masing menggunakan Wemos Mini D1, sebagai mikrokontroller dan komunikasinya (WiFi).
Wemos pertama akan
- menjadi WiFi Akses Point dan Web Server
- mengambil data dari sensor jarak
- menjalankan web service yang siap menyediakan data jarak untuk web client
Wemos kedua akan
- menjadi WiFi client
- menghubungkan ke Akses Point dari Wemos pertama
- kemudian dengan http get mengambil data jarak dari server
- selanjutnya menampilkan jarak di display oled
- dan memberi peringatan menggunakan suara buzzer
Hardware
Untuk membuat rangkaian ini, diperlukan komponen-komponen sebagai berikut:
- Wemos Mini D1 (2x)
- Sensor Jarak Ultrasonic (HC-SR04)
- OLED Display 128
- Active buzzer
lain-lain:
- powerbank (2x)
- breadboard mini (2x)
- kabel micro usb (2x)
- kabel jumper warna-warni secukupnya
Rangkaian Hardware
Berikut rangkaian untuk sensor jarak & webserver
- Pin D7 Wemos mini dihubungkan dengan Pin Trigger HC-SR04
- Pin D6 Wemos mini dihubungkan dengan Pin Echo HC-SR04
- Hubungkan VCC & GND
Berikut rangkaian untuk display
- Pin D2 ke SDA
- Pin D1 ke SCL
- Pin D7 ke Buzzer
- VCC ke OLED
- GND ke OLED & Buzzer
Coding
Untuk memprogram Wemos Mini D1, kita menggunakan Arduino Studio.
Jika sebelumnya belum pernah memprogram Wemos Mini D1, berikut langkah-langkahnya
- Download & Install Arduino Studio
- Instalasi board ESP8266 di Arduino Studio
- Install driver
- Siap coding
Untuk lebih jelasnya mengenai langkap-langkah instalasi ESP board di Arduino Studio, silahkan buka Langkah Awal IoT ā Memprogram ESP8266 di Arduino
Alat yang kita buat ada 2, yang pertama sensor jarak & web server
Code Sensor Jarak & Web Server
Secara sederhananya, dengan code ini, device akan membuat akses point dan menjalankan web server, kemudian menyediakan data jarak yang diambil dari sensor ultrasonic
Berikut codingnya:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
/* Program : Wireless Parking Sensor (part 1) Access Point + Web Server + Sensor Jarak MCU : Wemos Mini D1 Sensor : Ultrasonic HR-SC04 https://ndoware.com */ #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> /* pin sensor ultrasonic */ const int trigPin = D7; const int echoPin = D6; /* set SSID sensor parkir, tanpa password */ const char *ssid = "SensorParkir"; ESP8266WebServer server(80); String webHeader1 = "<!DOCTYPE HTML>" "<html><head><title>Jarak</title>" "<meta name='viewport' content='width=device-width, initial-scale=1.0, minimum-scale = 1, maximum-scale = 1, user-scalable = no'/>" "<meta name='apple-mobile-web-app-title' content='Sensor Parkir' />" "<meta name='apple-mobile-web-app-capable' content='yes'>" "<meta name='apple-mobile-web-app-status-bar-style' content='default' />" "<style>" "html, body {background: "; String webHeader2 = " color: white;" " text-align: center;" " font-family: 'fontello';" " font-size: 168px;" "}" "div.container3 { height: -webkit-fill-available; display: flex; align-items: center; justify-content: center }" "div.container3 p { margin: 0 }" "</style>"; String webFooter = "</body></html>"; int ukurJarak() { long waktuTempuh, jarak; digitalWrite(trigPin, HIGH); // kirim sinyal selama 10 micro second delayMicroseconds(10); digitalWrite(trigPin, LOW); waktuTempuh = pulseIn(echoPin, HIGH, 20000); // Tunggu pantulan suara kembali, dengan timeout 20ms (kurang lebih 3m) jarak = (waktuTempuh / 2) / 29.1; // Hitung jarak (kecepatan suara di udara kurang lebih 291m/s), dibagi 2 waktu tempuh datang dan kembali return jarak; } void handleRoot() { // handle halaman root (http://192.168.4.1/), tampilan dengan HTML/CSS int jarak = ukurJarak(); String s = webHeader1; if (jarak <= 15) // membedakan warna background css sesuai jarak s += "red;"; else if (jarak <= 30) s += "orange;"; else s += "black;"; s += webHeader2; s += "<div class='container3'><p>" + String(jarak) + "</p></div>"; s += webFooter; server.send(200, "text/html", s); } void data() { // handle halaman data (http://192.168.4.1/data/), kiriman data saja (tanpa css) server.send(200, "text/html", String(ukurJarak())); } void setup() { delay(1000); Serial.begin(115200); Serial.println(); Serial.print("Configuring access point..."); WiFi.softAP(ssid); IPAddress myIP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(myIP); server.on("/", handleRoot); server.on("/data", data); server.begin(); Serial.println("HTTP server started"); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { server.handleClient(); } |
Code Web Client + Tampilan Jarak + Peringatan
Untuk bagian penerima, dengan program ini akan menjalankan web client yang akan mengambil data jarak dari web server setiap periode tertentu.
Kemudian menampilkan data jarak tersebut di display OLED dan memberi notifikasi jika melewati batas aman menggunakan buzzer.
Berikut codingnya:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
/* Program : Wireless Parking Sensor (part 2) Web Client + Oled Display + Buzzer MCU : Wemos Mini D1 Other : Oled Display 128, active buzzer https://ndoware.com */ #include "Wire.h" #include "Adafruit_GFX.h" #include "OakOLED.h" #include <Arduino.h> #include <ESP8266WiFi.h> #include <ESP8266WiFiMulti.h> #include <ESP8266HTTPClient.h> #include <WiFiClient.h> #define BUZZPIN D7 // Pin Buzzer #define CM_ALERT_SOUND 10 // jarak minimal buzzer berbunyi /* set SSID sensor parkir, tanpa password */ const char *ssid = "SensorParkir"; OakOLED oled; void displayJarak(int i, int angka) { oled.clearDisplay(); for (int z = 0; z <= i; z++) { for (int y = 0; y < 7; y++) { oled.drawPixel(z, y, 1); } } oled.setTextSize(6); oled.setCursor(10, 16); oled.println(String(angka)); oled.display(); } void setup() { oled.begin(); oled.setTextSize(6); oled.setTextColor(1); oled.setCursor(10, 16); oled.println("OKE"); // test display oled.display(); Serial.begin(115200); WiFi.mode(WIFI_STA); WiFi.begin(ssid); // Tunggu WiFi terhubung while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); tone(BUZZPIN, 4978); delay(100); noTone(BUZZPIN); } Serial.println(); Serial.print("Terhubung ke "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); } void loop() { WiFiClient client; HTTPClient http; Serial.print("[HTTP] begin...\n"); if (http.begin(client, "http://192.168.4.1/data")) { // HTTP Serial.print("[HTTP] GET...\n"); int httpCode = http.GET(); Serial.println(httpCode); if (httpCode > 0) { Serial.printf("[HTTP] GET... code: %d\n", httpCode); if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) { String payload = http.getString(); Serial.println(payload); int jarak = payload.toInt(); int bar = map(jarak, 0, 127, 127, 0); displayJarak(bar, jarak); if (jarak <= CM_ALERT_SOUND) // bunyikan buzzer tone(BUZZPIN, 4978); else noTone(BUZZPIN); } } else { Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str()); } http.end(); } else { Serial.printf("[HTTP} Unable to connect\n"); } delay(100); } |
Testing
Setelah selesai merangkai hardware dan coding software, kemudian upload program tersebut ke Wemos Mini D1.
Maka tiba saatnya untuk testing.
Menggunakan 2 buat powerbank untuk menghidupkan 2 buat alat ini.
Hasil percobaan, sensor jarak dapat mengukur jarak dengan baik sesuai keadaan. Namun untuk jarak dibawah 10 cm kurang akurat.
Testing Langsung di Mobil.
Sensor jarak diletakkan di belakang mobil, bisa digantung atau ditempel.
Display dipasang di depan dekat pengemudi
Testing HP
Kita juga bisa menampilkan jarak yang diukur dengan handphone,
- hubungkan ke WiFi SSID = “SensorParkir”
2. Buka browser, alamat URL http://192.168.4.1
Kesimpulan
- Dengan Wemos Mini D1 kita dapat membuat 2 buah alat yang bisa berkomunikasi langsung (device to device) dengan WiFi
- Salah satu contohnya untuk membuat sensor jarak portable
- Device pertama sebagai akses point dan webserver yang dilengkapi dengan sensor jarak
- Device kedua melakukan protokol http get ke webserver, untuk mengambil data jarak, lalu menampilkan dan memberi peringatan
- Dapat juga dibuka menggunakan web browser di handphone
Kekurangan & Saran
- Sensor ultrasonic HC-SR04 tidak dapat bekerja dengan baik pada saat mobil dinyalakan, perlu dicari sensor jarak yang lebih baik
- Dengan memahami konsep komunikasi langsung antar device ini dapat dikembangkan menjadi alat-alat dengan fungsi yang lain
Demikian semoga tulisan ini sedikit berguna, semoga teman-teman mendapatkan ide lain untuk membuat inovasi-inovasi yang menarik dan berguna.
Silahkan tinggalkan komentar jika ada ide lain atau ada yang ini ditanyakan.
Terimakasih..
ps: vidio menyusul