معرفی لیگ:
🔧🤖 لیگ طراحی و ساخت ربات 🤖🔧
🔥 چی هست؟
یه رقابت هیجانانگیز و چالشی توی مسابقات ایران اپن که قراره مهارت فنی و خلاقیتتون رو محک بزنه! 😎💡
🎯 چجوریه؟
1️⃣ داوران یه چالش خاص مطرح میکنن 🎤🤔
2️⃣ شما و تیمتون باید توی یه زمان محدود یه ربات بسازید 🏗️🤖
3️⃣ بعد از ساخت، رباتها توی یه پیست مخصوص با هم رقابت میکنن 🚀🏁
4️⃣ هر تیمی که بتونه بهترین عملکرد رو داشته باشه، برنده میشه! 🏆🎉
🔍 چه نوع رباتهایی میتونیم بسازیم؟
✅ رباتهایی که با بلوتوث کنترل میشن 📶🔵
✅ ربات تعقیبکننده خط 🚗➡️
✅ رباتی که اشیا رو تشخیص میده و از روی موانع رد میشه 🏗️👀
✅ رباتی که میتونه هدف رو نشونه بگیره و تیر بزنه 🎯⚡
✅ و کلی مدل خفن دیگه! 🤯🔩
🛠️ چه قطعاتی مجازن؟
✔️ برد آردوینو و ESP32 🖥️🔌
✔️ انواع سنسورها (تشخیص نور، فاصله و …) 🔍📡
✔️ موتورهای الکتریکی برای حرکت 🚗⚙️
✔️ نمایشگرهای LCD و LED 📺💡
❌ استفاده از بعضی قطعات خاص ممنوعه، پس حواستون باشه 🚫⚠️
💡 چرا شرکت کنیم؟
✅ یادگیری الکترونیک و برنامهنویسی 🧠💻
✅ تقویت کار تیمی و حل مسئله 🤝🔍
✅ تجربه یه رقابت واقعی و حرفهای 🚀🏅
پس اگه عاشق چالش و ساختن چیزای جدیدی، این لیگ منتظرته! 🎉🔧🚀
🚀 روند مسابقات طراحی و ساخت ربات 🤖
🔹 ساخت ربات
📌 تیمها باید با استفاده از وسایل مجاز، ربات خودشون رو متناسب با چالش مسابقه بسازن. 🛠️🔩
🔹 تحویل ربات و قرنطینه
📌 بعد از ساخت، رباتها به قرنطینه میرن تا برای رقابت آماده بشن. (مدت قرنطینه: ۴۵ تا ۱۵ دقیقه قبل از شروع راند). ⏳🚗
📌 ⛔ تیمی که دیر برسه، از مسابقه حذف میشه!
🔹 خروج از قرنطینه
📌 اعضای تیم بعد از تحویل ربات میتونن قرنطینه رو ترک کنن، اما تا پایان زمان مسابقه امکان برگشت وجود نداره! 🚪🚫
🔹 حضور اجباری قبل از مسابقه
📌 ۵ دقیقه قبل از شروع راند، تیمها باید در محل مسابقه حاضر باشن. در غیر این صورت، از مسابقه حذف میشن. 🚷❌
🔥 پس حواستون باشه به موقع حاضر بشین تا شانس برنده شدن رو از دست ندین! 🏆🎯
متن سربرگ خود را وارد کنید
در اینجا یک نسخه جذابتر و مناسبتر برای دانشآموزان با استفاده از ایموجیها آورده شده است:
✨ قوانین عمومی لیگ طراحی و ساخت 🤖 ✨
📌 ۱- ارتباط با خارج از زمین مسابقه 🚫📢
در زمان قرنطینه، صحبت کردن، تبادل اطلاعات، استفاده از فلش، هارد، ماژول و… کاملاً ممنوع است. ❌ در صورت مشاهده، تیم حذف خواهد شد.
🌐 ۲- ارتباط با اینترنت 📡📴
در صورت نیاز به اینترنت برای برنامهریزی ربات، داور مربوطه باید مطلع شود. در غیر این صورت، تیم حذف میشود.
🔍 ۳- پیشبینی نشدهها 😲⚠
اگر اتفاق غیرمنتظرهای رخ دهد، داور تصمیم نهایی را میگیرد.
🔴 ۴- امتیاز منفی ❌🎯
در صورت دریافت امتیاز منفی، امتیاز صفر لحاظ خواهد شد.
👨✈️ ۵- کاپیتان تیم و ثبت رکورد 🏆📝
تنها کاپیتان تیم میتواند درخواست ثبت رکورد را داشته باشد.
🎯 با رعایت این قوانین، مسابقهای هیجانانگیز و عادلانه داشته باشید! 🚀🤩
این نسخه قوانین را برای دانشآموزان جذابتر و قابل فهمتر میکند! 😊🚀
پروژه 1 : کنترل موتور دسی سی با جو استیک:
سلام دوستان! امروز میخواهیم یاد بگیریم که چطور یک موتور DC رو با استفاده از درایور L298N و جویاستیک کنترل کنیم. این کار خیلی جالبه و بهتون کمک میکنه پروژههای رباتیکی خودتون رو بسازید. 😃
🎯 وسایل مورد نیاز:
✅ آردوینو UNO
✅ ماژول درایور موتور L298N
✅ دو عدد موتور DC (۱۲ ولت)
✅ جویاستیک
✅ باتری ۳ عدد ۱۸۶۵۰ لیتیوم-یون (۳.۷ ولت)
✅ سیمهای جامپر
🛠️ مرحله ۱: آشنایی با ماژول L298N
ماژول L298N یک درایور دو کاناله است که میتواند دو موتور DC را بهطور همزمان کنترل کند. این ماژول دارای ترمینالهای خروجی برای اتصال موتورها و پینهای کنترلی برای کنترل جهت و سرعت آنها است.
🔌 مرحله ۲: اتصالات مدار
حالا وقتشه که اتصالات رو انجام بدیم! 👇
۱. اتصال موتورها به L298N
🔹 موتور سمت چپ را به خروجی Motor A درایور متصل کنید.
🔹 موتور سمت راست را به خروجی Motor B درایور متصل کنید.
۲. اتصال تغذیه (برق)
⚡ توجه: مراقب باشید که ولتاژها را اشتباه وصل نکنید، چون ممکنه مدار آسیب ببینه!
🔺 باتری ۱۸۶۵۰ (۳ عدد) بهصورت سری بسته شدهاند و ۱۱.۱ ولت خروجی دارند.
🔹 سیم قرمز (مثبت) را به +12V درایور L298N متصل کنید.
🔹 سیم مشکی (منفی) را به GND درایور متصل کنید.
🔹 همچنین، پین ۵V درایور را به 5V آردوینو وصل کنید.
۳. اتصال درایور L298N به آردوینو
🔸 پینهای کنترل موتور A:
🟢 IN1 ➝ پین 6 آردوینو
🔵 IN2 ➝ پین 7 آردوینو
🔸 پینهای کنترل موتور B:
🟢 IN3 ➝ پین 8 آردوینو
🔵 IN4 ➝ پین 9 آردوینو
🔸 پینهای سرعت (PWM):
⚡ ENA ➝ پین 10 آردوینو
⚡ ENB ➝ پین 11 آردوینو
۴. اتصال جویاستیک به آردوینو
🎮 جویاستیک برای کنترل سرعت و جهت حرکت استفاده میشود.
🔹 VRX (خروجی محور X) ➝ پین A0 آردوینو
🔹 VRY (خروجی محور Y) ➝ پین A1 آردوینو
🔹 GND ➝ GND آردوینو
🔹 VCC ➝ 5V آردوینو
🏆 مرحله ۳: کدنویسی آردوینو
حالا که اتصالات انجام شد، باید کد آردوینو رو بنویسیم تا جویاستیک بتونه موتورها رو کنترل کنه. شما میتونید از این کد ساده استفاده کنید:
کد نویسی این بخش:
#define ENA 10
#define ENB 11
#define IN1 6
#define IN2 7
#define IN3 8
#define IN4 9
#define VRX A0
#define VRY A1
void setup() {
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
Serial.begin(9600);
}
void loop() {
int xValue = analogRead(VRX);
int yValue = analogRead(VRY);
Serial.print("X: "); Serial.print(xValue);
Serial.print(" | Y: "); Serial.println(yValue);
if (yValue > 600) {
// حرکت به جلو
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
} else if (yValue < 400) {
// حرکت به عقب
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
} else {
// توقف
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
delay(100);
}
⚠️ نکات ایمنی مهم
🔴 قبل از اتصال باتری، تمام سیمکشیها را بررسی کنید.
🔴 ولتاژ ورودی L298N نباید بیشتر از ۱۲ ولت باشد.
🔴 هنگام کار با باتریهای لیتیوم-یون، مراقب اتصال کوتاه باشید.
🎉 نتیجه نهایی:
حالا جویاستیک شما میتواند موتورها را کنترل کند! اگر جویاستیک را به جلو ببرید، موتورها به جلو حرکت میکنند، و اگر به عقب بکشید، موتورها به عقب خواهند رفت. 🚗💨
پروژه 2: کنترل موتور ها با درگاه سریال:
🚀 کنترل موتورهای DC با سریال مانیتور (بدون جویاستیک)
حالا که یاد گرفتیم چطور موتورهای DC رو با جویاستیک کنترل کنیم، بیایید کنترل با سریال مانیتور رو امتحان کنیم. توی این روش، ما از Serial Monitor در نرمافزار Arduino IDE استفاده میکنیم تا دستورات حرکت موتورها رو وارد کنیم.
🎯 ایده کلی
ما با ارسال دستورات خاصی از طریق Serial Monitor به آردوینو، جهت حرکت موتورها رو تعیین میکنیم. مثلاً:
✅ F
➝ حرکت به جلو
✅ B
➝ حرکت به عقب
✅ L
➝ چرخش به چپ
✅ R
➝ چرخش به راست
✅ S
➝ توقف
🛠️ اصلاح کد برای کنترل با سریال مانیتور
📌 کد زیر را در آردوینو آپلود کنید:
#define ENA 10
#define ENB 11
#define IN1 6
#define IN2 7
#define IN3 8
#define IN4 9
void setup() {
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
Serial.begin(9600); // ارتباط سریال با سرعت 9600
Serial.println("Serial Monitor Ready! Enter a command:");
}
void loop() {
if (Serial.available() > 0) {
char command = Serial.read(); // دریافت داده از سریال مانیتور
Serial.print("Command received: ");
Serial.println(command);
switch (command) {
case 'F': // حرکت به جلو
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
Serial.println("Moving Forward");
break;
case 'B': // حرکت به عقب
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
Serial.println("Moving Backward");
break;
case 'L': // چرخش به چپ
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
Serial.println("Turning Left");
break;
case 'R': // چرخش به راست
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
Serial.println("Turning Right");
break;
case 'S': // توقف
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
Serial.println("Stopped");
break;
default:
Serial.println("Invalid Command! Use F, B, L, R, or S.");
break;
}
}
}
🎮 آموزش گامبهگام اجرا برنامه
✅ ۱. نرمافزار Arduino IDE را باز کنید.
✅ ۲. کد بالا را کپی کرده و روی برد آردوینو آپلود کنید.
✅ ۳. از منوی Tools
گزینه Serial Monitor
را باز کنید.
✅ ۴. در قسمت ورودی، یکی از دستورات زیر را تایپ کرده و ENTER
را بزنید:
F
➝ برای حرکت به جلوB
➝ برای حرکت به عقبL
➝ برای چرخش به چپR
➝ برای چرخش به راستS
➝ برای توقف
💡 نکته: مطمئن شوید که در سریال مانیتور سرعت ارتباط (Baud Rate) روی 9600 تنظیم شده باشد.
⚠️ نکات ایمنی مهم
🔴 قبل از اجرا، سیمکشی مدار را چک کنید تا اتصالی نداشته باشد.
🔴 مطمئن شوید که باتریها ولتاژ مناسب دارند و بیش از ۱۲ ولت به درایور ندهید.
🔴 هنگام کار با موتور، درایور و باتریها داغ نشوند.
🎉 نتیجه نهایی
حالا میتونید موتورها رو با تایپ دستورات در سریال مانیتور کنترل کنید! این روش برای دیباگ کردن (خطایابی) و تست پروژههای رباتیکی خیلی کاربردیه. 😃💡
پروژه 3: کنترل ربات با بلوتوث و اپ تلفن همراه
🚀 کنترل ربات با بلوتوث و آردوینو
حالا میخوایم ربات خودمون رو با بلوتوث کنترل کنیم! توی این پروژه، با استفاده از ماژول بلوتوث HC-05 یا HC-06 و اپلیکیشن موبایل، میتونیم ربات رو در جهات مختلف هدایت کنیم. 😃
🎯 ایده کلی
✅ موبایل به ماژول بلوتوث متصل میشود.
✅ از طریق اپلیکیشن، فرمانهای F
, B
, L
, R
, S
ارسال میشود.
✅ آردوینو این فرمانها را خوانده و به L298N ارسال میکند.
✅ موتورها طبق دستورات حرکت میکنند.
🛠️ اتصالات مدار
۱. اتصال موتورها به L298N
🔹 دو موتور سمت چپ به خروجی Motor A وصل شوند.
🔹 دو موتور سمت راست به خروجی Motor B وصل شوند.
۲. اتصال تغذیه
🔺 باتریها (۶ عدد AA = ۹V) به +12V و GND درایور متصل شوند.
🔺 GND درایور به GND آردوینو متصل شود.
🔺 5V درایور به 5V آردوینو متصل شود.
۳. اتصال L298N به آردوینو
✅ IN1 → پین 6
✅ IN2 → پین 7
✅ IN3 → پین 8
✅ IN4 → پین 9
✅ ENA (PWM) → پین 10
✅ ENB (PWM) → پین 11
۴. اتصال ماژول بلوتوث (HC-05 / HC-06)
✅ VCC → 5V آردوینو
✅ GND → GND آردوینو
✅ TX (بلوتوث) → پین 10 آردوینو
✅ RX (بلوتوث) → پین 11 آردوینو
⚠️ نکته: چون ماژول بلوتوث با ۳.۳ ولت کار میکند، بهتر است از یک مقاومت تقسیمکننده روی RX آن استفاده کنیم.
#include
SoftwareSerial BT(10, 11); // RX | TX برای بلوتوث
#define ENA 10
#define ENB 11
#define IN1 6
#define IN2 7
#define IN3 8
#define IN4 9
void setup() {
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
Serial.begin(9600);
BT.begin(9600); // تنظیم سرعت ماژول بلوتوث
Serial.println("Ready to Connect!");
}
void loop() {
if (BT.available()) {
char command = BT.read();
Serial.print("Received: ");
Serial.println(command);
switch (command) {
case 'F': // حرکت به جلو
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
Serial.println("Moving Forward");
break;
case 'B': // حرکت به عقب
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
Serial.println("Moving Backward");
break;
case 'L': // چرخش به چپ
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
Serial.println("Turning Left");
break;
case 'R': // چرخش به راست
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
Serial.println("Turning Right");
break;
case 'S': // توقف
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
Serial.println("Stopped");
break;
default:
Serial.println("Invalid Command!");
break;
}
}
}
📱 چطور با گوشی ربات رو کنترل کنیم؟
۱. اپلیکیشن Vira Controller را از فروشگاه بازار دانلود کنید.
۲. بلوتوث گوشی را روشن کنید و به ماژول بلوتوث (HC-05 یا HC-06) متصل شوید.
۳. در برنامه، دکمههای جهتیابی را فشار دهید یا دستورات F
, B
, L
, R
, S
را ارسال کنید تا ربات حرکت کند! 🚗💨
⚠️ نکات ایمنی مهم
🔴 قبل از اتصال بلوتوث، مطمئن شوید که ولتاژ RX بیشتر از ۳.۳ ولت نباشد.
🔴 از اتصالات صحیح باتریها اطمینان حاصل کنید تا از داغ شدن بیش از حد جلوگیری شود.
🔴 اگر ربات کار نکرد، بررسی کنید که GND تمامی ماژولها به درستی متصل باشد.
🎉 نتیجه نهایی
حالا شما میتوانید ربات خود را با اپلیکیشن ویرا کنترلر از طریق بلوتوث هدایت کنید! 😃🔥
پروژه 4: راه اندازی ربات نوریاب:
🚀 پروژه ربات نوریاب با آردوینو و L298N
در این پروژه، ربات به سمت نور حرکت میکند! 🌞🚗
ما از دو حسگر نور (LDR) برای تشخیص شدت نور در دو سمت استفاده میکنیم. اگر سمت چپ نور بیشتری دریافت کند، ربات به چپ میچرخد و برعکس. در ادامه دو مرحله داریم:
1️⃣ تست حسگرهای نور و نمایش مقدار آنها در سریال مانیتور
2️⃣ راهاندازی ربات نوریاب بر اساس مقدار حسگرها
🛠️ سیمکشی و مدار ربات نوریاب
۱. اتصال دو حسگر نور (LDR) به آردوینو
🔹 LDR1 → به A0 متصل شود
🔹 LDR2 → به A1 متصل شود
🔹 یکی از پایههای هر LDR به 5V متصل شود
🔹 پایه دیگر به GND از طریق مقاومت 10KΩ و همچنین به ورودیهای A0 و A1 متصل شود
۲. اتصال موتور درایور L298N به آردوینو
✅ IN1 → پین 6
✅ IN2 → پین 7
✅ IN3 → پین 8
✅ IN4 → پین 9
✅ ENA (PWM) → پین 10
✅ ENB (PWM) → پین 11
✅ GND به GND آردوینو
✅ +12V از باتری
۱. تست مقدار حسگرهای نوری در سریال مانیتور
این کد مقدار نور هر حسگر را در سریال مانیتور نمایش میدهد:
#define LDR_Left A0
#define LDR_Right A1
void setup() {
Serial.begin(9600);
}
void loop() {
int leftLight = analogRead(LDR_Left);
int rightLight = analogRead(LDR_Right);
Serial.print("Left: ");
Serial.print(leftLight);
Serial.print(" | Right: ");
Serial.println(rightLight);
delay(500); // هر نیم ثانیه مقدار جدید بخواند
}
🛠️ نحوه تست:
1️⃣ کد را روی آردوینو آپلود کنید
2️⃣ سریال مانیتور (باود 9600) را باز کنید
3️⃣ با یک چراغقوه مقدار حسگرها را بررسی کنید
4️⃣ اگر مقدار یکی از حسگرها بیشتر از دیگری بود، یعنی آن سمت نور بیشتری دارد
🤖 ۲. کد اصلی کنترل ربات نوریاب
در این کد، ربات به سمت منبع نور حرکت میکند:
#include
#define LDR_Left A0
#define LDR_Right A1
#define ENA 10
#define ENB 11
#define IN1 6
#define IN2 7
#define IN3 8
#define IN4 9
int threshold = 50; // آستانه حساسیت نوری
void setup() {
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
Serial.begin(9600);
}
void loop() {
int leftLight = analogRead(LDR_Left);
int rightLight = analogRead(LDR_Right);
Serial.print("Left: ");
Serial.print(leftLight);
Serial.print(" | Right: ");
Serial.println(rightLight);
int diff = leftLight - rightLight;
if (abs(diff) < threshold) {
moveForward(); // اگر تفاوت زیاد نبود، مستقیم برود
} else if (leftLight > rightLight) {
turnLeft(); // اگر سمت چپ نور بیشتر بود، چپ برود
} else {
turnRight(); // اگر سمت راست نور بیشتر بود، راست برود
}
delay(100);
}
void moveForward() {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
Serial.println("Moving Forward");
}
void turnLeft() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
Serial.println("Turning Left");
}
void turnRight() {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
Serial.println("Turning Right");
}
🏆 نحوه تست و اجرای ربات نوریاب
1️⃣ کد تست حسگرها را اجرا کنید و مطمئن شوید مقدار LDR در شرایط مختلف تغییر میکند.
2️⃣ کد ربات نوریاب را روی آردوینو آپلود کنید.
3️⃣ ربات را روی زمین بگذارید و یک چراغقوه جلوی آن حرکت دهید.
4️⃣ اگر حسگرها به درستی نصب شده باشند، ربات باید به سمت نور حرکت کند! 🚗🌞
⚠️ نکات ایمنی مهم
🔴 باتریها را به درستی متصل کنید تا آسیب به برد و موتورها نرسد.
🔴 اگر ربات به اشتباه حرکت میکند، مقدار threshold را تغییر دهید.
🔴 اگر موتورها درست عمل نمیکنند، اتصالات L298N را چک کنید.
پروژه 5: ربات تعقیب خط
معرفی ماژول BFD-1000 برای رباتهای مسیریاب
ماژول BFD-1000 یک سنسور چندکاره است که برای تشخیص خطوط، موانع و لمس استفاده میشود. این ماژول بهویژه برای رباتهای تعقیب خط (Line Following Robots) و رباتهای هوشمند اجتناب از موانع مناسب است.
ویژگیهای اصلی ماژول BFD-1000
پنج سنسور تشخیص خط (S1 تا S5)
این سنسورها از نوع TCRT5000 هستند که با ارسال مادون قرمز و دریافت بازتاب آن، تفاوت بین سطوح تیره (مشکی) و روشن (سفید) را تشخیص میدهند.
برای رباتهای مسیریاب کاربرد دارد.
حسگر فاصلهی مادون قرمز (Range Finder)
این حسگر موانع جلوی ربات را تشخیص میدهد.
حساسیت آن قابل تنظیم است و میتواند برای جلوگیری از برخورد با موانع در مسیر استفاده شود.
حسگر لمسی (CLP)
با فشار دادن این حسگر، یک خروجی دیجیتال فعال میشود.
اتصالات الکتریکی
VCC: اتصال به منبع تغذیه (۳.۰ تا ۵.۵ ولت).
GND: اتصال به زمین (GND).
S1 تا S5: خروجی سنسورهای خط.
Range Finder: خروجی حسگر فاصله.
CLP: خروجی حسگر لمسی.
بخش دوم: برنامهنویسی ربات مسیریاب
حالا که با این ماژول آشنا شدیم، بریم سراغ برنامهنویسی یک ربات تعقیب خط با آردوینو! 🚀
💡 سختافزار مورد نیاز:
ماژول BFD-1000
برد آردوینو (UNO یا Mega)
دو موتور DC به همراه درایور موتور (L298N یا L293D)
چرخها و بدنهی ربات
باتری ۷.۴ ولت یا ۱۲ ولت
تست حسگر و نمایش داده هاروی درگاه سریال:
اتصال ماژول BFD-1000 به آردوینو و نمایش دادههای سنسورها در سریال مانیتور
1️⃣ اتصالات سیمکشی ماژول BFD-1000 به آردوینو
اتصالات برای خواندن خروجی سنسورها در پایههای آنالوگ آردوینو:
پایه ماژول BFD-1000 | اتصال به آردوینو UNO |
---|---|
VCC | ۵V |
GND | GND |
S1 (سنسور خط ۱) | A0 |
S2 (سنسور خط ۲) | A1 |
S3 (سنسور خط ۳) | A2 |
S4 (سنسور خط ۴) | A3 |
S5 (سنسور خط ۵) | A4 |
Range Finder (حسگر فاصله) | A5 |
CLP (حسگر لمسی) | D2 (دیجیتال) |
کد برنامه تست:
// تعریف پایههای ورودی سنسورها
const int S1 = A0; // سنسور خط 1
const int S2 = A1; // سنسور خط 2
const int S3 = A2; // سنسور خط 3
const int S4 = A3; // سنسور خط 4
const int S5 = A4; // سنسور خط 5
const int RangeFinder = A5; // حسگر فاصله
const int TouchSensor = 2; // حسگر لمسی (دیجیتال)
void setup() {
Serial.begin(9600); // راهاندازی ارتباط سریال
pinMode(TouchSensor, INPUT); // تنظیم حسگر لمسی به عنوان ورودی
}
void loop() {
// خواندن مقادیر سنسورها
int sensor1 = analogRead(S1);
int sensor2 = analogRead(S2);
int sensor3 = analogRead(S3);
int sensor4 = analogRead(S4);
int sensor5 = analogRead(S5);
int rangeValue = analogRead(RangeFinder);
int touchState = digitalRead(TouchSensor); // مقدار دیجیتال حسگر لمسی
// نمایش مقادیر در سریال مانیتور
Serial.print("S1: "); Serial.print(sensor1);
Serial.print(" | S2: "); Serial.print(sensor2);
Serial.print(" | S3: "); Serial.print(sensor3);
Serial.print(" | S4: "); Serial.print(sensor4);
Serial.print(" | S5: "); Serial.print(sensor5);
Serial.print(" | Distance: "); Serial.print(rangeValue);
Serial.print(" | Touch: "); Serial.println(touchState);
delay(500); // تاخیر برای خواندن مقادیر در بازههای زمانی مناسب
}
3️⃣ نحوه اجرا و مشاهده دادهها
مدار را مطابق جدول بالا ببندید.
کد را در آردوینو آپلود کنید.
سریال مانیتور (Serial Monitor) را باز کنید (
Baud Rate = 9600
).مقدار سنسورها را ببینید:
اگر کاغذ سفید زیر سنسورها باشد، مقدار آنها بالا است.
اگر روی خط مشکی باشند، مقدار کمتر خواهد شد.
حسگر فاصله مقدار متناسب با نزدیکی اجسام را نشان میدهد.
اگر حسگر لمسی را فشار دهید، مقدار آن ۱ میشود.
کد تشخیص رنگ سیاه وسفید:
تنظیم مقدار آستانه برای سنسورهای خط و آمادهسازی برای کنترل ربات 🚀
🔹 چرا به مقدار آستانه (Threshold) نیاز داریم؟
مقدار خروجی سنسورهای TCRT5000 (سنسورهای خط) بسته به نور محیط متفاوت است.
برای اینکه برنامه بتواند تشخیص دهد که سنسور روی خط مشکی است یا روی سطح سفید، باید یک مقدار آستانه تنظیم کنیم.
دانشآموز میتواند مقدار آستانه را با استفاده از یک برگه سفید و سیاه تست کند و مقدار مناسب را انتخاب کند.
🔹 مرحله ۱: نحوه تنظیم مقدار آستانه برای سنسورها
دانشآموز باید ابتدا مقدار خروجی سنسورها را در سریال مانیتور ببیند.
یک برگه سفید و یک برگه مشکی را زیر سنسورها بگذارد.
مقادیر خواندهشده را یادداشت کند و مقدار آستانه را انتخاب کند.
💡 فرمول پیشنهادی برای مقدار آستانه:
Threshold = (مقدار روی سفید + مقدار روی مشکی) / 2
مثلاً اگر مقدار روی کاغذ سفید ۸۰۰ و روی کاغذ مشکی ۳۰۰ باشد، مقدار آستانه میشود:
Threshold = (800 + 300) / 2 = 550
🔹 مرحله ۲: کد آردوینو برای تنظیم مقدار آستانه و نمایش سیاه/سفید
// تعریف پایههای سنسورها
const int S1 = A0;
const int S2 = A1;
const int S3 = A2;
const int S4 = A3;
const int S5 = A4;
// مقدار آستانه (Threshold) - دانشآموز مقدار مناسب را تنظیم میکند
int threshold = 550;
void setup() {
Serial.begin(9600); // راهاندازی ارتباط سریال
}
void loop() {
// خواندن مقادیر سنسورها
int sensor1 = analogRead(S1);
int sensor2 = analogRead(S2);
int sensor3 = analogRead(S3);
int sensor4 = analogRead(S4);
int sensor5 = analogRead(S5);
// مقایسه با مقدار آستانه و تشخیص سیاه/سفید
bool line1 = (sensor1 < threshold); // اگر مقدار کمتر از آستانه باشد، روی خط مشکی است
bool line2 = (sensor2 < threshold);
bool line3 = (sensor3 < threshold);
bool line4 = (sensor4 < threshold);
bool line5 = (sensor5 < threshold);
// نمایش دادهها در سریال مانیتور
Serial.print("S1: "); Serial.print(sensor1); Serial.print(" -> "); Serial.print(line1 ? "Black" : "White");
Serial.print(" | S2: "); Serial.print(sensor2); Serial.print(" -> "); Serial.print(line2 ? "Black" : "White");
Serial.print(" | S3: "); Serial.print(sensor3); Serial.print(" -> "); Serial.print(line3 ? "Black" : "White");
Serial.print(" | S4: "); Serial.print(sensor4); Serial.print(" -> "); Serial.print(line4 ? "Black" : "White");
Serial.print(" | S5: "); Serial.print(sensor5); Serial.print(" -> "); Serial.println(line5 ? "Black" : "White");
delay(500); // تاخیر برای خواندن مقدار بعدی
}
🔹 مرحله ۳: نحوه تنظیم مقدار آستانه توسط دانشآموز
کد را روی آردوینو آپلود کند.
یک برگه سفید و یک برگه مشکی زیر سنسورها بگذارد.
مقادیر نمایشدادهشده در سریال مانیتور را مشاهده کند.
میانگین مقدار خواندهشده در دو حالت را محاسبه کند.
مقدار آستانه را در برنامه تغییر دهد و دوباره اجرا کند.
بررسی کند که آیا خروجیهای “Black” و “White” صحیح هستند یا خیر.
✅ آمادهای برای مرحله بعدی؟
اگر مقدار آستانه تنظیم شد و تشخیص سیاه/سفید درست کار کرد، حالا اتصال موتورهای DC و برنامهنویسی حرکت ربات مسیریاب را شروع کنیم!
ربات مسیر یاب دو حسگره:
🚗 کد ساده برای ربات مسیریاب با دو سنسور خط (S1 و S5) و موتورهای DC
🔹 نحوه کارکرد ربات
اگر هر دو سنسور (S1 و S5) روی سفید باشند → مستقیم حرکت کند.
اگر سنسور سمت چپ (S1) روی خط مشکی باشد → به چپ بچرخد.
اگر سنسور سمت راست (S5) روی خط مشکی باشد → به راست بچرخد.
اگر هر دو سنسور روی خط باشند → متوقف شود (ربات ممکن است به بنبست رسیده باشد).
🔹 اتصالات سیمکشی ربات
پایه ماژول BFD-1000 | اتصال به آردوینو UNO |
---|---|
VCC | ۵V |
GND | GND |
S1 (چپ) | A0 |
S5 (راست) | A4 |
پایههای درایور موتور | اتصال به آردوینو UNO |
---|---|
ENA (PWM برای سرعت موتور چپ) | 10 |
ENB (PWM برای سرعت موتور راست) | 11 |
IN1 | 6 |
IN2 | 7 |
IN3 | 8 |
IN4 | 9 |
🔹 کد آردوینو برای ربات مسیریاب ساده:
// تعریف پایههای سنسور خط
const int S1 = A0; // سنسور سمت چپ
const int S5 = A4; // سنسور سمت راست
// تعریف پایههای موتور
#define ENA 10 // سرعت موتور چپ
#define ENB 11 // سرعت موتور راست
#define IN1 6 // جهت چپ
#define IN2 7
#define IN3 8 // جهت راست
#define IN4 9
// مقدار آستانه (Threshold) برای تشخیص سیاه و سفید (دانشآموز باید مقدار مناسب را پیدا کند)
int threshold = 550;
void setup() {
Serial.begin(9600); // راهاندازی ارتباط سریال
// تنظیم پایههای موتور به عنوان خروجی
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
// تابع برای حرکت به جلو
void moveForward() {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENA, 150); // سرعت متوسط
analogWrite(ENB, 150);
}
// تابع برای چرخش به چپ
void turnLeft() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENA, 100);
analogWrite(ENB, 150);
}
// تابع برای چرخش به راست
void turnRight() {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(ENA, 150);
analogWrite(ENB, 100);
}
// تابع برای توقف ربات
void stopRobot() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
analogWrite(ENA, 0);
analogWrite(ENB, 0);
}
void loop() {
// خواندن مقدار سنسورها
int leftSensor = analogRead(S1);
int rightSensor = analogRead(S5);
// تبدیل مقدار آنالوگ به سیاه/سفید
bool leftBlack = (leftSensor < threshold);
bool rightBlack = (rightSensor < threshold);
// نمایش مقدار سنسورها در سریال مانیتور
Serial.print("Left: "); Serial.print(leftSensor); Serial.print(" -> "); Serial.print(leftBlack ? "Black" : "White");
Serial.print(" | Right: "); Serial.print(rightSensor); Serial.print(" -> "); Serial.println(rightBlack ? "Black" : "White");
// تصمیمگیری بر اساس مقدار سنسورها
if (!leftBlack && !rightBlack) { // هر دو روی سفید → حرکت مستقیم
moveForward();
}
else if (leftBlack && !rightBlack) { // چپ روی خط، راست روی سفید → چرخش به چپ
turnLeft();
}
else if (!leftBlack && rightBlack) { // راست روی خط، چپ روی سفید → چرخش به راست
turnRight();
}
else { // هر دو روی خط → توقف
stopRobot();
}
delay(100); // تاخیر برای جلوگیری از نویز
}
🔹 نحوه تنظیم و اجرای ربات
کد را در آردوینو آپلود کنید.
مقدار آستانه را بر اساس تست کاغذ سفید و مشکی تنظیم کنید.
ربات را روی یک خط مشکی روی سطح سفید قرار دهید.
مشاهده کنید که ربات چگونه در مسیر حرکت میکند.
اگر لازم بود، مقدار سرعت موتور (
analogWrite(ENA, x)
) را تغییر دهید تا حرکت ربات بهینه شود.
✅ مرحله بعدی:
افزودن سنسور وسط (S3) برای حرکت دقیقتر و جلوگیری از انحراف از مسیر! 🎯🤖
کد ربات مسیریاب 5 حسگر:
🚗 کد ربات مسیریاب ۵ حسگره با کنترل موتورهای DC
🔹 نحوه کارکرد ربات
اگر سنسور وسط (S3) روی خط باشد → مستقیم حرکت کند.
اگر S1 یا S2 (چپ) روی خط باشند → به چپ بچرخد.
اگر S4 یا S5 (راست) روی خط باشند → به راست بچرخد.
اگر همه سنسورها روی خط باشند → متوقف شود (ربات ممکن است به بنبست رسیده باشد).
🔹 اتصالات سیمکشی ربات
پایه ماژول BFD-1000 | اتصال به آردوینو UNO |
---|---|
VCC | ۵V |
GND | GND |
S1 (چپ ۱) | A0 |
S2 (چپ ۲) | A1 |
S3 (وسط) | A2 |
S4 (راست ۲) | A3 |
S5 (راست ۱) | A4 |
پایههای درایور موتور | اتصال به آردوینو UNO |
---|---|
ENA (PWM برای سرعت موتور چپ) | 10 |
ENB (PWM برای سرعت موتور راست) | 11 |
IN1 | 6 |
IN2 | 7 |
IN3 | 8 |
IN4 | 9 |
🔹 کد آردوینو برای ربات مسیریاب ۵ حسگره
// تعریف پایههای سنسور خط
const int S1 = A0; // چپ ۱
const int S2 = A1; // چپ ۲
const int S3 = A2; // وسط
const int S4 = A3; // راست ۲
const int S5 = A4; // راست ۱
// تعریف پایههای موتور
#define ENA 10 // سرعت موتور چپ
#define ENB 11 // سرعت موتور راست
#define IN1 6 // جهت چپ
#define IN2 7
#define IN3 8 // جهت راست
#define IN4 9
// مقدار آستانه برای تشخیص سیاه و سفید
int threshold = 550;
void setup() {
Serial.begin(9600); // راهاندازی ارتباط سریال
// تنظیم پایههای موتور به عنوان خروجی
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
// تابع برای حرکت به جلو
void moveForward() {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENA, 150);
analogWrite(ENB, 150);
}
// تابع برای چرخش به چپ (ملایم)
void turnLeftSoft() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENA, 100);
analogWrite(ENB, 150);
}
// تابع برای چرخش به چپ (تیز)
void turnLeftHard() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(ENA, 100);
analogWrite(ENB, 180);
}
// تابع برای چرخش به راست (ملایم)
void turnRightSoft() {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(ENA, 150);
analogWrite(ENB, 100);
}
// تابع برای چرخش به راست (تیز)
void turnRightHard() {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(ENA, 180);
analogWrite(ENB, 100);
}
// تابع برای توقف ربات
void stopRobot() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
analogWrite(ENA, 0);
analogWrite(ENB, 0);
}
void loop() {
// خواندن مقدار سنسورها
int sensor1 = analogRead(S1);
int sensor2 = analogRead(S2);
int sensor3 = analogRead(S3);
int sensor4 = analogRead(S4);
int sensor5 = analogRead(S5);
// تبدیل مقدار آنالوگ به سیاه/سفید
bool left1 = (sensor1 < threshold);
bool left2 = (sensor2 < threshold);
bool center = (sensor3 < threshold);
bool right2 = (sensor4 < threshold);
bool right1 = (sensor5 < threshold);
// نمایش مقدار سنسورها در سریال مانیتور
Serial.print("S1: "); Serial.print(sensor1); Serial.print(left1 ? " Black | " : " White | ");
Serial.print("S2: "); Serial.print(sensor2); Serial.print(left2 ? " Black | " : " White | ");
Serial.print("S3: "); Serial.print(sensor3); Serial.print(center ? " Black | " : " White | ");
Serial.print("S4: "); Serial.print(sensor4); Serial.print(right2 ? " Black | " : " White | ");
Serial.print("S5: "); Serial.print(sensor5); Serial.println(right1 ? " Black " : " White ");
// تصمیمگیری برای حرکت ربات
if (center || (left2 && right2)) { // مسیر مستقیم
moveForward();
}
else if (left1 || left2) { // چرخش به چپ
if (left1) turnLeftHard();
else turnLeftSoft();
}
else if (right1 || right2) { // چرخش به راست
if (right1) turnRightHard();
else turnRightSoft();
}
else { // توقف در صورت عدم شناسایی خط
stopRobot();
}
delay(50); // تاخیر برای جلوگیری از نویز
}
🔹 نحوه تنظیم و اجرای ربات
کد را در آردوینو آپلود کنید.
مقدار آستانه را با تست کاغذ سفید و مشکی تنظیم کنید.
ربات را روی مسیر قرار دهید.
حرکت ربات را مشاهده کنید و در صورت نیاز سرعت موتورها را تنظیم کنید.
اگر لازم بود مقدار سرعت موتور (analogWrite(ENA, x)) را تغییر دهید تا حرکت ربات بهینه شود.
✅ این کد به ربات اجازه میدهد که بهطور دقیقتر مسیر را دنبال کند و از انحراف زیاد جلوگیری کند.
آمادهای برای افزودن PID جهت بهبود کنترل حرکت؟ 🚀🤖
ربات حل ماز:
🤖 ربات حل ماز (Maze Solving) با ۳ سنسور اولتراسونیک و موتورهای DC
ربات “Daileon” با سه سنسور اولتراسونیک طراحی شده که میتواند مسیر یک ماز را به صورت خودکار طی کند و از موانع جلوگیری کند. این ربات با استفاده از Arduino و کتابخانه NewPing دادههای سنسورها را پردازش میکند تا تصمیمات حرکتی را اتخاذ کند.
🔹 نحوه عملکرد ربات
سه سنسور اولتراسونیک در قسمت جلو، چپ و راست قرار دارند و فاصله از موانع را اندازه میگیرند.
در صورتی که مسیر مستقیم باز باشد، ربات به جلو حرکت میکند.
اگر در جلو مانع وجود داشته باشد، با مقایسه فاصلههای چپ و راست تصمیم میگیرد که به کدام سمت بچرخد.
الگوریتم مورد استفاده در این ربات “دیوارهنوردی سمت راست” (Right-Hand Rule) است.
🔹 اتصالات سیمکشی اصلاح شده برای ربات ماز
قطعه پایههای آردوینو سنسور جلو (Trig, Echo) 2, 3 سنسور چپ (Trig, Echo) 4, 5 سنسور راست (Trig, Echo) 12, 13 موتور چپ (ENA, IN1, IN2) 10, 6, 7 موتور راست (ENB, IN3, IN4) 11, 8, 9
🔹 کد آردوینو با کتابخانه NewPing
#include
// تنظیم پایههای سنسورهای اولتراسونیک
#define TRIG_FRONT 2
#define ECHO_FRONT 3
#define TRIG_LEFT 4
#define ECHO_LEFT 5
#define TRIG_RIGHT 12
#define ECHO_RIGHT 13
// تنظیم موتورهای DC
#define ENA 10
#define ENB 11
#define IN1 6
#define IN2 7
#define IN3 8
#define IN4 9
// محدوده اندازهگیری سنسورها (سانتیمتر)
#define MAX_DISTANCE 200
// تعریف سنسورهای اولتراسونیک با NewPing
NewPing sonarFront(TRIG_FRONT, ECHO_FRONT, MAX_DISTANCE);
NewPing sonarLeft(TRIG_LEFT, ECHO_LEFT, MAX_DISTANCE);
NewPing sonarRight(TRIG_RIGHT, ECHO_RIGHT, MAX_DISTANCE);
// تابع راهاندازی
void setup() {
Serial.begin(9600);
// تنظیم پایههای موتور به عنوان خروجی
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
// تابع خواندن مقدار سنسورها
int getDistance(NewPing sonar) {
delay(50); // جلوگیری از نویز
return sonar.ping_cm();
}
// تابع برای حرکت به جلو
void moveForward() {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENA, 150);
analogWrite(ENB, 150);
}
// تابع برای چرخش به چپ
void turnLeft() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENA, 100);
analogWrite(ENB, 150);
}
// تابع برای چرخش به راست
void turnRight() {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(ENA, 150);
analogWrite(ENB, 100);
}
// تابع برای توقف ربات
void stopRobot() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
analogWrite(ENA, 0);
analogWrite(ENB, 0);
}
// حلقه اصلی برنامه
void loop() {
int frontDistance = getDistance(sonarFront);
int leftDistance = getDistance(sonarLeft);
int rightDistance = getDistance(sonarRight);
Serial.print("Front: "); Serial.print(frontDistance);
Serial.print(" | Left: "); Serial.print(leftDistance);
Serial.print(" | Right: "); Serial.println(rightDistance);
// الگوریتم تصمیمگیری
if (frontDistance > 20) { // اگر مسیر جلو باز است
moveForward();
}
else { // اگر جلو مانع دارد
stopRobot();
delay(300); // توقف کوتاه
if (leftDistance > rightDistance) { // بررسی مسیر بهتر
turnLeft();
} else {
turnRight();
}
delay(500);
}
}


