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

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

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

ساخت ربات تشخیص مانع با آردوینو و سنسور اولتراسونیک HC-SR04: راهنمای کامل مبتدی (فارسی)

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

ربات تشخیص مانع یعنی چه؟ (برای کسی که تا امروز ندیده)

ربات تشخیص مانع (Obstacle Avoidance Robot) یک وسیله متحرک کوچک است که بدون دخالت انسان، وقتی به مانعی نزدیک می‌شود، خودش می‌ایستد و مسیرش را عوض می‌کند. این کار را با کمک یک سنسور اولتراسونیک انجام می‌دهد — قطعه‌ای که دقیقاً مثل خفاش کار می‌کند: یک پالس صوتی با فرکانس بالا ارسال می‌کند، منتظر می‌ماند تا صدا به مانع برخورد کند و برگردد، سپس با توجه به زمان رفت‌وبرگشت، فاصله را با دقت سانتی‌متر محاسبه می‌کند.

محبوب‌ترین سنسور اولتراسونیک برای مبتدیان، HC-SR04 است؛ ارزان (زیر ۵۰ هزار تومان)، ساده، و با آردوینو خیلی راحت کار می‌کند. برد تشخیص آن ۲ تا ۴۰۰ سانتی‌متر است که برای اکثر پروژه‌های رباتیک خانگی کافی است.

آردوینو Nano مغز این پروژه است — یک برد کوچک‌تر و ارزان‌تر از Arduino Uno که همان قدرت را دارد و روی بردبرد خیلی بهتر جا می‌شود. L298N هم یک درایور موتور دو کانال است که به آردوینو اجازه می‌دهد دو موتور DC را با جهت و سرعت مستقل کنترل کند. ترکیب این سه قطعه با یک شاسی ۲WD آماده، یک ربات عملی و آموزنده می‌سازد که می‌توانید همین امروز شروع کنید.

محصولی که می‌سازید

یک ربات دوچرخ خودکار که با سنسور اولتراسونیک موانع را تشخیص می‌دهد، متوقف می‌شود، به سمت مسیر باز می‌چرخد و ادامه می‌دهد — تمام این‌ها بدون هیچ دخالت دستی.

  • زمان ساخت: ۲ تا ۴ ساعت
  • سطح: مبتدی کامل
  • هزینه تقریبی: ۵۰۰ هزار تا ۱ میلیون تومان
  • ارتقای بعدی: اضافه کردن سروو برای چرخش سنسور، نمایش فاصله روی LCD

ربات تشخیص مانع — نمای کلی Arduino Nano L298N درایور موتور + باتری موتور چپ موتور راست HC-SR04 سنسور در جلو — پردازش در مرکز — خروجی به موتورها

قطعات و ابزارهای لازم (BOM)

قطعه مدل پیشنهادی نقش تعداد
میکروکنترلر Arduino Nano V3 مغز ربات ۱
سنسور اولتراسونیک HC-SR04 تشخیص مانع ۱
درایور موتور L298N Module کنترل دو موتور ۱
شاسی و موتور Smart Car Chassis 2WD Kit حرکت ۱ کیت
سروو موتور (اختیاری) SG90 چرخش سنسور ۱
باتری 2S LiPo 1000mAh یا 4×AA تغذیه ۱
سیم جامپر Male-Male / Male-Female اتصالات ۲۰ عدد
ابزار هویه، مولتی‌متر، پیچ‌گوشتی مونتاژ —

مراحل ساخت گام به گام

مرحله ۱ — مونتاژ شاسی و نصب موتورها

شاسی ۲WD معمولاً شامل دو تخته اکریلیک، دو موتور DC گیربکس‌دار، دو چرخ لاستیکی، یک چرخ جلویی آزاد (Caster Wheel) و پیچ و مهره است. موتورها را طبق راهنمای کیت در کنارهای تخته پایین پیچ کنید. دقت کنید موتور چپ و راست را از هم جدا نگه دارید — در کد به آن‌ها اشاره می‌کنیم.

مرحله ۲ — نصب برد Arduino Nano و L298N

Arduino Nano را روی تخته بالایی شاسی با دوطرف‌چسب یا پایه پیچ نصب کنید. L298N را کنارش قرار دهید. سیم‌های موتور چپ را به خروجی OUT1/OUT2 و موتور راست را به OUT3/OUT4 وصل کنید. توجه: جهت موتور بعداً با کد قابل تنظیم است؛ الان فقط وصل کنید.

مرحله ۳ — نصب HC-SR04 در جلوی ربات

سنسور HC-SR04 باید دقیقاً رو به جلو و موازی با زمین نصب شود. می‌توانید آن را با دوطرف‌چسب یا براکت پلاستیکی جلوی شاسی ببندید. اگر سروو SG90 دارید، آن را زیر سنسور نصب کنید تا سنسور بتواند چپ و راست را هم اسکن کند.

مرحله ۴ — سیم‌کشی کامل

جدول اتصالات:

