UGV و آردوینو یعنی چه؟
UGV یا Unmanned Ground Vehicle یعنی وسیله نقلیه زمینی بدون سرنشین. سادهترین شکل آن یک ماشین کوچک است که یا با رادیو کنترل میکنید، یا با سنسور و برنامهنویسی، خودش مسیر را تشخیص میدهد. آردوینو هم یک برد الکترونیکی ارزان و ساده است که نقش مغز این ماشین را بازی میکند: فرمانهای شما را میخواند، موتورها را میچرخاند، و میتواند از سنسورها اطلاعات بگیرد.
در این پست، شما یک UGV کامل و ارزان با شاسی آماده، دو موتور DC، درایور موتور، آردوینو Nano و باتری میسازید. همه مراحل از مونتاژ مکانیکی تا آپلود کد و تست رانندگی پوشش داده شده. این پروژه برای کسی طراحی شده که میخواهد اولین ربات واقعی خود را بسازد و نتیجه را همان روز ببیند.
مقدمه: ربات زمینی بدون سرنشین (UGV) چیست؟
ربات زمینی بدون سرنشین یا UGV (Unmanned Ground Vehicle) یک وسیله نقلیه زمینی است که بدون حضور راننده و با کنترل از راه دور (RC) یا به صورت خودکار حرکت میکند. این رباتها در صنایع نظامی، کشاورزی، امداد و نجات و حتی پروژههای آموزشی DIY کاربرد دارند.
در این آموزش، ما یک UGV ساده و بسیار ارزان میسازیم که:
- با دو موتور DC و سیستم فرمان تفاضلی (Skid Steer) حرکت میکند
- سرعت تا ۴۰ کیلومتر در ساعت در جاده صاف آسفالت دارد
- قابلیت حمل ۵ کیلوگرم بار را دارد
- با فرستنده و گیرنده RC کنترل میشود
- دارای دوربین FPV برای دید از راه دور است
- بدنه از تخته سهلا (پلایوود) ساخته شده و قابل برش با اره دستی است
- باتری برای حداقل ۱۵ دقیقه رانندگی مداوم کافی است
🔰 آیا تازهکار هستید؟ پیشنیازهای این پروژه
اگر این اولین تجربه شما در ساخت ربات یا کار با الکترونیک است، نگران نباشید! لینکهای زیر به شما کمک میکنند تا مهارتهای پایهای لازم را یاد بگیرید. هر بخش شامل منابع فارسی و رایگان است. قبل از شروع این پروژه، پیشنهاد میکنیم حداقل بخشهایی که با آنها آشنا نیستید را مطالعه کنید.
الکترونیک پایه — اگر با قطعات الکترونیکی آشنا نیستید
اگر نمیدانید مقاومت، خازن، دیود، ترانزیستور و LED چیستند و چه کاری انجام میدهند، ابتدا این منابع را ببینید:
- 📖 سیمونیک — معرفی پایه الکترونیک: قطعات و اصطلاحات مهم — توضیح ساده ولتاژ، جریان، مقاومت، خازن، دیود و تمام قطعات پایه با تصاویر
- 🎥 مکتبخونه — آموزش الکترونیک مقدماتی به زبان ساده — دوره ویدیویی رایگان، بدون پیشنیاز، مناسب همه سنین
- 📖 کمیته مهندسی رباتیک — آموزش رباتیک مقدماتی — از مقاومت و قانون اهم تا IC درایور و ساخت ربات، گام به گام
- 📖 ویکیپدیا فارسی — الکترونیک — مرور کلی بر علم الکترونیک و اصطلاحات فنی
آردوینو (Arduino) — اگر تا حالا با آردوینو کار نکردهاید
آردوینو مغز ربات شماست. اگر نمیدانید آردوینو چیست، چطور برنامهنویسی میشود یا چطور یک LED ساده را روشن کنید، این منابع فارسی عالی هستند:
- 📖 ایده الکترونیک — آموزش کامل آردوینو به زبان فارسی — از صفر مطلق: نصب نرمافزار، Sketch، توابع setup و loop، خواندن سنسور، PWM و خیلی بیشتر
- 📖 بهنام رباتیک — شروع کار با آردوینو Uno — آموزش قدم به قدم با تصاویر، معرفی پینها و اولین پروژه
- 🎥 مکتبخونه — دورههای آموزش آردوینو — دورههای ویدیویی فارسی از مقدماتی تا پیشرفته
ESP32 — اگر میخواهید بیشتر از آردوینو بدانید
ESP32 یک میکروکنترلر قویتر از آردوینو است که Wi-Fi و بلوتوث داخلی دارد. اگر بعد از ساخت این ربات خواستید ربات خود را به اینترنت اشیاء (IoT) یا کنترل از طریق گوشی ارتقا دهید، ESP32 گزینه بعدی شماست:
- 📖 آترین الکترونیک — آموزش گام به گام ESP32 — معرفی، نرمافزار، برنامهنویسی با Arduino IDE، پروژههای عملی
- 🎥 DSP World — دوره آموزشی ESP32 با FreeRTOS — دوره حرفهایتر برای علاقهمندان به اینترنت اشیاء
موتور DC و درایور — اگر نمیدانید موتور و درایور چیست
در این پروژه از موتور DC (جریان مستقیم) و درایور BTS7960 استفاده میکنیم. موتور DC با اعمال ولتاژ میچرخد و درایور واسطهای است که به آردوینو اجازه میدهد موتور پرقدرت را کنترل کند. اگر با این مفاهیم آشنا نیستید:
- 📖 RoboUAV — آموزش راهاندازی موتور DC با درایور — توضیح کامل پینها، جدول جهت چرخش و سیمکشی به آردوینو
- 📖 Robojax — کنترل موتور DC با L293D و آردوینو (فارسی) — آموزش ویدیویی و کد نمونه
- 📖 ویکیپدیا فارسی — موتور جریان مستقیم — آشنایی با اصول کار موتور DC
رباتیک و اصطلاحات UGV — اگر نمیدانید UGV، PWM یا Skid Steer چیست
UGV مخفف Unmanned Ground Vehicle (وسیله نقلیه زمینی بدون سرنشین) است. PWM روشی برای کنترل سرعت موتور و Skid Steer نوعی فرماندهی با اختلاف سرعت چرخهاست. برای آشنایی با این اصطلاحات:
- 🎥 مکتبخونه — آموزش مهندسی رباتیک (مقدماتی تا پیشرفته) — دورههای ویدیویی فارسی درباره اصول رباتیک
- 📖 ویکیپدیا فارسی — وسیله نقلیه زمینی بدون سرنشین (UGV)
- 📖 ویکیپدیا فارسی — مدولاسیون پهنای پالس (PWM) — توضیح ساده PWM که در کد آردوینو استفاده شده
فرستنده و گیرنده RC — اگر تا حالا رادیو کنترل به دست نگرفتهاید
رادیو کنترل (RC) وسیلهای است که سیگنال فرمان شما را بیسیم به ربات ارسال میکند. اگر نمیدانید فرستنده و گیرنده چطور کار میکنند، کانال چیست یا خروجی PWM به چه معناست:
- 📖 RoboUAV — آموزش رادیو کنترل (فارسی) — معرفی کامل فرستنده، گیرنده، کانالها و نحوه اتصال
- 📖 WLE — آموزش ساخت رادیو کنترل ۸ کاناله — توضیح اهرمها، کانالها و خروجی داده + راهنمای خرید
دوربین FPV و فرستنده تصویر (VTX) — اگر نمیدانید FPV چیست
FPV مخفف First Person View (دید اول شخص) است. یک دوربین روی ربات نصب میشود و تصویر زنده از طریق فرستنده تصویر (VTX) به مانیتور یا عینک شما ارسال میشود. اگر با سیستم FPV آشنا نیستید:
- 📖 سوالات متداول FPV — توضیح دوربین، VTX و سیستمهای انتقال تصویر (فارسی)
- 📖 Oscar Liang — FPV System Explained (انگلیسی) — بهترین راهنمای جامع FPV در اینترنت، با تصاویر و مقایسه سیستمهای آنالوگ و دیجیتال
iNAV و سیستمهای ناوبری — اگر میخواهید ربات خود را خودکار کنید
iNAV یک نرمافزار متنباز برای کنترل پرواز و ناوبری GPS است. اگرچه در این پروژه ساده از iNAV استفاده نمیکنیم، ولی اگر بعداً خواستید ربات خود را با GPS و حالت خودکار ارتقا دهید، iNAV عالی است:
- 📖 iNAV Wiki — مستندات رسمی (انگلیسی) — راهنمای کامل نصب، تنظیم و استفاده از iNAV
- 📖 iNAV Fixed Wing Setup Guide (انگلیسی) — راهنمای شروع کار با iNAV
- 📖 Make for Iran — آموزش فرستنده و گیرنده پرواز با iNAV (فارسی) — همین سایت!
لحیمکاری (Soldering) — اگر تا حالا هویه به دست نگرفتهاید
لحیمکاری مهارت اتصال سیمها و قطعات الکترونیکی به هم با استفاده از هویه و سیم لحیم است. برای سیمکشی این ربات به لحیمکاری نیاز دارید:
- 📖 رونیکس — آموزش صحیح لحیمکاری با هویه — معرفی ابزارها (هویه، سیم لحیم، روغن) و آموزش گام به گام
- 📖 گیت الکترونیک — آموزش لحیمکاری برای مبتدیان — از اصول اولیه تا تکنیکهای صحیح اتصال
سوراخکاری و دریل — اگر با دریل کار نکردهاید
برای نصب موتورها و ساخت بدنه پلایوود، باید سوراخهایی با دریل ایجاد کنید. اگر تا حالا با دریل کار نکردهاید:
- 📖 آروا تولز — آموزش گام به گام کار با دریل و سوراخکاری — انتخاب مته، تنظیم گشتاور، سوراخکاری در چوب و فلز
- 📖 نوین چوب — انواع سوراخکاری با دریل الکتریکی — سوراخکاری در چوب، فلز و دیوار
برش پلایوود با اره — اگر تجربه کار با چوب ندارید
بدنه ربات از تخته سهلا (پلایوود) ساخته میشود و باید آن را برش دهید. سادهترین ابزار برای این کار اره عمودبر (Jigsaw) یا حتی اره دستی است:
- 📖 آیچوب — آموزش ۰ تا ۱۰۰ کار با اره عمودبر + ویدیو — نصب تیغه، تنظیم دستگاه، تکنیک برش مستقیم و منحنی
- 📖 جعبه ابزار — ۰ تا ۱۰۰ اره عمودبر (اره چکشی) — کاربرد، مزایا و نحوه استفاده
سیستم فرمان تفاضلی (Skid Steering) چگونه کار میکند؟
در این ربات هیچ مکانیزم فرمان جداگانهای وجود ندارد. به جای آن، از اختلاف سرعت دو چرخ جلو برای تغییر جهت استفاده میشود:
- حرکت مستقیم: هر دو موتور با سرعت یکسان میچرخند
- گردش به راست: موتور چپ سریعتر، موتور راست کندتر (یا متوقف)
- گردش به چپ: موتور راست سریعتر، موتور چپ کندتر (یا متوقف)
- چرخش در جا: یک موتور جلو، دیگری عقب
این سیستم سادهترین و ارزانترین روش فرماندهی است زیرا نیاز به هیچ سروو، بازوی فرمان یا مکانیزم اضافی ندارد. تانکها، بولدوزرها و بسیاری از رباتهای صنعتی از همین سیستم استفاده میکنند.

