🚧 ربات مانع‌گریز — رباتی که خودش راه پیدا می‌کند

بعد از مسیریاب، این دومین ربات هر کسی است — و اولین باری است که ربات واقعاً تصمیم می‌گیرد به‌جای اینکه فقط یک خط را دنبال کند.

ایده

ربات جلو می‌رود. اگر مانعی نزدیک‌تر از ۲۵ سانتی‌متر دید، می‌ایستد، به چپ و راست نگاه می‌کند و به سمتی می‌رود که فضای بیشتری دارد.

چطور «نگاه» می‌کند؟

سنسور اولتراسونیک را روی یک سروو سوار می‌کنی. سروو سر ربات را می‌چرخاند و در هر جهت فاصله را می‌خواند. این یک ترفند زیباست: با یک سنسور، دید سه‌جهته می‌گیری.

کد

#include <Servo.h>
Servo head;
const int trig = 9, echo = 10;
const int m1 = 5, m2 = 6;     // درایور موتور

long look() {
  digitalWrite(trig, LOW);  delayMicroseconds(2);
  digitalWrite(trig, HIGH); delayMicroseconds(10);
  digitalWrite(trig, LOW);
  long d = pulseIn(echo, HIGH, 30000);
  return d == 0 ? 400 : d / 58;
}

long lookAt(int angle) {
  head.write(angle);
  delay(350);                 // به سروو وقت بده برسد
  return look();
}

void forward() { analogWrite(m1, 160); analogWrite(m2, 160); }
void stopAll() { analogWrite(m1, 0);   analogWrite(m2, 0);   }
void turn(int l, int r) { analogWrite(m1, l); analogWrite(m2, r); }

void setup() {
  head.attach(11);
  pinMode(trig, OUTPUT); pinMode(echo, INPUT);
  head.write(90);
  delay(500);
}

void loop() {
  if (lookAt(90) > 25) {        // جلو باز است
    forward();
    return;
  }

  stopAll();
  delay(200);
  long right = lookAt(20);
  long left  = lookAt(160);
  head.write(90);

  if (left > right) turn(0, 180);    // به چپ بچرخ
  else              turn(180, 0);    // به راست بچرخ
  delay(500);
  stopAll();
}

سه نکته که تفاوت ایجاد می‌کند

قدم بعدی

اگر هر دو طرف بسته بود، ربات باید عقب برود و بچرخد — وگرنه در گوشه گیر می‌کند. این را خودت اضافه کن.

منطق ربات مانع‌گریز را تمرین کن 🚧

مقاله‌های دیگر

🤖

آردوینو چیست؟ راهنمای کامل برای شروع از صفر

بهترین شبیه‌ساز مدار آنلاین فارسی — چرا شبیه‌ساز، و چرا روبومیکر؟

💡

ساده‌ترین پروژه الکترونیک برای بچه‌ها: روشن‌کردن یک LED