Cara Membuat Gerbang Parkir Otomatis dengan Arduino Uno — Simulasi Online

Gerbang parkir otomatis menggabungkan tiga perangkat sekaligus: HC-SR04 sebagai mata yang mendeteksi mobil, servo sebagai palang, dan buzzer sebagai penanda suara. Saat ada benda lebih dekat dari 30 cm, palang membuka dengan sendirinya.

Board: Arduino Uno4 komponen

Komponen yang dipakai

  • Arduino Uno
  • Breadboard (setengah)
  • Sensor jarak (HC-SR04)
  • Palang parkir (servo)
  • Buzzer

Cara kerja

  1. HC-SR04 (TRIG D12, ECHO D11) mengukur jarak benda di depan gerbang setiap 300 ms.
  2. Bila jarak di bawah 30 cm dan palang masih tertutup, program memerintahkan palang membuka.
  3. Servo di D9 bergerak perlahan langkah 5 derajat sampai tegak 90 derajat.
  4. Selama palang bergerak, buzzer di D8 membunyikan nada 880 Hz; bila benda menjauh, palang menutup kembali.

Konsep yang dipelajari

Kombinasi sensor dan aktuatorHC-SR04, servo, dan buzzerKeadaan (state) terbuka dan tertutuptone() 880 Hz

Kode program

/*
  Gerbang Parkir Otomatis: HC-SR04 mendeteksi mobil, palang parkir membuka
  dan buzzer berbunyi saat palang bergerak.
  Rangkaian: HC-SR04 (VCC -> 5V, GND -> GND, TRIG -> D12, ECHO -> D11),
             palang parkir (VCC -> 5V, GND -> GND, SIG -> D9),
             buzzer (+ -> D8, - -> GND).
  Atur "Jarak benda" pada HC-SR04 di kanvas untuk mensimulasikan mobil
  yang datang dan pergi.
  Pustaka: Servo (bawaan Arduino).
*/
#include <Servo.h>

Servo palang;
const int PIN_SERVO = 9;
const int PIN_TRIG = 12;
const int PIN_ECHO = 11;
const int PIN_BUZZER = 8;
const int JARAK_BUKA = 30; // cm: mobil dianggap datang kalau lebih dekat dari ini

bool palangTerbuka = false;
int posisiPalang = 0; // 0 = tertutup (horizontal), 90 = terbuka (tegak)

long bacaJarakCm() {
  digitalWrite(PIN_TRIG, LOW);
  delayMicroseconds(2);
  digitalWrite(PIN_TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(PIN_TRIG, LOW);
  long durasi = pulseIn(PIN_ECHO, HIGH);
  return durasi / 58;
}

// Menggerakkan palang perlahan ke sudut target sambil membunyikan buzzer.
void gerakkanPalang(int target) {
  int langkah = (target > posisiPalang) ? 5 : -5;
  tone(PIN_BUZZER, 880);
  for (int sudut = posisiPalang; sudut != target; sudut += langkah) {
    palang.write(sudut);
    delay(40);
  }
  palang.write(target);
  noTone(PIN_BUZZER);
  posisiPalang = target;
}

void setup() {
  palang.attach(PIN_SERVO);
  pinMode(PIN_TRIG, OUTPUT);
  pinMode(PIN_ECHO, INPUT);
  pinMode(PIN_BUZZER, OUTPUT);
  palang.write(0);
  Serial.begin(9600);
  Serial.println(F("Gerbang parkir siap."));
}

void loop() {
  long jarak = bacaJarakCm();
  Serial.print(F("Jarak: "));
  Serial.print(jarak);
  Serial.println(F(" cm"));

  if (jarak < JARAK_BUKA && !palangTerbuka) {
    Serial.println(F("Mobil datang, palang dibuka."));
    gerakkanPalang(90);
    palangTerbuka = true;
  } else if (jarak >= JARAK_BUKA && palangTerbuka) {
    Serial.println(F("Mobil pergi, palang ditutup."));
    gerakkanPalang(0);
    palangTerbuka = false;
  }
  delay(300);
}

Template Arduino Uno lainnya