مشخصات فنی پروژه
| پارامتر | مقدار |
|---|---|
| حداکثر سرعت | ~۴۰ کیلومتر در ساعت |
| ظرفیت بار | ۵ کیلوگرم |
| وزن تقریبی ربات (بدون بار) | ~۱۲ کیلوگرم |
| نوع فرمان | تفاضلی (Skid Steer) |
| تعداد موتور | ۲ عدد DC Brushed |
| ولتاژ سیستم | ۲۴ ولت |
| چرخهای محرک | ۲ عدد بادی فرغونی (جلو) |
| چرخ عقب | ۱ عدد چرخ آزاد (Caster) بدون باد |
| بدنه | تخته سهلا ۱۲ میلیمتر |
| کنترل | RC فرستنده/گیرنده ۲.۴ گیگاهرتز |
| میکروکنترلر | Arduino Nano |
| باتری | ۲ عدد سربی-اسیدی ۱۲V 7Ah (سری) |
| زمان کارکرد | ۱۵ تا ۵۰ دقیقه (بسته به سرعت) |
لیست کامل قطعات و قیمت تقریبی
هدف ما ساخت ارزانترین نسخه ممکن است. قیمتها تقریبی و بر اساس بازار جهانی (AliExpress) هستند:
۱. موتورها
| قطعه | مشخصات | تعداد | قیمت تقریبی |
|---|---|---|---|
| موتور DC براشد MY1016 | ۲۵۰ وات، ۲۴ ولت، ~۲۶۵۰ دور در دقیقه | ۲ | $۱۵ × ۲ = $۳۰ |
چرا MY1016؟ این موتور برای اسکوتر برقی طراحی شده، بسیار ارزان و در دسترس است، توان کافی برای سرعت بالا دارد و گیربکس داخلی ندارد (خروجی مستقیم با زنجیر). جستجو در AliExpress
دیتاشیت و مشخصات:
- ولتاژ نامی: ۲۴V DC
- توان: ۲۵۰W
- سرعت بدون بار: ~۲۶۵۰ RPM
- جریان نامی: ~۱۳.۷A
- جریان راهاندازی (استال): ~۴۱A (کوتاهمدت)
- شفت: ۹ میلیمتر با خار (Keyed)
- چرخدنده خروجی: ۱۱ دندانه (T8F chain)
۲. درایور موتور (Motor Driver)
| قطعه | مشخصات | تعداد | قیمت تقریبی |
|---|---|---|---|
| ماژول درایور BTS7960 (IBT-2) | ۴۳ آمپر، ۵.۵ تا ۲۷ ولت | ۲ | $۶ × ۲ = $۱۲ |
چرا BTS7960؟ این ماژول ارزانترین درایور موتور با توانایی تحمل جریان بالا (۴۳ آمپر پیوسته) است. هر ماژول یک موتور را کنترل میکند و با PWM آردوینو سازگار است.
پینهای BTS7960:
RPWM— سیگنال PWM برای چرخش موتور در جهت ساعتگرد (جلو)LPWM— سیگنال PWM برای چرخش موتور در جهت پادساعتگرد (عقب)R_ENوL_EN— پایههای فعالسازی (Enable) — به ۵V وصل کنیدVCC— تغذیه ۵V لاجیکGND— زمین مشترکB+وB-— ورودی باتری (۲۴V)M+وM-— خروجی به موتور
📚 راهنمای کامل BTS7960: Last Minute Engineers — BTS7960 Tutorial
۳. میکروکنترلر
| قطعه | مشخصات | تعداد | قیمت تقریبی |
|---|---|---|---|
| Arduino Nano (کلون) | ATmega328P، ۵V، ۱۶MHz | ۱ | $۳ |
آردوینو نانو کوچکترین و ارزانترین برد آردوینو است که تمام امکانات لازم (PWM خوانی، خروجی PWM، سریال) را دارد. نسخههای کلون چینی بسیار ارزان هستند. مستندات رسمی Arduino Nano
۴. فرستنده و گیرنده RC
| قطعه | مشخصات | تعداد | قیمت تقریبی |
|---|---|---|---|
| FlySky FS-i6 (فرستنده + گیرنده FS-iA6B) | ۲.۴ گیگاهرتز، ۶ کانال، PPM/PWM | ۱ ست | $۳۵ |
چرا FlySky FS-i6؟ ارزانترین فرستنده RC با کیفیت قابل قبول در بازار جهانی است. ۶ کانال دارد (ما فقط ۲ کانال برای گاز و فرمان نیاز داریم). گیرنده FS-iA6B خروجی PWM مستقیم روی هر کانال دارد که آردوینو به راحتی میتواند بخواند.
مشخصات فرستنده:
- فرکانس: ۲.۴ گیگاهرتز AFHDS 2A
- تعداد کانال: ۶
- برد: ~۵۰۰ متر (بدون مانع)
- تغذیه: ۴ عدد باتری قلمی AA
- خروجی گیرنده: PWM (پالس ۱۰۰۰ تا ۲۰۰۰ میکروثانیه)
📚 DroneBot Workshop — FlySky FS-i6X with Arduino (آموزش کامل انگلیسی)
۵. چرخها
| قطعه | مشخصات | تعداد | قیمت تقریبی |
|---|---|---|---|
| چرخ بادی فرغونی | سایز 3.50-8 (قطر ~۳۵ سانتیمتر) | ۲ | $۱۵ × ۲ = $۳۰ |
| چرخ آزاد (Caster) بدون باد | چرخ صنعتی گردان ۱۰۰ میلیمتر توپر | ۱ | $۱۰ |
چرخهای بادی فرغونی ارزان، محکم و دارای لاستیک پنوماتیک هستند که ضربهگیری خوبی روی آسفالت دارند. محور آنها معمولاً ۲۰ میلیمتر قطر دارد.
۶. سیستم انتقال نیرو
| قطعه | مشخصات | تعداد | قیمت تقریبی |
|---|---|---|---|
| چرخدنده (Sprocket) بزرگ | ۴۸ دندانه، زنجیر T8F، سوراخ ۲۰mm | ۲ | $۸ × ۲ = $۱۶ |
| زنجیر T8F | طول مناسب (~۵۰ سانتیمتر) | ۲ | $۴ × ۲ = $۸ |
محاسبه نسبت دنده:
- چرخدنده موتور: ۱۱ دندانه (روی شفت MY1016)
- چرخدنده چرخ: ۴۸ دندانه
- نسبت کاهش: ۴۸ ÷ ۱۱ = ۴.۳۶ : ۱
- سرعت چرخ: ۲۶۵۰ ÷ ۴.۳۶ = ~۶۰۸ دور در دقیقه
- محیط چرخ: π × ۰.۳۵ = ۱.۱ متر
- سرعت خطی: ۶۰۸ × ۱.۱ ÷ ۶۰ × ۳.۶ = ~۴۰ کیلومتر در ساعت ✅

