1- پردازنده مورد استفاده
STM32F103C8T6
2- هدف فاز اول پروژه
پیادهسازی کنترل پایه ربات تانکی با دو موتور حرکت و یک موتور برس از طریق جویاستیک و nRF24L01 به صورت بیسیم.
در این فاز، تمرکز بر خواندن جویاستیک، ارسال داده، دریافت داده در گیرنده و راهاندازی موتورها است.
3- سختافزار فاز اول
فرستنده:
STM32F103C8T6
جویاستیک آنالوگ دو محور (X/Y)
ماژول nRF24L01
منبع تغذیه 3.3 یا 5 ولت برای MCU و ماژول
گیرنده:
STM32F103C8T6
دو درایور H-Bridge برای موتورهای حرکت ربات
ماژول nRF24L01
منبع تغذیه جداگانه برای موتورها و MCU
4- الگوریتم نرمافزاری
فرستنده (STM32):
خواندن مقادیر X و Y جویاستیک از ADC.
ساخت بسته ۷ بایتی دیتا و محاسبه Checksum.
ارسال بسته از طریق nRF24L01 با فرکانس مناسب (مثلاً 20–50Hz).
گیرنده (STM32):
دریافت بسته ۷ بایتی از nRF24L01.
بررسی Header و Checksum.
نگاشت X و Y به سرعت و جهت دو موتور حرکت ربات (تانکی).
بروزرسانی موتورهای حرکت به صورت همزمان.
نکته مهم
این پروژه شامل چند فاز توسعهای است (نمایشگر OLED، مانیتور باتری، شناسایی خطا و ارتباط دو طرفه)، در این مرحله تنها فاز اول اجرا خواهد شد و فازهای بعدی در مراحل بعدی پیادهسازی خواهند شد.
نکات مهم در تحویل گیری:
۱. خوانایی و ساختار کد
استفاده از نامهای معنادار برای متغیرها و توابع:
مثال: readJoystickX(), sendNRFData(), driveLeftMotor().
ساختار ماژولار:
توابع و بخشهای مختلف پروژه (خواندن جویاستیک، ارسال/دریافت nRF، کنترل موتور) باید جدا از هم باشند.
بهتر است برای هر بخش یک فایل جداگانه یا حداقل یک بلوک مشخص در کد داشته باشید.
توابع عمومی و قابل استفاده مجدد:
مثلاً calculateChecksum(uint8t* data, uint8t length) یا mapJoystickToMotorSpeed().
۲. کامنتگذاری و مستندسازی
توضیح هر بخش کد: چه عملی انجام میدهد و چرا.
توضیح فرمت بسته nRF24L01: هر بایت چه معنایی دارد.
توضیح الگوریتم نگاشت X/Y به سرعت و جهت موتورها.
توضیح مقادیر ثابت یا تنظیمات سختافزاری:
پینهای STM32 متصل به nRF24L01، موتور، شاسی و ADC.
۳. استفاده از لایبرری یا فایلهای جداگانه برای بخشهای مهم
nRF24L01: یک ماژول جداگانه nRF24L.h برای ارسال/دریافت با توابع استاندارد (nrfInit(), nrfSend(), nrfReceive())
موتورها (H-Bridge): یک ماژول MotorControl.h با توابع driveMotorLeft(speed, direction) و driveMotorRight(speed, direction)
جویاستیک: ماژول Joystick.h برای خواندن مقادیر و نگاشت آنها
این کار باعث میشود در آینده تغییر در یک بخش، کل پروژه را خراب نکند.
۴. تست و اعتبارسنجی
تست جداگانه هر بخش:
تست خواندن ADC جویاستیک
تست ارسال/دریافت nRF24L01
تست موتورهای حرکت با مقادیر ثابت
تست بسته کامل: اطمینان از هماهنگی X/Y با حرکت ربات و فرمان برسها.
ثبت محدودیتها و مشکلات احتمالی که فریلنسر یا تیم باید بدانند.
۵. استانداردهای کدنویسی
استفاده از فرمت ثابت برای توابع و بلوکها (indentation، فاصلهها، خطوط خالی)
تعریف کنستانتها و ماکروها به جای اعداد خام:
مثال: #define MOTORSTOP 0, #define MOTORCW 1
فعال کردن کامنت برای بیتهای Status و Reserved
۶. تحویل نهایی
کد کامل، کامپایل شده و آماده فلش روی STM32
تمام کتابخانهها یا لینک دانلود آنها
نمونه خروجی یا ویدیو کوتاه از کد.