Cara Buat Robot Line Follower Arduino (Projek Sekolah RBT)

Robot line follower Arduino atas trek tape hitam dengan chassis akrilik, roda kuning, L298N merah dan dua sensor IR biru

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)
Rajah konsep logik dua sensor IR robot line follower atas garisan hitam
Logik dua sensor: dua-dua putih = jalan terus; sensor mana nampak hitam, ke situ robot belok.

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.

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.

Sensor IR biru dipasang menghadap ke bawah kira-kira 1 hingga 2 sentimeter di atas lantai putih
Sensor dipasang menghadap ke bawah, 1–2cm dari lantai β€” dekat cukup untuk pantulan yang konsisten.

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.

Gambaran keseluruhan wiring robot line follower dengan Arduino Uno, L298N merah, dua sensor IR biru dan holder bateri 18650
Susun atur penuh: bateri β†’ L298N β†’ motor, dan L298N bekalkan 5V terus ke Arduino.

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:

Jari melaraskan trimmer biru pada sensor IR di atas permukaan putih dengan tape hitam di sebelah
Ritual tuning: laras trimmer atas putih sampai LED stabil, kemudian sahkan LED padam atas tape hitam.

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.

Leave a Reply

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