۷. باتری
| قطعه | مشخصات | تعداد | قیمت تقریبی |
|---|---|---|---|
| باتری سربی-اسیدی (SLA) | ۱۲V 7Ah (مثل UPS) | ۲ | $۱۲ × ۲ = $۲۴ |
چرا سربی-اسیدی؟ ارزانترین نوع باتری شارژی موجود در بازار است. دو عدد ۱۲ ولت به صورت سری (Series) وصل میشوند تا ۲۴ ولت بدهند.
محاسبه زمان کارکرد:
- ظرفیت کل: ۲۴V × ۷Ah = ۱۶۸ واتساعت
- مصرف متوسط در سرعت متوسط: ~۱۰۰ وات → زمان: ~۱۰۰ دقیقه
- مصرف در حداکثر سرعت: ~۴۰۰ وات → زمان: ~۲۵ دقیقه
- عمق تخلیه ایمن SLA: ۵۰٪ → حداقل ۱۵ دقیقه در فول گاز ✅
⚠️ نکته: وزن هر باتری حدود ۲.۴ کیلوگرم است (مجموعاً ~۵ کیلو). اگر وزن کمتر میخواهید، از باتری لیتیوم-یون (مثلاً سلولهای 18650) استفاده کنید ولی هزینه بیشتر خواهد بود.
۸. دوربین FPV
| قطعه | مشخصات | تعداد | قیمت تقریبی |
|---|---|---|---|
| دوربین FPV آنالوگ + فرستنده تصویر (VTX) | ۵.۸ گیگاهرتز، ۶۰۰TVL، ۲۵-۲۰۰mW | ۱ ست | $۱۵ |
| مانیتور/گیرنده FPV (یا عینک FPV) | ۵.۸ گیگاهرتز با صفحه ۴.۳ اینچ | ۱ | $۲۵ |
سادهترین و ارزانترین راه برای دید از راه دور، یک کیت FPV آنالوگ ۵.۸ گیگاهرتز است. دوربین و VTX از باتری ربات (از طریق یک رگولاتور ۵V یا ۱۲V) تغذیه میشوند. جایگزین ارزانتر: از یک گوشی موبایل قدیمی با اپ IP Webcam استفاده کنید!
۹. سایر قطعات
| قطعه | مشخصات | تعداد | قیمت تقریبی |
|---|---|---|---|
| تخته سهلا (پلایوود) | ۱۲ میلیمتر، ابعاد ~۶۰×۴۰ سانتیمتر | ۱ | $۸ |
| رگولاتور ولتاژ DC-DC (Buck Converter) | ورودی ۲۴V → خروجی ۵V، ۳A | ۱ | $۲ |
| کلید قطع و وصل | کلید کلنگی ۳۰A | ۱ | $۲ |
| فیوز خودکار (Circuit Breaker) | ۳۰ آمپر | ۱ | $۳ |
| سیم برق | AWG 14 (برای موتور) و AWG 22 (سیگنال) | چند متر | $۵ |
| کانکتور XT60 | اتصال باتری | ۲ | $۲ |
| پیچ و مهره و بست | M5 و M6 فلزی | ست | $۵ |
| برد بورد یا PCB سوراخدار | برای سیمکشی آردوینو | ۱ | $۲ |
جمعبندی هزینه
| دسته | هزینه تقریبی |
|---|---|
| موتورها (۲ عدد) | $۳۰ |
| درایورها (۲ عدد) | $۱۲ |
| آردوینو نانو | $۳ |
| فرستنده/گیرنده RC | $۳۵ |
| چرخها (۳ عدد) | $۴۰ |
| زنجیر و چرخدنده | $۲۴ |
| باتریها | $۲۴ |
| دوربین FPV | $۴۰ |
| بدنه و متفرقه | $۲۹ |
| مجموع تقریبی | ~$۲۳۷ (حدود ۱۷۰ دلار بدون FPV) |
طراحی شاسی و بدنه (پلایوود)
بدنه ربات از یک صفحه تخته سهلا ۱۲ میلیمتر به ابعاد تقریبی ۶۰ × ۴۰ سانتیمتر ساخته میشود. این ابعاد بر اساس فاصله بین دو چرخ جلو و جای باتریها تعیین شده است.
نقشه چیدمان (از بالا)