ایده های ساخت بازو شلیک کننده و گریپر:
ایدههای ساخت بازوی شلیککننده و گریپر (گیره) ساده با استفاده از سرو موتور و قطعات ابتدایی رباتیک:
1️⃣ بازوی شلیککننده (Launcher Arm)
هدف: پرتاب توپهای کوچک یا اشیای سبک مثل توپ پینگپنگ یا فوم.
🛠 قطعات مورد نیاز:
سرو موتور (SG90 یا MG995)
بازوی مکانیکی سبک (چوب بستنی، پلکسی، یا پرینت سهبعدی)
فنر یا کش لاستیکی برای نیروی شلیک
مکانیزم قفل و رهاسازی (اهرم یا چاپ سهبعدی)
برد آردوینو (مثلاً Uno) برای کنترل
سوییچ یا دکمه فشاری برای فعالسازی
⚙️ نحوه کار:
سرو موتور اهرم مکانیزم شلیک را میکشد و در یک نقطه قفل میکند.
با زدن دکمه، قفل آزاد شده و فنر/کش توپ را پرتاب میکند.
سرو موتور به حالت اولیه برمیگردد تا دوباره شلیک آماده شود.
🔹 کد نمونه (Arduino)
#include
Servo gripper;
int buttonPin = 2;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
gripper.attach(9);
gripper.write(0); // گیره باز باشد
}
void loop() {
if (digitalRead(buttonPin) == LOW) {
gripper.write(90); // بستن گیره
delay(500);
} else {
gripper.write(0); // باز کردن گیره
}
}
گریپر (گیره مکانیکی)
هدف: گرفتن و جابجایی اشیا با مکانیزم ساده.
🛠 قطعات مورد نیاز:
سرو موتور SG90 برای حرکت گیره
دو قطعه بازوی متحرک (چوب بستنی، پلکسی، چاپ سهبعدی)
مکانیزم قیچیای یا کشویی برای بسته شدن گیره
آردوینو برای کنترل
دکمه فشاری یا سنسور برای فعالسازی
⚙️ نحوه کار:
سرو موتور زاویه گیره را تغییر داده و باز و بسته میکند.
میتوان با سنسور فشار میزان گرفتن را تنظیم کرد.
گیره میتواند با یک پایه متحرک برای بلند کردن اشیا ترکیب شود.
🔹 کد نمونه (Arduino)
#include
Servo gripper;
int buttonPin = 2;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
gripper.attach(9);
gripper.write(0); // گیره باز باشد
}
void loop() {
if (digitalRead(buttonPin) == LOW) {
gripper.write(90); // بستن گیره
delay(500);
} else {
gripper.write(0); // باز کردن گیره
}
}
✅ ارتقاهای پیشنهادی:
ترکیب مکانیزم گیره با موتور DC برای حرکت بازو.
استفاده از الاستیک یا فنر برای نیروی اضافی.
اضافه کردن سنسور IR برای گرفتن اشیا بهطور خودکار.


