Pelajaran 25/31: Mobil Pintar Car-3 Menghindari Rintangan Menggunakan Sensor Inframerah | SunFounder Robojax
Proyek ini mengubah mobil pintar Arduino SunFounder 3-in-1 Anda menjadi kendaraan otonom yang menghindari rintangan. Dengan memasang dua sensor inframerah (IR)—satu di kiri dan satu di kanan—mobil dapat mendeteksi objek di jalurnya dan membuat keputusan dalam sekejap untuk menghindarinya. Ini adalah langkah fundamental dalam robotika, mengajarkan Anda cara menggabungkan input sensor dengan logika kontrol motor untuk menciptakan mesin reaktif yang dapat mengemudi sendiri. Prinsip-prinsip yang akan Anda pelajari di sini berlaku untuk berbagai aplikasi dunia nyata, termasuk:
- Membangun robot penyedot debu yang dapat bernavigasi di dalam ruangan tanpa menabrak furnitur.
- Membuat robot pengikut garis atau pemecah labirin untuk kompetisi atau proyek pendidikan.
- Mengembangkan bot patroli keamanan otomatis yang dapat berkeliling di sekeliling area dan menghindari dinding.
- Merancang mobil mainan pintar yang dapat bermain secara mandiri tanpa macet.
Panduan ini dibangun langsung dari pelajaran sebelumnya di mana Anda belajar mengendalikan motor mobil dan memahami cara kerja sensor IR. Di sini, kita akan menggabungkan keterampilan tersebut untuk menerapkan algoritma penghindaran rintangan yang sederhana namun efektif.
Cara Kerja Logika Penghindaran Rintangan
Ide utamanya sederhana: mobil menggunakan dua sensor IR untuk memeriksa rintangan di sisi kiri dan kanannya. Setiap sensor mengeluarkan sinyal digital: LOW (0) saat mendeteksi objek dalam jangkauannya (sekitar 20 cm) dan HIGH (1) saat jalur bersih. Logika kemudian menentukan tindakan mobil berdasarkan status sensor (dalam video pada 02:35):
- Rintangan di Kiri, Kanan Bersih: Mobil berbelok ke kanan untuk menghindarinya.
- Rintangan di Kanan, Kiri Bersih: Mobil berbelok ke kiri.
- Rintangan di Kedua Sisi: Mobil bergerak mundur untuk keluar dari potensi jalan buntu.
- Tidak Ada Rintangan: Mobil melaju ke depan.
Pendekatan reaktif ini adalah contoh klasik dari mesin keadaan terbatas, di mana perilaku mobil merupakan respons langsung terhadap input sensor saat ini.
Komponen Perangkat Keras
Untuk menyelesaikan proyek ini, Anda akan memerlukan komponen berikut, yang semuanya termasuk dalam kit Arduino SunFounder 3-in-1:
- 1x Kit Mobil Pintar Arduino SunFounder 3-in-1 (atau bagian yang setara)
- 2x Sensor Penghindar Rintangan Inframerah
- 1x Arduino Uno (atau papan yang kompatibel)
- 1x Motor Driver Shield/Papan
- Kabel Jumper
Panduan Pengkabelan
Penempatan sensor yang tepat sangat penting agar proyek ini berfungsi. Sensor IR harus diposisikan menghadap ke depan dan sedikit ke luar, karena sensor akan mendeteksi rintangan di sisi mobil (dalam video pada 02:07). Diagram pengkabelan berikut menunjukkan cara menghubungkan sensor ke Arduino. Harap dicatat bahwa instruktur menggunakan titik distribusi daya tertentu di breadboard mobil, tetapi koneksi ke Arduino adalah yang paling penting.
Koneksi pengkabelan adalah sebagai berikut (dalam video pada 03:47):
- Daya (VCC): Hubungkan pin VCC dari kedua sensor IR ke output 5V pada Arduino atau rel daya mobil.
- Ground (GND): Hubungkan pin GND dari kedua sensor IR ke ground bersama pada Arduino atau rel ground mobil.
- Output Sensor Kanan (OUT): Hubungkan pin output digital dari sensor IR kanan ke pin digital 7 pada Arduino.
- Output Sensor Kiri (OUT): Hubungkan pin output digital dari sensor IR kiri ke pin digital 8 pada Arduino.
Koneksi motor driver untuk motor kiri dan kanan sama seperti yang dibuat pada pelajaran sebelumnya tentang kontrol motor.
Penjelasan Kode
Kode untuk proyek ini cukup sederhana. Program utama tersedia untuk diunduh di bawah artikel ini. Di sini, kita akan fokus pada bagian yang dapat dikonfigurasi pengguna yang dapat Anda sesuaikan untuk mobil Anda sendiri.
const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;
const int rightIR = 7;
const int leftIR = 8;
Baris-baris ini mendefinisikan pin yang digunakan untuk motor driver dan sensor IR. Pin motor (A_1B, A_1A, B_1B, B_1A) mengontrol kecepatan dan arah kedua motor. Pin rightIR dan leftIR adalah tempat Anda menghubungkan kabel sinyal dari sensor. Jika Anda menggunakan pin yang berbeda, Anda akan mengubah nilai-nilai ini di sini.
int speed = 150;
Variabel ini mengatur kecepatan dasar untuk mobil. Nilainya dapat berkisar dari 0 hingga 255, di mana 255 adalah kecepatan maksimum. Nilai 150 adalah titik awal yang baik untuk belajar, karena cukup cepat untuk menarik tetapi cukup lambat untuk memberikan waktu reaksi (dalam video pada 07:10). Anda dapat menyesuaikan ini untuk membuat mobil Anda lebih cepat atau lebih lambat.
Sisa kode mendefinisikan logika dalam fungsi loop(). Fungsi ini membaca status sensor kiri dan kanan, lalu memanggil fungsi gerakan yang sesuai (moveForward(), moveBackward(), backLeft(), backRight()). Fungsi-fungsi ini telah ditentukan sebelumnya dan mengontrol driver motor untuk mencapai gerakan yang diinginkan. Instruktur juga menambahkan fungsi stop() dalam modifikasi selanjutnya untuk menghentikan mobil sejenak setelah manuver penghindaran, membuat gerakannya lebih terkontrol (dalam video pada 10:29).
Demonstrasi Proyek Langsung
Dalam video, instruktur pertama-tama mendemonstrasikan logika menggunakan Serial Monitor. Dengan meletakkan kotak di dekat sensor, Anda dapat melihat pesan yang sesuai seperti "Go Left", "Go Right", atau "Go Backward" muncul di layar, mengonfirmasi bahwa pembacaan sensor dan logika sudah benar (dalam video pada 09:11).
Setelah memverifikasi logika, instruktur menambahkan peningkatan penting: fungsi stop(). Fungsi ini menghentikan mobil sepenuhnya selama periode tertentu (misalnya, 1 detik) setelah mobil berbelok atau mundur, mencegah gerakan tersentak-sentak dan memungkinkan mobil mengevaluasi ulang lingkungannya (dalam video pada 10:29).
Terakhir, mobil diuji di lantai dengan serangkaian rintangan. Video menunjukkan mobil berhasil bermanuver di sekitar kotak, berbelok kiri, kanan, dan mundur sesuai kebutuhan untuk menemukan jalur yang jelas, mendemonstrasikan penerapan dunia nyata dari algoritma penghindaran rintangan ini (dalam video pada 12:13).
Bab
- [00:00] Pengenalan Penghindaran Rintangan dengan Sensor IR
- [01:24] Prasyarat dan Gambaran Umum Proyek
- [02:35] Cara Kerja Logika Penghindaran Rintangan
- [03:47] Menghubungkan Sensor IR dan Motor
- [05:40] Membuka dan Menjelaskan Kode
- [09:11] Menguji Logika dengan Serial Monitor
- [10:29] Menambahkan Fungsi Stop untuk Navigasi yang Lebih Halus
- [11:42] Menguji Fungsi Stop
- [12:13] Uji Praktis Akhir di Lantai
const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;
const int rightIR = 7;
const int leftIR = 8;
void setup() {
Serial.begin(9600);
//motor
pinMode(A_1B, OUTPUT);
pinMode(A_1A, OUTPUT);
pinMode(B_1B, OUTPUT);
pinMode(B_1A, OUTPUT);
//IR obstacle
pinMode(leftIR, INPUT);
pinMode(rightIR, INPUT);
}
void loop() {
int left = digitalRead(leftIR); // 0: Obstructed 1: Empty
int right = digitalRead(rightIR);
int speed = 150;
if (!left && right) {
backLeft(speed);
} else if (left && !right) {
backRight(speed);
} else if (!left && !right) {
moveBackward(speed);
} else {
moveForward(speed);
}
}
void moveForward(int speed) {
analogWrite(A_1B, 0);
analogWrite(A_1A, speed);
analogWrite(B_1B, speed);
analogWrite(B_1A, 0);
}
void moveBackward(int speed) {
analogWrite(A_1B, speed);
analogWrite(A_1A, 0);
analogWrite(B_1B, 0);
analogWrite(B_1A, speed);
}
void backLeft(int speed) {
analogWrite(A_1B, speed);
analogWrite(A_1A, 0);
analogWrite(B_1B, 0);
analogWrite(B_1A, 0);
}
void backRight(int speed) {
analogWrite(A_1B, 0);
analogWrite(A_1A, 0);
analogWrite(B_1B, 0);
analogWrite(B_1A, speed);
}
Common Course Links
Common Course Files
Sumber daya & referensi
-
DokumentasiDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
EksternalPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Berkas📁
Pustaka Arduino (zip)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB