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