┌──────────────────────────────────┐
│ جلو (Front) │
│ │
│ [موتور چپ]──⚙──[چرخ چپ] │
│ │ │
│ [باتری ۱] [باتری ۲] │
│ │ │
│ [آردوینو] [درایور۱] [درایور۲] │
│ │ │
│ [موتور راست]──⚙──[چرخ راست] │
│ │
│ [گیرنده RC] [دوربین] │
│ │
│ عقب (Rear) │
│ [چرخ آزاد] │
└──────────────────────────────────┘
نکات ساخت بدنه
- از اره عمودی (Jigsaw) یا اره دستی برای برش استفاده کنید
- سوراخهای محور چرخ را با دریل ۲۰ میلیمتر ایجاد کنید
- موتورها را با بست فلزی L شکل به پلایوود ببندید
- باتریها را با تسمه نگه دارید تا قابل تعویض باشند
- برای استحکام بیشتر، از دو لایه پلایوود در محل اتصال موتور استفاده کنید
- تمام الکترونیک را با یک جعبه پلاستیکی ارزان از آب محافظت کنید
نقشه سیمکشی کامل

اتصالات آردوینو ← درایور BTS7960 (موتور چپ)
| پایه آردوینو | پایه BTS7960 #1 | توضیح |
|---|---|---|
| D5 (PWM) | RPWM | جلو (Forward) |
| D6 (PWM) | LPWM | عقب (Reverse) |
| 5V | R_EN + L_EN | فعالسازی (به ۵V وصل) |
| GND | GND | زمین مشترک |
اتصالات آردوینو ← درایور BTS7960 (موتور راست)
| پایه آردوینو | پایه BTS7960 #2 | توضیح |
|---|---|---|
| D9 (PWM) | RPWM | جلو (Forward) |
| D10 (PWM) | LPWM | عقب (Reverse) |
| 5V | R_EN + L_EN | فعالسازی |
| GND | GND | زمین مشترک |
اتصالات گیرنده RC ← آردوینو
| کانال گیرنده | پایه آردوینو | عملکرد |
|---|---|---|
| CH1 (Aileron/Steering) | D2 | فرمان (چپ/راست) |
| CH2 (Elevator/Throttle) | D3 | گاز (جلو/عقب) |
| VCC (5V) | 5V | تغذیه گیرنده |
| GND | GND | زمین مشترک |
اتصالات برق (Power)
- باتری ۱ (۱۲V) + باتری ۲ (۱۲V) = ۲۴V سری
- ۲۴V → فیوز ۳۰A → کلید اصلی → B+ هر دو درایور BTS7960
- GND باتری → B- هر دو درایور
- ۲۴V → ماژول Buck Converter → ۵V → تغذیه آردوینو (پایه VIN یا 5V)
- ۵V → تغذیه گیرنده RC
- ۵V یا ۱۲V → تغذیه دوربین FPV (بسته به مدل)

