كاربرد تكنيك PWM در ساخت يك ربات مسيرياب پيشرفته...
به نام خدا
با سلام خدمت دوستان خوبم. اميدوارم همگي خوب و خوش و سلامت باشيد و تا به اينجا امتحاناتتون را با موفقيت پشت سر گذاشته باشيد.
در اين جلسه به دليل همزماني با امتحانات پايانترم عزيزان، سعي ميكنيم مطالب كمي سادهتر و مختصر باشد. در اين جلسه در مورد كاربرد PWM در ساخت يك ربات مسيرياب حرفهاي توضيح ميدهيم.
در رباتهاي مسيرياب ساده كه در جلسه 19 نيز در مورد آن توضيح داديم، هنوز ميكروكنترلر وارد ربات ما نشده و تصميصماتي كه ربات ما براي يافتن خط ميگيريد بسيار مقدماتي هستند و ربات نميتواند مسيرهاي پيچيده را با سرعت مناسبي دنبال كند.
يكي از مهمترين فوايد استفاده از ميكروكنترلر در ساخت رباتهاي مسيرياب، استفاده از قابليت PWM براي هدايت موتورهاي ربات است. اما به چه صورت از PWM استفاده ميكنيم؟
به شكل بالا نگاه كنيد، در جلسهي نوزدهم گفتيم 3 سنسور هر طرف را با همديگر ANDمنطقي ميكنيم و اگر هر يك از اين 3 سنسور خط را تشخيص داد، موتور همان سمت را متوقف ميكنيم تا به اين ترتيب ربات خط را تعقيب كند.
اما در رباتهاي مسيرياب ميكروكنترلر دار، ما ميتوانيم براي هر سنسور، به طور مجزا دستوري به موتور بدهيم. براي درك اين موضوع مجدد به شكل بالا نگاه كنيد، اين نماي كلي يك ربات از زير است. سنسورهاي آن را به ترتيب از چپ به راست، از 7 تا 1 شماره گذاري ميكنيم.
همانطور كه به خاط داريد در رباتهاي بدون ميكروكنترلر، تفاوتي نداشت كه سنسور 1 يا 2 يا 3 كداميك خط را بيابند، هر كدام خط را تشخيص ميداد، موتور سمت چپ خاموش ميشد. اما در رباتهاي ميكروكنترلر دار، ما ميتوانيم تعيين كنيم كه مثلاً اگر سنسور شمارهي 3 خط را ديد، موتور سمت چپ به طور كامل متوقف نشود، بلكه سرعت آن به نصف كاهش پيدا كند. اين كار به نظر هم منطقي ميرسد، زيرا سنسور شمارهي 3 و 5 تا خط فاصلهي كمي دارند و نياز نيست وقتي خط را تشخيص ميدهند به طور كامل موتور متوقف شود، بلكه فقط كافيست سرعت موتور كمي كاهش پيدا كند تا ربات به تدريج به روي خط باز گردد. اين عمل باعث ميشود حركت ربات نرمتر و دقيقتر بشود و در مجموع سرعت ربات بالاتر برود.
حال اگر سنسور شمارهي 2 خط را ببيند، يعني شرايط كمي خطرناكتر شده و ربات ممكن است از خط خارج شود، پس ميتوانيم در اينجا به موتور دستور توقف كامل را بدهيم تا ربات با سرعت بيشتري به مسير مسابقه بازگردد. و در نهايت اگر سنسور شمارهي 1 خط را ببيند، يعني ربات در آستانهي خروج از مسير مسابقه قرار گرفته است و بايد با حداكثر توان ربات را به مسير مسابقه بازگرداند. براي اين كار به موتور سمت چپ دستور باز گشت به عقب را ميدهيم. اين كار بيشترين سرعت ممكن براي چرخش ربات را فراهم ميسازد و ربات با سرعت زيادي به زمينه مسابقه باز ميگردد.
در زير بخشي از برنامهي يك ربات مسيرياب پيشرفته، كه فقط براي سنسورهاي سمت چپ و طبق توضيحات بالا نوشته شده است را ميبينيد. همانطور كه ميدانيد ما نياز به 3 پايه به عنوان ورودي براي دريافت وضعيت سنسورهاي سمت چپ، و يك پايهي خروجي و يك PWM براي كنترل موتور سمت چپ داريم كه به ترتيب زير هستند:
PA.0 براي سنسور شمارهي 1
PA.1 براي سنسور شمارهي 2
PA.2 براي سنسور شمارهي 3
PD.6 و OCR2 براي كنترل موتور چپ
PD.3 و OCR1BL براي كنترل موتور راست
حالا به برنامه دقت كنيد:
(if (PINA.0==0 } ; PORTD.6=0 ; OCR2=127
; PORTD.3=0 ; OCR1BL=255 { (if (PINA.1==0 } ; PORTD.6=0 ; OCR2=0
; PORTD.3=0 ; OCR1BL=255 {
(if (PINA.2==0 } ; PORTD.6=1 ; OCR2=0
; PORTD.3=0 ; OCR1BL=255 {
|
به همين منوال بايد براي سنسورهاي سمت راست هم برنامه را ادامه دهيد. دقت كنيد كه بايد حتماً قبل از نوشتن برنامه، از داخل CodeWizard، تنظيمات اوليه را انجام دهيد.
در مورد سنسور وسط هم در جلسهي بيستم توضيحاتي داده شد، اگر اين سنسور خط را تشخيص دهد، بيانگر اين است كه ربات در وضعيت مناسبي نسبت به خط قرار دارد و هر 2 موتور با تمام توان به سمت جلو حركت ميكنند. اگر پايهي PA.3 را نيز به سنسور وسط اختصاص دهيم، براي اين سنسور نيز داريم:
(if (PINA.3==0
}
;PORTD.6=0
; OCR2=255
; PORTD.3=0
; OCR1BL=255
{
منتظر سوالات و نظرات دوستان خوبم هستم
تا جلسهي آينده خدا نگه دار
دوست شما، فراز اميرغياثوند