Prototipe Sistem Sensor Parkir Pintar dengan Sensor Ultrasonik dan Tampilan LCD I2C 16×2

Ingin tahu bagaimana cara membuat sistem parkir canggih seperti yang ada di Mobil jaman sekarang? Sekarang kamu bisa membuatnya sendiri dengan mudah menggunakan ESP8266, sensor ultrasonik, LCD I2C 16×2, dan buzzer. Proyek ini memungkinkan kamu untuk menciptakan sistem parkir pintar yang mampu mendeteksi jarak kendaraan dan memberi peringatan otomatis.Jadi, tunggu apa lagi? yuk Buat sistem parkir pintarmu sendiri, tingkatkan kreativitas, dan pelajari dunia mikrokontroler lebih dalam!

Komponen

  • ESP8266
  • Sensor Ultrasonik HC-SR04
  • Buzzer
  • LCD I2C 16×2
  • Kabel Jumper

Diagram Wiring

Wiring Tanpa Trainer Kit Edutic.id dan Menggunakan Trainer Kit Edutic.id

Wiring Tanpa Trainer Kit Edutic.id
Sensor Ultrasonik HC-SR04

  • VCC ke 3.3
  • GND ke GND
  • Trigger ke pin D6 (GPIO12)
  • Echo ke pin D5 (GPIO14)

Buzzer

  • Positif ke pin D7 (GPIO13)
  • Negatif ke GND

LCD I2C 16×2

  • SCL ke D1 (GPIO5)
  • SDA ke D2 (GPIO4)
  • VCC ke 5V
  • GND ke GND

Wiring Dengan Trainer Kit Edutic.id
Trainer Kit Edutic.Id

  • Buzz ke D7
  • TRIG ke D6
  • ECHO ke D5
  • Jangan Lupa hubungkan pin 5v ke In(yang berada di samping LED merah)

LCD I2C 16×2

  • SCL ke D1 (GPIO5)
  • SDA ke D2 (GPIO4)
  • VCC ke VCC
  • GND ke GND

Implementasi

  • Install Board ESP8266
    1. Buka File > Preferences di Arduino IDE.
    2. Tambahkan URL: http://arduino.esp8266.com/stable/package_esp8266com_index.json di Additional Boards Manager URLs.
    3. Pilih Tools > Board > Board Manager.
    4. Masukkan “esp8266” pada kolom pencarian, akan muncul pilihan board esp8266 by ESP8266 Community, untuk versi Board pilih 2.5.2/2.7.4, kemudian klik Install.
    5. Jika Instalasi benar, akan muncul board Esp8266.
    6. Pada menu pemilihan board Pilih board NodeMCU 1.0 (ESP-12E Module).
  • Install Library LiquidCrystal_I2C

Kode Program

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <LiquidCrystal_I2C.h>

#define TRIGGER_PIN  12 // D6
#define ECHO_PIN     14 // D5
#define buzzer       13  // D7
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Koneksi LCD -> SCL ke D1 dan SDA ke D2
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Inisialisasi LCD dengan alamat I2C

unsigned long previousMillis = 0;  // Variabel untuk menyimpan waktu
bool buzzerState = false;           // Status buzzer

void setup() {
  Serial.begin(9600);
  pinMode(TRIGGER_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(buzzer, OUTPUT);
  
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for (;;);
  }

  lcd.begin(16, 2); // Inisialisasi LCD dengan jumlah kolom dan baris
  lcd.backlight(); // Menghidupkan lampu latar LCD

  delay(2000);
  display.clearDisplay();
  display.setTextColor(WHITE);
}