درخواست مشاوره
برای کسب اطلاعات بیشتر درباره این دوره درخواست مشاوره خود را ارسال کنید و یا با ما در تماس باشید.
درخواست مشاورهدوره های مرتبط
معرفی لیگ خودرو خودران
🌟 معرفی لیگ خودروهای هوشمند دانشآموزی 🚗🤖 🔹 مقطع شرکتکنندگان: این رقابت برای دانشآموزان دوره اول و دوم متوسطه طراحی…
معرفی دوره ساخت اپلیکیشن با MIT App Invertor
🌟 معرفی دوره آموزش MIT App Inventor 🌟 در این دوره ویژه و کاربردی، یاد میگیرید چگونه اپلیکیشنهایی طراحی و…
دوره آموزش اسکرچ با تلفن همراه
[vc_row][vc_column][vc_column_text]توصیف شروع کنید با اپلیکیشن موبایل PictoBlox و رابط کاربری ساده و قابلیت کشیدن و رها کردن آن. با اپلیکیشن…
دوره آموزش ربات مقدماتی(جرثقیل، آمبولانس و فوتبالیست)
برای ورود به عرصه ساخت ربات ها نیاز به یادگیری مطالب دانشی و مهارتی در زمینه الکترونیک، مکانیک و برنامه…
نظرات
رایگان!

دکتر حسین رضایی
مدرس رباتیک، الکترونیک، برنامه نویسیمدیر موسسه پیشروخلاقیت آزاد مهر ویرا
