पार्ट्स लिस्ट
| पार्ट | संख्या | लगभग | खरीदें |
|---|---|---|---|
| Arduino Uno R3 (compatible) | 1 | ₹450 | खरीदें Arduino Uno R3 (compatible) |
| L298N dual motor driver | 1 | ₹150 | खरीदें L298N dual motor driver |
| 2WD robot chassis kit with 2 BO gear motors and wheels | 1 | ₹450 | खरीदें 2WD robot chassis kit with 2 BO gear motors and wheels |
| 2× 18650 Li-ion cells + holder with switch (7.4 V) | 1 | ₹350 | खरीदें 2× 18650 Li-ion cells + holder with switch (7.4 V) |
| Jumper wires | 1 | ₹40 | खरीदें Jumper wires |
| TCRT5000 IR reflective sensor module | 2 | ₹80 | खरीदें TCRT5000 IR reflective sensor module |
| Black insulation tape for the track | 1 | ₹30 | खरीदें Black insulation tape for the track |
| कुल | ₹1,550 |
एफ़िलिएट सूचना: “खरीदें” लिंक से FlashReady को बिना अतिरिक्त लागत के छोटा कमीशन मिल सकता है। कीमतें अनुमानित हैं।
वायरिंग
| Arduino Uno R3 | Part · pin | Wire | Notes |
|---|---|---|---|
| — | L298N dual H-bridge motor driver · OUT1 | — | To बायाँ मोटर (+) (not drawn) |
| — | L298N dual H-bridge motor driver · OUT2 | — | To बायाँ मोटर (−) (not drawn) |
| — | L298N dual H-bridge motor driver · OUT3 | — | To दायाँ मोटर (+) (not drawn) |
| — | L298N dual H-bridge motor driver · OUT4 | — | To दायाँ मोटर (−) (not drawn) |
| 5V | TCRT5000 IR reflective sensor module · VCC | red | |
| GND | TCRT5000 IR reflective sensor module · GND | black | |
| D2 | TCRT5000 IR reflective sensor module · DO | yellow | बायाँ सेंसर |
| 5V | TCRT5000 IR reflective sensor module #2 · VCC | red | |
| GND | TCRT5000 IR reflective sensor module #2 · GND | black | |
| D3 | TCRT5000 IR reflective sensor module #2 · DO | green | दायाँ सेंसर |
| D5 | L298N dual H-bridge motor driver · ENA | orange | बाएँ मोटर की PWM स्पीड (ENA jumper हटा दें) |
| A0 | L298N dual H-bridge motor driver · IN1 | yellow | |
| A1 | L298N dual H-bridge motor driver · IN2 | green | |
| D6 | L298N dual H-bridge motor driver · ENB | purple | दाएँ मोटर की PWM स्पीड (ENB jumper हटा दें) |
| A2 | L298N dual H-bridge motor driver · IN3 | blue | |
| A3 | L298N dual H-bridge motor driver · IN4 | cyan | |
| 5V | L298N dual H-bridge motor driver · 5V | red | L298N का regulator Uno के 5V पिन को पावर देता है (5V-EN jumper लगा रहे, बैटरी ≤ 12 V); बैटरी का + 12V टर्मिनल पर |
| GND | L298N dual H-bridge motor driver · GND | black | साझा ground: बैटरी −, L298N और Uno |
| 2× 18650 Li-ion पैक (7.4 V) · + | L298N dual H-bridge motor driver · 12V | red | बैटरी होल्डर के स्विच से होकर। L298N लगभग 2 V गिराता है, इसलिए मोटरों को ~5.4 V मिलता है |
| 2× 18650 Li-ion पैक (7.4 V) · - | L298N dual H-bridge motor driver · GND | black | बैटरी −, L298N GND और Uno GND सब यहीं जुड़ते हैं |
बोर्ड की ख़ास बातें: दोनों सेंसर ज़मीन से 5–10 mm ऊपर, पहियों से थोड़ा आगे लगाएँ, और टेप की चौड़ाई से थोड़ा ज़्यादा फ़ासले पर — ताकि रोबोट बीच में हो तो दोनों को सफ़ेद दिखे। हर मॉड्यूल का trimmer तब तक घुमाएँ जब तक उसकी LED ठीक सफ़ेद से काले पर जाते समय बदले। Li-ion 18650 सेल short होने या ज़्यादा डिस्चार्ज होने पर आग पकड़ सकते हैं: स्विच वाला होल्डर, protected सेल और सही Li-ion चार्जर इस्तेमाल करें, और कार को चार्ज होते समय कभी अकेला न छोड़ें।
कोड
// Line follower robot — Arduino Uno + 2× TCRT5000 IR modules + L298N + 2 DC gear motors.
// The two sensors straddle a black line: the side that sees black steers back towards it.
// Left TCRT5000 DO → D2, right TCRT5000 DO → D3.
// L298N ENA → D5, IN1 → A0, IN2 → A1, ENB → D6, IN3 → A2, IN4 → A3.
constexpr uint8_t LEFT_SENSOR = 2, RIGHT_SENSOR = 3;
constexpr uint8_t ENA = 5, IN1 = A0, IN2 = A1; // left motor
constexpr uint8_t ENB = 6, IN3 = A2, IN4 = A3; // right motor
// Most TCRT5000 modules pull DO LOW over a white (reflective) surface and HIGH over black.
constexpr bool LINE_IS_HIGH = true;
constexpr uint8_t FAST = 160, TURN = 140; // 0–255; the L298N loses ~2 V, so don't go too low
int lastTurn = 0; // -1 = last saw the line on the left, +1 = right
void motor(uint8_t en, uint8_t a, uint8_t b, int speed) {
digitalWrite(a, speed >= 0 ? HIGH : LOW);
digitalWrite(b, speed >= 0 ? LOW : HIGH);
analogWrite(en, abs(speed));
}
void drive(int left, int right) {
motor(ENA, IN1, IN2, left);
motor(ENB, IN3, IN4, right);
}
bool onLine(uint8_t pin) {
return (digitalRead(pin) == HIGH) == LINE_IS_HIGH;
}
void setup() {
const uint8_t outputs[] = {ENA, IN1, IN2, ENB, IN3, IN4};
for (uint8_t p : outputs) pinMode(p, OUTPUT);
pinMode(LEFT_SENSOR, INPUT);
pinMode(RIGHT_SENSOR, INPUT);
drive(0, 0);
delay(2000); // time to put it down on the track
}
void loop() {
bool left = onLine(LEFT_SENSOR), right = onLine(RIGHT_SENSOR);
if (left && !right) { // line drifted left → pivot left
drive(-TURN, TURN);
lastTurn = -1;
} else if (right && !left) { // line drifted right → pivot right
drive(TURN, -TURN);
lastTurn = 1;
} else if (!left && !right) { // line between the sensors → straight on
drive(FAST, FAST);
} else { // both on black: a junction or a wide bend —
drive(lastTurn * TURN, -lastTurn * TURN); // keep turning the way we last turned
}
}// Line follower robot — Arduino Uno + 2× TCRT5000 IR modules + L298N + 2 DC gear motors.
// The two sensors straddle a black line: the side that sees black steers back towards it.
// Left TCRT5000 DO → D2, right TCRT5000 DO → D3.
// L298N ENA → D5, IN1 → A0, IN2 → A1, ENB → D6, IN3 → A2, IN4 → A3.
constexpr uint8_t LEFT_SENSOR = 2, RIGHT_SENSOR = 3;
constexpr uint8_t ENA = 5, IN1 = A0, IN2 = A1; // left motor
constexpr uint8_t ENB = 6, IN3 = A2, IN4 = A3; // right motor
// Most TCRT5000 modules pull DO LOW over a white (reflective) surface and HIGH over black.
constexpr bool LINE_IS_HIGH = true;
constexpr uint8_t FAST = 160, TURN = 140; // 0–255; the L298N loses ~2 V, so don't go too low
int lastTurn = 0; // -1 = last saw the line on the left, +1 = right
void motor(uint8_t en, uint8_t a, uint8_t b, int speed) {
digitalWrite(a, speed >= 0 ? HIGH : LOW);
digitalWrite(b, speed >= 0 ? LOW : HIGH);
analogWrite(en, abs(speed));
}
void drive(int left, int right) {
motor(ENA, IN1, IN2, left);
motor(ENB, IN3, IN4, right);
}
bool onLine(uint8_t pin) {
return (digitalRead(pin) == HIGH) == LINE_IS_HIGH;
}
void setup() {
const uint8_t outputs[] = {ENA, IN1, IN2, ENB, IN3, IN4};
for (uint8_t p : outputs) pinMode(p, OUTPUT);
pinMode(LEFT_SENSOR, INPUT);
pinMode(RIGHT_SENSOR, INPUT);
drive(0, 0);
delay(2000); // time to put it down on the track
}
void loop() {
bool left = onLine(LEFT_SENSOR), right = onLine(RIGHT_SENSOR);
if (left && !right) { // line drifted left → pivot left
drive(-TURN, TURN);
lastTurn = -1;
} else if (right && !left) { // line drifted right → pivot right
drive(TURN, -TURN);
lastTurn = 1;
} else if (!left && !right) { // line between the sensors → straight on
drive(FAST, FAST);
} else { // both on black: a junction or a wide bend —
drive(lastTurn * TURN, -lastTurn * TURN); // keep turning the way we last turned
}
}Compiled for uno on avr 1.8.8 · 3 Nov 2026
यह कैसे काम करता है
हर TCRT5000 ज़मीन पर infrared रोशनी डालता है और नापता है कि कितनी वापस लौटी। सफ़ेद सतह बहुत रोशनी लौटाती है, काला टेप बहुत कम; मॉड्यूल का comparator इसे DO पर साफ़ digital सिग्नल में बदल देता है, और trimmer से स्विच होने का पॉइंट सेट होता है।
दोनों सेंसर लाइन के दोनों तरफ़ रहते हैं। रोबोट बीच में हो तो दोनों को सफ़ेद दिखता है और वह सीधा चलता है। अगर लाइन खिसककर बाएँ सेंसर के नीचे आ जाए, तो रोबोट तब तक बाएँ घूमता है जब तक उस सेंसर को फिर सफ़ेद न दिखे; दायाँ सेंसर दूसरी तरफ़ यही करता है। यह लाइन फ़ॉलोअर का पुराना तरीका है, और यह उन मोड़ों पर भी लाइन पकड़े रहता है जहाँ एक सेंसर चूक जाता।
जब दोनों सेंसर को काला दिखे — कोई जंक्शन या बहुत तीखा मोड़ — तो रोबोट उसी तरफ़ घूमता रहता है जिधर पिछली बार घूमा था, और आमतौर पर इससे मोड़ पार हो जाता है।
L298N दोनों मोटर चलाता है; ENA और ENB पर PWM उनकी स्पीड तय करता है, और एक पहिया उल्टा घुमाने से रोबोट तेज़ी से अपनी जगह पर मुड़ता है। स्केच में दी स्पीड से शुरू करें, फिर अपने chassis और फ़र्श के हिसाब से ट्यून करें। मोटर 7.4 V Li-ion पैक से L298N के ज़रिए चलते हैं, और यही L298N Uno की 5 V लाइन को भी पावर देता है।
समस्या समाधान
यह लाइन की तरफ़ मुड़ने के बजाय उससे दूर मुड़ता है
सेंसर आपस में बदल गए हैं, या आपके मॉड्यूल उल्टा आउटपुट देते हैं। D2/D3 के तार आपस में बदलें, या LINE_IS_HIGH उलट दें।
मोड़ पर आगे निकल जाता है और लाइन खो देता है
FAST और TURN कम करें, सेंसर पहियों के axle के पास लाएँ, या चौड़ा टेप लगाएँ।
मोटर चलते ही Uno रीसेट हो जाता है
L298N लगभग 2 V गिराता है और मोटर चालू होते समय झटके से ज़्यादा करंट खींचते हैं। अच्छे, पूरे चार्ज सेल लगाएँ, 5V-EN jumper लगा रहने दें, और Uno के 5V और GND के बीच 470 µF कैपेसिटर जोड़ें।
आगे क्या करें
- बीच में तीसरा सेंसर जोड़ें और तेज़ चक्कर के लिए proportional (PID) स्टीयरिंग इस्तेमाल करें।
- ट्रैक पर रुकावट आने पर रुकने के लिए HC-SR04 जोड़ें।
- Light gate से हर चक्कर का समय नापें और LCD पर दिखाएँ।



