Membuat Robot Penghindar Rintangan dengan Arduino Uno (Sensor Ultrasonik + L298N)

Robot penghindar rintangan (obstacle avoiding robot) adalah proyek robotika klasik yang ideal bagi pemula. Robot bergerak maju, mengukur jarak ke depan dengan sensor ultrasonik, lalu mundur dan berbelok bila ada penghalang. Proyek ini mengajarkan tiga hal sekaligus: membaca sensor, mengendalikan motor, dan membuat logika keputusan sederhana menggunakan Arduino Uno.

[GAMBAR 1 — Gambar unggulan] Foto robot mobil dua roda dengan sensor HC-SR04 di bagian depan. | Nama file: robot-penghindar-rintangan.jpg | Alt text: Robot penghindar rintangan berbasis Arduino Uno

Komponen yang Dibutuhkan

  • Arduino Uno + kabel USB
  • Sensor ultrasonik HC-SR04
  • Driver motor L298N
  • 2 motor DC gearbox (motor TT) beserta roda
  • Sasis robot 2WD dengan roda bebas (caster)
  • Baterai 7,4 V (misalnya 2 sel 18650 beserta holder)
  • Kabel jumper dan saklar

[GAMBAR 2] Foto semua komponen tersusun rapi di atas meja, masing-masing diberi label. | Nama file: komponen-robot-penghindar-rintangan.jpg | Alt text: Komponen untuk membuat robot penghindar rintangan Arduino

Skema Pengkabelan

DariKe
HC-SR04 VCC5V Arduino
HC-SR04 GNDGND Arduino
HC-SR04 TRIGPin D9
HC-SR04 ECHOPin D10
L298N ENAPin D5 (PWM)
L298N IN1Pin D7
L298N IN2Pin D8
L298N IN3Pin D12
L298N IN4Pin D13
L298N ENBPin D6 (PWM)
L298N OUT1, OUT2Motor kiri
L298N OUT3, OUT4Motor kanan
Baterai (+)Terminal 12V L298N
Baterai (−)GND L298N
GND L298NGND Arduino (wajib)

Arduino dapat diberi daya dari baterai yang sama melalui jack DC atau pin VIN, atau dari power bank lewat kabel USB.

[GAMBAR 3] Diagram pengkabelan lengkap (buat dengan Fritzing atau Tinkercad Circuits). | Nama file: skema-robot-penghindar-rintangan.png | Alt text: Skema rangkaian robot penghindar rintangan Arduino Uno

Kode Program

const int TRIG_PIN = 9;
const int ECHO_PIN = 10;

const int ENA = 5;
const int IN1 = 7;
const int IN2 = 8;
const int ENB = 6;
const int IN3 = 12;
const int IN4 = 13;

const int KECEPATAN = 150;  // 0 - 255
const int JARAK_AMAN = 20;  // dalam cm

void setup() {
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(ENA, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(ENB, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  Serial.begin(9600);
}

long bacaJarak() {
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  long durasi = pulseIn(ECHO_PIN, HIGH, 30000);  // batas waktu 30 ms
  if (durasi == 0) return 400;                   // tidak ada pantulan
  return durasi * 0.034 / 2;                     // konversi ke cm
}

void maju() {
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
  analogWrite(ENA, KECEPATAN);
  analogWrite(ENB, KECEPATAN);
}

void mundur() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
  analogWrite(ENA, KECEPATAN);
  analogWrite(ENB, KECEPATAN);
}

void belokKanan() {
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
  analogWrite(ENA, KECEPATAN);
  analogWrite(ENB, KECEPATAN);
}

void berhenti() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
  analogWrite(ENA, 0);
  analogWrite(ENB, 0);
}

void loop() {
  long jarak = bacaJarak();
  Serial.println(jarak);

  if (jarak < JARAK_AMAN) {
    berhenti();
    delay(200);
    mundur();
    delay(400);
    belokKanan();
    delay(500);
  } else {
    maju();
  }
  delay(50);
}

Cara Kerja Program

  1. Fungsi bacaJarak() mengirim pulsa ultrasonik lewat TRIG, lalu mengukur lama pantulan yang kembali di pin ECHO dan mengubahnya menjadi jarak dalam sentimeter.
  2. Jika jarak lebih kecil dari JARAK_AMAN (20 cm), robot berhenti, mundur sebentar, lalu berbelok ke kanan.
  3. Jika jalur kosong, robot terus melaju.

Tips Kalibrasi

  • Jika sebuah roda berputar terbalik, tukar dua kabel pada motor tersebut atau tukar nilai IN pada fungsi arah.
  • Atur KECEPATAN antara 120 dan 255. Nilai terlalu rendah dapat membuat motor tidak mampu bergerak.
  • Sesuaikan lama belok (angka 500 pada delay) agar robot berputar sekitar 90 derajat.
  • Pasang sensor setinggi mungkin dan hadap lurus ke depan agar pantulan stabil.

Pengembangan Lanjutan

  • Pasang sensor pada servo agar dapat menoleh ke kiri dan kanan lalu memilih arah yang lebih lega.
  • Tambahkan modul Bluetooth untuk mode kendali manual lewat ponsel.
  • Tambahkan buzzer sebagai tanda ketika rintangan terdeteksi.

[GAMBAR 4] Foto atau GIF robot menghindari kardus di lantai. | Nama file: robot-menghindari-rintangan.gif | Alt text: Robot Arduino menghindari kardus

Penutup

Dengan komponen sederhana, Anda sudah punya robot yang dapat mengambil keputusan sendiri. Jika robot belum bekerja sesuai harapan, lihat artikel kesalahan umum pemula Arduino di bawah ini.

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *