</> Make for Iran – بسازیم برای ایران

پروژه‌ها، آموزش‌ها و ابزارها برای سازندگان و علاقه‌مندان الکترونیک

  • خانه
  • الکترونیک
  • پرینت سه‌بعدی
  • حکاکی و برش لیزری
  • ابزار کارگاهی
  • پهپاد
  • ربات زمینی UGV
  • ربات پرنده UAV
  • صنایع دستی
  • آموزش
  • پروژه‌ها
  • درباره ما
خانه›ربات‌های زمینی (UGV)›ساخت ربات خط‌دنبال‌کن با آردوینو و سنسور IR: راهنمای کامل مبتدی + کد PID (فارسی)
ربات‌های زمینی (UGV) پروژه‌ها

ساخت ربات خط‌دنبال‌کن با آردوینو و سنسور IR: راهنمای کامل مبتدی + کد PID (فارسی)

​ ژوئن 10, 2026 2 دقیقه مطالعه
ربات Line Follower با آردوینو

ربات خط‌دنبال‌کن یعنی چه؟ (برای مبتدی)

ربات خط‌دنبال‌کن (Line Follower) یکی از کلاسیک‌ترین و آموزنده‌ترین پروژه‌های رباتیک است. ربات یک خط سیاه روی زمین سفید (یا برعکس) را می‌بیند و دقیقاً روی آن حرکت می‌کند — مثل خطوط کارخانه‌ای که AGVها (Automated Guided Vehicles) از روی آن مسیر خود را پیدا می‌کنند. این فناوری پایه سیستم‌های لجستیک خودکار در انبارهای بزرگ است.

این ربات از سنسورهای IR (فروسرخ) برای دیدن خط استفاده می‌کند. یک LED فروسرخ نور ارسال می‌کند؛ سطح سفید نور را بازتاب می‌دهد و سطح سیاه آن را جذب می‌کند. یک فتودیود یا فتوترانزیستور این تفاوت را اندازه می‌گیرد. اکثر ماژول‌های آماده IR یک پتانسیومتر برای تنظیم حساسیت دارند.

پیشرفته‌ترین نسخه این ربات از یک کنترل‌کننده PID استفاده می‌کند — همان الگوریتمی که در پهپادهای FPV و هواپیماهای خودکار به کار می‌رود. با PID، ربات به‌جای on/off کردن، سرعت هر موتور را به‌طور پیوسته تنظیم می‌کند و روی خط می‌ماند.

دو نسخه که یاد می‌گیرید

نسخه ۱ — ساده (ON/OFF): برای اولین بار ساختن و درک اصول.

نسخه ۲ — PID: برای حرکت روان‌تر و سرعت بیشتر روی پیچ‌ها.

  • زمان: ۲ تا ۴ ساعت
  • هزینه: ۴۰۰ تا ۸۰۰ هزار تومان
  • سطح: مبتدی (نسخه ۱) — متوسط (نسخه PID)

Arduino Nano + L298N ۵ عدد سنسور IR چپ راست سنسورها در زیر — موتورها در کنار — مغز در وسط

قطعات لازم (BOM)

قطعه مدل / تعداد
Arduino Nano ۱ عدد
سنسور IR TCRT5000 × ۵ عدد (یا ماژول ۵-تایی آماده)
درایور موتور L298N یا TB6612FNG × ۱
شاسی کیت ۲WD با موتور گیربکس‌دار × ۱
باتری 4×AA یا LiPo 2S

کد نسخه ۱ — ساده (ON/OFF)


// ربات خط‌دنبال‌کن — نسخه ساده
const int IR_L  = A0;  // سنسور چپ
const int IR_C  = A1;  // سنسور مرکز
const int IR_R  = A2;  // سنسور راست

const int IN1=5, IN2=6, IN3=7, IN4=8;
const int ENA=3, ENB=11;
const int SPD=200;

void fwd()   { analogWrite(ENA,SPD); analogWrite(ENB,SPD); digitalWrite(IN1,HIGH);digitalWrite(IN2,LOW);digitalWrite(IN3,HIGH);digitalWrite(IN4,LOW); }
void left()  { analogWrite(ENA,120); analogWrite(ENB,SPD); digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH);digitalWrite(IN3,HIGH);digitalWrite(IN4,LOW); }
void right() { analogWrite(ENA,SPD); analogWrite(ENB,120); digitalWrite(IN1,HIGH);digitalWrite(IN2,LOW);digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); }
void stop_m(){ analogWrite(ENA,0);   analogWrite(ENB,0);   digitalWrite(IN1,LOW); digitalWrite(IN2,LOW); digitalWrite(IN3,LOW); digitalWrite(IN4,LOW); }

void setup() { for(int p:{IN1,IN2,IN3,IN4,ENA,ENB}) pinMode(p,OUTPUT); }

void loop() {
  int L = analogRead(IR_L) < 400 ? 1 : 0;  // 1 = روی خط سیاه
  int C = analogRead(IR_C) < 400 ? 1 : 0;
  int R = analogRead(IR_R) < 400 ? 1 : 0;

  if (!L && C && !R)  fwd();
  else if (L && !R)   left();
  else if (!L && R)   right();
  else if (!C)        stop_m();  // خط پیدا نشد
  delay(10);
}

کد نسخه ۲ — PID پیشرفته


// ربات خط‌دنبال‌کن — کنترل PID (۵ سنسور)
const int S[5] = {A0, A1, A2, A3, A4};  // چپ به راست
const int IN1=5,IN2=6,IN3=7,IN4=8,ENA=3,ENB=11;
const int BASE_SPD = 180;

float Kp=25, Ki=0.01, Kd=15;
float prev_error=0, integral=0;

int readLine() {
  int vals[5], sum=0, wsum=0;
  for(int i=0;i<5;i++){
    vals[i] = analogRead(S[i]) < 400 ? 1 : 0;
    wsum += vals[i] * i * 1000;
    sum  += vals[i];
  }
  if(sum==0) return prev_error > 0 ? 4000 : 0;
  return wsum / sum;
}

void setMotors(int l, int r) {
  l = constrain(l, 0, 255); r = constrain(r, 0, 255);
  analogWrite(ENA, l); analogWrite(ENB, r);
  digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
}

void setup() {
  for(int p:{IN1,IN2,IN3,IN4,ENA,ENB}) pinMode(p, OUTPUT);
}

void loop() {
  int pos = readLine();  // 0–4000 (مرکز = 2000)
  float error = pos - 2000;
  integral += error;
  float derivative = error - prev_error;
  float correction = Kp*error + Ki*integral + Kd*derivative;
  prev_error = error;

  int leftSpd  = BASE_SPD + correction;
  int rightSpd = BASE_SPD - correction;
  setMotors(leftSpd, rightSpd);
  delay(10);
}

تنظیم PID برای Line Follower

  • اول Kp را تنظیم کنید: Ki=0 و Kd=0 بگذارید. Kp را افزایش دهید تا ربات روی خط بماند ولی نلرزد.
  • بعد Kd: لرزش را کاهش می‌دهد. آهسته افزایش دهید.
  • آخر Ki: برای خطای ماندگار در پیچ‌های تند. معمولاً خیلی کوچک.

چک‌لیست تست

تست نتیجه
پتانسیومتر سنسور IR تنظیم شده؟ LED سنسور روی خط روشن / روی سفید خاموش
ربات روی خط مستقیم درست حرکت می‌کند؟ بله
در پیچ ۹۰ درجه می‌چرخد؟ بله
پس از از دست دادن خط برمی‌گردد؟ با Kd بهتر می‌شود

ربات خط سیاه روی زمین — ربات مسیر را دنبال می‌کند

ویدئوهای آموزشی


منابع بیشتر

  • آپارات: ربات خط‌دنبال‌کن آردوینو
  • Instructables: Line Follower Robot
  • Wikipedia: AGV — Autonomous Guided Vehicle
برچسب‌ها: AGV IR Sensor Line Follower PID UGV آردوینو آموزش گام‌به‌گام مبتدی
​
مطلب بعدی راهنمای کامل ELRS: نصب، بایند و تنظیم ExpressLRS برای مبتدی — متصل شدن در ۳۰ دقیقه (فارسی) مطلب قبلی ساخت دستگاه Meshtastic با TTGO LoRa32: شبکه پیام‌رسانی بدون اینترنت برای مبتدی (فارسی)
</> Make for Iran – بسازیم برای ایران

پروژه‌ها، آموزش‌ها و ابزارها برای سازندگان و علاقه‌مندان الکترونیک

یاد بگیر، بساز، به اشتراک بگذار. جامعه‌ای برای سازندگان، مهندسان و علاقه‌مندان به فناوری در ایران.

دسته‌بندی‌ها

  • پروژه‌ها
  • ربات‌های پرنده (UAV)
  • آموزش
  • ربات‌های زمینی (UGV)
  • الکترونیک
  • پهپاد و مولتی‌روتور

پیوندها

  • خانه
  • درباره ما
  • تماس
  • فید RSS

آخرین مطالب

  • خلاصه دوره ArduPilot/iNAV و گام‌های بعدی (فارسی)
  • رادیو تله‌متری در مقابل LTE/4G برای کنترل از راه دور (فارسی)
  • Ground Station روی موبایل و تبلت — QGroundControl و Solex (فارسی)
  • راه‌اندازی Ground Station با Mission Planner (فارسی)
© 2026 Make for Iran – بسازیم برای ایران. تمامی حقوق محفوظ است.
ساخته شده با ❤️ برای سازندگان ایران  |  ورود