Cara buat robot line follower: sediakan empat bahagian β chassis 2WD dengan dua motor TT, dua sensor IR yang menghadap ke bawah untuk membaca garisan hitam, Arduino Uno yang buat keputusan, dan L298N yang memusingkan motor. Dua-dua sensor nampak putih bermakna jalan terus; sensor mana nampak hitam, ke situlah robot belok.
Macam mana robot line follower berfungsi?
Robot line follower mengikut garisan hitam di atas permukaan putih dengan logik yang sangat mudah. Dua sensor IR dipasang di depan robot, satu di kiri dan satu di kanan garisan. Selagi kedua-duanya nampak putih, robot jalan terus β garisan berada betul-betul di tengah.
Bila robot terpesong, salah satu sensor akan “terpijak” garisan hitam. Arduino hentikan motor di sebelah yang sama, jadi robot membelok kembali ke atas garisan. Kaedah ini dipanggil bang-bang control β tiada matematik rumit, sesuai sangat untuk projek RBT dan FYP.
| Sensor kiri | Sensor kanan | Tindakan robot |
|---|---|---|
| Putih | Putih | Jalan terus |
| Hitam | Putih | Belok kiri |
| Putih | Hitam | Belok kanan |
| Hitam | Hitam | Berhenti (garisan penamat atau persimpangan) |

Apa komponen yang diperlukan?
Kit chassis 2WD sudah termasuk dua motor TT, roda, caster dan skru β anda cuma tambah otak (Arduino Uno), pemacu motor (L298N), dua sensor IR dan bekalan kuasa. Semuanya dalam senarai ini.
Senarai komponen
Satu nota penting: tab motor TT dalam kit chassis 2WD perlu disolder wayar sebelum boleh disambung ke L298N. Kerja dua minit sahaja β kalau tak pernah solder, ikut panduan kami tentang cara solder header pin, tekniknya sama.
Apa fungsi L298N dalam robot line follower?
L298N ialah dual H-bridge motor driver β ia memacu dua motor DC serentak dan boleh menukar arah putaran setiap satu. Pin Arduino tak larat bekalkan arus motor, jadi L298N jadi orang tengah: Arduino bagi arahan logik, L298N bekalkan kuasa dari bateri.
Arah setiap motor dikawal oleh pasangan pin IN mengikut jadual ini (IN1/IN2 untuk motor A, IN3/IN4 untuk motor B):
| IN1 | IN2 | Motor A |
|---|---|---|
| LOW | LOW | Berhenti |
| HIGH | LOW | Pusing depan |
| LOW | HIGH | Pusing belakang |
| HIGH | HIGH | Berhenti |
Kelajuan pula dikawal melalui pin ENA dan ENB. Modul ini datang dengan jumper terpasang pada kedua-duanya β jumper terpasang bermakna motor pusing laju penuh sahaja. Cabut jumper ENA dan ENB, sambung ke pin PWM Arduino, barulah analogWrite() boleh kawal kelajuan. Robot line follower wajib kawal kelajuan β laju penuh hampir pasti terlajak garisan.
Tentang voltan: L298N guna transistor bipolar, jadi ada jatuh voltan sekitar 1.8–2.5V antara bateri dan motor mengikut datasheet ST L298. Dengan dua bateri 18650 (7.4V nominal), motor sebenarnya terima kira-kira 5–5.6V β kebetulan padan dengan motor TT yang rated 3–6V. Sebab itulah gandingan 2×18650 + L298N jadi resipi klasik robot sekolah.
Bonus: kekalkan jumper 5V-EN (regulator onboard) kerana bekalan kita bawah 12V β terminal 5V pada L298N akan keluarkan 5V yang boleh terus power Arduino Uno melalui pin 5V. Tak perlu bateri berasingan untuk Arduino. Kalau anda guna bekalan melebihi 12V, barulah jumper ini perlu dicabut. Nota: semasa upload kod melalui kabel USB, tanggalkan dulu wayar 5V dari L298N ke Arduino (atau cabut bateri) β jangan bekalkan USB dan L298N serentak ke pin 5V.
Macam mana sensor IR baca garisan hitam?
Sensor IR jenis FC-51 ini sebenarnya sensor pantulan: LED hitam memancar cahaya infrared, LED jernih di sebelahnya menunggu pantulan. Untuk line follower, kita pasang sensor menghadap ke bawah, kira-kira 1–2cm dari lantai. Permukaan putih memantul IR dengan baik; tape hitam menyerapnya.
| Permukaan bawah sensor | Pantulan IR | Output (OUT) |
|---|---|---|
| Putih | Ada pantulan | LOW (active LOW bila kesan pantulan) |
| Tape hitam | Diserap, tiada pantulan | HIGH |
Perhatikan logiknya songsang daripada jangkaan ramai: LOW bermaksud putih, HIGH bermaksud hitam. Ini punca nombor satu robot “buat hal sendiri” β kod di bawah dah guna logik yang betul.
Trimmer biru berbentuk segi empat di atas sensor pula melaraskan sensitiviti, dan inilah langkah paling kritikal seluruh projek. Ritualnya begini: letak sensor pada ketinggian sebenar di atas permukaan putih, pusing trimmer perlahan-lahan sampai LED penunjuk menyala stabil. Kemudian tolak robot ke atas tape hitam β LED mesti padam. Ulang laras sampai kedua-dua keadaan konsisten, buat untuk kedua-dua sensor.

