جلسهي سي و هفتم
صفحهي اصلي رباتيك
جلسهي سي و نهم
به نام خدا
به شكل بالا نگاه كنيد، در جلسهي نوزدهم گفتيم 3 سنسور هر طرف را با همديگر ANDمنطقي ميكنيم و اگر هر يك از اين 3 سنسور خط را تشخيص داد، موتور همان سمت را متوقف ميكنيم تا به اين ترتيب ربات خط را تعقيب كند.
اما در رباتهاي مسيرياب ميكروكنترلر دار، ما ميتوانيم براي هر سنسور، به طور مجزا دستوري به موتور بدهيم. براي درك اين موضوع مجدد به شكل بالا نگاه كنيد، اين نماي كلي يك ربات از زير است. سنسورهاي آن را به ترتيب از چپ به راست، از 7 تا 1 شماره گذاري ميكنيم.همانطور كه به خاط داريد در رباتهاي بدون ميكروكنترلر، تفاوتي نداشت كه سنسور 1 يا 2 يا 3 كداميك خط را بيابند، هر كدام خط را تشخيص ميداد، موتور سمت چپ خاموش ميشد. اما در رباتهاي ميكروكنترلر دار، ما ميتوانيم تعيين كنيم كه مثلاً اگر سنسور شمارهي 3 خط را ديد، موتور سمت چپ به طور كامل متوقف نشود، بلكه سرعت آن به نصف كاهش پيدا كند. اين كار به نظر هم منطقي ميرسد، زيرا سنسور شمارهي 3 و 5 تا خط فاصلهي كمي دارند و نياز نيست وقتي خط را تشخيص ميدهند به طور كامل موتور متوقف شود، بلكه فقط كافيست سرعت موتور كمي كاهش پيدا كند تا ربات به تدريج به روي خط باز گردد. اين عمل باعث ميشود حركت ربات نرمتر و دقيقتر بشود و در مجموع سرعت ربات بالاتر برود.حال اگر سنسور شمارهي 2 خط را ببيند، يعني شرايط كمي خطرناكتر شده و ربات ممكن است از خط خارج شود، پس ميتوانيم در اينجا به موتور دستور توقف كامل را بدهيم تا ربات با سرعت بيشتري به مسير مسابقه بازگردد. و در نهايت اگر سنسور شمارهي 1 خط را ببيند، يعني ربات در آستانهي خروج از مسير مسابقه قرار گرفته است و بايد با حداكثر توان ربات را به مسير مسابقه بازگرداند. براي اين كار به موتور سمت چپ دستور باز گشت به عقب را ميدهيم. اين كار بيشترين سرعت ممكن براي چرخش ربات را فراهم ميسازد و ربات با سرعت زيادي به زمينه مسابقه باز ميگردد.در زير بخشي از برنامهي يك ربات مسيرياب پيشرفته، كه فقط براي سنسورهاي سمت چپ و طبق توضيحات بالا نوشته شده است را ميبينيد. همانطور كه ميدانيد ما نياز به 3 پايه به عنوان ورودي براي دريافت وضعيت سنسورهاي سمت چپ، و يك پايهي خروجي و يك PWM براي كنترل موتور سمت چپ داريم كه به ترتيب زير هستند:PA.0 براي سنسور شمارهي 1PA.1 براي سنسور شمارهي 2PA.2 براي سنسور شمارهي 3PD.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{
(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{
منتظر سوالات و نظرات دوستان خوبم هستمتا جلسهي آينده خدا نگه دار
دوست شما، فراز اميرغياثوند
علوم اسلامی
دین و زندگی زندگینامه معصومین(ع)
علوم انسانی
فرهنگ و تمدن اجتماعی ادبیات
علوم تجربی
زمین شناسی زیست شناسی شیمی فیزیک
علوم ریاضی
علوم کامپیوتر ریاضیات
بهداشت و سلامت
بهداشت و سلامت مشاوره و روانشناسی
هنر و سرگرمی
تئاتر و سینما سرگرمی