💻 Kode Program Arduino 


/*
=========================================
SMART PARKING SYSTEM
MTs Negeri 8 Tangerang
=========================================

Komponen:
- Arduino UNO
- 2 Sensor IR
- Servo SG90
- LCD I2C 16x2

IR Masuk : D2
IR Keluar : D3
Servo : D9

=========================================
*/

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

LiquidCrystal_I2C lcd(0x27,16,2);
Servo portal;

//------------------------------
// PIN
//------------------------------
const int irMasuk = 2;
const int irKeluar = 3;
const int servoPin = 9;

//------------------------------
// VARIABEL
//------------------------------
int jumlahMobil = 0;
const int kapasitasMaks = 5;

//Status sensor sebelumnya
bool statusMasukSebelumnya = HIGH;
bool statusKeluarSebelumnya = HIGH;

void setup()
{
pinMode(irMasuk, INPUT);
pinMode(irKeluar, INPUT);

portal.attach(servoPin);
portal.write(0);

lcd.init();
lcd.backlight();

Serial.begin(9600);

tampilLCD();
}

void loop()
{

bool sensorMasuk = digitalRead(irMasuk);
bool sensorKeluar = digitalRead(irKeluar);

//----------------------------
// MOBIL MASUK
//----------------------------
if(statusMasukSebelumnya==HIGH && sensorMasuk==LOW)
{

if(jumlahMobil < kapasitasMaks)
{

bukaPortal();

jumlahMobil++;

Serial.print("Mobil Masuk : ");
Serial.println(jumlahMobil);

}
else
{

lcd.clear();
lcd.setCursor(0,0);
lcd.print("PARKIR PENUH");

lcd.setCursor(0,1);
lcd.print("Silakan Tunggu");

Serial.println("Parkir Penuh");

delay(2000);

}

tampilLCD();

}

//----------------------------
// MOBIL KELUAR
//----------------------------
if(statusKeluarSebelumnya==HIGH && sensorKeluar==LOW)
{

if(jumlahMobil>0)
{

bukaPortal();

jumlahMobil--;

Serial.print("Mobil Keluar : ");
Serial.println(jumlahMobil);

}

tampilLCD();

}

statusMasukSebelumnya = sensorMasuk;
statusKeluarSebelumnya = sensorKeluar;

}

//======================================
// FUNGSI MEMBUKA PORTAL
//======================================

void bukaPortal()
{

portal.write(90);

delay(3000);

portal.write(0);

}

//======================================
// TAMPIL LCD
//======================================

void tampilLCD()
{

lcd.clear();

lcd.setCursor(0,0);
lcd.print("SMART PARKING");

lcd.setCursor(0,1);

if(jumlahMobil>=kapasitasMaks)
{

lcd.print("FULL ");
lcd.print(jumlahMobil);
lcd.print("/");
lcd.print(kapasitasMaks);

}
else
{

int sisa = kapasitasMaks-jumlahMobil;

lcd.print("Sisa:");
lcd.print(sisa);
lcd.print("/");
lcd.print(kapasitasMaks);

}

}

📖 Penjelasan Program

Berikut penjelasan dari code berikut.


1️⃣ Menentukan Library

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

Library digunakan agar Arduino dapat berkomunikasi dengan LCD I2C dan mengendalikan motor servo.


2️⃣ Menentukan Pin

const int irMasuk = 2;
const int irKeluar = 3;
const int servoPin = 9;

Bagian ini menentukan pin yang digunakan setiap komponen.


3️⃣ Variabel Counter

int jumlahMobil = 0;

Variabel ini berfungsi menghitung jumlah mobil yang sedang berada di area parkir.


4️⃣ Kapasitas Maksimum

const int kapasitasMaks = 5;

Nilai ini dapat diubah sesuai kebutuhan.

Misalnya

10
20
30
50

5️⃣ Fungsi Membuka Portal

bukaPortal();

Daripada menulis

portal.write(90);

delay(3000);

portal.write(0);

berulang kali,

lebih baik dibuat menjadi sebuah fungsi.

Ini merupakan contoh penerapan modular programming.


6️⃣ Fungsi LCD

tampilLCD();

Setiap kali jumlah mobil berubah,

LCD akan otomatis diperbarui.


7️⃣ Logika Counter

Jika

Sensor Masuk aktif

jumlahMobil++

Jika

Sensor Keluar aktif

jumlahMobil--

Konsep ini dinamakan Counter.

Counter adalah salah satu teknik pemrograman yang paling banyak digunakan dalam sistem otomatis.