راهنما راه اندازی ربات تشخیص مانع با استفاده از سنسور مادون قرمز
هدف از انجام این پروژه راه اندازی یک ربات تشخیص مانع توسط سنسورهای مادون قرمز (IR) می باشد.
شما در این پروژه موارد زیر را فرا خواهید گرفت:
- تنظیم تایمرها و تولید موج PWM دلخواه برای کنترل سروو موتور توسط میکروکنترلر ARM ST
- برقراری ارتباط با سنسورهای مادون قرمز (IR) از طریق درگاههای ADC میکروکنترل ARM ST
- کار با درایور موتور L298
- کار با GPIO های مختلف میکروکنترلر ARM ST
این پروژه توسط میکروکنترلرهای شرکت ST سری STM32F303 که مبتنی بر معماری ARM هستند، در محیطهای CubeMX و Keil انجام خواهد شد.
قطعات مورد نیاز:
- برد 2 wheels controller
- پروگرمر ST-Link
- منبع تغذیه
- شاسی ربات 4 چرخ
- ماژول GP2Y0A21YK0F
فایل برنامه در پیوست ارائه و توضیحات مربوطه به صورت کامنت ارائه شدهاست.
توضیحات برنامه:
در این پروژه توابع مربوط به حرکت ربات، در سربرگی جدا تعریف و در سربرگ اصلی فراخوانی شدهاند.
سنسور IR استفاده شده در این پروژه بر روی یک سروو موتور بسته شدهاست. سروو موتور قادر است تا در زاویهای مشخص شده قرار گیرد. کنترل سروو موتور به این صورت است که یک پالس PWM با دوره 20 میلی ثانیه (50 هرتز) و Duty cycle متغیر بین 1 تا 2 میلی ثانیه به آن اعمال میشود و بسته به duty cycle، شفت سروو در زاویهای مشخص قرار میگیرد.
برای تولید موج PWM از تایمرها استفاده میکنیم. با توجه به شماتیک که قبلا نشان داده شد، سروو موتور به پایه PB.15 متصل است که همان CH3N در تایمر 1 است.
برای تولید موج مد نظر سه پارامتر باید در تایمر تنظیم شود:
- Prescaler
- Counter period
- Pulse (16 bit value)
فرمول محاسبه فرکانس تایمر به صورت زیر است:
f=F_clk⁄((prescaler-1)(period-1))
که در آن Fclk فرکانس کلاک تایمر است.
با تنظیم مقادیر prescaler و period فرکانس سیگنال تنظیم میشود و با تنظیم pulse، duty cycle سیگنال مشخص میشود.
ابتدا تایمرها را فعال میکنیم:
از تایمر 6 برای کاهش نرخ نمونه برداری ADC استفاده کردهایم. درگاه ADC را برای خواندن مقادیر سنسورها نیز فعال میکنیم.
برای تست موتورها، ربات یک ثانیه به راست و یک ثانیه به چپ میچرخد:
برای تست سروو، ربات زاویه صفر تا 180 درجه را پیمایش میکند:
سپس سروو در موقعیت وسط خود قرار میگیرد:
الگوریتم ربات به این گونه است که اگر مانعی در 10 سانتی متری ربات نباشد، ربات رو به جلو حرکت خواهد کرد. در صورت تشخیص مانع در فاصلهی کمتر از 10 سانتی متر، ربات متوقف شده و چشم IR شروع به اسکن میکند. در صورتی که مسیر بدون مانع پیدا شد، ربات به آن سمت خواهد چرخید. اگر ربات نتوانست مسیری برای خود پیدا کند، کمی به عقب برخواهد گشت و به سمت چپ تغییر مسیر خواهد داد.
نکته:
ماژول GP2Y0A21YK0F در تشخیص موانع با فاصله کمتر از 10 سانتی متر دچار خطا میشود. برای رفع این مشکل، همانند شکل، میتوانید از یک فرستنده و گیرنده مادون قرمز استفاده کنید تا این خطا را تشخیص داده و تاثیر آن را حذف کنید.
طبق نکته بالا، از دو کانال ADC برای تشخیص مانع استفاده شدهاست. یک کانال دیتای GP2Y0A21YK0F را دریافت میکند و دیگری دیتای زوج فرستنده-گیرنده معمولی را.
حضور موانع در فاصله کمتر از 10 سانتیمتر باعث کاهش خروجی زوج سنسور مادون قرمز به کمتر از 2.6 ولت میشود.
نکته: فرمول تبدیل داده ADC به ولتاژ عبارت است از:
Vout=((Raw_data)/(2^n-1))*Vref
که n تعداد بیتهای ADC ( 12 بیت ) و Vref ولتاژ مرجع ( 3.3 ولت ) است.