قطعه پین قطعه پین Arduino Nano
HC-SR04 VCC 5V
HC-SR04 GND GND
HC-SR04 Trig D9
HC-SR04 Echo D10
L298N IN1 D5
L298N IN2 D6
L298N IN3 D7
L298N IN4 D8
L298N ENA / ENB 5V (فعال ثابت) یا D3/D11 برای PWM
L298N 12V / GND باتری مستقیم
L298N 5V OUT VIN آردوینو (اگر ولتاژ باتری ≤ ۱۲V)

مرحله ۵ — آپلود کد

Arduino IDE را باز کنید، برد را روی Arduino Nano و پروسسور را روی ATmega328P (Old Bootloader) تنظیم کنید. کد زیر را کپی کنید و آپلود کنید:

کد کامل


// ربات تشخیص مانع با HC-SR04 و L298N
// پروژه آموزشی — Project Leon

const int TRIG = 9;
const int ECHO = 10;
const int IN1  = 5;
const int IN2  = 6;
const int IN3  = 7;
const int IN4  = 8;
const int ENA  = 3;   // PWM برای سرعت موتور چپ
const int ENB  = 11;  // PWM برای سرعت موتور راست

const int STOP_DIST   = 20;  // سانتی‌متر — اگر کمتر از این شد، بایست
const int SPEED_FULL  = 200; // 0–255
const int SPEED_TURN  = 180;

float getDistance() {
  digitalWrite(TRIG, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG, LOW);
  long duration = pulseIn(ECHO, HIGH, 25000); // timeout 25ms
  if (duration == 0) return 400; // سنسور چیزی ندید — مسیر باز
  return duration * 0.0343 / 2.0;
}

void moveForward() {
  analogWrite(ENA, SPEED_FULL); analogWrite(ENB, SPEED_FULL);
  digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
}

void stopMotors() {
  analogWrite(ENA, 0); analogWrite(ENB, 0);
  digitalWrite(IN1, LOW); digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW); digitalWrite(IN4, LOW);
}

void turnRight() {
  analogWrite(ENA, SPEED_TURN); analogWrite(ENB, SPEED_TURN);
  digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);  // موتور چپ جلو
  digitalWrite(IN3, LOW);  digitalWrite(IN4, HIGH); // موتور راست عقب
}

void setup() {
  Serial.begin(9600);
  pinMode(TRIG, OUTPUT);
  pinMode(ECHO, INPUT);
  pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT);
  pinMode(ENA, OUTPUT); pinMode(ENB, OUTPUT);
  Serial.println("Robot ready!");
}

void loop() {
  float d = getDistance();
  Serial.print("Distance: "); Serial.print(d); Serial.println(" cm");

  if (d < STOP_DIST) {
    stopMotors();
    delay(300);
    turnRight();
    delay(500);
    stopMotors();
    delay(100);
  } else {
    moveForward();
  }
  delay(50);
}

چک‌لیست تست و تیون

تست نتیجه مورد انتظار اگر درست نبود
سریال مانیتور را باز کنید — فاصله نمایش داده می‌شود؟ عدد بین ۲ تا ۴۰۰ تغییر می‌کند سیم‌های Trig/Echo را چک کنید
مانع را جلوی سنسور بگذارید — می‌ایستد؟ موتورها قطع می‌شوند STOP_DIST را افزایش دهید
پس از توقف — می‌پیچد؟ تقریباً ۹۰ درجه می‌چرخد delay چرخش را تنظیم کنید
ربات خط مستقیم می‌رود؟ کج نمی‌رود SPEED_FULL دو موتور را جداگانه تنظیم کنید
موتور گرم نمی‌شود؟ دمای معمولی SPEED_FULL را کم کنید

HC-SR04 Arduino Nano تصمیم‌گیری L298N درایور موتور موتورها حرکت جریان داده: اندازه‌گیری → تصمیم → اجرا

ایده‌های ارتقا

  • اضافه کردن سروو SG90 برای چرخش سنسور و اسکن چپ/راست قبل از تصمیم‌گیری
  • افزودن سنسور IR برای تشخیص لبه میز (Cliff Detection)
  • نمایش فاصله روی صفحه OLED 128×64
  • اضافه کردن ماژول HC-05 Bluetooth برای نظارت از گوشی
  • جایگزین کردن L298N با BTS7960 برای موتورهای قوی‌تر

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


منابع بیشتر (فارسی اول)

  • آپارات: ربات تشخیص مانع آردوینو
  • ویرگول: آموزش HC-SR04
  • Last Minute Engineers: HC-SR04 Tutorial
  • Arduino Project Hub: Obstacle Avoidance
برچسب‌ها: HC-SR04 UGV آردوینو آموزش گام‌به‌گام ربات تشخیص مانع سنسور اولتراسونیک مبتدی
​
مطلب بعدی راهنمای عملی مبتدی GPS: ساخت GPS Logger / Test Puck برای تست UGV و UAV (فارسی) مطلب قبلی ساخت ماشین FPV با ESP32-CAM: تصویر زنده، کنترل از مرورگر وب و راهنمای کامل مبتدی (فارسی)
</> Make for Iran – بسازیم برای ایران

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

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

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

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

پیوندها

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

آخرین مطالب

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