🚧 ربات مانعگریز
میایستد، نگاه میکند، تصمیم میگیرد.
سطح: چالشی ⭐⭐⭐ · مود: آردوینو (سهبعدی + کد)
قطعات لازم
- برد آردوینو Uno
- درایور موتور L293D
- موتور DC × 2
- باتری ۹ ولت (مود سهبعدی)
- سروو موتور
- حسگر فاصله (HC-SR04)
کد کامل پروژه
#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);
}
چطور اجرایش کنم؟
- شبیهساز تینکرکد فارسی را باز کن و «مود آردوینو» را انتخاب کن.
- از پنل «نمونهها»، «ربات مانعگریز» را بارگذاری کن — مدار و کد با هم میآیند.
- دکمهی اجرا ▶ را بزن و خروجی Serial و رفتار قطعات را تماشا کن.
- حالا کد را تغییر بده — عددها، پینها، ترتیب — و دوباره اجرا کن!