Tutorial Monitoring Car Parking System With Arduino

Tutorial Monitoring Car Parking System With Arduino

Pada kesempatan kali ini, saya bersama rekan saya membangun sebuah projek dimana projek ini akan bekerja untuk memantau slot parkir yang masih kosong sehingga ketika slot parkir masih tersedia, palang masuk akan terbuka secara otomatis ketika ada yang mendekat, namun saat slot parkir tidak ada lagi maka palang masuk tidak akan terbuka dan memunculkan “Parkir Penuh” pada LCD. Berikut langkah langkah pembuatannya :

Peralatan yang dibutuhkan :

  • Kabel Jumper
  • Bread Board
  • LCD 16×2
  • Arduino Uno
  • 2 Servo
  • 6 Sensor Inframerah
  • 2 Sensor Ultrasonik

Aturan Pin :

  • GND (Sensor, Servo, LCD) => Bread Board (-)
  • VCC/5V (Sensor, Servo, LCD) => Bread Board (+)
  • GND Arduino Uno => Bread Board (-)
  • 5V Arduino Uno => Bread Board (+)
  • Trig Ultrasonik Sensor (PINTU MASUK) => Arduino Uno (2)
  • Echo Ultrasonik Sensor (PINTU MASUK) => Arduino Uno (3)
  • Trig Ultrasonik Sensor (PINTU KELUAR) => Arduino Uno (5)
  • Echo Ultrasonik Sensor (PINTU KELUAR) => Arduino Uno (6)
  • Singal Servo (PINTU MASUK) => Arduino Uno (4)
  • Singal Servo (PINTU KELUAR) => Arduino Uno (7)
  • SDA Lcd => Arduino Uno (A4)
  • SCL Lcd => Arduino Uno (A5)
  • Out IR Sensor1 => Arduino Uno (8)
  • Out IR Sensor2 => Arduino Uno (9)
  • Out IR Sensor3 => Arduino Uno (10)
  • Out IR Sensor4 => Arduino Uno (11)
  • Out IR Sensor5 => Arduino Uno (12)
  • Out IR Sensor6 => Arduino Uno (13)

Berikut adalah Code Sourcenya :

#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Inisialisasi LCD dengan alamat I2C 0x27 dan ukuran 16x2
LiquidCrystal_I2C lcd(0x27, 16, 2);

// Definisikan pin untuk sensor ultrasonik dan servo untuk palang masuk
const int trigPinIn = 2;  // Pin Trig untuk sensor ultrasonik masuk
const int echoPinIn = 3;  // Pin Echo untuk sensor ultrasonik masuk
const int servoInPin = 4; // Pin untuk servo masuk

// Definisikan pin untuk sensor ultrasonik dan servo untuk palang keluar
const int trigPinOut = 5;  // Pin Trig untuk sensor ultrasonik keluar
const int echoPinOut = 6;  // Pin Echo untuk sensor ultrasonik keluar
const int servoOutPin = 7; // Pin untuk servo keluar

Servo servoMasuk;  // Membuat objek servo untuk palang masuk
Servo servoKeluar; // Membuat objek servo untuk palang keluar

// Pin untuk sensor inframerah (untuk memantau status parkir)
const int irSensorPins[6] = {8, 9, 10, 11, 12, 13}; // 6 slot parkir
int irValues[6];  // Untuk menyimpan nilai dari setiap sensor inframerah
const int totalSlots = 6; // Total slot parkir
int availableSlots = totalSlots; // Slot yang tersedia

void setup() {
  // Setup untuk sensor ultrasonik masuk
  pinMode(trigPinIn, OUTPUT);
  pinMode(echoPinIn, INPUT);
  
  // Setup untuk sensor ultrasonik keluar
  pinMode(trigPinOut, OUTPUT);
  pinMode(echoPinOut, INPUT);

  // Setup pin untuk sensor inframerah
  for (int i = 0; i < 6; i++) { // Untuk 6 sensor inframerah
    pinMode(irSensorPins[i], INPUT);
  }
  
  // Inisialisasi servo dan LCD
  servoMasuk.attach(servoInPin);
  servoKeluar.attach(servoOutPin);
  servoMasuk.write(0);         // Servo palang masuk pada posisi awal 0 derajat
  servoKeluar.write(0);        // Servo palang keluar pada posisi awal 0 derajat
  lcd.init();
  lcd.backlight();             // Nyalakan backlight LCD
  Serial.begin(9600);          // Memulai komunikasi serial
  
  // Menampilkan pesan awal di LCD
  lcd.setCursor(0, 0);
  lcd.print("Slot Parkir: ");
  lcd.print(availableSlots);    // Menampilkan slot parkir yang tersedia
}

void updateParkingStatus() {
  int occupiedSlots = 6; // Hitung slot yang terisi

  // Cek status setiap sensor parkir
  for (int i = 0; i < 6; i++) { // Cek 6 slot parkir
    irValues[i] = digitalRead(irSensorPins[i]);
    if (irValues[i] == 1) {
      // Jika sensor terhalang, parkiran terisi
      occupiedSlots--; // Hitung slot terisi
    }
  }

  // Hitung slot yang tersedia
  availableSlots = totalSlots - occupiedSlots; // Menghitung slot yang tersedia
  if (availableSlots < 0) {
    availableSlots = 0; // Pastikan tidak kurang dari 0
  }
}

long getUltrasonicDistance(int trigPin, int echoPin) {
  long duration, distance;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  duration = pulseIn(echoPin, HIGH);  // Mendapatkan durasi pulsa Echo
  distance = duration * 0.034 / 2;    // Menghitung jarak dalam cm
  return distance;
}

void loop() {
  // Update status parkiran
  updateParkingStatus();
  
  // Tampilkan status parkiran di LCD
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Slot Parkir: ");
  lcd.print(availableSlots);
  
  // Mengukur jarak untuk palang masuk
  long distanceIn = getUltrasonicDistance(trigPinIn, echoPinIn);

  // Mengukur jarak untuk palang keluar
  long distanceOut = getUltrasonicDistance(trigPinOut, echoPinOut);

  // Logika palang masuk
  if (distanceIn < 10) {
    // Jika kendaraan terdeteksi
    if (availableSlots > 0) {
      servoMasuk.write(90);    // Palang masuk terbuka
      delay(5000);             // Beri jeda agar kendaraan bisa masuk
      servoMasuk.write(0);     // Setelah itu, palang masuk kembali menutup

      // Update status setelah kendaraan masuk
      updateParkingStatus(); // Memperbarui status slot setelah kendaraan masuk
    } else {
    }
  }

  // Logika palang keluar
  if (distanceOut < 10) {
    // Jika kendaraan terdeteksi di pintu keluar, palang keluar terbuka
    servoKeluar.write(90);   // Palang keluar terbuka
    delay(5000);             // Beri jeda agar kendaraan bisa keluar
    servoKeluar.write(0);    // Setelah itu, palang keluar kembali menutup
  }

  // Jika semua sensor mendeteksi objek, set slot parkir menjadi 0
  bool allOccupied = true;
  for (int i = 0; i < 6; i++) {
    if (irValues[i] == 1) {
      allOccupied = false;
      break;
    }
  }
  
  if (allOccupied) {
    availableSlots = 0; // Set slot parkir menjadi penuh
    lcd.setCursor(0, 1);
    lcd.print("Parkir Penuh   "); // Menampilkan pesan bahwa parkir penuh
  }

  delay(500); // Delay untuk mengurangi frekuensi pembacaan
}

Selamat Mencoba !!

Jika anda berminat menggunakan jasa labrobotika, silahkan hubungi admin: WHATSAPP