void loop() {
  long duration, distance;
  
  // Mengirim sinyal ultrasonik
  digitalWrite(TRIGGER_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIGGER_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIGGER_PIN, LOW);
  
  // Menghitung durasi dan jarak
  duration = pulseIn(ECHO_PIN, HIGH);
  distance = (duration / 2) / 29.1; // Menghitung jarak dalam cm

  // Menampilkan informasi di OLED
  display.clearDisplay();
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.print("Sensor Parkir Mobil");
  display.setTextSize(1);
  display.setCursor(0, 17);
  Serial.println("Jarak: " + String(distance) + " cm");
  display.print("Jarak: " + String(distance) + " cm");

  // Menampilkan jarak di LCD
  lcd.setCursor(0, 0); // Mengatur kursor ke posisi awal LCD
  lcd.print("Jarak: ");
  lcd.print(distance); // Menampilkan jarak
  lcd.print(" cm    "); // Menampilkan unit cm (spasi tambahan untuk menghapus karakter lama)

  // Mengatur peringatan berdasarkan jarak
  if (distance < 20) {
    display.setTextSize(3);
    display.setCursor(0, 35);
    display.print("Hati-hati!");

    unsigned long currentMillis = millis();

    if (distance >= 12) {
      // Jarak 12 cm hingga 20 cm
      int buzzerInterval = 500; // Buzzer menyala lebih lama
      if (currentMillis - previousMillis >= buzzerInterval) {
        previousMillis = currentMillis;
        buzzerState = !buzzerState; // Mengubah status buzzer
        digitalWrite(buzzer, buzzerState ? HIGH : LOW); // Menghidupkan atau mematikan buzzer
      }
    } else if (distance >= 10) {
      // Jarak 10CM
      int buzzerInterval = 300; // Buzzer menyala lebih cepat
      if (currentMillis - previousMillis >= buzzerInterval) {
        previousMillis = currentMillis;
        buzzerState = !buzzerState; // Mengubah status buzzer
        digitalWrite(buzzer, buzzerState ? HIGH : LOW); // Menghidupkan atau mematikan buzzer
      }
    } else if (distance < 9 && distance >= 7) {
      // Jarak antara 9 cm hingga 5 cm
      int buzzerInterval = 200; // Buzzer menyala lebih cepat
      if (currentMillis - previousMillis >= buzzerInterval) {
        previousMillis = currentMillis;
        buzzerState = !buzzerState; // Mengubah status buzzer
        digitalWrite(buzzer, buzzerState ? HIGH : LOW); // Menghidupkan atau mematikan buzzer
      }
    } else {
      // Jarak kurang dari 5 cm
      int buzzerInterval = 100; // Buzzer menyala lebih cepat lagi
      if (currentMillis - previousMillis >= buzzerInterval) {
        previousMillis = currentMillis;
        buzzerState = !buzzerState; // Mengubah status buzzer
        digitalWrite(buzzer, buzzerState ? HIGH : LOW); // Menghidupkan atau mematikan buzzer
      }
    }
  } else {
    digitalWrite(buzzer, LOW); // Mematikan buzzer
    display.setTextSize(3);
    display.setCursor(0, 35);
    display.print("Aman");
  }
  
  display.display();
  delay(100); 
}

Langkah-langkah di Arduino IDE

  1. Persiapan Arduino IDE: Pastikan sudah menginstal board manager ESP8266 dan library LiquidCrystal_I2C.
  2. Koneksi ke ESP8266: Hubungkan ESP8266 ke komputer, pilih board dan port yang sesuai di “Tools” -> “Board” dan “Port”.
  3. Upload Code: Klik “Upload” untuk mengunggah kode ke ESP8266. Tunggu hingga proses selesai.

Hasil Akhir

Berikut adalah tampilan alat dan bus kecil untuk mengkur jarak yang akan di tampilkan di LCD I2C 16×2

 

FAQ

Apakah sensor ultrasonik bisa bekerja di semua kondisi cuaca?

Sensor ultrasonik bekerja dengan baik di kondisi normal, tetapi hujan lebat atau angin kencang bisa mengurangi akurasi.

Apa sih yang harus dilakukan jika LCD tidak menampilkan informasi dengan benar?

Periksa koneksi I2C antara LCD dan ESP8266. Pastikan kabel SCL dan SDA terhubung ke pin yang benar dan pastikan alamat I2C yang digunakan pada kode sesuai dengan LCD yang digunakan. Kamu bisa memanfaatkan library I2C scanner untuk memastikan alamat I2C.atau mungkin kabel jumpernya kendor

gimana ya cara menyesuaikan jarak peringatan?

Kamu bisa mengubah batas jarak langsung di kode dengan memodifikasi nilai yang digunakan pada kondisi if untuk jarak tertentu.yang distance ya

gimana caranya mengurangi bunyi buzzer jika terlalu bising?

Bisa dong,Kamu dapat mengurangi durasi bunyi buzzer dengan menambah interval dalam fungsi millis(), atau menggunakan resistor untuk menurunkan tegangan yang masuk ke buzzer sehingga mengurangi volume suaranya.

Kesimpulan

Setelah menyelesaikan tutorial ini, kamu telah berhasil mengembangkan sistem parkir pintar berbasis mikrokontroler. Seru, bukan? Proyek ini tidak hanya memberikan wawasan baru, tetapi juga membuka banyak peluang untuk bereksperimen lebih jauh dengan sensor dan mikrokontroler. Siapa tahu, proyek kecil ini bisa menjadi langkah awal dari ide-ide kreatif yang lebih besar!Semangat Sobat Edutic

1 Comment.

Leave a Reply

Your email address will not be published. Required fields are marked *