🚧 درس 53: ربات فرار از مانع

اولین رباتی که واقعاً **تصمیم می‌گیرد**.

سطح: پیشرفته · زمان: حدود 17 دقیقه · مفاهیم: اولتراسونیک، سروو، تصمیم

قدم‌های این درس

  1. از دنبال کردن تا تصمیم گرفتن
  2. قدم ۱ — سر چرخان
  3. قدم ۲ — وقتی هر دو طرف بسته است
  4. چالش: ربات کنجکاو

نمونه‌ای از کد این درس

#include <Servo.h>
Servo head;
const int trig = 12, echo = 13;
const int l1 = 4, l2 = 5, lEn = 9;
const int r1 = 6, r2 = 7, rEn = 10;

void motors(int a, int b) {
  digitalWrite(l1, a >= 0); digitalWrite(l2, a < 0);
  analogWrite(lEn, a >= 0 ? a : -a);
  digitalWrite(r1, b >= 0); digitalWrite(r2, b < 0);
  analogWrite(rEn, b >= 0 ? b : -b);
}

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 setup() {
  head.attach(11);
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
  int pins[] = {l1, l2, lEn, r1, r2, rEn};
  for (int i = 0; i < 6; i++) pinMode(pins[i], OUTPUT);
  head.write(90);
  delay(500);
  Serial.begin(9600);
}

void loop() {
  long ahead = lookAt(90);
  Serial.print("jolo:");
  Serial.println(ahead);

  if (ahead > 25) {
    motors(170, 170);
    return;
  }

  motors(0, 0);
  delay(200);

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

  if (left > right) motors(-160, 160);
  else              motors(160, -160);

  delay(500);
  motors(0, 0);
}

چرا این درس؟

دوره‌ی تینکرکد فارسی تعاملی است: هر قدم را خودت داخل شبیه‌ساز انجام می‌دهی — مدار واقعی می‌چینی، کد واقعی اجرا می‌کنی و نتیجه را همان لحظه می‌بینی. این درس روی درس‌های قبلی ساخته شده، پس اگر تازه شروع کرده‌ای از درس ۱ بیا!

این درس را رایگان در شبیه‌ساز شروع کن 🎓

درس‌های دیگر دوره

🛤️

درس 52: ربات دنبال‌کننده‌ی خط

🦾

درس 54: بازوی رباتیک