Macam mana nak sambung wiring semua komponen?
Wiring robot ini nampak banyak tapi tersusun β L298N jadi hab di tengah. Motor kiri masuk terminal OUT1/OUT2, motor kanan OUT3/OUT4, bateri masuk terminal 12V dan GND, dan semua isyarat kawalan datang dari Arduino.
| Dari | Pin / wayar | Sambung ke |
|---|---|---|
| Holder 18650 (2 slot) | Merah (+) | L298N terminal 12V |
| Hitam (−) | L298N terminal GND + GND Arduino (mesti kongsi) | |
| L298N | Terminal 5V | Pin 5V Arduino (jumper 5V-EN kekal) |
| L298N pin kawalan | ENA (cabut jumper) | Pin 5 (PWM) |
| IN1 | Pin 7 | |
| IN2 | Pin 8 | |
| IN3 | Pin 9 | |
| IN4 | Pin 10 | |
| ENB (cabut jumper) | Pin 6 (PWM) | |
| Sensor IR kiri | VCC | 5V Arduino |
| GND | GND Arduino | |
| OUT | Pin 2 | |
| Sensor IR kanan | VCC | 5V Arduino |
| GND | GND Arduino | |
| OUT | Pin 3 |
Holder 4xAA dari kit chassis boleh digunakan untuk ujian ringkas, tapi holder 18650 2-slot dengan dua sel Li-ion memberi voltan yang jauh lebih stabil bawah beban β robot tak “mengantuk” separuh jalan.

Apa kod Arduino penuh untuk robot dua sensor?
Kod Arduino ini melaksanakan logik bang-bang. Perhatikan LAJU ditetapkan pada PWM 150, bukan 255 β pada laju penuh, robot terlepas garisan sebelum sensor sempat bertindak balas. Mula dengan 150, naikkan beransur-ansur kalau trek anda banyak lurus.
// Robot line follower 2 sensor - Arduino Uno + L298N
// Ingat: sensor IR ini active LOW - LOW = PUTIH (ada pantulan), HIGH = HITAM
const int SENSOR_KIRI = 2; // OUT sensor kiri
const int SENSOR_KANAN = 3; // OUT sensor kanan
const int ENA = 5; // PWM kelajuan motor kiri (jumper dicabut)
const int IN1 = 7;
const int IN2 = 8;
const int IN3 = 9;
const int IN4 = 10;
const int ENB = 6; // PWM kelajuan motor kanan (jumper dicabut)
const int LAJU = 150; // PWM 0-255; laju penuh mudah terlajak garisan
void setup() {
pinMode(SENSOR_KIRI, INPUT);
pinMode(SENSOR_KANAN, INPUT);
pinMode(ENA, OUTPUT); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT);
pinMode(ENB, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT);
Serial.begin(9600); // buka Serial Monitor untuk semak bacaan sensor
}
void jalanTerus() {
digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); // motor kiri depan
digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); // motor kanan depan
analogWrite(ENA, LAJU);
analogWrite(ENB, LAJU);
}
void belokKiri() {
analogWrite(ENA, 0); // motor kiri berhenti
digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
analogWrite(ENB, LAJU); // motor kanan tolak - robot pusing ke kiri
}
void belokKanan() {
digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
analogWrite(ENA, LAJU); // motor kiri tolak - robot pusing ke kanan
analogWrite(ENB, 0); // motor kanan berhenti
}
void berhenti() {
analogWrite(ENA, 0);
analogWrite(ENB, 0);
}
void loop() {
// HIGH = sensor nampak HITAM (tiada pantulan)
bool kiriHitam = (digitalRead(SENSOR_KIRI) == HIGH);
bool kananHitam = (digitalRead(SENSOR_KANAN) == HIGH);
if (!kiriHitam && !kananHitam) {
jalanTerus(); // dua-dua putih: garisan di tengah
}
else if (kiriHitam && !kananHitam) {
belokKiri(); // kiri terpijak garisan: belok kiri
}
else if (!kiriHitam && kananHitam) {
belokKanan(); // kanan terpijak garisan: belok kanan
}
else {
berhenti(); // dua-dua hitam: garisan penamat / persimpangan
}
}
Sebelum letak robot atas trek, angkat dan uji: hulur kertas putih bawah sensor kanan sahaja β sensor kiri di udara baca hitam, roda kanan patut berpusing. Kalau tindakannya terbalik, kemungkinan besar wayar motor kiri dan kanan tertukar di terminal L298N.
Macam mana nak buat trek dan tuning sensor?
Trek klasik sekolah paling murah: tape penebat elektrik hitam (lebar 18–19mm) dilekatkan atas kertas mahjong putih atau whiteboard. Buat litar oval dulu β elakkan selekoh tajam sehingga robot dah stabil. Jarak antara dua sensor patut sedikit lebih lebar daripada tape, sekitar 3–4cm, supaya kedua-duanya duduk atas putih semasa robot di tengah garisan.
Kemudian jalankan ritual trimmer di atas trek sebenar, bukan atas meja β pencahayaan bilik dan jenis lantai mempengaruhi pantulan IR. Buka Serial Monitor, print bacaan kedua-dua sensor, dan sahkan putih = LOW, hitam = HIGH pada ketinggian sebenar sensor sebelum lepaskan robot.
Nak tengok binaan yang sama dipasang dan bergerak atas trek? Video ini tunjuk gabungan Arduino, L298N dan sensor IR dari mula sampai jadi:

Kesilapan biasa yang kami nampak daripada pelanggan sebenar
Sensor dipasang terlalu tinggi
Ini kesilapan paling kerap. Pada ketinggian 4–5cm, sensor mula “nampak” pantulan dari kawasan luas β termasuk lantai di sebelah tape β dan bacaan jadi rawak. Kekalkan 1–2cm dari lantai, dan pastikan kedua-dua sensor sama tinggi.
Jumper ENA/ENB tak dicabut
Dengan jumper masih terpasang, analogWrite() langsung tiada kesan β motor pusing laju penuh dan robot terlajak setiap selekoh. Kalau robot anda laju gila dan tak endahkan nilai LAJU dalam kod, semak jumper ini dulu.
Logik sensor terbalik dalam kod
Ramai menganggap HIGH = kesan sesuatu. Untuk sensor pantulan jenis ini, LOW-lah yang bermaksud “nampak putih”. Kalau robot jalan bila patut berhenti atau belok arah bertentangan sebaik power on, print bacaan sensor ke Serial Monitor dan padankan dengan jadual di atas.
GND tak dikongsi antara Arduino dan L298N
Isyarat PWM dan IN hanya bermakna kalau Arduino dan L298N berkongsi rujukan yang sama. Lupa sambung GND Arduino ke GND L298N, motor akan berkelakuan pelik atau langsung tak bergerak β walaupun semua wayar lain betul.
FAQ
Kenapa robot saya keluar dari garisan di selekoh?
Tiga suspek: PWM terlalu tinggi (turunkan ke sekitar 130–150), selekoh trek terlalu tajam untuk logik dua sensor, atau sensitiviti trimmer belum dilaras pada trek sebenar. Selesaikan satu persatu, mula dengan kelajuan.
Boleh guna holder 4xAA yang datang dengan kit chassis?
Boleh untuk ujian ringkas, tapi voltan bateri alkaline cepat jatuh bawah beban β dan selepas L298N “makan” sekitar 2V, motor cuma dapat sekitar 3β4V. Dua bateri 18650 memberi tork dan kelajuan yang jauh lebih konsisten.
Kenapa guna Arduino Uno, bukan ESP32?
Untuk logik dua sensor tanpa WiFi, Uno lebih mudah: 5V sepenuhnya (sama voltan dengan sensor dan L298N), pin lebih lasak, dan contoh kod sekolah hampir semuanya ditulis untuk Uno. Baca perbandingan penuh dalam beza ESP32 vs ESP8266 vs Arduino Uno.
Kenapa robot berhenti bila dua-dua sensor nampak hitam?
Itu memang disengajakan dalam kod β dua-dua HIGH biasanya bermakna garisan penamat melintang atau persimpangan. Kalau anda mahu robot merentas persimpangan, tukar berhenti() kepada jalanTerus() dalam blok terakhir dan perhatikan kelakuannya.
Projek ini sesuai untuk apa selain pertandingan?
Ia asas yang bagus untuk folio RBT dan FYP kerana merangkumi sensor, pemacu motor dan logik kawalan dalam satu binaan. Kalau nak projek sekolah kedua yang guna kemahiran sama, cuba jemuran automatik sensor hujan.
Kemas kini terakhir Ogos 2026. Tersangkut? Chat dengan kami di WhatsApp.



2WD 4WD Smart Car Chassis Single Layer Acrylic Arduino Smart Car Chassis Kit With Motor - 2WD CAR KIT
Arduino Uno Compatible SMD UNO R3 with Type B Cable - ATMEGA328P with CH340G-Microcontroller Project
L298N Motor Driver Module Arduino Compatible Dual H Bridge Dual DC Motor Control Arduino Robotic Car
IR sensor Infrared Range Finder Adjustable Distance Sensor Obstacle Avoidance Arduino Robotic
3.7V 18650 Battery Rechargeable Li-Ion Battery 1200mAh 2200mAh 3200mAh Flat Top - 18650 Li-Ion Battery (2200mAh)
18650 Battery Holder 1/2/3/4 Slot 3.7V Battery Cell Housing Battery Case Battery Casing - 18650 BATTERY HOLDER(2)