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
| Dari | Ke |
|---|---|
| HC-SR04 VCC | 5V Arduino |
| HC-SR04 GND | GND Arduino |
| HC-SR04 TRIG | Pin D9 |
| HC-SR04 ECHO | Pin D10 |
| L298N ENA | Pin D5 (PWM) |
| L298N IN1 | Pin D7 |
| L298N IN2 | Pin D8 |
| L298N IN3 | Pin D12 |
| L298N IN4 | Pin D13 |
| L298N ENB | Pin D6 (PWM) |
| L298N OUT1, OUT2 | Motor kiri |
| L298N OUT3, OUT4 | Motor kanan |
| Baterai (+) | Terminal 12V L298N |
| Baterai (−) | GND L298N |
| GND L298N | GND 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
- Fungsi bacaJarak() mengirim pulsa ultrasonik lewat TRIG, lalu mengukur lama pantulan yang kembali di pin ECHO dan mengubahnya menjadi jarak dalam sentimeter.
- Jika jarak lebih kecil dari JARAK_AMAN (20 cm), robot berhenti, mundur sebentar, lalu berbelok ke kanan.
- 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.
