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

می‌ایستد، نگاه می‌کند، تصمیم می‌گیرد.

سطح: چالشی ⭐⭐⭐ · مود: آردوینو (سه‌بعدی + کد)

قطعات لازم

کد کامل پروژه

#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 lSpeed, int rSpeed) {
  digitalWrite(l1, lSpeed >= 0);
  digitalWrite(l2, lSpeed < 0);
  analogWrite(lEn, lSpeed >= 0 ? lSpeed : -lSpeed);

  digitalWrite(r1, rSpeed >= 0);
  digitalWrite(r2, rSpeed < 0);
  analogWrite(rEn, rSpeed >= 0 ? rSpeed : -rSpeed);
}

void setupMotors() {
  int pins[] = {l1, l2, lEn, r1, r2, rEn};
  for (int i = 0; i < 6; i++) pinMode(pins[i], OUTPUT);
}

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);
  setupMotors();
  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);
}

چطور اجرایش کنم؟

  1. شبیه‌ساز تینکرکد فارسی را باز کن و «مود آردوینو» را انتخاب کن.
  2. از پنل «نمونه‌ها»، «ربات مانع‌گریز» را بارگذاری کن — مدار و کد با هم می‌آیند.
  3. دکمه‌ی اجرا ▶ را بزن و خروجی Serial و رفتار قطعات را تماشا کن.
  4. حالا کد را تغییر بده — عددها، پین‌ها، ترتیب — و دوباره اجرا کن!
این پروژه را رایگان در شبیه‌ساز اجرا کن 🤖