⚠️ مهم: حتماً GND تمام قطعات (آردوینو، درایورها، گیرنده، باتری) را به هم وصل کنید. بدون زمین مشترک، سیگنالها به درستی خوانده نمیشوند.
کد کامل آردوینو (Arduino Sketch)
کد زیر سیگنال PWM را از دو کانال گیرنده RC میخواند، آنها را میکس میکند (Throttle + Steering → Left/Right motor) و به درایورهای BTS7960 ارسال میکند.
/*
* ============================================================
* DIY UGV - کنترل ربات زمینی با فرمان تفاضلی
* Skid-Steer Control with FlySky RC + BTS7960 + Arduino
* ============================================================
* نویسنده: Make for Iran (projectleon.net/make)
* لایسنس: MIT - آزاد برای استفاده و تغییر
*
* سختافزار مورد نیاز:
* - Arduino Nano (یا Uno)
* - 2x BTS7960 Motor Driver (IBT-2)
* - FlySky FS-i6 + FS-iA6B Receiver
* - 2x MY1016 250W 24V DC Motor
* ============================================================
*/
// ═══════════════════════════════════════
// تعریف پایههای گیرنده RC
// ═══════════════════════════════════════
#define RC_STEERING_PIN 2 // کانال ۱ گیرنده (فرمان - چپ/راست)
#define RC_THROTTLE_PIN 3 // کانال ۲ گیرنده (گاز - جلو/عقب)
// ═══════════════════════════════════════
// تعریف پایههای درایور BTS7960 - موتور چپ
// ═══════════════════════════════════════
#define LEFT_MOTOR_FWD 5 // RPWM درایور چپ (جلو)
#define LEFT_MOTOR_REV 6 // LPWM درایور چپ (عقب)
// ═══════════════════════════════════════
// تعریف پایههای درایور BTS7960 - موتور راست
// ═══════════════════════════════════════
#define RIGHT_MOTOR_FWD 9 // RPWM درایور راست (جلو)
#define RIGHT_MOTOR_REV 10 // LPWM درایور راست (عقب)
// ═══════════════════════════════════════
// ثابتهای تنظیم
// ═══════════════════════════════════════
#define DEADZONE 30 // منطقه مرده (جلوگیری از لرزش در حالت ایستاده)
#define MAX_PWM 255 // حداکثر مقدار PWM (0-255)
#define PULSE_TIMEOUT 25000 // تایماوت خواندن پالس (میکروثانیه)
// ═══════════════════════════════════════
// متغیرهای سراسری
// ═══════════════════════════════════════
int throttleValue = 0; // مقدار گاز (-255 تا +255)
int steeringValue = 0; // مقدار فرمان (-255 تا +255)
int leftSpeed = 0; // سرعت نهایی موتور چپ
int rightSpeed = 0; // سرعت نهایی موتور راست
// ═══════════════════════════════════════
// تابع خواندن کانال RC
// ═══════════════════════════════════════
int readRCChannel(int pin, int minVal, int maxVal, int defaultVal) {
// خواندن عرض پالس PWM از گیرنده
int pulse = pulseIn(pin, HIGH, PULSE_TIMEOUT);
// اگر سیگنالی دریافت نشد، مقدار پیشفرض برگردان
if (pulse < 100) return defaultVal;
// تبدیل محدوده پالس (1000-2000μs) به محدوده دلخواه
int value = map(pulse, 1000, 2000, minVal, maxVal);
// محدود کردن به بازه مجاز
return constrain(value, minVal, maxVal);
}
// ═══════════════════════════════════════
// تابع کنترل یک موتور با BTS7960
// ═══════════════════════════════════════
void setMotor(int fwdPin, int revPin, int speed) {
// speed مثبت = جلو، منفی = عقب، صفر = توقف
if (speed > 0) {
// حرکت به جلو
analogWrite(fwdPin, speed);
analogWrite(revPin, 0);
}
else if (speed < 0) {
// حرکت به عقب
analogWrite(fwdPin, 0);
analogWrite(revPin, -speed); // قدر مطلق
}
else {
// توقف (ترمز)
analogWrite(fwdPin, 0);
analogWrite(revPin, 0);
}
}
// ═══════════════════════════════════════
// Setup - اجرا یکبار در شروع
// ═══════════════════════════════════════
void setup() {
// راهاندازی سریال برای دیباگ
Serial.begin(115200);
Serial.println("=== DIY UGV Started ===");
// تنظیم پایههای ورودی RC
pinMode(RC_STEERING_PIN, INPUT);
pinMode(RC_THROTTLE_PIN, INPUT);
// تنظیم پایههای خروجی موتور
pinMode(LEFT_MOTOR_FWD, OUTPUT);
pinMode(LEFT_MOTOR_REV, OUTPUT);
pinMode(RIGHT_MOTOR_FWD, OUTPUT);
pinMode(RIGHT_MOTOR_REV, OUTPUT);
// اطمینان از توقف اولیه موتورها
setMotor(LEFT_MOTOR_FWD, LEFT_MOTOR_REV, 0);
setMotor(RIGHT_MOTOR_FWD, RIGHT_MOTOR_REV, 0);
Serial.println("Motors initialized. Waiting for RC signal...");
}
// ═══════════════════════════════════════
// Loop - حلقه اصلی (تکرار مداوم)
// ═══════════════════════════════════════
void loop() {
// ── مرحله ۱: خواندن سیگنالهای RC ──
throttleValue = readRCChannel(RC_THROTTLE_PIN, -255, 255, 0);
steeringValue = readRCChannel(RC_STEERING_PIN, -255, 255, 0);
// ── مرحله ۲: اعمال منطقه مرده (Deadzone) ──
if (abs(throttleValue) < DEADZONE) throttleValue = 0;
if (abs(steeringValue) < DEADZONE) steeringValue = 0;
// ── مرحله ۳: میکس فرمان تفاضلی (Differential Mixing) ──
// فرمول: سرعت چرخ = گاز ± فرمان
leftSpeed = throttleValue + steeringValue;
rightSpeed = throttleValue - steeringValue;
// ── مرحله ۴: محدود کردن سرعت به بازه مجاز ──
leftSpeed = constrain(leftSpeed, -MAX_PWM, MAX_PWM);
rightSpeed = constrain(rightSpeed, -MAX_PWM, MAX_PWM);
// ── مرحله ۵: ارسال فرمان به موتورها ──
setMotor(LEFT_MOTOR_FWD, LEFT_MOTOR_REV, leftSpeed);
setMotor(RIGHT_MOTOR_FWD, RIGHT_MOTOR_REV, rightSpeed);
// ── مرحله ۶: نمایش اطلاعات در Serial Monitor ──
Serial.print("Throttle: ");
Serial.print(throttleValue);
Serial.print(" | Steering: ");
Serial.print(steeringValue);
Serial.print(" | Left: ");
Serial.print(leftSpeed);
Serial.print(" | Right: ");
Serial.println(rightSpeed);
// تأخیر کوتاه برای پایداری
delay(20);
}
توضیح عملکرد کد
- خواندن RC: تابع
readRCChannel()با استفاده ازpulseIn()عرض پالس PWM را از گیرنده میخواند. پالس بین ۱۰۰۰ تا ۲۰۰۰ میکروثانیه است (۱۵۰۰ = وسط). این مقدار به بازه -۲۵۵ تا +۲۵۵ تبدیل میشود. - Deadzone: اگر مقدار استیک نزدیک مرکز باشد (کمتر از ۳۰)، آن را صفر فرض میکنیم تا موتورها بیدلیل نلرزند.
- میکسینگ تفاضلی:
leftSpeed = throttle + steeringوrightSpeed = throttle - steering. وقتی فرمان به راست بچرخانید، سرعت موتور چپ بیشتر و موتور راست کمتر میشود. - کنترل موتور: تابع
setMotor()بسته به علامت سرعت، پایه FWD یا REV درایور BTS7960 را با PWM فعال میکند.
آپلود کد روی آردوینو
- نرمافزار Arduino IDE را دانلود و نصب کنید
- برد Arduino Nano (یا Uno) را از منو
Tools → Boardانتخاب کنید - پورت USB را از
Tools → Portانتخاب کنید - کد بالا را کپی و در IDE پیست کنید
- دکمه Upload (فلش) را بزنید
- پس از آپلود،
Serial Monitorرا باز کنید (بادریت ۱۱۵۲۰۰) تا مقادیر RC را ببینید
تنظیم فرستنده FlySky FS-i6
- فرستنده را روشن کنید و وارد منو
System → RX Setupشوید - نوع خروجی را روی PWM تنظیم کنید (نه PPM یا iBus)
- وارد
Functions → Reverseشوید و در صورت نیاز جهت کانالها را معکوس کنید - وارد
Functions → Endpointsشوید و حداقل/حداکثر هر کانال را روی ۱۰۰۰-۲۰۰۰ تنظیم کنید - Binding: فرستنده و گیرنده معمولاً از کارخانه bind شدهاند. اگر نیاز به bind مجدد داشتید، راهنمای رسمی FlySky را ببینید
مونتاژ و راهاندازی نهایی
مراحل مونتاژ گام به گام
- برش بدنه: تخته سهلا را به ابعاد ۶۰×۴۰ سانتیمتر ببرید. گوشهها را گرد کنید.
- نصب موتورها: هر موتور MY1016 را با بست L فلزی در دو طرف جلوی شاسی ببندید. فاصله بین مرکز دو چرخ حدود ۳۵ سانتیمتر باشد.
- نصب چرخهای جلو: چرخدنده ۴۸ دندانه را روی محور هر چرخ فرغونی ببندید. زنجیر T8F را بین چرخدنده موتور و چرخدنده چرخ نصب کنید. کشش زنجیر را تنظیم کنید.
- نصب چرخ عقب: چرخ کستر (آزاد) را در وسط عقب شاسی ببندید.
- سیمکشی برق: دو باتری را سری وصل کنید (مثبت باتری ۱ به منفی باتری ۲). خروجی ۲۴V را از طریق فیوز و کلید به درایورها وصل کنید.
- سیمکشی سیگنال: آردوینو را طبق جدول سیمکشی بالا به درایورها و گیرنده RC وصل کنید.
- نصب دوربین: دوربین FPV را در جلوی ربات (رو به جلو) با چسب حرارتی نصب کنید. VTX را کنار آردوینو قرار دهید.
- تست اولیه: قبل از قرار دادن ربات روی زمین، آن را بلند کنید و با RC تست کنید که چرخها در جهت صحیح میچرخند.
نکات ایمنی مهم
- ⚠️ سرعت ۴۰ کیلومتر در ساعت برای یک ربات بسیار بالا است. در فضای باز و دور از افراد تست کنید
- ⚠️ حتماً از فیوز ۳۰ آمپر استفاده کنید تا در صورت اتصال کوتاه، سیمها نسوزند
- ⚠️ هرگز ربات را بدون کلید قطع اضطراری (Kill Switch) در فضای عمومی استفاده نکنید
- ⚠️ باتریهای سربی-اسیدی حاوی اسید هستند — از واژگونی و ضربه محافظت کنید
- ⚠️ زنجیر و چرخدنده را با یک محافظ (Guard) بپوشانید تا انگشتان گیر نکنند
- ⚠️ در شروع، سرعت را از طریق کد محدود کنید (مثلاً
MAX_PWMرا ۱۲۸ بگذارید) و تدریجاً افزایش دهید - ⚠️ در صورت قطع سیگنال RC، ربات باید خودکار متوقف شود (کد بالا این قابلیت را دارد — Failsafe)
ارتقاءهای پیشنهادی (آینده)
- باتری لیتیوم: با پک ۶S LiPo یا ۷S Li-ion وزن ربات نصف میشود و زمان کارکرد دو برابر
- GPS و خودکارسازی: با افزودن ماژول GPS (مثل NEO-6M) و کتابخانه TinyGPS++ میتوانید مسیریابی خودکار اضافه کنید
- تلمتری: با ماژول HC-12 یا LoRa میتوانید اطلاعات ولتاژ باتری و سرعت را به فرستنده ارسال کنید
- ROS: با ارتقا به Raspberry Pi و ROS 2، ربات را کاملاً خودکار کنید
- سنسور فاصله: سنسور اولتراسونیک HC-SR04 یا لیدار را برای جلوگیری از برخورد اضافه کنید
منابع آموزشی، مراجع و لینکهای مفید
مستندات رسمی و دیتاشیتها (OEM)
- Arduino Nano — مستندات رسمی
- Arduino Language Reference — مرجع زبان برنامهنویسی
- BTS7960 (BTN7960) Datasheet — Infineon
- FlySky FS-i6 — صفحه رسمی
آموزشهای ویدیویی و متنی (انگلیسی)
- DroneBot Workshop — ساخت ماشین RC با FlySky و آردوینو (آموزش کامل)
- Last Minute Engineers — آموزش BTS7960 با آردوینو
- YouTube — BTS7960 Motor Driver Tutorial
- HowToMechatronics — آموزش کنترل موتور DC
- Random Nerd Tutorials — کنترل موتور DC
پروژههای DIY مشابه (متنباز)
- Instructables — پروژههای UGV
- Instructables — ساخت ماشین ربات با آردوینو
- Hackaday.io — پروژههای UGV متنباز
- GitHub — مخازن متنباز UGV
- GitHub — نمونه کد RC Robot با BTS7960 و FlySky
- GitHub — Arduino + FlySky i6 Differential Drive
- Thingiverse — طرحهای سهبعدی ربات UGV
سایتهای آموزش الکترونیک و رباتیک
- Arduino Official Tutorials — آموزشهای رسمی آردوینو
- Adafruit Learning System — آموزش الکترونیک
- SparkFun Learn — آموزشها و راهنماها
- All About Circuits — مرجع مدارات
- Electronics Tutorials — آموزش پایه الکترونیک
- ROS — شروع با Robot Operating System
ویکیها و مراجع فنی
- Wikipedia — Unmanned Ground Vehicle
- Wikipedia — Skid Steering
- Wikipedia — Brushed DC Motor
- Wikipedia — H-Bridge (پل H)
- Wikipedia — PWM (مدولاسیون عرض پالس)
ابزارهای آنلاین مفید
- Tinkercad — شبیهساز آردوینو آنلاین و رایگان
- Wokwi — شبیهساز آردوینو آنلاین پیشرفته
- Fritzing — طراحی مدار و سیمکشی
- Gear Ratio Calculator — محاسبه نسبت دنده
- Watts/Volts/Amps Calculator — محاسبه توان
فروشگاههای آنلاین برای خرید قطعات
- AliExpress — ارزانترین قطعات الکترونیک (ارسال جهانی)
- Banggood — قطعات الکترونیک و رباتیک
- دیجیکالا — خرید داخلی ایران
- باسلام — قطعات و ابزار ایرانی
- فروشگاه قطعات الکترونیک ایران (ECA)
نتیجهگیری
در این آموزش یاد گرفتید چگونه با کمتر از ۲۵۰ دلار یک ربات زمینی بدون سرنشین (UGV) با سرعت ۴۰ کیلومتر در ساعت بسازید. این پروژه از ارزانترین قطعات موجود استفاده میکند و بدنه آن قابل ساخت با ابزارهای ساده خانگی است.
نکات کلیدی:
- سیستم فرمان تفاضلی (Skid Steer) سادهترین و ارزانترین روش است
- موتور MY1016 250W با زنجیر و چرخدنده توان و سرعت کافی فراهم میکند
- درایور BTS7960 ارزانترین و قویترین درایور برای این کاربرد است
- کد آردوینو فقط ~۱۰۰ خط است و به هیچ کتابخانه خارجی نیاز ندارد
- باتری سربی-اسیدی ارزانترین گزینه با ظرفیت کافی است
سؤالی دارید؟ در بخش نظرات زیر بپرسید یا به Make for Iran سر بزنید!
این مقاله توسط تیم Make for Iran نوشته شده و تحت لایسنس Creative Commons BY-SA 4.0 منتشر میشود. آزادانه به اشتراک بگذارید و ارتقا دهید!