Di bawah ini Anda akan menemukan semua komponen yang diperlukan untuk menyelesaikan tutorial Arduino ini. Setiap komponen mencakup tautan afiliasi ke berbagai marketplace tempat Anda dapat membelinya.
Gambar | Komponen | Deskripsi | Harga Terbaik | Beli |
---|---|---|---|---|
![]() | Arduino Uno Mikrokontroler | Mikrokontroler utama untuk mengendalikan seluruh sistem. | Rp 58.980
di Shopee | |
![]() | Sensor Ultrasonik HC-SR04 Sensor | Untuk mendeteksi keberadaan mobil di depan gerbang. | Rp 9.500
di Shopee | |
![]() | Servo Motor SG90 Aktuator | Untuk menggerakkan palang atau gerbang secara otomatis. | Rp 12.600
di Tokopedia | |
![]() | Kabel Jumper Male-to-Male Kabel | Untuk menyambung komponen di breadboard. | Rp 9.980
di Shopee |
Mikrokontroler utama untuk mengendalikan seluruh sistem.
Untuk mendeteksi keberadaan mobil di depan gerbang.
Untuk menggerakkan palang atau gerbang secara otomatis.
Mikrokontroler utama untuk mengendalikan seluruh sistem.
Bandingkan harga di berbagai marketplace
Untuk mendeteksi keberadaan mobil di depan gerbang.
Bandingkan harga di berbagai marketplace
Untuk menggerakkan palang atau gerbang secara otomatis.
Bandingkan harga di berbagai marketplace
Untuk menyambung komponen di breadboard.
Bandingkan harga di berbagai marketplace
#include <Servo.h>
// ---------- DEFINISI PIN DAN KONSTANTA ----------
#define TRIG_PIN 9
#define ECHO_PIN 10
#define LED_GREEN 8
#define LED_YELLOW 7
#define LED_RED 6
#define SERVO_PIN 5
// Konstanta untuk Servo
// Nilai ini mungkin perlu dikalibrasi untuk servo spesifik Anda
#define SERVO_MIN_PULSE 544 // Lebar pulsa untuk 0 derajat (dalam mikrosekon)
#define SERVO_MAX_PULSE 2400 // Lebar pulsa untuk 180 derajat (dalam mikrosekon)
// Posisi gerbang dalam derajat
#define GATE_CLOSED_DEG 15 // Posisi gerbang tertutup
#define GATE_OPEN_DEG 120 // Posisi gerbang terbuka
// Durasi pergerakan servo
#define GATE_MOVE_DURATION 500 // Durasi total untuk membuka/menutup (0.5 detik)
// ---------- INISIALISASI OBJEK DAN VARIABEL ----------
Servo gateServo;
// Variabel untuk sistem
bool carDetected = false;
bool gateOpen = false;
unsigned long gateOpenTime = 0;
bool waitingToClose = false;
// States untuk LED
enum LEDState {
RED_LIGHT,
YELLOW_OPENING,
GREEN_LIGHT,
YELLOW_CLOSING
};
LEDState currentLEDState = RED_LIGHT;
// ---------- FUNGSI UTAMA ----------
void setup() {
// Inisialisasi pin
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_YELLOW, OUTPUT);
pinMode(LED_RED, OUTPUT);
// Inisialisasi servo dengan rentang pulsa kustom
gateServo.attach(SERVO_PIN, SERVO_MIN_PULSE, SERVO_MAX_PULSE);
// Kondisi awal
// Konversi posisi derajat ke mikrosekon
int initialPulse = map(GATE_CLOSED_DEG, 0, 180, SERVO_MIN_PULSE, SERVO_MAX_PULSE);
gateServo.writeMicroseconds(initialPulse); // Set gerbang ke posisi tertutup
setLED(RED_LIGHT); // LED merah menyala
// Inisialisasi Serial untuk debugging
Serial.begin(9600);
Serial.println("Sistem Gerbang Parkir Siap!");
Serial.println("Status: Gerbang Tertutup - LED Merah");
}
void loop() {
// Baca jarak dari sensor HC-SR04
long distance = readDistance();
// Logika deteksi mobil
if (distance <= 10 && distance > 0) {
carDetected = true;
// Jika gerbang tertutup dan ada mobil terdeteksi
if (!gateOpen && currentLEDState == RED_LIGHT) {
Serial.println("Mobil terdeteksi! Membuka gerbang...");
openGate();
}
} else {
carDetected = false;
}
// Logika penutupan gerbang
if (gateOpen && !carDetected) {
if (!waitingToClose) {
waitingToClose = true;
gateOpenTime = millis();
Serial.println("Area kosong. Menunggu 3 detik untuk menutup...");
}
// Tutup gerbang setelah 1 detik tidak ada mobil
if (millis() - gateOpenTime >= 1000) {
Serial.println("Menutup gerbang...");
closeGate();
waitingToClose = false;
}
} else if (carDetected && waitingToClose) {
// Reset timer jika mobil terdeteksi lagi saat menunggu
waitingToClose = false;
Serial.println("Mobil terdeteksi lagi. Penutupan dibatalkan.");
}
delay(100);
}
// ---------- FUNGSI PENDUKUNG ----------
/**
* @brief Menggerakkan servo secara halus dari posisi awal ke akhir dalam durasi tertentu.
* @param startDeg Posisi awal dalam derajat.
* @param endDeg Posisi akhir dalam derajat.
* @param duration Durasi pergerakan dalam milidetik.
*/
void smoothServoMove(int startDeg, int endDeg, int duration) {
// Konversi posisi derajat ke mikrosekon
int startPulse = map(startDeg, 0, 180, SERVO_MIN_PULSE, SERVO_MAX_PULSE);
int endPulse = map(endDeg, 0, 180, SERVO_MIN_PULSE, SERVO_MAX_PULSE);
unsigned long startTime = millis();
while (millis() - startTime < duration) {
// Hitung progres pergerakan (nilai dari 0.0 sampai 1.0)
float progress = (float)(millis() - startTime) / duration;
// Hitung posisi pulsa saat ini berdasarkan progres
int currentPulse = startPulse + (progress * (endPulse - startPulse));
// Kirim perintah ke servo
gateServo.writeMicroseconds(currentPulse);
delay(10); // Jeda kecil untuk loop, agar tidak membebani prosesor
}
// Pastikan servo berada di posisi akhir
gateServo.writeMicroseconds(endPulse);
}
void openGate() {
setLED(YELLOW_OPENING);
smoothServoMove(GATE_CLOSED_DEG, GATE_OPEN_DEG, GATE_MOVE_DURATION);
setLED(GREEN_LIGHT);
gateOpen = true;
Serial.println("Gerbang terbuka!");
}
void closeGate() {
setLED(YELLOW_CLOSING);
smoothServoMove(GATE_OPEN_DEG, GATE_CLOSED_DEG, GATE_MOVE_DURATION);
setLED(RED_LIGHT);
gateOpen = false;
Serial.println("Gerbang tertutup!");
}
long readDistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034 / 2;
}
void setLED(LEDState state) {
digitalWrite(LED_RED, LOW);
digitalWrite(LED_YELLOW, LOW);
digitalWrite(LED_GREEN, LOW);
switch(state) {
case RED_LIGHT:
digitalWrite(LED_RED, HIGH);
break;
case YELLOW_OPENING:
case YELLOW_CLOSING:
digitalWrite(LED_YELLOW, HIGH);
break;
case GREEN_LIGHT:
digitalWrite(LED_GREEN, HIGH);
break;
}
currentLEDState = state;
}
Siapkan Komponen
Siapkan Arduino Uno, sensor ultrasonik HC-SR04, servo motor SG90, LED merah-kuning-hijau, resistor 220Ω, breadboard, dan kabel jumper.
Hubungkan Sensor Ultrasonik
Sambungkan pin VCC sensor ke 5V Arduino, GND ke GND, Trig ke pin 9, dan Echo ke pin 10.
Hubungkan Servo Motor
Sambungkan kabel coklat servo ke GND, merah ke 5V, dan oranye ke pin 5 pada Arduino.
Hubungkan LED Traffic Light
Sambungkan LED merah ke pin 8, kuning ke pin 7, hijau ke pin 6, masing-masing lewat resistor 220Ω, lalu sambung ke GND.
Hubungkan Daya
Gunakan kabel USB untuk menghubungkan Arduino ke laptop untuk daya dan pemrograman.
Unggah Kode ke Arduino
Buka Arduino IDE, salin kode sistem gerbang mobil, dan unggah ke Arduino Uno.
Uji Sistem
Nyalakan Arduino, dekatkan benda ke sensor ultrasonik. Lampu akan menyala sesuai jarak, lalu gerbang terbuka secara otomatis.