توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : آموزش ساخت ربات
ریپورتر
8th May 2009, 07:42 PM
ما آنالوگ رو با معرفی 3 کمیت "اختلاف پتانسیل(V)"(Voltage)، "جریان(I) "(Current)و "مقاومت(R)"(Resistor) شروع می کنیم. البته این کمیت ها رو احتمالاً بخش زیادی از دوستان می شناسند زیرا هر 3 کمیت در بخش" الکتریسیته" ی "فیزیک 1 و ازمایشگاه" به تفصیل معرفی شده اند.
اختلاف پتانسیل(V):
ساده ترین تعریفی که برای (V) وجود دارد این است که اختلاف پتانسیل را عامل برقرار شدن جریان الکتریکی در مدار می دانند. برای اینکه شما این کمیت رو بهتر لمس کنید یک مثال ساده می زنم (البته این مثال در همه ی قسمت های بحث صادق نیست).
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/A%20to%20B.JPG
فرض کنید 2 سطل آب در اختیار داریم با نام های "A"و"B" . سطل Aپر از آب و با اختلاف ارتفاع 1 متر بالاتر از سطل B قرار دارد. 2 سطل رو با یک شیلنگ به همدیگه وصل می کنیم. در این حالت مشاهده خواهیم کرد که اب از سطل A به درون B جاری می شود. حالا اگر جای 2 سطل رو با هم عوض کنیم جریان آب عکس می شود و از سطل B به سطل A جاری خواهد شد و اگر 2 سطل را هم ارتفاع کنیم ، هیچ جریانی نخواهیم داشت. یعنی این اختلاف ارتفاع عامل جاری شدن آب بین 2 سطل می باشد.
در حقیقت در این مثال آب نقش الکترونها رو بازی میکنه و شیلنگ نقشه سیم، و AوB هم 2 قطب +و- باطری یا مولد الکتریکی. و در نهایت اختلاف ارتفاع بین 2 سطل هم نقش اختلاف پتانسیل بین 2 قطب رو بازی می کنند.
یکای اختلاف پتانسیل "ولت" می باشد.
جریان الکتریکی(I):
برای تعریف جریان از مثال قبلیمون کمک می گیریم. در مثال بالا جریان آب نقش جریان الکتریکی را بازی میکنه (دقت کنید که سرعت الکترونها ثابت و تقریباً برابر سرعت نور می باشد ولی همونطور که می دونید سرعت آب در این مثال تابعی از شتاب جاذبه ی زمین(g) است.) . در حقیقت حرکت الکترونها بین 2قطب مولد را جریان الکتریکی می نامیم.
یکای جریان به پاس خدمات علمی فیزیک دان فرانسوی "ماری آمپر" ،"آمپر(A)" نام گذاری شده است.
مقاومت(R):
مقاومت در حقیقت عاملی مزاحم برای جریان می باشد، یعنی هر چه مقاومت بیشتر باشد جریان کمتر است. برای مثال فرض کنید شما با عجله در حال دویدن در یک پیاده روی شلوغ هستید ، به طبع هر چی پیاده رو شلوغتر باشه حرکت برای شما سخت تر و کندتر خواهد بود. این شلوغی مزاحم مشابه همون مقاومت الکتریکی در یک سیم عمل میکنه.
مقاومت الکتریکی رساناها (موادی که جریان الکتریکی را از خو عبور می دهند) ی مختلف با یکدیگر متفاوت است و مقاومت هر ماده فقط بستگی به مشخصات ساختمانی و دمای اون ماده دارد. در رساناهای معمولی، هر چه دما بالاتر برود، مقاومت بیشتر می شود.(افزایش دما موجب افزایش بی نظمی در ساختار مولکولی رسانا می شود)
یکای اندازه گیری آن به پاس خدمات علمی "گئورگ زیمون اهم"، "اهم" نامیده شده که آنرا با (Ω) نمایش می دهیم. (امگاΩ از حروف یونانی می باشد)
مقاومت در مدارهای شماتیک به شکل http://roshd.ir/roshd/Portals/0/0and1/Robotic2/untitled3.JPG نمایش داده می شود.
ریپورتر
8th May 2009, 07:43 PM
قانون اهم:
در همون مثال سطل ها اگر اختلاف ارتفاع 2 سطل را بیشتر کنیم، مشاهده خواهیم کرد که شدت جریان آب نیز بیشتر می شود. تجربه نیز نشان می دهد که هرچه اختلاف پتانسیل دو سر رسانا بیشتر شود ، شدت جریان عبوری نیز بیشتر می شود. اما اهم برای اولین بار کشف کرد که نسبت V به I (V / I) همواره مقداری ثابت است که این مقدار ثابت همان مقاومت الکتریکی است. یعنی: V / I =R ← V=I R
برای مثال اگر در مدار روبه رو V=10 باشد و امپرسنج عدد 2 را نشان دهد و مقاومت سیم ناچیز باشد انگاه طبق رابطه خواهیم داشت: http://roshd.ir/roshd/Portals/0/0and1/Robotic2/untitled4.JPG
V=10 و V / I =R ← I=2. پس این مقاومت 5Ω می باشد.
مطالب تکمیلی مقاومت ها:
مقاومت شاید پرکاربردترین قطعه ی مدارهای ما خواهد بود. چون ما بوسیله ی این قطعه می توانیم شدت جریان را در قسمت های مختلف مدار کنترل کنیم. مقاومت ها در حالت کلی به 2 دسته ی ثابت و متغیر تقسیم می شوند. مقاومت های نوری دسته ای از مقاومت های متغیر هستند که نسبت به نور محیط مقاومت انها تغییر می کند، یعنی در محیط های پر نور مقاومت آنها کمتر و در محیط های کم نور مقاومت آنها بیشتر می شود.
دسته ی دیگری از مقاومت های متغیر وجود دارند که به صورت دستی مقاومت آنها تنظیم می شود که به آنها پتانسیومتر نیز گفته می شود.
کدخوانی مقاومت ها:
کارخانه های سازنده مقاومت ها برای سهولت در تولید، اندازه های استانداردی را برای ساخت مقاومت ها تعیین می کنند و با نوار های رنگی دور آنها اندازه ی مقاومت ها را مشخص می کنند. در انتها نیز با یک نوار نقره ای یا طلایی درصد خطا را مشخص می کنند. چون ماده ی اصلی ساخت این مقاومت ها کربن می باشد ،به انها مقاومت کربنی نیز گفته می شود.
برای خواندن میزان مقاومت کربنی،آن را جوری دست می گیریم که حلقه ی طلایی یا نقره ای در سمت راست قرار بگیرد. حالا به ترتیب رنگ اولین حلقه از سمت چپ کد رقم اول، دومین حلقه از سمت چپ رقم دوم، و سومین حلقه از سمت چپ رقم n می باشد که n توان دهی است که ضریب 2 عدد قبلی می باشد.(اگر 5 حلقه داشتیم، حلقه ی سوم رقم سوم می باشد و حلقه ی چهارم n است، حلقه ی پنجم هم همون درصد خطاست)
جدول کد رنگ ها بدین صورت می باشد:
رنگ حلقه
عدد مربوط به آن
سياه
0
قهوهاي
1
قرمز
2
نارنجي
3
زرد
4
سبز
5
آبي
6
بنفش
7
خاكستري
8
سفيد
9
به عنوان مثال اگر روی یک مقاومت به ترتیب از چپ به راست نوار قهوه ای، سیاه و قرمز باشد اندازه ی مقاومت عبارتست از: یعنی این مقاومت 1000 اهم یا 1 کیلواهم (1K Ω)می باشد.
حلقه ی آخر که معمولاً طلایی یا نقره ایست حلقه ی تلورانس نیز نام دارد که در کار ما خیلی اهمیت زیادی ندارد.
به شکل زیر دقت کنید:
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/3.gif
به مثال زیر توجه کنید:
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/untitled2.JPG نقره ای 4 7 2
پس این مقاومت 270kΩ یا 270000Ω می باشد.
ریپورتر
8th May 2009, 07:44 PM
مقاومت ها را در مدار بر حسب نوع کاربرد می توانیم به 2 صورت سری و موازی ببندیم:
مقاومت های سری یا متوالی:
اگر چند مقاومت را در مدار به صورت پشت سرهم ببندیم، یعنی هر2مقاومت متوالی در یک سر با هم مشترک باشند (به شکل دقت کنید)، آنگاه می گوییم مقاومت ها را با هم سری کرده ایم
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/R%20seri%20o.JPG
"مقاومت معادل" یعنی مقاومت نهایی کل مجموعه.
برای به دست آوردن مقاومت معادل جند مقاومت که به صورت سری بسته شده اند، کافیست اندازه ی هر مقاومت را با بعدی جمع کنیم یعنی: http://roshd.ir/roshd/Portals/0/0and1/Robotic2/R%20tot.JPG(Totمخفف کلمه یTotal به معنای کل می باشد)
مثال: مقاومت معادل مجموعه ی زیر بدین صورت است: http://roshd.ir/roshd/Portals/0/0and1/Robotic2/R%20tot.JPG
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/R%20seri.JPG ← 19=12+4+3
مقاومت های موازی:
اگر چند مقاومت را در مدار به شکلی ببندیم که ابتدا و انتهای همه ی آنها به همدیگر متصل باشند(به شکل دقت کنید)، آنها را با یکدیگر موازی کرده ایم.
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/movazi.JPG
برای بدست آوردن مقاومت معادل در این حالت از این فرمول استفاده می کنیم:
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/R%20movazi.JPG
مثال: مقاومت معادل مجموعه ی زیر بدین صورت است:
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/movazi%20mesal.JPG
← http://roshd.ir/roshd/Portals/0/0and1/Robotic2/R%20movazi%20tot.JPG
مدارهای الکترونیکی ممکنه ترکیبی از مقاومت های سری و موازی باشند، در این صورت برای به دست آوردن مقاومت معادل باید سعی کنیم مساله را به قسمت های کوچکتر تبدیل کنیم و مقاومت هر قسمت را جداگانه محاسبه و با قسمت دیگر جمع کنیم. به مثال دقت کنید:
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/Akhar.JPG
ریپورتر
8th May 2009, 07:44 PM
خازن:
خازن یک قطعه ی الکتریکی می باشد که می تواند مقداری بار الکتریکی در خود ذخیره کند و در هنگام نیاز به مدار باز گرداند(میزان عبور بار الکتریکی در واحد زمان از یک نقطه را همان جریان الکتریکی آن نقطه می گویند.بار الکتریکی همان الکترون هایی آزادی هستند که وقتی بین 2 قطب حرکت می کنند موجب به وجود آمدن جریان الکتریکی می شوند ). خازن ها انواع گونگونی دارند، از جمله خازن های عدسی، الکترولیتی، سرامیکی و... .
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/capacitors1.jpg
خازن ها از پرکابردترین قطعات الکتریکی هستند که در مدارهای مختلف مورد استفاده قرار می گیرند. اگر مایلید که در باره ی خازن ها اطلاعات جامع تری تری داشته باشید می تونید به کتاب « فیزیک 3 و آزمایشگاه» مراجه کنید.
خازن را در طراحی های شماتیک به شکل http://roshd.ir/roshd/Portals/0/0and1/Robotic2/schematic.JPG نمایش می دهند.
میزان باری که در خازن ها ذخیره می شود به ظرفیت انها بستگی دارد.
ظرفیت خازن:
ظرفیت خازن عبارتست از نسبت بار ذخیره شده در خازن به اختلاف پتانسیل 2 سر خازن :http://roshd.ir/roshd/Portals/0/0and1/Robotic2/q=cv.JPG که (C)نماد ظرفیت خازن و (q) هم همان بار الکتریکی ذخیره شده در خازن می باشد.
به پاس خدمات فراوان مایکل فارادی ، فیزیکدان انگلیسی، یکای ظرفیت «فاراد» نامیده شده.
نکته ی مهم اینکه خازن ها بعد از پر شدن(قرار گرفتن بار الکتریکی تا حد ظرفیت در آنها را پر شدن می گوییم) دیگر هیچ جریانی را از خود عبور نمی دهند. ما از این خاصیت خازن استفاده های فراوانی خواهیم کرد.
ریپورتر
8th May 2009, 07:45 PM
ادامه ي بحث خازن ها رو شروع مي کنيم.
کد خواني خازن ها:
ظرفيت خازن و ولتاژ مناسب براي خازن ها را کارخانه هاي سازنده معمولاً روي بدنه ي آنها مي نويسند. معمولاً 3 سيستم کد گذاري براي خازن ها وجود دارد:
1- بر روي خازن هاي بزرگ (معمولاً الكتروليتي) ظرفيت و ولتاژ به صورت مستقيم و واضح نوشته شده، مثلاً خازن زير 10V و(1000ميكروفاراد)1000μF است.
μ(ميکرو)= 0.000,001= 6- ^10
n (نانو) = 0.000,000,001 =9- ^10
p ياμμ (پيکو) = 0.000,000,000,001=12- ^10
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/Capsreplaced.jpg
نکته ي مهم: همان طور که مي بينيد روي بدنه ي خازن هاي الكتروليت، يک نوار کشيده شده که به وسيله ي آن پايه ي – مشخص شده، در اين خازن هاي اگر جاي + و - را اشتباه وصل کنيم در اثر پديده ي فرو شکست خازن مي ترکد! در خازن هاي الكتروليتي نيز، خازن ذوب ميشود!
2- در خازن هاي کوچک مثل خازن هاي عدسي به خاطر کمبود جا اطلاعات رو به صورت خلاصه تر مي نويسند. مثلاً روي يك خازن عدد 103J را مي بينيد، اين سيستم مشابهت زيادي با سيستم کد گذاري مقاومت ها دارد، يعني 2 رقم اول از سمت چپ ، ارقام اول و دوم ،و رقم سوم نيز يک ضريب طبق جدول زير مي باشد.
حرف لاتيني که در آخر نوشته مي شود نيز تلورانس يا ضريب خطا مي باشد(در خيلي از مقاومت ها اصلاً نوشته نمي شود). در زير اين اعداد گاهي ممکنه يک ولتاژ مثل 10V نوشته شود که ولتاژِ کاري خازن است.
2رقم اول ،ضربدر ضريبي كه رقم سوم آن را نشان ميدهد، ميشود ظرفيت خازن بر حسب پيكوفاراد
رقم سوم
(Third Digit)
ضريب
(Multiplier)
0
1 =100
1
10 =101
2
100 =102
3
1000 =103
4
10000 =104
5
100000 =105
6 يا 7
استفاده نمي شوند
8
0.01
9
0.1
ریپورتر
8th May 2009, 07:46 PM
و 3- اين سيستم کد گذاري خازن ها دقيقاً مشابه همان مقاومت هاست، يعني ظرفيت خازن با حلقه ها رنگي نمايش داده مي شود. اين سيستم بسيار کم کاربرد مي باشد و لذا ما وارد جزئيات بيشتر آن نمي شويم.
انواع به هم بستن خازن ها
خازن ها نيز مانند مقاومت ها به 2 صورت به هم بسته مي شوند: سري و موازي
خازن هاي سري
در به هم بستن خازن ها به صورت متوالي يا سري ظرفيت معادل مجموعه از فرمول زير محاسبه مي شود
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/ctot%20seri.JPG
:به عنوان مثال ظرفيت معادل مجموعه ي روبرو برابر است با
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/ctot%20seri%20mesal.JPG http://roshd.ir/roshd/Portals/0/0and1/Robotic2/cap%20seri%20mesal.JPG
نکته: در خازن هاي سري ، باري که روي همه ي خازن ها ذخيره مي شود با هم برابر است(ظرفيت خازن اهميتي ندارد). توضيح اين مطلب نياز به مقدمات زيادي دارد که فعلاً ما نيازي به آن نداريم.
خازن هاي موازي
در به هم بستن موازي خازن ها، ظرفيت خازن ها به صورت مستقيم با هم جمع مي شوند، يعني:http://roshd.ir/roshd/Portals/0/0and1/Robotic2/ctot%20movazi.JPG
C=4+3+12=19: براي مثال مقاومت معادل مجموعه ي زير برابر است با
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/cap%20movazi%20mesal.JPG
نکته: همونطور که مي بينيد در حالت سري، ولتاژي که بر روي پايه هاي همه ي خازن ها قرار مي گیرد مساويست.
اگر در يک مدار چندين خازن به صورت سري و موازي قرار گرفته بودند، ابتدا خازن هاي موازي را حذف و آنگاه ظرفیت معادل بقيه ي خازن ها را محاسبه مي کنيم. به مثال دقت کنيد:
يكي از كاربردهاي بسيار مهم خازنها در كار ما حذف Noiseها و امواج زايد ميباشد، اين روش نسبتاً پيچيده ميباشد ، در جلسات آتي در بارهي اين روش نيز توضيح خواهيم داد.
ديود:
يكي ديگر از پر مصرفترين قطعات الكترونيكي در مدارها ديود ميباشد. احتمالاً با اين قطعه نيز دوستان يك آشنايي مختصري دارند.
ریپورتر
8th May 2009, 07:46 PM
دیود:
همانطور که می دانید دیودها جریان الکتریکی را در یک جهت از خود عبور میدهند و در جهت مخالف در مقابل عبور جریان از خود مقاومت نشان میدهند(این مقاومت آنقدر زیاد است که تقریباً عایق می شوند و جریانی عبور نمی دهند).جالبه که بدانید به همین دلیل در سالهای اولیه ساخت این وسیله الکترونیکی، به آن دریچه(Valve )هم می گفتند.
هنگامی که پایه ی مثبت دیود به قطب + منبع تغذیه(باطری یا هر مولد دیگر) و پایه ی منفی آن به قطب – متصل شود، دیود جریان را عبور داده و اگر برعکس وصل شود تقریباً جریان قطع می شود.
برای فعال شدن دیود باید بین 2 سر آن حداقل 0.6 الی 0.7 ولت اختلاف پتانسیل برقرار شود، یعنی اگر کمتر از این مقدار ولتاژ بر روی آن قرار گیرد، دیود هیچ جریانی را از خود عبور نمی دهد. این ولتاژ را ولتاژ آستانه(Forward Voltage Drop) می گویند.
هنگامی که شما ولتاژ معکوس به دیود متصل می کنید(- به + ، + به -)، دیود جریانی بسیار کوچک و در حدA μ یا حتی کمتر از آن را از خود عبور می دهد، ولی این مقدار آنقدر کم است که هیچ تاثیری بر مدارهای ما نخواهد داشت.
نکته ی مهم: دیودها یک آستانه(Limit) برای حداکثر ولتاژ معکوس دارند که اگر ولتاژ معکوس از آن بالاتر رود، دیود بر اثر پدیده ی فروشکست میسوزد و جریان را در هر دو جهت عبور میدهد. این ولتاژ را آستانه شکست (Break Down) می گویند.
پایه ی منفی دیودها را با یک نوار سفید یا خاکستری رنگ در کنار آن مشخص می کنند.(به شکل دقت کنید)
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/diode-2.JPG
دیود را در مدارهای شماتیک به شکلhttp://roshd.ir/roshd/Portals/0/0and1/Robotic2/schematic%20diod.JPG نشان می دهند که ترتیب + و - پایه های آن نیز روی شکل مشخص شده.
دسته ی دیگری از دیود ها به نام دیودهای زنر(Zener) وجود دارند که از آنها برای تثبیت ولتاژ استفاده می کنیم. به عنوان مثال با استفاده از این دیودها می توان ولتاژ را روی 5V ثابت نگه داشت. ولی ما برای تثبیت ولتاژ از این قطعه استفاده نخواهیم کرد، زیرا محدودیت هایی دارد که بهتر است به جای آن از قطعات دیگری مثل رگولاتور استفاده شود. در مورد رگولاتور در جلسات آینده توضیح کاملتری داده خواهد شد.
بحث دیود در اینجا به پایان رسید، به ادامه ی بحث توجه کنید:
خوب ، وقت این رسیده که ببینیم این مطالبی که تا حالا کم و بیش یاد گرفتیم چه ارتباطی با کار ما داره، آیا این مطالبی که یاد گرفتیم همشون ضروری و مهم بودند ؟ از این به بعد چه چیزایی یاد می گیریم؟ و در نهایت قراره بعد از اموختن این مطالب به کجا برسیم؟
ما میخواهیم در ادامه یک دید کلی از یک ربات داشته باشیم تا متوجه بشویم که مطالبی که الآن ارایه می شوند، هر کدام در چه بخش هایی کاربرد دارند.
شاید اولین سوالی که باید جواب داده بشه این هستش که ما می خواهیم در نهایت چه رباتی بسازیم؟
http://roshd.ir/roshd/Portals/0/0and1/Robotic/Fire%20fighter_2.JPG
ریپورتر
8th May 2009, 07:47 PM
: ما قصد داریم به لطف خدا یک ربات آتش نشان را در پایان این دوره ها طراحی کرده و بسازیم. پس بد نیست ساختار یک ربات آتش نشان ساده رو با هم بررسی کنیم.
در حالت کلی یک ربات شامل 3 بخش زیر می باشد:
1- ورودی ها: شامل همه ی سنسورهای مختلف ربات که اطلاعات محیط رو اعم از میزان نور، میزان گازهای مختلف، درجه حرارت محیط و.... دریافت و در در اختیار بخش پردازش گر ربات قرار می دهند
2- پردازش گر: اطلاعات ورودی ربات را دریافت و توسط مدارهای کنترلی(اعم از میکرو کنترولرها و مدارهای الکترونیکی دیگر) آنرا پردازش و تصمیم گیری می کند و تصمیمات رو در اختیار بخش های اجرایی ربات قرار می دهد.
3- خروجی ها(بخش های اجرایی): شامل موتورها، پمپ آب، ledهای هشدار دهنده، آژیر خطر و...
ابتدا ربات به وسیله ی سنسورهای نوری(نوعی مقاومت نوری) و بخش پردازشگر ابتدا مکان آتش را بر روی زمین مشابقه پیدا می کند.
الگوریتم پیدا کردن آتش:(الگوریتم در اینجا به معنای راهکار حل مسآله می باشد)
همان طور که میدونید یکی از مهمترین مشخصات آتش تابش نور و گرمای زیاد می باشد. مقاومت های نوری هم هر زمانی که نور بیشتری از محیط دریافت کنند مقاومت آنها کمتر می شود(در اینجا از مقاومت نوری به عنوان حسگر نور استفاده کردیم). ربات برای پیدا کردن آتش در ابتدا به صورت ثابت به دور خود می چرخد. یک مقاومت نوری نیز در جلوی ربات قرار دارد . هنگامیکه جلوی ربات در حین چرخش در مقابل آتش قرار بگیرد، نوری که به مقاومت نوری میرسد افزایش یافته و مقاومت آن کاهش می یابد. در نتیجه ربات توسط بخش پردازشگر وجود آتش را تشخیص می دهد. بخش پردازشگر دستور توقفِ چرخش و حرکت به سوی آتش را صادر می کند. این دستور توسط مدارهای واسط(در اینجا منظور مدارهایست که برای تقویت و کنترل جریان طراحی می شوند) به موتورها منتقل و اجرا می شود و ربات به سوی آتش حرکت می کند.
الگوریتم خاموش کردن آتش:
ربات در حال حرکت به سوی آتش می باشد،پس باید در یک فاصله ی مناسب از آتش که در آن فاصله به ربات اسیب نرسد بایستد و پمپ آب روشن کرده و آتش را خاموش کند. برای این کار یک مقاومت نوری دیگر را جوری بر روی ربات قرار می دهیم تا فقط هنگامیکه ربات در بالا سر آتش قرار میگیرد این سنسور آتش را ببیند. (سنسور به صورت عمود بر زمین مسابقه و در ارتفاع حدود 20،10سانتیمتری سطح زمین قرار می گیرد). پس هنگامیکه این مقاومت نوری در مقابل آتش قرار گرفت، بخش پردازشگر به موتورها دستور توقف و به پمپ آب دستور پاشیدن آب را می دهد. به این ترتیب آتش خاموش می شود.
این ساختار یکی از ساده ترین ساختارها برای ساخت ربات آتش نشان می باشد که الآن به صورت بسیار مختصر ارایه شد.
ما بعد از پایان این بخش وارد بخش دیجیتال شده و با طراحی های دیجیتال و بحث هایی از مدارهای منطقی آشنا می شوید که قطعاً جذابیت های بسیار زیادی برای دوستای عزیز خواهد داشت. در حقیقت بخش فعلی شاید کسل کننده ترین بخش کار ما می باشد، چون مطالب ارایه شده بیشتر قالب کلاسیک و سنتی دارد و هنوز به معنی واقعی وارد بخش های پژوهشی و عملی کار نشدیم!
ریپورتر
8th May 2009, 07:47 PM
از مبحث دیود ها، دیود نوری، 7Segment و گیرنده فرستنده ی مادون قرمز باقی مونده که در این جلسه ابتدا به توضیح این قطعات خواهیم پرداخت.
دیود نوری(LED):
همان طور که از اسم پیداست، این نیز نوعی دیود است که زمانیکه در بایاس مستقیم قرار گیرد و جریان مناسب باشد، از خود نور تولید می کند.
بایاس کردن یعنی اتصال پایه های قطعه(دیود، ترانزیستور،...) به منبع تغذیه. بایاس مستقیم به معنای اتصال صحیح به منبع تغذیه(اتصال پایهی + به قطب + و پایه ی - به قطب - منبع تغذیه) و بایاس معکوس به معنای اتصال برعکس می باشد.
LEDها مزایای بسیاری نسبت به لامپ های معمولی کوچک دارند، از جمله: مصرف بسیار پایین، طول عمر بالا، سرعت قطع و وصل بالا هنگام قطع و وصل شدن منبع تغذیه و... LEDها در رنگهای مختلفی ساخته ميشوند (زرد، سبز، قرمزو...).
نمایشگر LED هفت قسمی(7Segment):
این قطعه نوعی نمایشگر است که برای نشان دادن عددها و بعضی از حروف کاربرد دارد. طبیعتاً اگر چند 7Segment در کنار هم قرار گیرند می توانند اعداد و جملات طولانی تری را نمایش دهند.
ساختار داخلی این قطعه بسیار ساده است، این قطعه از 8 LED (7تا برای حروف، یکی هم برای نقطه)ساخته شده که با کنترل پایه های آن می توان با روشن و خاموش کردن LEDهای مختلف، اعداد و حروف گوناگون را بر روی آن نمایش داد.
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/7-Segment-1_2inch.jpg
این قطعه به 2 صورت کاتد مشترک و آند مشترک ساخته می شود. در کاتد مشترک پایه ی – همه ی LEDها به یکدیگر وصل شده (طبق شکل) و یک پایه به عنوان پایه ی – همه ی LEDها در اختیار کاربر قرار می گیرد. کاربر این پایه را به قطب – وصل می کند. حال برای کنترل هر LED کافیست کاربر پایه ی متناظر با آن را به + وصل کند. این کار علی رغم پیچیدگی ظاهری بسیار کار ما را ساده خواهد کرد.
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/SG_clock_display_conn12.GIF
در 7Segmentهای آند مشترک روند کار دقیقاً برعکس کاتد مشترک است. یعنی کاربر باید پایه ی متناظر با LED مورد نظر را به – وصل کند تا LED روشن شود. یک پایه هم به عنوان پایه ی + همه ی LEDها وجود دارد.
ریپورتر
8th May 2009, 07:47 PM
دیود گیرنده و فرستنده ی مادوم قرمز:
دیودهای مادون قرمز از نظر ساختمانی تفاوت زیادی با دیودهای دیگر ندارند. گیرنده ی مادون قرمز یاIR (InfraRed) معمولاً در بایاس – مورد استفاده قرار می گیرد. این دیود زمانیکه مادون قرمز از محیط دریافت می کند، جریان دهی آن در جهت معکوس افزایش می یابد و زمانیکه مادون قرمز دریافت نکند، جریان دهی آن در جهت معکوس کم می شود. البته این جریان بسیار کوچک می باشد و برای استفاده از آن باید آنرا به نوعی تقویت کرد. سنسورهای نوری ما در ساخت ربات ها معمولاً همین دیودهای نوری می باشند. روش استفاده از این دیودها به عنوان سنور (با جریان دهی مناسب) در جلسات آتی توضیح داده خواهد شد.
فرستنده ی مادون قرمز به صورت مستقیم بایاس می شود(به منبع تغذیه وصل می شود). البته برای جلوگیری از سوختن آن باید جریان عبوری را با یک مقاومت که به صورت سری با آن بسته می شود، کنترل کرد.
دیود های مادون قرمز انواع و اشکال گوناگونی دارند، اما مدلی که ما بیشتر با آن سر و کار داریم از نظر ظاهری کاملاً مشابه LEDهاي سرگِرد می باشد.
ترانزیستور:
این قطعه پرکاربردترین قطعه در دنیای الکترونیک می باشد. ساز و کار آن نیز بسیار پیچیده و نیازمند مقدماتی بسیار فراتر از بحث ما دارد که ما از آن ها گذشته و این قطعه را به صورت کاربردی و سطحی معرفی می کنیم.
اصلی ترین کاربرد ترانزیستور در کار ما سویچینگ(کلید الکترونیکی)و تقویت کنندگی آن است.
ترانزیستورها با 2 ساختار PNP و NPN ساخته می شوند. این 2 ساختار از نظر کارای در بحث ما تفاوت زیادی ندارند و تنها تفاوت در ترتیب پایه های آنها برای ما مشهود خواهد بود.
ترانزیستور 3 پایه دارد: بیس(Base)، کلکتور(Collector)، امیتر(Emitter)
ترانزیستور در حالت کلی به 3 دسته ی قدرت، نیمه قدرت و معمولی تقسیم می شوند. ترانزیستورهای قدرت و نیمه قدرت برای سوییچینگ به کار می روند و ترانزیستورهای معمولی برای تقویت جریان.
بایاسینگ ترانزیستور:
برای راه اندازی ترانزیستور به عنوان سوییچ یا تقویت کننده یا... باید ابتدا آنرا بایاس کرد.
در ترانزیستور NPN جریانی که از کلکتور وارد ترانزیستور می شود به وسیله جریان بسیار کوچکی که بر روی بیس قرار می گیرد وارد امیتر می شود. پس جریانی که از امیتر عبور می کند برابرست با جمع جریان های بیس و کلکتور که به دلیل بسیار کوچک بودن بیس نسبت به کلکتور تقریباً برابر است با جریان کلکتور: http://roshd.ir/roshd/Portals/0/0and1/Robotic2/IE.GIF
بایاسینگ ترانزیستورهای PNP دقیقاً برعکس NPN است، یعنی جریانی که از طریق امیتر وارد ترانزیستور می شود به وسیله ی جریان بسیار کوچکی که بر روی بیس قرار می گیرد وارد کلکتور می شود:http://roshd.ir/roshd/Portals/0/0and1/Robotic2/IC.GIF
دقت کنید که در هر 2 نوع ، جریان به وسیله ی بیس کنترل می شود.
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/PNP-&-NPN.gif
ترانزیستورها در تقویت جریان خروجی از ICها برای انتقال به دیگر قطعات مانند موتور و رله و.... کاربرد بسار زیادی
ریپورتر
8th May 2009, 07:48 PM
رگولاتور:
ما برای راه اندازی بسیاری از قطعات و اِلِمان های الکترونیکی مدارها، نیاز به یک ولتاژ ثابت و بدون نوسان، مثل V5 داریم. ما برای این منظور در جلسه ی پنجم دیود زنر را به صورت سطحی معرفی کردیم که این دیود توسط مدارهای جانبی می توانست این عمل را برای ما انجام دهد، اما گفتیم به خاطر محدودیت هایی که این قطعه دارد، از جمله محدودیت جریان، و همچین مدارهای جانبی آن که موجب پیچیدگی کار می شود، به جای آن از قطعه ای به نام رگولاتور استفاده می کنیم.
رگولاتورهای ولتاژ، نوعی از نیمه رساناها هستند که برای تنظیم ولتاژ طراحی شده اند.
رگولاتورها در یک دسته بندی کلی به 3بخش زیر تقسیم میشوند:
1-رگولاتورهای ولتاژ خروجی ثابتِ مثبت: که خروجی انها یک عدد ثابت و غیر قابل تغییر + می باشد که نام گذاری انها هم به صورت 78XX یا L78XX یا M78XX می باشد.2 رقم سمت راست که به صورت XXنشان داده شده نشان دهنده ی ولتاژ خروجی است. مثلاً ولتاژ خروجی رگولاتور 7805 ، 5 ولت می باشد. L یا Mهم نشان دهنده ی حداکثر جریان دهی آن است(L= تا 1 آمپر،=Mتا 1.5 امپر)
2- رگولاتورهای ولتاژ خروجی ثابتِ منفی: که خروجی آنها یک عدد ثابت منفی و غیر قابل تغییر – می باشد که نامگذاری انها به صورت 79XX می باشد.
3- رگولاتورهای ولتاژ خروجی متغیر: به وسیله ی این رگولاتورها می توان ولتاژ خروجی را کنترل کرد. معروف ترین و پر کاربردترین نوع خروجی + آنها LM317 و LM138 وLM338 و خروجی – انهاLM337 می باشد. این قطعه برای ره اندازی نیاز به یک مدار جانبی مختصر دارد که در جلسات آزمایشگاه در این مورد توضیح کامل داده می شود.
این رگولاتورها 3 پایه دارند.مثبت + ، خروجی، زمین یا - ( قطب – منبع تغذیه را زمین نیز می گوییم(Gnd)). به شکل نگاه کنید.
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/MC7805CT.jpg
در رگولاتورهای سری 78XX ولتاژ ورودی باید حداقل 2.3 ولت بیشتر از خروجی آنها باشد. حداقل ولتاژ ورودی و همچنین ولتاژ خروجی آنها در جدول زیر آمده است:
حداقل ولتاژ ورودی
ولتاژخروجی
شماره مدل
7.3
5
7805
11.5
9
7809
14.6
12
7812
21
18
7818
27.1
24
7824
تقویت کننده های تفاضلی( OP-AMP):
این قطعه معمولاً به صورت IC ساخته شده وبا مدارهای مجتمع ترانزیستوری طراحی می شود.کار کردن با این قطعه نسبتاً ساده می باشد و همین موضوع باعث استقبال فراوان از این قطعه شده است.
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/C-MOS_OP-Amp1.jpg
این قطعه کاربردهای فراوانی از جمله مقایسه، تقویت، فیلترینگ، اسیلاتور و.... دارد که ما در اینجا فقط به بحث مقایسه کنندگی ان می پردازیم. در بحث تقویت کنندگی ما ترجیحاً از ترانزیستورها استفاده می کنیم زیرا کار کردن با آتها به مراتب ساده تر از OP-AMP می باشد.
ریپورتر
8th May 2009, 07:48 PM
مقایسه کنندگی:
OP-AMP دارای 2 پایه ی تغذیه ی + و – و 2 پایه ی ورودی + و – و یک پایه ی خروجی می باشد.
در مُد مقایسه کنندگی، ولتاژ 2 پایه ی ورودی با هم مقایسه شده و اگر ولتاژ ورودی + بیشتر باشد، بر روی پایه ی خروجی ولتاژ + و در غیر این صورت بر روی پایه ی خروجی ولتاژ – قرار خواهد گرفت.
بافر
بسیاری از المانهای الکترونیکی و به خصوص IC هاي ديجيتالي، قابليت جريان دهي محدودي دارند و قطعاتي مانند موتور، لامپ ، رله و ... که مصرف جريان زيادي دارند را نمي توان مستقيم به آن ها متصل نمود.
علاوه بر اين در بعضي مدارات ممکن است خروجي يک IC به ورودي چند IC ديگر داده شود. براي هر IC پارامتري به نام Fan-Out تعريف مي شود که مشخص مي کند خروجي IC به ورودي چند IC مي تواند داده شود. در بعضي موارد که تعداد اتصالات بيشتر از Fan-out آي سي باشد، IC نمي تواند جريان لازم براي تغذيه ي تمام خروجی هایش را فراهم کند و خروجي اش افت مي کند. در چنين مواردي مي بايست از ICهای بافر استفاده نمود. به عبارت ديگر Fan-out بافر ها بسيار زياد است.
بافرها 2 وظیفه ی مهم را انجام می دهند:
1- منطقی کردن ولتاژ ورودی: اگر ولتاژ ورودی بین 2.5-0 ولت باشد، بر روی خروجی مربوطه ولتاژ 0 قرار گرفته و اگر بین 5-2.5 ولت باشد، 5 ولت روی آن قرار می گیرد. در حقیقت بر روی پایه های خروجی همواره ولتاژ 0 یا 5 ولت (وابسته به ولتاژ ورودی) قرار می گیرد.(درباره ی ولتاژ منطقی در بخش دیجیتال توضیح خواهیم داد)
2- تقویت جریان ورودی ها بر روی خروجی ها
پرکاربردترین بافر در کار ما آی سی 74245 می باشد که یک آی سی 20 پایه بوده و در آن 8 بافر مجزا تعبیه شده.
ترتیب پایه های این IC در شکل زیر آمده است.(هر فلش سبز 2طرفه یک بافر را نشان می دهد)
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/74245.gif
پایه ی 19 پایه ی"Enable" یا فعال ساز نام دارد، اگر این پایه به زمین (0 منبع تغذیه) وصل شود، بافرها فعال می شوند و اگر به 5ولت متصل شود، بافرها خاموش می شوند.(در شکل بالا، مثلاً A0 و B0 یک بافر هستند)
پایه ی 1 نیز که پایه ی جهت یا "Direction" نام دارد، جهت بافرها را نشان می دهد. مثلاً اگر DIR به زمین متصل شود، جهت بافر ازB به A (یعنی B ورودی و A خروجی است)و اگر به 5 ولت متصل شود، جهت بافر A به B می شود(یعنی A ورودی و B خروجی است).
پایه ی 20هم به 5ولت و پایه ی 10 هم به زمین یا 0ولت متصل می شود.
ریپورتر
8th May 2009, 07:49 PM
ICهای راه انداز(Driver)
برای راه اندازی بسیاری از قطعات مانند موتورهای الکتریکی پرتوان، پمپ آب و...،معمولاً جریان خروجی المان های الکترونیکی(حتی بافرها) نا کافی بوده و نیاز به تقویت جریان دارد. قبلاً آموخته بودیم به وسیله ی ترانزیستور می توان این کار را انجام داد. در این جلسه با آی سی L298 آشنا می شویم که قابلیت راه اندازی 2 قطعه(مثلاً 2موتور) را به صورت همزمان دارد.
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/l298_pl2.jpg
همان طور که در شکل می بینید، یک قطعه فلز در پشت این IC تعبیه شده تا از با انتقال گرما از IC به محیط، مانع گرم شدن بیش از حد IC شود. این قطعه Heat sink نام دارد. گاهی برای اطمینان بیشتر از یک Heat sink کمکی نیز استفاده می کنیم، به این صورت که Heat sink به وسیله ی پیچ بهHeat sink خود IC بسته می شود.
این IC یک پایه ی ورودیِ ولتاژ دارد که هر ولتاژی به این پایه وصل شود، مستقیماً به موتور یا هر المانی که به IC متصل شده باشد منتقل می شود. این پایه VPS نیز نام دارد (Variable Power Supply).
ترتیب پایه های این IC در شکل زیر توضیح داده شده است.
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/ro_03_21.gif
این آی سی 15 پایه می باشد.
ریپورتر
8th May 2009, 07:49 PM
بعضی لوازم اولیه ای که شما برای کار نیاز دارید در زیر گفته شده:
منبع تغذیه ی 5و 12 ولت:
ما نیاز به یک منبع تغذیه داریم که حداقل 2 خروجی 5 و 12 ولت داشته باشد. این منبع تغذیه می تواند یک آداپتور ولتاژ متغیر هم باشد. نکته ی مهم این که، جریان دهی این منبع تغذیه باید بیش از 1 آمپر (معادل 1000 میلی آمپر) باشد.(روی آداپتورها حداکثر وجریان خروجی ذکر می شود). برای این منظور می توان از Power (منبع تغذیه)کامپیوتر نیز استفاده کرد. این منبع تغذیه ها به دلیل جریان دهی بالا و ولتاژهای خروجی بسیار دقیق(که ما را از مدارهای دقیق کننده ی ولتاژ بی نیاز می کند)، برای کار ما بسیار مناسب می باشند، اما هزینه ی اونها معمولاً بیشتر از آداپتورهای معمولیست. در جلسات، نحوه ی استفاده از آنها نیز شرح داده خواهد شد.
مولتی متر:همه ی دوستان با ولت متر و آمپرمتر و مولتی متر در دروس راهنمایی آشنا شده اند. ما برای کار نیاز به یک مولتی متر داریم که ترجیحاً مولتی رنج باشد
برِد بُرد:برد بُرد نوعی بُرد می باشد که ما رو از لحیم کاری در مراحل آزمایشگاهی بی نیاز میکند و سرعت کار را نیز بسیار بالاتر می برد. با این قطعه نیز در جلسات بعدی آزمایشگاه آشنا خواهید شد.
مقداری سیم مسی نرم:مقدار سیم مسی نرم تک رشته ای(غیر افشان) برای اتصالات نیاز داریم
سیم چین و دمباریک و هویهبرای هویه یا همان دستگاه لحیم کاری، حتماً پایه ی نگه دارنده تهیه شود!
.
س
سایر قطعات که برای هر
ریپورتر
8th May 2009, 07:50 PM
خوب، بریم سراغ کارمون. قرار شد در این جلسه،ابتدا همه ی وسایل و قطعاتی که برای چند جلسه ی آینده نیاز داریم رو من به دوستان معرفی کنم، تا برای خرید هر قطعه مجدداً وقت شما گرفته نشود.
این قطعات عبارتد از:
چند عدد LED سبز و قرمز(1 یا 2 عدد از هر رنگ کافیست).
مقاومت های 220Ω ،100Ω، 1kΩ، 10kΩ. مقاومت معمولاً به صورت رول های 50 تایی فروخته می شود. ولی ما برای کارمون 2یا 3 تا از هر کدام از مقاومت های بالا کافی است.
خازن های 1000μF و 470μF(12ولت) هر کدام یک عدد.
2 عدد رگولاتور 7805.
1 عدد رگولاتور LM317.
یک عدد آی سی OpAmp) LM358)
یک عدد آی سی L298
یک عدد آی سی 74245 (بافر)
یک عدد ترانزیستور TIP41
5عدد دیود n4001
2 عدد مقاومت متغیر10kΩ
1 عدد سِوِن سگمنت (7segment)
2عدد گیرنده و 2عددفرستنده مادون قرمز(فتوترانزیستور) 3 یا 5 میلیمتری
این قطعات فعلاً تا شروع مبحث دیجیتال و آزمایشگاه های آن برای کار ما کافی می باشند.
آزمایش 1
اولین آزمایش ما تحلیل یک مدار بسیار ساده از نظر ولتاژ . هدف از این آزمایش آموزش کار با مولتی متر، استفاده از قانون اهم، و کد خوانی مقاومت است.
مولتی متر دیجیتال:
نحوه ی استفاده از مولتی متر در مدار:
1- برای استفاده از ولت متر در مدار، باید انرا به صورت موازی به مدار متصل کنیم. مقاومت درونی ولت متر بسیار زیاد است و تقریباً هیچ جریانی را از خود عبور نمی دهد
2- برای استفاده از آمپر متر نیز در مدار، باید آنرا به صورت سری در مدار متصل کنیم. مقاومت درونی آمپر متر بسیار ناچیز و قابل صرف نظر کردن است.
به شکل نگاه کنید
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/jalase10.JPG
دستگاههای اندازه گیری دیجیتالی مقادیر اندازه گیری شده را به صورت رقم یا ارقام روی صفحه نمایش (Display) نشان میدهند و معمولا واحد کمیت اندازه گیری شده مانند ولت ، آمپر ، میلی آمپر ، درجه سانتیگراد و غیره را نیز به طریق مناسبی نمایش میدهند. از جمله دستگاههای اندازه گیری میتوان به ولت متر، دورشمارها ، حرارت سنج و مولتی متر اشاره نمود.
مهم ترین مزیت دستگاههای دیجیتالی، دقت کار بالای آن ها و همچنین ساده تر بودن کار با آن ها می باشد.
طرز کار مولتی متر دیجیتالی
با دستگاه مولتی متر همگی در درس حرفه و فن دوره ی راهنمایی آشنا شده ایم، پس بدون مقدمه نحوه ی کار با این دستگاه رو ارایه می کنیم.
یکی از قسمت های اصلی یک مولتی متر، ولت مترDC آن می باشد. اساس کار یک ولت متر DC دیجیتالی بر مبنای مقایسه است. یعنی ولتاژ اعمال شده به ولت متر ، با یک ولتاژ مرجع (معمولا 100 میلی ولت و در بعضی از مولتی مترها، در ولناژ AC ، یک ولت) مقایسه میشود و نتیجه مقایسه به کمک مدارات الکترونیکی و دیجیتالی به صورت ارقام که مبین مقدار ولتاژ DC اعمالی به ولت متر است، روی صفحه نمایش آن ظاهر میگردد.
در شمای کلی این دستگاه یک صفحه مدرج به همراه یک selector مشاهده می کنید. همانطور که از اسم آن مشهود است این دستگاه برای اندازگیری کمیت هایی مانند اختلاف پتانیسل- مقاومت- جریان طراحی گردیده.
لازم به تذکر است روی دسته سلکتور نشانگری مو جود است که تعیین کننده دامنه کاری در اندازگیری های شما می باشد. یعنی نشان می دهد ولتاژی که شما قصد اندازه گیری آنرا دارید در چه حدودی قرار دارد، مثلاً بین 10-100ولت است یا بین 1-10 ولت یا .... . این حدود ولتاژ را باید خود شما با توجه به ولتاژ منبع تغذیه و مدارها به صورت حدودی بدانید. (این تنظیم دامنه برای مقاومت و جریان هم باید انجام شود.)
مولتی متر های امروزی قادر به اندازه گیری ولتاژ ها از چند صد میلی ولت تا 1000 ولت به صورت خودکار هستند و نیازی نیست شما حدود را بدانید و تنظیم کنید، فقط کافیست شما نشانگر را بر روی قسمت ولتاژ قرار دهید. اگر ولتاژ AC بود(مثل برق شهری) بر روی قسمت AC قرار داده و اگر DC بود، بروی قسمت DC قرار می دهیم. اگر هم قصد اندازه گیری مقاومت یا جریان را هم داشتیم، باید نشانگر را بچرخانیم و روی بخش مربوطه قرار دهیم. به این نوع مولتی مترها که به صورت خودکار تنظیم می شوند مولتی رنج یا آُتو رنج میگویند
این دستگاه نیز مانند هر سیستم دیگری دارای دو ترمینال - و + می باشد. برای استفاده صحیح از دستگاه بایستی سیم مشکی را به ترمینال منفی و سیم قرمز را به ترمینال مثبت متصل کنید. حال دکمه power دستگاه را زده و هر نوع اندازگیری را می توانید شروع کنید. دقت کنید که معمولاً مولتی مترها 2 پایانه ی قرمز یا + دارند که شما باید با توجه به توضیحات اختصاری ِ زیر آنها پایانه ی مناسب را انتخاب کنید. مثلاً برای اندازه گیری جریان های بیش از چند دهم آمپر باید سیم قرمز را در پایانه ی دیگری قرار دهیم.
ریپورتر
8th May 2009, 07:50 PM
در این آزمایش قصد داریم مدار روبرو را از لحاظ جریان ، ولتاژ و مقاومت تحلیل کنیم.
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/jalase10.JPG
مقدار مقاومت را از روی کد رنگی آن بخوانید.(یک کیلو اهم)
مقدار همین مقاومت را (قبل از اتصال در مدار) با مولتی متر اندازه گیری کنید.
این 2 مقدار باید تقریباً مساوی باشند.
حال مدار بالا را ببندید(منبع تغذیه را روی 5 ولت تنظیم کنید.)
جریان مدار را توسط مولتی متر اندازه گیری کنید(نشانگر مولتی متر در قسمت آمپر و در همین موقیعتی که در شکل نشان داده شده باید قرار گیرد.)
جریانی که مولتی متر نشان می دهد را یادداشت کنید.
حال توسط قانون اهم (V=I*R) جریان مدار را محاسبه کنید.
آیا مقدا بدست آمده با چیزی که مولتی متر نشان می دهد مطابقت دارد؟ اگر چنین است آزمایش را با موفقیت انجام داده اید.
مولتی متر را در مُد ولت متر نیز به صورت نشان داده شده در شکل(در 2 طرف مقاومت) وصل کنید و عدد را بخوانید. اگر سیم شما مقومت واقعً ناچیزی داشته باشد این مقدار تقریباً همان ولتاژ منبع تغذیه خواهد بود.
خطاهای احتمالی:
ممکن است منبع تغذیه ی شما دقیقاً ولتاژ 5 ولت را در اختیار شما قرار ندهد، پس ممکن است محاسبات شما دچار مشکل شود. بهتر است در ابتدا ولتاژ منبع تغذیه را با مولتی متر چک کنید.
ریپورتر
8th May 2009, 07:51 PM
بحث اموزش کار با بِرد بُرد (Breadboard) را شروع مي کنيم.
بردبُرد
برد برد نوعي برد الکترونيکي است (مانند بردهاي سوراخ دار) که به وسيله ي آن مي توان اجزاي الکترونيکي متعدد را به يکديگر متصل کرد. در بردهاي سوراخ دار معمولي، بايد پس از نصب هر قطعه در برد، پايه هاي آنرا در برد لحيم کنيم، اما در برد برد ما نيازي به انجام لحيم کاري نداريم و فقط کافيست قطعه را روي برد برد قرار دهيم (با يک فشار کوچک قطعه روي برد نصب مي شود).
همچنين در بردهاي سوراخ دار معمولي شما بايد براي برقراري ارتباط بين آن ها، از سيم استفاده کنيد، ولي در برد برد به صورت پيش فرض تعداد زيادي از اتصالات برقرار شده که شما فقط کافيست با در نظر گرفتن اين اتصالات و قرار دادن قطعات در مکان هاي مناسب، مدار هاي خود را راه اندازي کنيد.
اما با اين وجود، در بسياري از موارد ما مجبور به استفاده از سيم هاي کمکي براي برقراري ارتباط ها مي شويم.
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/board_solder_side1.jpg
تصوير فوق يک مدار که روي يک برد سوراخ دار معمولي پياده سازي شده است.
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/breadboard1.jpg
تصوير يک مدار که بر روي يک بردبرد پياده سازي شده. دقت کنيد که علي رغم وجود ارتباط هاي فراوان در داخل خود بردبرد، از تعداد زيادي سيم کمکي نيز براي تکميل مدار استفاده شده است.
ارتباط هاي درون بردبرد:
در اين نوع برد، براي سهولت کار، ارتباطات زيادي بين سوراخ هايي که در بردبرد مشاهده مي کنيد، وجود دارد.
در شکل زير يک نماي کلي از سوراخ هاي متصل به هم در يک برد برد، ترسيم شده است.
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/figure_11.GIF
ریپورتر
8th May 2009, 07:52 PM
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/bb_002.jpg
براي استفاده از آي سي ها، بايد آن هارا در قسمت وسط طوري قرار دهيم که پايه هاي آن در 2 طرف با يکديگر در تماس نباشند. 2 رديف بالا و پايين نيز که به هم متصل هستند معمولاً براي تغذيه ي +و – برد استفاده مي شوند.
شما می توانید براي تمرين، يک LED را با يک مقاومت 100 اهم، روي بردبرد روشن کنيد
ریپورتر
8th May 2009, 07:52 PM
دومین آزمایش رو با کمک دوستان عزیز انجام خواهیم داد.
این آزمایش مربوط به مبحث خازن ها می شود و برای نشان دادن شارژ(پر شدن) و دِشارژ (خالی شدن) شدن یک خازن طراحی شده است.
گام اول: مدار زیر را با توجه به جدول ببندید.
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/untitled1.jpg
C=2200µFC=1000µFC=470µF
=T3
=T2
=T1
R=220Ω
=T6
=T5
=T4
R=1KΩ
زمان شارژ و دِشارژ با توجه به زمان روشن بودن LED ها، به ازاي خازن هاي مختلف اندازه گيري نماييد.
براي شارژ كردن خازن بايد اتصال شماره ي 1 برقرار شود، زمان شارژ را ميتوانيد با توجه به مدت روشن بودن LED سمت چپ اندازه گيري نماييد
براي دِشارژ كردن خازن، بايد اتصال شماره ي 2(طبق شكل) برقرار شود. پس زمان دِشارژ را نيز ميتوانيد با توجه به مدت زمان روشن بودن LED سمت راست،اندازه گيري نماييد.
همانطور كه مشاهده مي كنيد، با افزايش مقدار مقاومت در هر قسمت يا افزايش ظرفيت خازن ها، زمان شارژ و دِشارژ خازن افزايش ميابد.
اين جلسه مطلب تئوري نسبتاً كمي دارد و دوستان بايد زمان خود را صرف بستن مدار بالا و پركردن جدول كنند.
لازم ميدونم اين مطلب رو دوباره خدمت دوستان عزيز يادآوري كنم كه در رباتيك، مهمترين اصل، انجام كار به صورت تيمي و گروهي است و به دوستان پيشنهاد ميكنم حتماً آزمايش ها رو به صورت تيمي انجام بدهند.
ریپورتر
8th May 2009, 07:53 PM
سومین آزمایش رو با هم شروع می کنیم.
نحوه ی استفاده از منبع تغذیه ی کامپیوتر، به عنوان مولد:
http://roshd.ir/roshd/Portals/0/0and1/Robotic/psu.jpg
همانطور که در جلسات پیش ذکر شد، منبع تغذیه یا Power ِ کامپیوتر شخصی (PC) شما ، می تواند به عنوان یک منبع تغذیه ی ایده آل برای کار ما مورد استفاده قرار گیرد. منیع تغذیه های موجود در کامپیوتر ها، چندین ولتاژ خروجی مختلف دارند که پر استفاده ترین آنها برای کار ما، 12 و 5 ولت می باشد.
Power یا منبع تغذیه ی کامپیوتر معمولاً در قسمت پشت و در بالای Case شما قرار دارد.
http://roshd.ir/roshd/Portals/0/0and1/Robotic/setup16.jpg
ریپورتر
8th May 2009, 07:53 PM
مراحل کار:
ابتدا درب سمت چپ Case را (مانند شکل بالا) باز کنید. (معمولاً برای باز کردن درب Case باید پیچ های پشت را باز کنید)
کار با منبع تغذیه ی کامپیوتر بسیار ساده است و فقط کافیست یکی از سوکت هایی که از منبع خارج شده و به هیچ قسمتی متصل نیست را پیدا کنید و به سوراخ های سوکت یک تکه سیم متصل کرده و خروجی ولتاژ بگیرید. یوراخ هایی که از منبع تغذیه سیم قرمز به آن ها وارد شده است ولتاژ 5ولت، و سوراخ هایی که سیم زرد به آن ها وارد شده است ولتاژ 12 ولت دارند. سیم های مشکی هم پایانه ی – می باشند.
http://roshd.ir/roshd/Portals/0/0and1/Robotic/power_cable_91.JPG
كار با 7Segment:
همانطور که می دانیم، هر 7Segment یک رقمی، از 8 LED مجزا از هم تشکیل شده است. هر کدام از این LED ها به صورت مستقل از هم روشن و خاموش می شوند و می توان به وسیله ی آنها اعداد مختلف را نمایش داد. پایه ی مربوط به هر LED در شکل زیر نمایش داده شده است.
http://roshd.ir/roshd/Portals/0/0and1/Robotic/300px-7_segment_display_labeled.GIF
برای راه اندازی 7Segment، دقت کنید که اگر 7Segment شما کاتد (+) مشترک باشد، باید پایه ی "مشترک" به "+" و دیگر پایه ها در صورت لزوم به "–" متصل شوند، و اگر 7Segment آند مشترک بود، روند کار وارونه است، یعنی پایه "مشترک" به "–" و سایر پایه ها به "+" متصل می شوند.
مثلاً برای نمایش عدد "2" توسط یک 7Segment کاتد مشترک، باید یکی از (یا هر 2) پایه های "مشترک" به + و پایه های"A,BG,E,D" به – متصل شوند.
چند نکته:
1- برای کنترل جریان ورودی به LED ها و جلوگیری از سوختن قطعه، بهتر است پایه های مشترک را به جای سیم ، با یک مقاومت 100اهم به تغذیه ی + یا – متصل کنید.
2- اگر از برد برد استفاده می کنید، دقت کنید که پایه های 7Segment را به گونه ای روی برد قرار دهید که به یکدیگر متصل نشوند.
3- تغذیه ی مدار باید 5 ولت باشد.
برای تمرین سعی کنید همه اعداد 0 تا 9 را به وسیله ی 7segment نمایش دهید.
در جلسه ی بعد راه اندازی یک دیود حساس به نور را آموزش خواهیم داد و مداری طراحی می کنیم که با تغییر نور محیط بتوان میزان نور یک LED را کنترل کرد.
ریپورتر
8th May 2009, 07:54 PM
راه اندازي يك سنسور نوري(حسگر نوري) را آموزش دهيم.
سنسورهاي نوري انواع گوناگوني دارند كه هر كدام در موارد خاصي كاربرد دارند، پركاربردترين آنها فتوترانزيستورهاي 3mm يا 5mm هستند. اين سنسورها جزو دستهي سنسورهاي مقاومتي محسوب ميشوند، زيرا با تغيير ميزان نور محيط مقاومت آنها تغيير ميكند. ميزان مقاومت الكتريكي اين نوع سنسورها در محيطهاي پرنور معمولاً حدود 4K و در محيطهاي بسيار كم نور تا حدود 200KΩ مي باشد. حساسيت اين سنسورها فقط به امواج الكترومغناطيس در ناحيهي مادون قرمز(infrared) (كه به اختصار "IR" ناميده ميشود) ميباشد. اين اموج در ناحيهي امواج مرئي نيستند و با چشم غير مسلّح نميتوان آنها را ديد، اما دوربين هاي فيلم برداري معمولي مثل دوربين تلفنهاي همراه، ميتوانند آنها را نمايش دهند. نكته بسيار مهم اين است كه لامپهاي مهتابي معمولي و لامپهاي كم مصرف هيچگونه امواج (IR)ي از خود نمي تابانند و نميتوان از آنها به عنوان منبع نور براي آزمايشهاي مختلف استفاده كرد. در نور خورشيد و لامپهاي رشتهاي معمولي به صورت گسترده IR وجود دارد. همچنين نوعي فرستندههاي مادون قرمز در بازار موجود است كه از لحاظ ظاهري شباهت زيادي با همين سنسورهاي مادون قرمز دارد. همانطور كه ميبينيد اين گيرنده و فرستندهها شباهت بسيار زيادي با LED هاي 3 يا 5 ميليمتري معمولي دارند. رنگ آنها هم الزاماً بي رنگ نيست، ممكن است سياه يا آبي هم باشند.
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/5.jpg
اين فرستندهها نياز به مدار خاصي براي راه اندازي ندارند، فقط براي محدود كردن جريان ورودي به آنها، بايد يك مقاومت حدودا ً100Ω ي را با آن به صورت سري در مدار قرار داد. (به مدار نگاه كنيد)
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/generator.gif
گيرنده و فرستنده هاي فتوترانزيستور به صورت شماتيك در مدار به اين شكل نمايش داده ميشوند.
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/Gen%20rec%20sch.GIF
در اين نوع گيرنده و فرستنده ها، پايهي بلندتر پايهي + و پايهي كوتاهتر پايهي – ميباشد.
مدارهاي سنسورهاي نوري فتوترانزيسور:
براي اين نوع سنسورها 2 نوع مدار ميتوان بست كه خروجي آنها يك ولتاژ متغير بين 0تا 5 ولت (بسته به ميزان نور محيط) است. در مدار دوم ولتاژ خروجي در محيطهاي پرنور زياد ميشود و در محيطهاي كم نور ، كم ميشود. در مدار نخست دقيقاً برعكس است، يعني در محيط هاي پرنور ولتاژ خروجي كم و در محيطهاي كم نور، زياد ميشود.
مدار شمارهي 1:
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/nom1%20rec.GIF
مدار شمارهي 2:
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/nom2%20rec.GIF
شما ميتوانيد با اتصال پايهي مثبت(بلندتر) يك LED به خروجي اين مدارها و اتصال پايه منفي LED به – مدار، كم و زياد شدن ولتاژ خروجي را به صورت كم و زياد شدن نور LED ببينيد. اگر بخواهيد خروجي را با مولتي متر اندازه گيري كنيد بايد مولتي متر را در حالت اندازه گيري ولتاژ DC قرار دهيد و سيم قرمز را به خروجي يكي از اين 2 مدار و سيم مشكي را به – مدارها متصل كنيد.
ریپورتر
8th May 2009, 07:54 PM
بحث اين جلسهي ما در مورد تقويت كنندههاي تفاضلي (Op-Amp) ها ميباشد. همانطور كه درجلسهي هفتم نيز توضيح داده شد، اين ICها ميتوانند با اتصال ترکیب مناسبی از عناصر خارجی مثل مقاومت،خازن،دیود و غیره به آنها، كاربردهاي متعددي از جمله تقويت كنندگي و مقايسه كنندگي و ... داشته باشند.
معروفترين Op-Amp آي سي LM358 ميباشد كه يك آي سي 8 پايه است و داراي 2 واحد مستقل Op-Amp ميباشد.
مقايسهي 2 ولتاژ ورودي توسط Op-Amp از مهمترين كاربردهاي آن در مدارهاي الكترونيكي ميباشد كه در ادامه در اين مورد توضيح داده شده است.
استفاده از Op-Amp در مُد مقايسه كنندگي
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/opamp_block1.jpg
این المان الکترونیکی اختلاف میان ولتاژهای ورودی در پای های مثبت و منفی را در خروجی آشکار می سازد.حتی اگر این اختلاف ولتاژ کوچک باشد. این المان همواره دارای دو پایه مثبت و منفی در ورودی،و یک پایه در خروجی است.
پایه ورودی مثبت را در اصطلاح لاتین noninverting و پایه منفی را inverting می گویند.
براي راهاندازي IC، پايهي پايهي 8 را به +5 ولت متصل مينماييم. پايهي 4 هم به 0ولت يا زمين متصل ميكنيم.
حال اگر ولتاژ ورودي مثبت(+in) بيشتر از ورودي منفي باشد، ولتاژ پايهي +Vss كه در اينجا 5ولت است، بر روي خروجي(Output) قرار ميگيرد، و اگر ولتاژ –In بيشتر از +in باشد، ولتاژ –Vss كه در اينجا 0 ولت است، بر روي خروجي قرار ميگيرد.
استفاده از Op-Amp در مُد تقويت كنندگي
براي استفاده از اين المان در مُد تقويت كنندگي بايد مدار زير را براي آن ببنديد.
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/invertingamp.gif
حال ولتاژي كه بر روي V in قرار داده شود با ضريب R2/R1 تقويت ميشود و بر روي V out قرار ميگيرد. دقت كنيد كه مقاومت R1 بهتر است حدود 100 اهم باشد. مقاومت R2 نيز محدوديتي ندارد. مثلاً اگر R1=100 & R2=10k اهم باشد، ولتاژ ورودي 100 برابر تقويت خواهد شد.
ترتيب پايههاي LM358 در شكل زير توضيح داده شده است.
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/ba10358_diag.gif
همانطور كه در شكل ميبينيد، اين IC داراي 2 واحد Op-Amp مستقل از هم ميباشد.
ریپورتر
8th May 2009, 07:55 PM
ما وارد مبحث الكترونيك ديجيتال خواهيم شد. اين مبحث اهميت بسيار زيادي در كار ما دارد و ما را به صورت خيلي ملموستر وارد دنياي رباتها ميكند. مطالبي كه در اين فصل شما اموزش خواهيد ديد مطالبي جديد و تازه هستند و دوستان بايد با دقت نظر بيشتر مطالب را دنبال كنند.
در بحث ديجيتال ما همه چيز را فقط در 2 حالت 0 يا 1 در نظر ميگيريم. به عنوان مثال ميدانيم كه همواره يك لامپ يا روشن است يا خاموش. در اينجا حالت خاموش را 0 و حال روشن را 1 در نظر ميگيريم. يعني وضعيت هر سيستم (مانند لامپ) را با 0 يا 1 توصيف كنيم.
پس براي توصيف وضعيت يك لامپ ما فقط نيازمند يك عدد 0 يا 1 هستيم ( يك عدد در مبناي 2 ) . يك عدد در مبناي 2 را در زبان لاتين Bit ميگويند(Binary digit ) . پس ما براي گزارش وضعيت يك لامپ فقط به 1 بيت اطلاعات نياز داريم.
ما در بحث الكترونيك ديجيتال 0و1 را با 0 و 5 ولت شبيه سازي مي كنيم، يعني هنگامي كه يك پايهي يك آي-سي خروجي 5ولت ميدهد ميگوييم خروجي 1 است و وقتي 0 ولت ميدهد خروجي 0 است.
عملگر(Operator) و عملوند(Operand):
جمع"+" ، منها"–" ، ضرب"×" ، تقسيم "÷" و... سادهترين عملگرهايي هستند كه شما تا كنون با آنها آشنا شدهايد. اين عملگرها هر كدام وظايفي دارند، مثلاً عملگر "+" دو عدد را با يكديگر جمع ميكند و حاصل را در خروجي ذخيره ميكند. اين دو عدد را كه عمليات ( در اين مثال عمليات جمع) روي آنها اجرا ميشود، عملوند ميگويند.
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/operator.gif
عملگرهاي منطقي:
به عملگرهايي كه عملوندهاي آنها عملوندهاي منطقي(يعني فقط 0 و 1) هستند، عملگرهاي منطقي ميگويند. پركاربردترين عملگرهاي منطقي And و Or و Not هستند كه به ترتيب با نمادهاي " & " و " || " و " ! " نمايش داده ميشوند. ( مثل عملگر جمع كه با نماد "+" نمايش داده ميشود )
عملگر AND "&":
اين عملگر مانند عملگر جمع 2 عملوند دارد و يك خروجي. اين عملگر 2 عملوند منطقي (يعني فقط 0 يا 1 هستند) خود را چك ميكند و اگر هر دو 1 باشند، خروجي را 1 ميدهد. در غير اين صورت(يعني اگر يكي از 2 عملوند، يا هر دو، 0 باشند) خروجي 0 است. به جدول نگاه كنيد.
خروجي
عملوند2
عملوند1
0
0
0
0
1
0
0
0
1
1
1
1
عملگر "||" OR:
اين عملگر نيز مانند عملگر جمع 2 عملوند دارد و يك خروجي. اين عملگر 2 عملوند منطقي (يعني فقط 0 يا 1 هستند) خود را چك ميكند و اگر يكي از آن دو، يا هر 2 عملوند، 1 باشند، خروجي را 1 ميدهد. در غير اين صورت(يعني اگر هر دو 2 عملوند، 0 باشند) خروجي 0 است. به جدول نگاه كنيد.
خروجي
عملوند2
عملوند1
0
0
0
1
1
0
1
0
1
1
1
1
عملگر " ! " Not:
اين عملگرتنها يك عملوند و يك خروجي دارد. اين عملگر، عملوند منطقي (يعني فقط 0 يا 1 هستند) خود را چك ميكند و اگر1 بود، خروجي 0 ميدهد و اگر 0 بود، خروجي 1 ميدهد.
جدول نگاه كنيد.
خروجي
عملوند
0
1
1
0
ریپورتر
8th May 2009, 07:56 PM
ما در این جلسه با معرفی چند آی سی جدید مباحث قبلی رو تکمیل می کنیم و انشاالله از جلسهی آینده ساخت یک ربات مسیریاب ساده رو شروع خواهیم کرد. البته این به معنی پایان کار ما نیست ، یعنی بهتر اینطوری عرض کنم که تازه ما داریم وارد دنیای رباتیک می شیم و تا حالا فقط کمی با مقدمات کار آشنا شدیم.
بدون مقدمه ی بیشتر وارد بحث اصلیمون می شیم.
در جلسه ی گذشته با عملگرهای "AND" و "OR" آشنا شدیم.در این جلسه 2 آی سی که این 2 عمل را برای ما انجام می دهند به شما معرفی کنیم.
AND
عملگر AND را در مدارهای شماتیک به صورتhttp://roshd.ir/roshd/Portals/0/0and1/Robotic2/and.GIF که پایههای 1 و2 ورودی ها و پایهی 3 خروجی است که به این مجموعه یک گیتِ AND می گویند.(AND Gate)
آی سی 7408 دارای 4 گیت مجزای AND میباشد، یعنی میتواند همزمان 4 عمل AND را انجام دهد. این آی سی 14 پایه دارد که ترتیب پایههای آن در شکل زیر شرح داده شده.
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/7408.gif
OR
عملگر OR را در مدارهای شماتیک به صورتhttp://roshd.ir/roshd/Portals/0/0and1/Robotic2/or.GIF که پایه های 1 و2 ورودیها و پایه ی 3 خروجی است که به این مجموعه یک گیتِ OR می گویند.(OR Gate)
آی سی 7432 نیز دارای 4 گیت مجزای OR می باشد، یعنی می تواند همزمان 4 عمل OR را انجام دهد. این آی سی نیز، همانند 7408 دارای 14 پایه است که ترتیب پایه های آن در شکل زیر شرح داده شده.
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/7432.gif
یک سوال مهم: همانطور که می دانید گیت های AND و OR دارای 2 ورودی و 1 خروجی هستند. حال این سوال پیش می آید که چگونه میتوان با همین گیتهای 2 ورودی، گیتهای 3 ورودی یا بیشتر ساخت. پاسخ این سوال در مدارهای زیر آمده است:
ریپورتر
8th May 2009, 07:56 PM
AND:
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/imageview%20or.GIF
OR:
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/imageview.gif
به همین ترتیب میتوانید گیتهای چندین ورودی نیز بسازید.
نحوه ی کار با آی سی L298 (راه انداز موتورها):
شما با این آی سی در جلسات گذشته آشنا شده اید، در این جلسه با نحوهی کار با این آی سی پر کاربرد آشنا می شوید.
ترتیب پایه های این آی سی در شکل زیر آمده است.
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/L298%20DS.GIF
در زیر نحوه ی کار با این 15 پایه به صورت مختصر توضیح داده شده:
پایه های 1 و 15: این پایه ها "Current sensing" نام دارند و باید هر 2 به – متصل شوند.
پایه های 2 و 3: همانطور که می دانید این آی سی میتواند 2 موتور را همزمان و به صورت مستقل از یکدیگر راهاندازی و کنترل کند (2 موتور را A , B مینامیم). این 2 پایه باید به موتور A متصل شوند. (خروجی برای موتور A)
پایهی 4: این پایه باید به ولتاژ 5 ولت متصل شود.
پایه های 5 و 7: این 2 پایه، ورودی برای کنترل موتور A هستند. این 2 پایه باید توسط کاربر یا مدار کنترل کنندهی ربات کنترل شوند.
اگر این 2 پایه هر 2، 0 یا 1 منطقی باشند، موتور بدون حرکت می ایستد. اگر این 2 پایه به ترتیب 0 و 1 شوند، موتور به یک جهت مشخص میچرخد و اگر 1 و 0 شوند(یعنی ورودی برعکس شود)، موتور عکس جهت قبلی خواهد چرخید.
پایه ی 6 و 11: این 2 پایه به ترتیب فعال ساز موتورهای A و B هستند. برای استفاده از هر 2 موتور باید هر 2 پایه 1 شوند.(برای فعالسازی هر موتور باید پایهی مربوط به آن 1 شود).
پایه ی 8: باید به – متصل شود.
پایه ی 9: هر ولتاژی بر روی این پایه قرار گیرد برای راه اندازی موتورها استفاده می شود. مثلاً اگر موتورهای شما 12 ولت است، باید این پایه به 12 ولت متصل شود.
پایههای 10 و 12: این 2 پایه، ورودی برای کنترل موتور B هستند. کار با این 2 پایه نیز مانند پایههای 5 و 7 (ورودیهای موتور A) میباشد.
پایههای 13 و 14: این 2 پایه باید به موتور B متصل شوند. (خروجی برای موتور B).
کار عملی با L298 رو در جلسهی آینده برای راهاندازی موتورهای ربات خواهد دید.
ریپورتر
8th May 2009, 07:56 PM
با هم ساخت یه ربات مسیریاب ساده (بدون میکروکنترلر) رو با هم شروع کنیم.
کار را ابتدا از قسمت مکانیک شروع می کنیم، یعنی بدنهی فیزیکی ربات
سيستم حركت تانك
تا حالا به حرکت یک تانک جنگی دقت کرده اید؟ اگر دقت نکرده باشید هم متوجه خواهید شد که تانک، مثل خودروهای شخصی معمولی دارای سیستم فرمان نیست، یعنی برای چرخش در سر پیچ ها، چرخهای جلوی آن به سمت خاصی متمایل نمیشوند. پس تانکها چگونه حرکت میکنند؟
به شکل زیر نگاه کنید
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/تانك.JPG
سیستم حرکتی تانک به این صورت است که در 2 طرف آن چند چرخ به وسیله ی یک تسمه ی فلزی ضخیم (به اصطلاح شنی) به یکدیگر متصل شدهاند، حرکت شنیها هر کدام جداگانه توسط رانندهی تانک کنترل میشود و راننده عمل پیچیدن تانک به هر سمت را با توقف شنی آن سمت انجام میدهد. مثلاً اگر تصمیم داشته باشد تانک به سمت چپ بپیچد، شنی سمت چپ را متوقف کرده و شنی سمت راست به حرکت خود ادامه میدهد و در نتیجه تانک حول محور مشخصی (محور همان شنی سمت چپ است) به سمت چپ میپیچد.
از مهمترین مزیتهای این سیستم نسبت به سیستم خودروهای سواری، بالاتر بودن قدرت مانور آن در سر پیچها میباشد، یعنی با سیستم تانک میتوان با سرعت بیشتری پیچها را پیمود.
همچنین شبیهسازی این سیستم در ابعاد کوچکتر بسیار سادهتر از سیستم خودروهای معمولیست. به همین خاطر ما در رباتها از همین سیستم به اصطلاح تانکی استفاده میکنیم، اما با یک تغيیرات جزیی. ما شنی را از سیستم حذف میکنیم، یعنی دور چرخ ها تسمه ای نمیاندازیم، زیرا این تسمه برای کاربردهای خاص طراحی شده و در ساخت یک ربات مسیریاب نیازی به آن نیست. همچنین چرخهای جلو را نیز میتوانیم حذف کرده و به جای آن در فاصلهی بین 2 چرخ هرزگرد بگذاریم. (هرزگرد یک چرخ است که به هر جهتی میتواند حرکت کند. در پایهی بعضی از مبلهای خانگی و صندلیهای کامپیوتری از هرزگرد استفاده شده است.)
شکل زیر نمای کلی ربات ما است (دید از زیر)
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/بدنه%20ی%20اصلی.GIF
خود شاسی ربات نیز بهتر است از جنس MDF یا پلاستیک فشرده (پلکسی گلاس) باشد. برای اتصال موتورها به بدنه هم میتوانید از "دیوار کوب" لولههای آب استفاده کنید.
ریپورتر
8th May 2009, 07:56 PM
ربات مسیریاب ساده باید قادر باشد یک خط مشکی رنگ به پهنای تقریبی 2 سانتیمتر را در یک زمینهی سفید دنبال کند. البته در رباتهای مسیریاب حرفهای بحث خیلی پیچیدهتر شده و رباتها باید قادر باشند حتی در بخشهایی از زمین مسابقه خط سفید رنگ را در زمینهی سیاه دنبال کنند.
در جلسات قبل با سنسورهای نوری فتوترنزیستور آشنا شدیم و دیدیم چگونه میتوان به وسیلهی این سنسورها و مدارات جانبی آنها تغییرات نور محیط را اندازهگیری کرد. همان طور که میدانید جسم سفید نور تابیده شده به خود را بازتاب میکند و جسم سیاه رنگ بیشتر نور تابیده شده به خود را جذب کرده و بازتاب نمیکند. ما هم با استفاده از همین خاصیت و به کمک گیرنده فرستندههای نوری خود میتوانیم خط سیاه را در کف زمینهی سفید تشخیص دهیم. به این صورت که ما یک جفتِ گیرنده فرستنده گیرندهی نوری را در کنار هم قرار میدهیم، با مدارهای راهانداز، فرستنده، نور را به کف زمین میتاباند و گیرنده با توجه به تغیيرات نور دریافتی از کف زمین، میتواند خط سیاه را پیدا کند. به شکل نگاه کنید. (دید از بالا)
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/سنسورها.gif
بر روی بدنهی ربات 2 سنسور به گونهای تعبیه شده است که وقتی ربات دقیقاً بر روی خط قرار میگیرد سنسورها در 2 طرف خط مشکی رنگ قرار گیرند. زمانی که ربات را فعال میکنیم هر 2 چرخ ربات شروع به چرخیدن به سمت جلو میکنند. ربات به سمت جلو حرکت میکند تا زمانی که مانند شکل ربات به پیچ اول برسد و سنسور سمت راست آن بر روی خط مشکی قرار گیرد، حال ربات باید به صورت خودکار موتور سمت راست خود را خاموش کند تا با چرخش موتور سمت چپ، ربات به دور خود بچرخد و از مسیر منحرف نشود. پس الگوريتم حركت ربات به اين صورت است كه سنسور هر سمت بر روي خط قرار بگيرد، موتور همان سمت متوقف ميشود تا ربات به مسير اصلي باز گردد.
اما مشكلي كه در اينجا مطرح ميشود اين است كه اگر ربات با سرعت زيادي حركت كند و قادر نباشد سر پيچ بطور كامل پيچ را دنبال كند و از خط خارج شود ديگر راهي براي بازگشت به مسير اصلي وجود ندارد.
براي حل اين مشكل به هر طرف، چند سنسور ديگر اضافه ميكنيم تا اگر سنسور اول از خط خارج شد، سنسورهاي بعدي بتوانند خط را دنبال كنند. به شكل دقت كنيد.
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/سنسورها%202.GIF
دقت كنيد كه سنسورها مستقيماً در كنار هم چيده نشدهاند و يه صورت زاويه دار (به شكل هشتي) چيده شدهاند(چرا؟)
اين هم نحوهي چينش سنسورهاي كف يك ربات مسيرياب حرفهاي
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/سنسورهاي-كف.jpg
ریپورتر
8th May 2009, 07:57 PM
قبل در مورد الگوریتم کلی حرکت یک ربات مسیر یاب برای دنبال کردن خط آشنا شدیم و دیدیم ربات برای دنبال کردن خط باید با توجه به اطلاعاتی که از سنسورها دریافت می کند، هرگاه سنسور هر سمت خط را دید(یعنی هرگاه بر روی خط قرار گرفت و خط را حس کرد)، موتور متناظر همان سمت خاموش شود تا ربات روی خط باقی بماند.
همچنین در جلسه ی پیش توضیح داده شد که چگونه می توان به وسیله ی یک جفت گیرنده فرستنده ی مادون قرمز، خط سیاه را در زمینه ی سفید تشخیص داد.
همانطور که در جلسه ی پنجم توضیح داده شد، ربات به 3 قسمت تقسیم می شود: 1-ورودی ها 2-پردازش 3-خروجی
تا به اینجا ما در مورد قسمت ورودی های ربات، یعنی همان گیرنده فرستنده ها توضیحاتی داده ایم. پیشنهاد می شود برای بالاتر رفتن دقت ربات، برای هر طرف، 3 جفت گیرنده _فرستنده بر روی ربات تعبیه شود.دوستان اگر روی لحیم کاری بردهای سوراخ دار(یا فیبری) تسلط دارند، می توانند این 6 جفت گیرنده_فرستنده را بر روی یک برد هزارسوراخ(فیبری) لحیم کنند.(مانند آخرین عکس جلسه ی پیش ).
اما در مورد بخش پردازش...
بخش پردازشگر و کنترل کننده ی مرکزی
در این قسمت ما باید با توجه به آموخته های فعلی خود بتوانیم مداری طراحی کنیم که بتواند الگوریتم مورد نظر ما را پیاده سازی کند. یعنی 3 سنسور هر طرف را چک کند و اگر هر کدام خط را دیدند به موتور آن سمت دستور خاموش شدن بدهد. برای اینکار، با توجه به اینکه رنگ زمینه سفید، و رنگ خط سیاه است، بهتر است برای راه اندازی سنسورها از مدار شماره 2(به جلسه ی 14 مراجعه شود) استفاده شود. سپس یک AND 3 ورودی درست کرده(به جلسه ی هفدهم مراجعه شود) و خروجی سنسورها را به این 3 ورودی وصل کنیم.
به همین ترتیب برای 3 سنسور طرف دیگر هم همین مدار را می بندیم.
حال نتیجه ی مدار را بررسی می کنیم. (به عنوان مثال سمت راست را بررسی می کنیم)
در حالت عادی که هیچ یک از سنسورها روی خط نیستند، سنسورها در ناحیه ی سفید رنگ هستند و خروجی انها 1 منطقی است و در نتیجه، خروجی AND نیز 1 می باشد، و اگر هر کدام از سنسورها بر روی خط بروند، خروجی آ ن سنسور 0 می شود و در نتیجه خروجی AND نیز 0 منطقی می شود.
حالا چگونه به وسیله ی خروجی AND هر طرف موتور آن سمت را خاموش و روشن کنیم؟
بخش خروجی ربات(کنترل موتورها)
ما در این قسمت باید مداری را برای موتورها ببندیم که بتوان با آن، به وسیله ی خروجیِ ANDی که در قسمت پردازشگر آماده کرده ایم، موتور را روشن و خاموش کرد. یعنی هرگاه خروجی AND ، 1 منطقی بود، موتور روشن باشد و هرگاه خروجی AND ، 0 منطقی بود، موتور خاموش شود.
این مدار همانطور که احتمالاً حدس زده اید بسیار ساده است، فقط کافیست ما پایه ی – موتور هر سمت را به – منبع تغذیه متصل کنیم، و + آن موتور را هم نیز به خروجی AND هر طرف وصل کنیم.
حالا مدار اصلی ربات را به صورت شماتیک رسم می کنیم.
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/مدار%20اصلی%20%20مسیریاب.GIF
ریپورتر
8th May 2009, 07:57 PM
نکته ی بسیار مهم:
همانطور که در شکل می بینید، خروجی آی سی 7408 مستقیماً به موتورها متصل نشده است، بلکه وارد بافر شده و از از پایه ی متناظر به موتور وصل شده. همانطور که در جلسات قبل نیز گفته شده بود، آی سی های معمولی مثل 7408 و 7432 و ...، جریان دهی پایینی دارند و نمی توان آن ها را مستقیماً به موتور یا سایر قطعاتی که جریان بالایی می خواهند متصل کرد، به همین منظور ما از بافر74245 استفاده می کنیم، زیرا این آی سی جریان دهی نسبتاً مناسبی دارد.
البته برای موتورها قوی تر، باید از درایورهای مخصوص مثل l298 استفاده کنیم که جلسه ی بعد به آن اشاره خواهد شد.
همچنین در جلسه ی بعد با آی سی uln2003 نیز آشنا خواهید شد (برای راه اندازی موتور). چند نکته ی حرفه ای هم در مورد ربات مسیر یاب مطرح خواهیم کرد.
ریپورتر
8th May 2009, 07:58 PM
این جلسه ابتدا سعی می کنیم از L298 در راه اندازی موتور ربات استفاده کنیم.
نحوه ی استفاده از L298 در یک ربات مسیریاب ساده
همونطور که در جلسات پیش توضیح داده شد، یک آی سی L298 قابلیت راه اندازی 2 موتور به صورت همزمان را دارد. البته L298 یک درایور موتور نسبتاً حرفه ایست و در این ربات ما ضرورتی در استفاده از این آی سی نیست، و این مطالب بیشتر جنبه ی آموزشی دارد، یعنی هدف ما اینه که دوستان کاربرد عملی این آی سی را در ربات ببینند.
در این آی سی برای هر موتور 2 ورودی و 2 خروجی وجود دارد. 2 پایه ی خروجی را که مستقیماً به پایه های موتور متصل می کنیم. (به جلسه ی هفدهم مراجعه شود).
اما 2 پایه ی ورودی هر موتور!!
در اینجا هم یکی از 2 پایه ی ورودی را مستقیماً به – متصل کرده و پایه ی دیگر را به خروجی ANDِ متناظر موتور وصل می کنیم.
برای موتور دیگر هم دقیقاً همین روند را تکرار می کنیم، یعنی ابتدا خروجی ها را به موتور متصل کرده و سپس ورودی ها را یکی به – و دیگری به خروجی AND متناظر وصل می کنیم.
آی سی ULN2003
این آی سی نیز عملکردی شبیه بافر 74245 دارد، با این تفاوت که اصطلاحاً(Open collector) است، یعنی شما می توانید سطح ولتاژ خروجی را خودتان تعیین کنید و مثل 74245 الزاماً 5ولت نیست. یعنی هر ولتاژی (حداکثر تا 50ولت) که شما به پایه ی تغذیه ی آی سی بدهید، بر روی خروجی ها نیز قرار می گیرد. اما سطح ولتاژ ورودی همان 0تا 5 ولت است. ترتیب پایه های آی سی در زیر آمده است.
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/ULN2003.GIF
در این آی سی پایه ی 8 باید به – یا همانGND متصل شود و پایه ی 9 نیز به ولتاژ مورد نظر ما برای خروجی ها. پایه های سمت چپ، ورودی ها، و پایه های سمت راست خروجی های آی سی هستند.
ریپورتر
8th May 2009, 07:58 PM
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/سنسورها%20وسط.GIF
ریپورتر
8th May 2009, 07:59 PM
میخواهیم شما رو با رگولاتور LM317 آشنا کنیم. رگولاتورهایی که ما تا به حال با آن ها آشنا شدهایم همگی ولتاژ خروجی ثابتی داشتند، مثلاً 7805 خروجی ثابت 5 ولت به ما میدهد و 7809 خروجی ثابت 9 ولت!!!
اما با رگولاتور LM317 و به کمک یک مقاومت ثابت و یک پتانسیومتر، می توانیم سطح ولتاژ خروجی را به دلخواه خود تنظیم کنیم. البته طبیعتاً سطح ولتاژ خروجی نمی تواند از ولتاژ ورودی بیشتر باشد!
ترتیب پایه های LM317 در شکل زیر نشان داده شده است.
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/lm317_on.jpg
همانطور که در شکل میبینید، خود آی سی یک هیت سینک دارد، ولی معمولاً برای پایینتر آوردن دمای آی سی در مدارهایی که نیاز به جریان دهی بالا دارند، هیت سینک آی سی، به وسیلهی یک پیچ، به یک هیت سینک کمکی بزرگتر متصل میشود. هیت سینک یک قطعه فلزی است که گرما را به خوبی انتقال میدهد و نمیگذارد دمای آی سی بیش از حد بالا رود. این قطعه به صورت آماده در اندازههای مختلف موجود است.
برای استفاده از این آی سی در مَد کنترل کنندهی ولتاژ، باید مدار زیر را ببندیم:
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/LM317.gif
در مدار بالا، 470اهم=R1 است و R2، یک پتانسیومتر یا مولتیترن 10 کیلو اهمی.
حالا با تغییر مقاومت پتانسیومتر، سطح ولتاژ خروجی تغییر می کند و میتوانیم آنرا تنظیم کنیم.
برای محاسبهی سطح ولتاژ خروجی، فرمول زیر وجود دارد:
((V = 1.25(1+ (R2/R1
طبیعتاً نیازی نیست شما هردفعه برای محاسبهی ولتاژ خروجی از این فرمول استفاده کنید، شما میتوانید با چرخاندن پیچ مولتیترن، ولتاژ خروجی را در سطح ولتاژ مورد نظر تنظیم کنید.
حداقل ولتاژ خروجی در این آی سی 1.25 ولت می تواند باشد، و حداکثر ولتاژ خروجی نیز، 37 ولت!.
همچنین این آی سی میتواند با یک مدار کوچک دیگر، به عنوان کنترلکنندهی میزان جریان خروجی استفاده شود.
به مدار دقت کنید:
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/LM317-Current-Regulator.png
به وسیلهی رابطهI out= Vin/R1 میتوان میزان جریان خروجی را حساب کرد.
البته این مدار کاربرد بسیار کمی دارد، و برای کنترل جریان در مدارهای ساده، معمولاً از مقاومتهای معمولی استفاده میکنیم.
ریپورتر
8th May 2009, 07:59 PM
ما وارد مبحث میکروکنترلر می شویم. این مبحث نسبت به مباحث قبلی، نیازمند توجه و دقت بیشتری است و دوستان باید زمان بیشتری برای آموزش این مبحث صرف کنند. بخشی از این مبحث مربوط به برنامه نویسی تحت زبان C می باشد که ما سعی می کنیم دوستان رو در حد کمی با مقدمات برنامه نویسی در این زبان نیز آشنا کنیم.
میکروکنترلر در زبان انگلیسی به معنی «ریز کنترل کننده" است. این قطعه در واقع یک کنترل کننده ی مرکزی و یک مرکز تصمیم گیری و هدایت برای مدارهای ماست. این قطعه یک آی سی است که می تواند توسط کاربر برنامه ریزی شود. برنامه ریزی آن نیز توسط زبان های مختلف برنامه نویسی مانند C، اسمبلی و basic انجام می شود.
فقط کافیست تمام ورودی و خروجی های مدار یا ربات خود را در اختیار میکرو کنترلر قرار دهیم و سپس الگوریتم مورد نظر خود را تحت یکی از این زبان های برنامه نویسی پیاده سازی کرده و میکروکنتلر را برنامه ریزی کنیم، حالا این قطعه به راحتی ربات یا مدار ما را به طور کامل کنترل می کند.
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/ATmega16L.JPG
تصویر بالا تصویر یک میکروکنترلر ATmega16L است. این میکرو کنترلر یک آی سی 40 پایه از خانواده ی میکروکنترلرهای AVR است و به دلیل ویژگی های خاص و قیمت مناسبش(حدوداً 2000تومان)، به عنوان یکی از پرکاربردترین و معروف ترین انواع میکروکنترلرها در جهان شناخته شده است. به همین دلیل ما نیز آموزش کار با همین میکروکنترلر را خواهیم داد. البته این به این مفهوم نیست که ما اگر میکروکنترلرATmega16L را آموزش ببینیم فقط می تونیم فقط با همین میکروکنترلر کار کنیم، بلکه کار کردن با سایر میکروکنترلرهای خانواده ی AVR را نیز فرا می گیریم و فقط کافیست چند نکته ی کوچک در مورد میکروکنترلر های دیگر این خانواده یاد بگیریم تا بتوانیم با آن ها نیز کار کنیم.
جالبه بدونید که اولین میکروکنترلرها در دهه ی 80 میلادی ساخته شد، که هنوز هم کار با آن میکروکنترلرها در بسیاری از دانشگاه ها و مراکز مختلف آموزشی، آموزش داده می شود.
خوب، حالا کمی با این قطعه ی جادویی بیشتر آشنا بشویم...
میکروکنترلر یک ریز پردازنده (Processor) است که می تواند ورودی و خروجی های متعدد داشته باشد. یعنی تعددادی ورودی از محیط دریافت کند و طبق برنامه ریزی هایی که روی آن انجام شده، خروجی هایی متناسب با آن ها صادر کند.
ما برای برنامه ریزی این قطعه، از زبان C که یکی از کاملترین زبان های برنامه نویسی روز دنیاست، استفاده می کنیم.
توضیحات ابتدایی در مورد قسمت های نرم افزاری:
به برنامه ای که توسط کاربر نوشته می شود، Source گفته می شود. این برنامه باید توسط یک نرم افزار، به زبان قابل فهم برای میکروکنترلر تبدیل شود. به این نرم افزار کامپایلر می گویند. به این برنامه ی کامپایل شده نیز، یک Object می گویند. حالا باید این Object توسط نرم افزار دیگری به چیپ (Chip) یا همان آی سی منتقل شود. به این عمل، یعنی انتقال برنامه ی کامپایل شده به چیپ، پروگرام کردن می گویند و به نرم افزاری که این کار را انجام می دهد پروگرامر (Programmer) می گویند. محیطی که ما در آن برنامه ی مورد نظر خود را می نویسیم (تایپ می کنیم) Editor نام دارد. این نرم افزار ما را در خلل برنامه نویسی بسیار کمک می کند، مثلاً کلمات رزرو شده و غیر قابل تعویض را با رنگها و فونت های گوناگون برای ما برجسته می کند.
این 3 برنامه، یعنی کامپایلر، پروگرامر و ادیتور، در غالب نرم افزاری به نام "Code Vision" توسط شرکت HP به بازار عرضه شده است . کاربر با نصب این نرم افزار بر روی کامپیوتر شخصی خود، در حقیقت هر 3 برنام را، به علاوه ی چندین قابلیت و برنامه ی جانبی دیگر را که در جلسات آینده با آن ها آشنا خواهید شد، بر روی دستگاه خود نصب کرده است. در واقع Code vision یک بستهی نرم افزاری کامل و جامع برای خانواده ی AVR است که تمام نیازهای نرم افزاری ما را برای کار کردن با میکروکنترلرهای این خانواده برطرف می کند.
در جلسات آینده در مورد این نرم افزار بیش تر توضیح خواهیم داد.
ریپورتر
8th May 2009, 07:59 PM
توضیحات مقدماتی در مورد قسمت های سخت افزاری:
میکروکنترلر ATmega16L دارای 4 پورت (Port) یا درگاه است. هر پورت دارای 8 پایه است که می توانند به عنوان ورودی یا خروجی استفاده شوند. در حقیقت این میکروکنترلر دارای 32 پایه برای دریافت اطلاعات و یا صدور دستورات مختلف برای کنترل سایر قطعات است. 8 پایه ی دیگر نیز وظایف مختلفی بر عهده دارند که در جلسات آینده در مورد آن ها نیز توضیح داده خواهد شد.
در بعضی از میکروکنترلرها برای انتقال برنامه به چیپ (پروگرام کردن چیپ)، از یک مدار جانبی به نام "Micro controller programmer" استفاده می کنند و چیپ را در آن مدار قرار داده و چیپ باید فقط روی آن مدار پروگرام شود. ATmega16L این قابلیت را دارد که بدون هیچگونه مدار خارجی و فقط به وسیله ی چند رشته سیم معمولی، بر روی خود ربات یا مدار اصلی پروگرام شود. این قابلیت به اختصار ISP يا (In System programing) نام دارد. این قابلیت یکی از بزرگترین مزیت های این نوع میکروکنترلر به شمار می رود. زیرا دیگر نیازی به صرف هزینه ی اضافی برای خرید این مدار نیست. علاوه بر این دیگر نیازی نیست چیپ هر بار برای پروگرام شدن از روی ربات جدا شود.
در مورد میکروکنترلر مطالب بسیار گسترده و زیادی وجود دارد، تا جایی که به عنوان یکی از درس های تخصصی رشته های برق و کامپیوتر به دانشجویان مقطع کارشناسی ارائه می شود. بدیهی است ما نمی توانیم در اینجا تمامی مطالب موجود در مورد میکروکنترلر ها را آموزش دهیم. اما به هر حال در جلسات آینده سعی می کنیم شما رو تا حد مناسبی با این قطعه ی با ارزش آشنا کنیم.
ریپورتر
8th May 2009, 07:59 PM
این جلسه ما وارد مبحث آموزش مقدماتی زبان C می شویم تا دوستان کمی با مقدمات برنامه نویسی آشنا بشوند. در استفاده از میکروکنترلرها برای ساخت ربات های مقدماتی مثل مسیر یاب و آتش نشان و ... ما نیازی به آموختن برنامه نویسی در حد حرفه ای نداریم و کمی آشنایی با مقدمات برای ما کافیست!!!
بدون مقدمه بیشتر وارد بحث می شویم.
همانطور که می دانید، کوچک ترین واحد ذخیره سازی اطلاعات در حافظه، Bit است. (جلسه ی شانزدهم در مورد یک Bit توضیح داده شده).
هر 8 بیت را یک Byte می گویند. در حقیقت یک بایت اطلاعات، 8 تا 0 یا 1 است که در مجمع 256 حالت مختلف را پدید می اورند.
توضیح بیشتر:
یک بیت، فقط 2 حالت دارد، 0 یا 1. وقتی 2 بیت در کنار هم قرار می گیرند، هر کدام 2 حالت را پدید می اورند و در مجموع طبق اصل ضرب، 4 حالت به وجود می آید. یعنی:
1 و 1
1 و 0
0 و 1
0 و 0
اصل ضرب:
به مثال زیر توجه کنید.
http://roshd.ir/roshd/Portals/0/0and1/Robotic2/اصل%20ضرب.GIF
در شکل بالا، برای رفتن از A به B، 3 مسیر وجود دارد؛ 5 مسیر هم برای رفتن از B به C وجود دارد. طبق اصل ضرب، برای رفتن از A به C مجموعاً 15=5*3 حالت وجود دارد.
در اینجا، در حقیقت تعداد کل حالت ها، برابر است با حاصل ضرب حالت های هر بیت (که 2 حالت می باشد) می باشد. به عنوان مثال برای محاسبه ی تعداد حالت های 3 بیت اطلاعات، داریم: 8=3^2=2*2*2.
طبق همین رابطه، یک بایت، 256=8^2 حالت مختلف می تواند باشد.
هر 1024 بایت را 1 کیلو بایت می گویند و هر 1024 کیلو بایت، یک مگا بایت است. هر 1024 مگا بایت هم یک گیگا بایت و هر 1024 گیگا بایت هم یک ترابایت نام دارد.( 1024=10^2)
حافظه های کامپیوترهای خانگی امروزی، می تواند تا چند صد گیگابایت هم باشد.
کد ASCII چیست:
موسسه ی استاندارد آمریکا، استانداردی برای ذخیره سازی اطلاعات معرفی کرد. این استاندارد 256 کاراکتر (یک کاراکتر عبارتست از یک عدد، رقم یا یک علامت مثل + و -) را کد گذاری کرد و به هر کدام یک عدد 8 رقمی در مبنای 2(یعنی یک بایت) نسبت داد. این کارکترها شامل همه ی حروف الفبای لاتین، اعداد 0 تا 9، علامت های مختلف مثل نماد جمع(+) و تفریق(-) و ... هستند.
در حقیقت طبق این استاندارد، برای ذخیره سازی هر کاراکتر، یک بایت از حافظه به آن اختصاص میابد. مثلاً برای ذخیره سازی کلمه ی"ALI" به 3 بایت حافظه نیاز داریم. جدول کدهای ASCII را می تونید در کتاب های برنامه نویسی یا با جستجو در اینترنت به راحتی ببینید.
ریپورتر
8th May 2009, 08:00 PM
انواع زبان های برنامه نویسی:
زبان ماشین:
سطح پایین ترین زبان برنامه نویسی زبان ماشین است. در این زبان شما باید به جای گذاشتن علامت + برای جمع کردن مقدار 2 عدد، باید از کد 00 استفاده کنید. این زبان، زبان قابل فهم برای کامپیوتر است، به همین خاطر به آن زبان ماشین می گویند. برنامه های ما در هر زبان برنامه نویسی دیگری، حتی اسمبلی، باید توسط کاپایلر مخصوص آن زبان، به زبان قابل فهم برای کامپیوتر یعنی زبان ماشین ترجمه شود.
زبان اسمبلی:
این زبان کمی پیشرفته تر از زبان ماشین است و کارکردن با آن خیلی راحت تر از زبان ماشین است. به عنوان مثال برای جمع کردن 2 مقدار با یکدیگر می توان از دستورADD استفاده کرد. در این زبان سیستم کد گذاری ASCII هم تعریف شده است و کاربر به عنوان مثال فقط کافیست کلمه ی ALI را تایپ کند، کامپایلر در اینجا کدهای مربوط به این کلمه را از جدول استخراج کرده و جایگزین می کند.
بعد از این ها نوبت به زبان های برنامه نویسی سطح بالا می رسد. این زبان ها سعی کرده اند تا حد امکان به زبان گفتار انسان نزدیک شوند. زبان C یکی از زبان های سطح بالا می باشد.
یک برنامه، شامل چندین دستور مختلف هستش که ما آنها را پشت سرهم با ترتیب مشخصی می نویسیم. در زبان C دستورات باید حتماً داخل توابع باشند. یک تابع عبارتست از چند دستور که در داخل یک آکولاد ({}) نوشته می شوند و نام مشخصی هم برای ان ها گذاشته می شود. همچنین توابع می توانند اطلاعاتی را به عنوان ورودی و خروجی از برنامه دریافت و به آن بازگردانند.
در زبان C وجود تابعی با نام main الزامیست. یعنی ما باید حتماً تابعی با نام main در برنامه ی خود داشته باشیم و اجرای برنامه هم از تابع main شروع می شود.
در Codevision، بعد از انجام تنظیمات اولیه، خود برنامه برای شما قالبی را آماده می کند که در آن تنظیمات اولیه ی پورت ها و .... همچنین بعضی تعاریف اولیه مثل تابع main انجام شده است. فقط کافیست شما دستورات خود را در داخل آن فضای مشخص شده (در داخل تابع main) تایپ کنید.
در جلسه آینده برای آشنایی با نحوه ی برنامه نویسی در فضای Codevision بعد از تعریف متغیرها، برنامه ی یک ربات مسیر یاب بسیار ساده را با هم خواهیم نوشت.
ریپورتر
8th May 2009, 08:00 PM
همونطور که گفته شد AT Mega16 دارای پایه های متعددی برای تبادل اطلاعات با مدار است. هر 8پایه ی مجاور که این وظیفه را دارند یک پورت نامیده می شوند (به شکل نگاه کنید) . AT Mega16 دارای 4 پورت با نام های A ، B ، C و D می باشد. پایه های هر پورت به این شکل نمایش داده می شود:
شماره ی پایه+"."+نام پورت
مثلاً اولین پایه ی پورت D به این صورت نشان داده می شود: D.0
و پایه ی سوم پورت C به صورت : C.2
حال به ترتیب پایه های ATMEGA16L دقت کنید
http://roshd.ir/Portals/0/0and1/Robotic2/ATMEGA16_pinouts.GIF
دقت کنید که شماره گذاری پایه ها در پورت ها از 0 شروع می شود.
همچنین گفته شد، پایه های میکروکنترلر می توانند به صورت ورودی یا خروجی تنظیم شوند، مثلاً در یک ربات مسیریاب میتوان چند پایه را تنظیم کرد که ورودی باشند و اطلاعات سنسورها را دریافت کنند، یا انها را تنظیم کرد تا خروجی باشند و موتورها را هدایت کنند. این تنظیم به صورت نرم افزاری و با تنظیم رجیستر DDRx انجام می گیرد. اما ابتدا باید رجیستر را تعریف کنیم.
رجیستر چیست؟
رجیسترها توعی حافظه هستند که به طور مستقیم با بخشش پردازشگر میکروکنترلر در ارتباط هستند. هر رجیستر یک بایت یا 8 بیت است. یکی از ویژگی های رجیسترها این است که به خاطر ارتباط نزدیک با پردازنده، سرعت بسیار بالاتری نسبت به سایر خانه های حافظه دارند.
رجیستر DDRx:
رجیستر DDRx (Data Direction) برای تنظیم ورودی یا خروجی بودن پایه های میکروکنترلر است. برای تنظیم پایه ها در برنامه، باید به جای x باید آدرس پایه ی مورد نظر(مثل B.3) را بنویسیم. اگر بخواهیم آن پایه خروجی باشد باید بیت رجیستر مربوط به آن را 1 کنیم، و اگر بخواهیم آن پایه ورودی باشد، باید بیت رجیستر مربوط به آن را 0 کنیم. به عنوان مثال اگر بخواهیم پایه17 یعنی D.3 خروجی باشد باید این جمله را بنویسیم: DDRD.3=1;
و اگر بخواهیم این پایه ورودی باشد: DDRD.3=0;
رجیستر PORTx:
در صورتی که پایه ها به صورت خروجی تنظیم شده باشند، هر چه در این رجیستر نوشته شود سطح منطقی پایه ی متناظر را تعیین می کند، مثلاً اگر بنویسیم PORTB.3=1 پایه B.3 یعنی پایه ی 4، 1 منطقی خواهد شد(یعنی ولتاژ 5 ولت بر روی این پایه قرار می گیرد). و اگر بنویسیم PORTC.1=0، پایه ی C.1 یعنی پایه ی 23، 0 منطقی خواهد شد (یعنی ولتاژ این پایه 0 می شود
ریپورتر
8th May 2009, 08:01 PM
رجیستر PINx:
در صورتی که پایه ها به صورت ورودی تنظیم شده باشند، محتویات این رجیستر حاوی اطلاعات دریافتی از پایه های میکروکنترلر است. مثلاً اگر PINB.1=0 باشد، یعنی بر روی پایه شماره ی 2 یا همان B.1 ؛ 0 منطقی اعمال شده است(مثلاً اگر به سنسوری وصل شده است، خروجی سنسور 0 منطقی بوده است). در حقیقت این رجیستر برای خواندن وضعیت پایه های ورودی مورد استفاده قرار می گیرد.
نکته ی بسیار مهم: دقت کنید که در زبان C، باید در انتهای هر خط از برنامه یک علامت ";" گذاشته شود. به این علامت در زبان انگلیسی سِمی کالِن می گویند.
نکته ی مهم:
در حقیقت برای هر پورت 3 رجیستر(حافظه 1 بایتی) در داخل میکروکنترلر وجود دارد که به مجموع این 12 رجیستر، رجیسترهای I/O (Input/Output) می گویند.
بسیار خوب، حالا نوبت نوشتن برنامه ی 1 ربات مسیریاب ساده است که فقط 2 تا سنسور داره!!!
نرم افزاری کمکی به نام Code Wizard در داخل همان Codevision وجود دارد که کار ما را برای انجام تنظیمات اولیه مانند تنظیم ورودی یا خروجی بودن پایه ها آسان می کند. یعنی دیگه نیازی نیست برای هر پایه تک تک با رجیستری DDR سرو کله بزنیم، و به راحتی با چند تا تیک ساده همه ی پایه ها رو تنظیم می کنیم. البته Code wizard همونطور که از اسمش هم معلومه بسیاری امکانات جادویی دیگری هم داره که در جلسات آینده به تدریج با آن ها آشنا خواهیم شد. Code Wizard در حقیقت برای ساده تر کردن و سریع تر کردن برنامه نویسی در فضای Codevision طراحی شده است و کارش این است که قسمت های زیادی از برنامه را به صورت خود کار و طبق خواسته های ما برای ما می نویسد.
پس با این حساب نیازی نیست تنظیمات رجیستری DDRx رو ما در برنامه خودمون انجام بدیم و این کار رو به Code wizard واگذار می کنیم. با Code wizard در جلسه ی آینده آشنا خواهیم شد.
پس در این جلسه فرض می کنیم تنظیمات اولیه مثل رجیستری DDRx و ... انجام شده است. پایه های B.0 و B.1 را به صورت ورودی(برای دریافت اطلاعات سنسورها)، و پایه های B.2 ،B.3 ، B.4 و B.5را به صورت خروجی (برای کنترل حرکت موتورها) تنظیم کرده می کنیم.
B2 و B.3 برای کنترل موتور سمت راست و B.0 برای سنسور سمت راست!
B.4 و B.5 برای کنترل موتور سمت چپ و B.1 برای سنسور سمت چپ!
حال مانند ربات قبلی، یک پایه از هر موتور را 0 می کنیم؛ و روشن و خاموش کردن هر موتور را، با اعمال 0 یا 1 منطقی بر روی پایه ی دیگر کنترل می کنیم.
پایه ی دیگر را هم به صورت هماهنگ با سنسور متناظر آن سمت 0 و 1 می کنیم، یعنی اگر خروجی سنسور 0 بود، پایه ی موتور را 0 می کنیم و اگر 1 بود ، پایه را 1 کرده و موتور را فعال می کنیم.(به شرطی که از مدار گیرنده ی شماره 2 استفاده شود(جلسه ی 15))
در زبان C علامت "=" یک عملگر است که عملوند سمت راست خود را خوانده و در عملوند سمت چپ خود می ریزد. مثلاً وقتی می نویسیم:
PORTB.3=PINB.0;
ابتدا مقداری B.0 خوانده می شود و سپس بر روی B.3 ریخته می شود. یعتی مثلاً اگر روی B.0 ، 1 منطقی اعمال شده باشد، پایه ی B.3 نیز 1 منطقی می شود.
حال با توضیحات داده شده به برنامه ی ربات مسیر یاب ساده دقت کنید:
PORTB.2=0;
PORTB.4=0;
PORTB.3=PINB.0;
PORTB.5=PINB.1;
همانطور که می بینید این برنامه بسیار ساده و کوتاه است.
ریپورتر
8th May 2009, 08:02 PM
در اين جلسه نيز در ادامهي مطالب جلسه پيش، سعي ميکنيم کمي بيشتر با نحوهي برنامهنويسي در زبان C آشنا شويم.
متغيّر چيست؟
متغير قسمتي از حافظه است که ما براي آن يک نام دلخواه انتخاب مي کنيم و از آن براي نگه داري اطلاعات مورد نياز خود در روند اجراي برنامه استفاده مي کنيم.
1- متغيرها با خاموش شدن مدار پاک مي شوند و حافظه ي دائمي نيستند.
2- بايد نوع اطلاعاتي که قرار است در متغير نگه داري شود، معلوم گردد، مثلاً قرار است در آن عدد ذخيره شود يا حروف، يا عدد اعشاري يا .... .
3- کامپيلر به صورت خودکار بخشي از حافظه را به متغير مورد نياز ما اختصاص مي دهد و نيازي نيست ما براي آن مشخص کنيم که اطلاعات را در کجاي حافظه ذخيره کند. البته مي توان در صورت نياز آدرس بخشي از حافظه را مشخص کنيم تا اطلاعات ما در ان جا ذخيره شود(که فعلاً به آن نمي پردازيم).
تعريف متغير:
براي تعريف يک متغير ابتدا بايد نوع يا تايپ (Type) اطلاعاتي که قرار است در آن ذخيره شود، نوشته شود، و بعد از يک فاصله (Space) نام متغير نوشته شود. به مثال زير دقت کنيد:
int a;
در اينجا متغيري با نام "a" و از نوع integer يا همان عددي تعريف شده است، يعني در اين متغير فقط مي توان يک عدد صحيح (غير اعشاري) را ذخيره کرد.
نکته: اگر يک عدد اعشاري در آن ريخته شود، بخش اعشاري آن حذف مي شود.
هر متغير از جنس int، دو بايت حافظه را به خود اختصاص مي دهد و مي توان در آن اعداد در گستره ي32767 تا 32768- را ذخيره کرد.
براي ذخيره سازي حروف(Character) بايد متغير از نوع Char تعريف شود. متغيرهاي Char يک بايت حافظه را به خود اختصاص مي دهند و در آن ها مي توان تنها يک حرف را ذخيره سازي کرد. براي ذخيره سازي حروف در حافظه، کد اسکي (ASCII code) حروف در آن ذخيره مي شود.
در جدول زير چند نوع داده(Data Type) ي ديگر نيز معرفي شده است.
بازه ي تحت پوشش
اندازه (size)
Type
2147483647 تا 2147483648 -
4 بايت
Long int
4294967295 از 0 تا
4 بايت
Unsigned long int
براي اعداد اعشاري
4 بايت
Float
65535 از 0 تا
2 بايت
Unsigned int
براي ذخيره سازي اطلاعات در داخل متغيرها نيز از همان عملگر "=" استفاده مي کنيم. مثلاً:
sum1=75;
مي توانيم متغيرها در همان موقع تعريف مقدار دهي کنيم. به اين کار مقدار دهي اوليه يا "Initialize" کردن ميگويند. مثلاً:
int sum1=75;
اطلاعاتي که در داخل متغيرها ذخيره مي شود ثابت نيست و مي توان در هر جاي برنامه که لازم بود، مقدار ديگري در متغير ذخيره کرد. مثلاً:
int Cross1=34;
.
.
.
Cross1= 68;
اگر بخواهيم مقدار متغير ثابت و غير قابل تغيير باشد بايد قبل از تعيين نوع متغير، کلمه ي "const" را بنويسيم. مثلاً
Const float pi=3.14;
مي توان چند متغير را با هم تعريف کرد و انها را مقدار دهي کرد. مثلاً:
char a1="a", a2, a3, a4="B";
ریپورتر
8th May 2009, 08:02 PM
قوانين نام گذاري شناسه ها(Identifiers) در زبان C:
شناسه ها همان نام هايي هستند که براي متغيرها، توابع و ... انتخاب مي شوند.
براي انتخاب يک شناسه فقط مي توانيم از حروف زير استفاده کنيم:
1- اعداد 9 تا 0
2- حروف z تا a (حروف کوچک)
3- حروفZ تا A (حروف بزرگ)
4- خط فاصله "_" (Under Line)
5- علامت $
به غير از اين کاراکترها مجاز به استفاده از هيچ کاراکتر ديگري (حتي فاصله(Space) ) نيستيم.
همچنين در ابتدا شناسه ها نمي توانيم از اعداد استفاده کنيم. مثلاً شناسه ي 1loop غلط است، ولي Loop1 درست است.
طول شناسه ها نيز نميتواند بيش از 32 کاراکتر باشد.
بعضي کلمات در اين زبان جزو کلمات رزرو شده (Reserved word) هستند و نمي توانند به عنوان شناسه استفاده شوند مانند:int, float, void, char, while, if ، و ...
نکات مهم در مورد برنامه نويسي در زبان C:
1- در پايان هر دستور بايد يک ";" گذاشته شود.
2- جملات و عبارات غير عددي را بايد در داخل " " قرار دهيم. مثلاً اگر مي خواهيم کارکتر B را در داخل متغيري با نام Temp که از جنس char تعريف شده است ذخيره کنيم، بايد بنويسيم:
Temp="B";
3- زبان C در اصطلاح يک زبان Case sensitive است، يعني در اين زبان بين حروف بزرگ و کوچک تفاوت وجود دارد. مثلاً در يک برنامه ما مي توانيم دو متغير با نام هاي "temp" و "Temp" داشته باشيم که ارتباطي هم با يکديگر ندارند.
4- اگر بخواهيم در هر قسمت از برنامه توضيحاتي رو بنويسيم، بايد يک "//" در ابتداي جمله بنويسيم. مثلاً:
int a; // etelaate porte C dar in moteghayer rikhte mishavad
همچنين اگر بخواهيم چند خط پشت سر هم را موقتاً از روند اجراي برنامه حذف کنيم، بايد علامت"*/" را در ابتدا، و "/*" را در انتهاي ان خطوط قرار دهيم. هرگاه اين 2 علامت را پاک کنيم، دوباره آن قسمت، به روند اجراي برنامه اضافه مي شود.
5- در ساختار زير، هردستور يا دستوراتي که در داخل{} نوشته شود، بي نهايت بار انجام مي شود. در حقيقت while(1)، يک حلقه ي بي پايان است که دستورات داخل آن تا وقتي که مدار فعال باشد، تکرار مي شوند. در جلسات آيند شما با ساختار حلقه ها بيشتر آشنا خواهيد شد.
while(1)
{
PORTD.3=PINA.2;
PORTD.4=PINA.3;
}
اين 2 دستور مکرراً تا زمانيکه ميکروکنترلر فعال باشد، اجرا مي شوند.
در بخش برنامه نويسي مطالب بسيار گسترده اي براي آموزش هست،
ریپورتر
8th May 2009, 08:03 PM
قراره کمی در مورد Codevision توضیحاتی بدیم.
در ابتدا دوستان عزیز برای اینکه بتونن مطلب رو با ما دنبال کنند، لازمه که این نرم افزار تهیه کرده و روی کامپیوتر شخصی خود نصب کنند. در زیر نسخه ی2.03.4 Crack شدهی این نرم افزار را، برای دانلود دوستان قرار دادیم.(حجم 8.15مگابایت)
براي دانلود نرم افزار اينجا (http://takdata.net/files/2008/10-2/CodeVisionAVR2.03.4.rar) كليك كنيد
پس انجام مراحل نصب برنامه، برنامه را باز کنید.
چگونه يك پروژهي جديد تعريف كنيم؟
برای نوشتن یک پروژه ی جدید، باید ایتدا از منوی File، گزینه ی New را انتخاب کنید. یک پنجره ی کوچک در وسط صفحه باز می شود که در آن باید گزینه ی Project را انتخاب کرده و تایید کنید. بلافاصله پنجره ی دیگری باز می شود که از شما سوال می کند آیا تمایل دارید برای انجام پروژه ی خود از CodeWizard استفاده کنید؟
همانطور که گفته شد، CodeWizard یکی از نرم افزارهای جانبی CodeVision است که به وسیله ی یک واسط گرافیکی، در نوشتن برنامه ی اصلی و انجام تنظیمات اولیه پورت ها و ....، کمک بسیار زیادی به ما می کند.
پس گزینه ی Yes را انتخاب می کنیم و CodeWizard باز می شود.
چگونه از CodeWizard استفاده کنیم:
شکل زیر، نمای کلی از CodeWizard است:
http://roshd.ir/Portals/0/0and1/Robotic2/CodeWizard.jpg
همانطور که میبینید، لبه های متعددی برای انجام تنظیمات مختلف میکروکنترلر در آن وجود دارد.
لبهی Chip:
اولین لبه ای که ما با آن کار داریم لبه ی Chip است. در این قسمت ما باید نوع میکروکنترلر خودمان را انتخاب کنیم. همانطور که در شکل بالا می بینید، میکرو کنترلر ATmega16L را انتخاب کرده ایم.
قسمت Clock مربوط به تنظیم فرکانس کاری آی سی است که ما فعلاً وارد اين مبحث نميشويم و آنرا با همان مقدار پیش فرض می پذیریم. با قسمت های دیگر این لبه هم ما کاری نداریم و آن ها را به همان صورت پیش فرض می پذیریم.
ریپورتر
8th May 2009, 08:03 PM
لبهی Port:
این لبه مربوط به تنظیمات ورودی خروجی پایه هاست.
http://roshd.ir/Portals/0/0and1/Robotic2/CW-PORT.jpg
همانطور که می بینید هر پایه از هر پورت را در این قسمت می توان به راحتی به صورت In (ورودی) و یا Out(خروجی) تنظیم کرد. فقط کافیست لبه ی مربوط به پورت مورد نظر را انتخاب کنید، حالا برای تغییر وضعیت هر پایه باید روی آن کلیک کنید.
Output value یا مقدار اولیه:
وقتی پایه ای را به صورت خروجی تنظیم می کنیم، می توان با تنظیم رجیستری PORTx تعیین کرد که سطح ولتاژ خروجی این پایه به صورت پیش فرض 0 باشد یا 1. یعنی در زمانیکه هنوز برنامهي ما برای پایه ها تعیین وضعیت نکرده است، می توان به این طریق سطح ولتاژ اولیه ی پایه را تعیین نمود.
CodeWizard در این جا هم کار ما را راحت تر کرده است، در ستون مقابل یعنی ستون "Pullup/Output value" برای پایه هایی که به صورت خروجی تعریف شده اند، می توان با یک کلیک وضعیت خروجی پایه را مشخص کرد. مثلاً الآن پایه ی شماره ی 2 از پورت A به صورت خروجی تعریف شده و در ستون مقابل نیز مقدار پیش فرض خروجی 0 تعیین شده است.
Pullup:
این قابلیت سخت افزاریست و در خانواده ی AVR نیز وجود دارد. Pullup کردن به این معناست که پایه ای را با یک مقاومت بالا(مثلاً 10 کیلو اهم) به + وصل کنیم. اگر هم پایه را با این مقاومت به GND وصل کنیم، می گوییم پایه را Pulldown کرده ایم. مقاومت بزرگ باعث می شود که جریان عبوری به حداقل کاهش یابد، ولی به وسیله ی ولتاژی که بر روی پایه قرار می گیرد، میتوان ورودی مورد نظر را در هنگامیکه هنوز ورودی از خارج دریافت نکرده به صورت پیش فرض 0 یا 1 کرد.
وقتی پایه ای را به صورت ورودی تعریف می کنیم، با تنظیم رجیستری PORTx می توان تعیین کرد که پایه ی ورودی به صورت پیش فرض Pullup باشد یا نباشد. دقت کنید که در اینجا نمی توان تنظیم کرد که مقدار ورودی پیش فرض 0 باشد، چون خانواده ی AVR قابلیت Pulldown ندارند وفقط می توان آنرا به صورت Pullup تنظیم نمود، و در نتیجه پایه ای که Pullup شده است در هنگامیکه هنوز از خارج مقداری را دریافت نکرده است، به صورت پیش فرض 1 منطقی شود.
حالا بعد از انجام تنظیمات اولیه پورت ها و خود آی سی ، باید از Codewizard بخواهیم تا یک برنامه ی نیمه آماده با توجه به تنظیماتی که تنجان داده ایم در اختیار ما بذاره.
برای این کار از منوی File گزینه ی "Generate, Save and Exit" را انتخاب کنید. حالا باید جایی که می خواهید برنامه ی شما Save شود را مشخص کنید. Codevision در اینجا 3 فایل برای برنامه ی شما می سازد که باید آن ها را نام گداری کنید. بهتر است نام این 3 فایل و محل ذخیره سازی آن ها یکی باشد.
بعد از ساخته شدن این 3 فایل توسط Codevision برنامه آماده است، حالا شما باید دستورات خود را در محل تعیین شده بنویسید.
http://roshd.ir/Portals/0/0and1/Robotic2/code%20place.jpg
بعد از نوشتن برنامه باید آنرا کامپایل کرده و و سپس فایلHex آنرا بسازید و بعد از آن، فایل Hex را در میکرو کنترلر Load کنید. حالا میکروکنترلر شما پروگرام شده و آماده ی استفاده است
ریپورتر
8th May 2009, 08:04 PM
قراره شما رو با مراحل کامپایل کردن ، پروگرام کردن میکروکنترلر و رفع نقص برنامه آشنا کنیم.
همانطور که گفته شد فقط «زبان ماشین»(Machine Language)، زبان قابل فهم برای پردازنده ی کامپیوتر است، و برنامه هایی که در زبان های دیگر می نویسیم برای اینکه بتوانند توسط پردازنده اجرا شوند باید حتماً توسط کامپایلرها به «زبان ماشین» ترجمه شوند. اما نوشتن برنامه در این زبان برای ما بسیار مشکل است، زیرا دستورات قابل فهم برای این زبان بسیار ابتدایی و ساده هستند و به سختی می توان برنامه های حرفه ای و الگوریتم های پیچیده را در آن پیاده سازی کرد. مثلاً حتی برای انتقال داده از یک متغیر به متغیر دیگر، باید چندین خط برنامه بنویسید، اما در زبان C این کار در 1 عبارت انجام می شود. برنامه نویسی در این زبان دشواری های مختلفی دارد که فعلاً به آن ها نمی پردازیم.
به همین خاطر ما برنامه های خود را در زبان C می نویسیم و باقی کارها را به کامپایلر می سپاریم. کامپایلر ابتدا برنامه ی ما را از زبان C به زبان اسمبلی ترجمه می کند، سپس برنامه ی دیگری به نام «اسمبلر»(" Assembler") برنامه ی ما را از اسمبلی به «زبان ماشین» تبدیل می کند.
زبان اسمبلی یک پله کاملتر از زبان ماشین است. برنامه نویسی در این زبان بسیار ساده تر از زبان ماشین است و بعضی از مشکلاتی که در زبان ماشین وجود داشت در این زبان برطرف شده و یکی از زبان های رایج فعلی برای برنامه نویسی میکروکنترلرها همین زبان اسمبلی است که بیشتر هم در برنامه نویسی میکروکنترلرهای سری 8051 استفاده می شود. اما برنامه نویسی در این زبان هم بسیار پیچیده تر از زبان C است و نوشتن برنامه های حرفه ای و طولانی در این زبان بسیار دشوار است.
حال چگونه باید این مراحل را در محیط CodeVisionانجام داد:
بعد از نوشتن برنامه، شما می توانید با فشار دادن کلید F9 برنامه ی خود را کامپایل کنید. با فشار دادن همزمان Shift+F9 برنامه ی شما ابتدا کامپایل شده و به اسمبلی تبدیل می شود وسپس توسط اسمبلر، به زبان ماشین تبدیل می شود. سپس فایلی با پسوند .HEX در محلی که شما مشخص کرده اید(در هنگام ساختن پروژه) ساخته می شود.این فایل همان برنامه ی شماست و شما باید این فایل را طی مراحلی که در ادامه توضیح داده می شود، در میکروکنترلر Load کنید.
در اینجا ما نیاز به نرم افزارِ پروگرامر "Programmer" داریم تا اطلاعات ما رو با پرتوکل های مشخصی که در جلسات آینده در مورد آن ها توضیح خواهیم داد، به میکروکنترلر منتقل کند.
همانطور که در جلسات پیش مطرح شد، CodeVision مجموعه ای از چند برنامه ی مختلف است که در کنار هم جمع شده اند تا همه ی نیازهای کاربر را برطرف کنند. در اینجا هم پروگرامر CodeVision مشکل ما رو حل می کند. برای استفاده از پروگرامر، باید در نوارابزار بالا روی "Chip Programmer" کلیک کنید تا پنجره ای به شکل زیر باز شود.
http://roshd.ir/Portals/0/0and1/Robotic2/programmer.JPG
حال از منوی File"" ِ همین پنجره، گزینه ی Load Flash"" را انتخاب کنید. حالا فایلی که در قسمت بالا ساختید (.Hex) را از پوشه ی "exe" انتخاب کنید. البته به صورت پیش فرض این کار انجام می شود و فایل .HEX برنامه ی شما در پروگرامر Load می شود، اما ممکن است گاهی به دلایل مختلف نیاز باشد فایل دیگری را Load کنید.
حالا شما باید کابل ارتباطی بین میکروکنترلر و کامپیوتر را متصل کنید ارتباط بین میکروکنترلر و کامپیوتر برقرار شود. توضیحات مفصل در مورد این قسمت و نحوه ی ساخت این کابل در جلسات آینده به تفصیل توضیح داده خواهد شد.
حالا از منوی "Program" گزینه ی "Erase Chip" را انتخاب کنید تا برنامه های قبلی ای که رو میکروکنترلر شما هست پاک شود و میکروکنترلر آماده دریافت برنامه ی جدید شود. سپس از همین قسمت، گزینه ی "Flash" را انتخاب کنید تا برنامه ی جدید شما در داخل
ریپورتر
8th May 2009, 08:05 PM
مشکلات احتمالی:
در بخش کامپایل کردن برنامه، ممکن است برنامه ی شما ایرادات مختلفی داشته باشد که مانع کامپایل شدن برنامه شود. این ایرادات(Errors)، همراه با شماره ی خطی که در آن ایراد وجود دارد، بعد از هربار که برنامه را کامپایل می کنید در قسمت سمت چپ، در لبه ی"Code Navigator" نمایش داده می شوند .
http://roshd.ir/Portals/0/0and1/Robotic2/Errors1.jpg
نکته ی مهم:یکی از رایج ترین ایرادات که مربوط به نگذاشتن ";" در پایان جملات است، ایراد "missing';' " است.
سپس بعد از رفع ایراد ، دوباره برنامه را کامپایل کنید و اگر Error در آن قسمت نبود، برنامه ی شما کامل است.
در جلسه ی آینده، به شما نحوه ی ساخت و استفاده از کابل پروگرامر را آموزش می دهیم. بعد از آن در مورد سخت افزار و نحوه ی استفاده و راه اندازی میکروکنترلر در مدار را آموزش می دهیم. بعد از طی شدن این مراحل، شما می توانید یک ربات مسیریاب ساده ی میکروکنترلر دار طراحی کنید و بسازید.
اما این پایان راه نیست، شما هنوز فقط مقدمات کار با میکروکنترلر را فراگرفته اید و کار زیادی نمتونید با میکروکنترلر انجام دهید. در ادامه ما بحث میکروکننترلر را به صورت کاملاً حرفه ای دنبال می کنیم تا دوستان عزیز بتونن به صورت حرفه ای تر وارد دنیای رباتیک بشوند.
ریپورتر
8th May 2009, 08:05 PM
يه کم از بحث تخصصيمون خارج مي شويم و ميريم سراغ حاشيه!!!
ولي قبل از شروع مطلب، بنا به درخواست بسياري از دوستان، يک کتاب در مورد نحوه ي کار با ميکروکنترلرهاي خانواده ي AVR معرفي مي کنيم. کتاب ميکروکنترلرهاي AVR، تاليف مهندس ره افروز، کتاب مناسبي هست و دوستان مي توانند براي مبحث ميکروکنترلر کار ما، اين کتاب را تهيه کنند.
در اين جلسه قراره کمي در مورد مسابقات رباتيکي که در کشور ما برگزار ميشه، و ليگ ها و قوانين و ... اونها توضيح بديم.
نزديک ترين مسابقاتي كه در پيش رو داريم، مسابقات بين المللي آزاد ايران Iran Open است که در تاريخ 5-3 آپريل، يعني 14 تا 16 فروردين 1388 در محل دانشگاه آزاد قزوين برگزار مي شود.اين مسابقات در ليگ هاي متعددي برگزار مي شود که ما در اين جلسه، در مورد ليگ هاي دانش آموزي آن توضيحاتي خواهيم داد.
فدراسيون جهاني روبوكاپ، فقط 2 رشته را به عنوان ليگهاي رسمي در بخش دانشآموزي معرفي كرده است و مسابقات جهاني روبوكاپ هر ساله در بخش دانشآموزي، فقط در همين 2 ليگ برگزار ميشود.
1- ليگ رباتهاي فوتباليست
2- ليگ رباتهاي امدادگر
ما هم در اين جلسه فقط در مورد همين 2 ليگ توضيح خواهيم داد. اما اين بدين معنا نيست كه در كشور مسابقات ديگري در بخش دانشاموزي برگزار نميشود، هر ساله در كشورِما ،مسابقات متعددي از جمله مسيرياب، آتش نشان، هزار تو(ماز)، جنگجو و ... در بخش هاي دانشجويي و دانش اموزي برگزار مي شود، اما فدراسيون جهاني روبوکاپ، در بخش دانش آموزي فقط 2 ليگ مذکور را به رسميت مي شناسد.
Rescue junior league:
ليگ ربات هاي امدادگر دانش آموزي
اين ليگ شباهت زيادي به ربات هاي مسيرياب پيشرفته دارد. اما كمي پيچيدهتر از آن است. رباتها علاوه بر تعقيب خط مشكي رنگ، بايد قادر باشند رنگ خطهاي زمين مسابقه را بخوانند. مثلاً در بخشهايي از زمين، خطهاي سبز يا قرمز يا نقره اي رنگ كشيده شده است، اين خطها همان مصدومين فرضي هستند و ربات بايد قادر به تشخيص آنها باشد.
همچنين در بخشهايي از مسير، موانعي در مسير حركت ربات تعبيه شده است كه ربات بايد بتواند بدون برخورد با موانع، آن را رد كند. همچنين ممكن است در برخي از نقاط مسير، شيب زمين به 25 درجه نسبت به سطح افق نيز برسد.
http://roshd.ir/Portals/0/0and1/Robotic2/rescue%20junior2.jpg
ریپورتر
8th May 2009, 08:06 PM
در شکل زیر به مصدومین فرضی که به وسیله ی آدمک رنگی نشان داده شده اند دقت کنید.
http://roshd.ir/Portals/0/0and1/Robotic2/rescue%20junior1.jpg
اين مسابقات در 2 بخش Primary(مقدماتي)، و Secondary(پيشرفته) برگزار ميشود. در بخش نخست، شركت كنندگان نميتوانند سن بيش از 14 سال داشته باشند. در بخش Secondary نيز، سن شركت گنندگان نميتواند بيش از 18 سال باشد.
براي دريافت قوانين اينجا (http://iranopen2008.ir/Leagues/RoboCupJunior/Rescue/Secondary/Rules/tabid/317/Default.aspx)کليک کنيد.
Soccer junior league:
ليگ ربات هاي فوتباليست دانش آموزي
در اين ليگ، رباتها بايد بتوانند با توپهاي خاصي كه از خود مادون قرمز ساتع مي كنند، فوتبال بازي كنند. دليل استفاده از اين نوع توپ خاص، ساده بودن روشهاي تشخيص آن به وسيلهي سنسورهاي مادون قرمز معمولي(فتو ترانزيستورهايي كه در مورد آن توضيح داده شده) است. يافتن اين توپها توسط ربات، به سادگي يافتن آتش يا هر منبع نور ديگري است.
رباتهاي هر تيم بايد تلاش كنند تا توپ مذكور را، در دروازهي تيم مقابل جاي دهند. در پايان زمان مسابقه، هرتيمي كه گل بيشتري زده باشد، برندهي بازي خواهد بود.
تيمهاي حرفهاي در اين ليگ، سيستمهاي مختلفي را براي هدايت و شوت كردن توپ به سمت دروازهي تيم مقابل بر روي رباتهاي خود تعبيه مي كنند.
http://roshd.ir/Portals/0/0and1/Robotic2/soccer%20junior2.jpg
در كف زمين مسابقه، براي كمك به مكان ياب رباتها، يك طيف رنگي از سياه تا سفيد، بين 2 دروازه كشيده شده است. تيمها با تشخيص رنگ كف زمين، مي توانند مكان تقريبي خود را در زمين مسابقه به دست بياورند. داشتن مختصات تقريبي، به ربات كمك ميكند تا بتوانند استراتژيهاي كاملتري را در زمين مسابقه پياده سازي كند.
http://roshd.ir/Portals/0/0and1/Robotic2/soccer%20junior.jpg
اين ليگ، در دو بخش 2در2 و 1در1 برگزار ميشود. در ليگ 2در2، هر تيم ميتواند حداكثر 2 ربات در زمين مسابقه حاضر كند. در بخش 1در 1 نيز، تيمها فقط 1 ربات ميتوانند در زمين مسابقه داشته باشند.
ابعاد زمين مسابقه، 122 در 183 سانتيمتر است.
براي دريافت قوانين اينجا (http://iranopen2008.ir/Leagues/RoboCupJunior/Soccer/Secondary1on1/Rules/tabid/164/Default.aspx) کليک کنيد.
ریپورتر
8th May 2009, 08:06 PM
سعي ميكنيم كمي از مقدمات سخت افزاري و مدارهاي راه اندازي ميكروكنترلرهاي AVR صحبت كنيم تا دوستان بتوانند به تدريج كار عملي با Atmega16 را شروع كنند.
در شكل زير شماي كلي ATMEGA16 آورده شده است
http://roshd.ir/Portals/0/0and1/Robotic2/ATMEGA16_pinouts.GIF
پايهي 10: تغذيهي آي سي است و بايد به 5ولت متصل گردد. ولتاژ تغذيه براي ميكروكنترلرهاي Atmega16، بين 5.5_4.5 ولت بايد باشد، و براي Atmega16L، بين 5.5_2.7 ولت است.
پايههاي 11 و 31: اين 2 پايه GND هستند و بايد به قطب – منبع تغذيه متصل شوند.
پايهي 30: اين پايه، تغذيهي مبدل آنالوگ به ديجيتال است(ADC) و اگر بخواهيم از اين امكان ميكروكنترلرهاي AVR استفاده كنيم، بايد اين پايه را به همان 5ولت منبع تغذيه متصل كنيم.
پايهي 32: اين پايه نيز مربوط به همان امكان تبديل آنالوگ به ديجيتال است، در مورد آن در جلسات آينده توضيح خواهيم داد. وقتي از اين امكان استفاده نميكنيم، نيازي نيست اين پايه به جايي متصل باشد.
مدار پايهي Reset:اين پايه براي Reset كردن آي سي به كار مي رود. Reset شدن ميكروكنترلر مثل Reset شدن كامپيوتر است و باعث ميشود كه آي سي همهي برنامههاي خود را دوباره از اول اجرا كند.
اين پايه بايد در حالت عادي 1 منطقي باشد و هرگاه بخواهيم آيسي را Reset كنيم، بايد آنرا 0 منطقي كنيم(حداقل 16 ميلي ثانيه) و سپس 1 منطقي كنيم.
براي اين پايه، ميتوان مدار زير را بست.
http://roshd.ir/Portals/0/0and1/Robotic2/reset%20circuit.gif
در اين مدار، پايهي Reset به وسيلهي يك مقاومت 10 كيلواهمي به VCC وصل شده است، و هر گاه كليد را فشار دهيم، پايه مستقيماً به GND وصل ميشود و آي سي Reset ميشود.
ریپورتر
8th May 2009, 08:07 PM
اسيلاتور خارجي:ميكروكنترلر هم مثل كامپيوتر شما يك فركانسِ كاري دارد، مثلاً وقتي ميگوييد CPU كامپيوتر شما 2.5 گيگا هرتز است، در حقيقت شما فركانس كاري پردازندهي كامپيوتر خود را گفتهايد.
براي توليد اين فركانس، ما نياز به يك نوسان ساز يا اسيلاتور داريم. اين قطعه در اصطلاح تجاري به كريستال معروف است.
http://roshd.ir/Portals/0/0and1/Robotic2/xtal.jpg
يكي از مزيتهاي Atmega16 اين است كه يك نوسان ساز در داخل خود ميكروكنترلر تعبيه شده است و نيازي نيست شما از اين كريستالها استفاده كنيد.
اما در Atmega16 اين نوسان ساز دقت خوبي ندارد و براي كارهايي كه نياز به دقت بالا دارند(بعداً در اين مورد توضيح خواهيم داد)، بايد از كريستال يا نوسان ساز خارجي استفاده كرد. اما فعلاً براي كار ما نيازي به كريستال خارجي نيست.
پايههاي 12 و 13 براي اين منظور در نظر گرفته شدهاند. براي اتصال كريستال به آيسي بايد مدار زير را كه شامل 2 عدد خازن عدسي 30 پيكوفاراد است به اين 2 پايه متصل كنيد.
http://roshd.ir/Portals/0/0and1/Robotic2/xtal%20circuit.JPG
دقت كنيد كه پايههاي كريستال تفاوتي با هم ندارند و در نتيجه فرقي نميكند از كدام طرف در مدار قرار گيرد.(مثل LED مثبت و منفي ندارد)
براي ميكروكنترلرهاي ATMEGA16L، معمولاً از اسيلاتورهاي 12 يا16 مگا هرتز استفاده ميشود.
يكي ديگر از ويژگيهاي ميكروكنترلرهاي AVR اين است كه براي پروگرام كردن آنها نيازي به دستگاهپروگرامر نيست، و فقط با يك كابل سادهي 5 رشته ميتوان آنها را به سادگي توسط كامپيوتر پروگرام كرد.
ریپورتر
8th May 2009, 08:07 PM
ابتدا بايد يك نكته رو از مطالب جلسهي پيش گوش زد كنم، براي بستن مدار Reset و همچنين كرستال خارجي، در ATMEGA16L هيچ الزامي وجود ندارد و صرفاً براي دقت بيشتر ميباشند.
در ضمن ياد آوري ميكنم كه ميكروكنترلرهاي ATMEGA16L و ATMEGA16 تفاوت خاصي در ترتيب پايهها و كارايي با يكديگر ندارند. مهمترين تفاوت اين 2 آي سي در فركانس كاري اين 2 آي سي است كه ATMEGA16L نميتواند با فركانس بيش از 8 مگاهرتز كار كند.
خوب، همانطور كه قول داده بوديم، قراره اين جلسه ساخت يك پروگرامر بسازيم كه بتوانيم به وسيلهي آن، برنامههايي كه در كامپيوتر مينويسيم را به ميكروكنترلر منتقل كنيم.
براي پروگرام كردن ميكروكنترلرهاي خانوادهي AVR روشها و پورتكولهاي متعددي وجود دارد. يكي از معروفترين و پركاربردترين پروتكولهاي موجود، STK200\300 نام دارد كه ما در اين جلسه سعي ميكنيم نحوهي استفاده از اين پروتكول را آموزش دهيم.
همانطور كه گفته شد، ميكروكنترلرهاي خانوادهي AVR اين قابليت را دارند كه ميتوان آنها را مستقيماً به وسيلهي يك كابل 5 رشته به كامپيوتر متصل نموده و پروگرام كرد، و در نتيجه، نيازي به يك دستگاه مجزا براي پروگرام كردن ندارند. اين روش پروگرام كردن STK200/300 نام دارد. اين روش، به خاطر عدم نياز به هرگونه مدار جانبي و سهولت كار با آن، از محبوبيت زيادي در بين كاربران حرفهاي برخوردار است.
اولين نكته اين است كه اگر كامپيوتر شما پورت LPT(موازي) نداشته باشد، شما نمي توانيد به اين روش(يعني فقط با يك كابل 5 رشتهي ساده) ميكروكنترلر خود را پروگرام كنيد و بايد از مدارهاي پروگرامر USB استفاده كنيد. با استفاده از پروگرامرهاي USB، شما ميتوانيد با استفاده از درگاه USB هم ميكروكنترلر خود را پروگرام كنيد. ساختن اين پروگرامرها كار سادهاي نيست، اما انواع مختلف آنها در بازار موجود است كه بين 20 تا 200 هزار تومان هم قيمت دارند.
براي ديدن پورت يا درگاه LPT (موازي) ، به پشت كيس كامپيوتر خود نگاه كنيد.
http://roshd.ir/Portals/0/0and1/Robotic2/case%20view.jpg
اين درگاه، درگاه ارتباط موازي(Parallel) يا LPT نام دارد و يكي از رايجترين كاربردهاي آن براي ارتباط با پرينتر است. البته اكثر پرينترهاي امروزي از طريق درگاه USB با كامپيوتر ارتباط برقرار ميكنند.
ریپورتر
8th May 2009, 08:08 PM
درگاه LPT داراي 25 پايه است كه به شكل زير شماره گذاري ميشوند.
http://roshd.ir/Portals/0/0and1/Robotic2/lpt%20pin%20out.GIF
براي ساختن اين پروگرامر ساده، شما احتياج به نيم متر كابل فِلَت 5 رشته و يك عدد سوكت نَري LPT داريد. البته الزامي در استفاده از اين نوع كابل نيست و ميتوان از هر كابل 5 رشتهي ديگري براي اين منظور اسفاده كرد.
http://roshd.ir/Portals/0/0and1/Robotic2/LPT-25PIN-MALE-WIRE-S-R14783.jpg
سوكت نَري LPT.
كابل فلت نيز در شكل زير نشان داده شده است.
http://roshd.ir/Portals/0/0and1/Robotic2/flat%20cable.jpg
شما بايد اين 5 رشته را به پايههاي شمارهي 6و7و9و10و24 از اين سوكت لحيم كنيد.
حالا ميتوانيد به وسيلهي اين 5 سيم ميكروكنترلر خود را پروگرام كنيد. كافيست اين سيمها را به ترتيب زير به پايههاي ميكروكنترلر وصل كنيد.
سيمي كه به پايهي شمارهي 6 سوكت متصل شده است، بايد به پايهي SCK در ميكروكنترلر شما وصل شود، در ATmega16، SCK پايهي شمارهي 8 است.
پايهي شمارهي 7 سوكت، بايد به پايهي MOSI در ميكروكنترلر وصل شود، در ATmega16، MOSI پايهي شمارهي 6 است.
پايهي شمارهي 9 سوكت، بايد به پايهي Reset در ميكروكنترلر وصل شود، در ATmega16، Reset پايهي شمارهي 9 است.
پايهي شمارهي 10 متصل سوكت، بايد به پايهي MISO در ميكروكنترلر وصل شود، در ATmega16، MISO پايهي شمارهي 7 است.
و در نهايت، پايهي شمارهي 24 نيز، بايد به GND يا همان زمين در ميكروكنترلر وصل شود، پايهي 11و 31 در ATmega16L ، - ياهمان GND است.بهتر است براي اتصال اين پايه به ميكروكنترلر، از يك مقاومت 1 كيلو اهم استفاده كنيد.
در ضمن دقت كنيد، كه اگر طول سيم بيش از نيم متر باشد، ممكن است در پروگرام كردن دچار مشكل شويد، به همين خاطر بهتر است تا جاي ممكن طول سيم را كوتاه انتخاب كنيد.
ریپورتر
8th May 2009, 08:08 PM
در ابتدا نحوهي تنظيم CodeVision را براي پروگرامري كه در جلسهي پيش ساختيم مطرح كنيم و بعد از اون، كمي هم آموزش زبان C را دنبال كنيم.
در جلسات پيش با بخش پروگرامر(Programmer) در CodeVision آشنا شديم. براي استفاده از نرم افزار پروگرامر، ابتدا بايد آن را با توجه به سختافزاري كه براي پروگرام كردن در اختيار داريم تنظيم كنيم. براي اين كار CodeVision را باز كنيد و از منوي بالا گزينهي "Setting" را انتخاب كنيد. سپس گزينهي "Programmer" را انتخاب كنيد. پنجرهاي به شكل زير باز ميشود.
http://roshd.ir/Portals/0/0and1/Robotic2/Programmer%20setting.JPG
در اين پنجره بايد نوع سخت افزار پروگرامري را كه در اختيار داريد را انتخاب كنيد.
پروگرامري كه ما جلسهي پيش آموزش داديم همين STK200+/300 است كه معمولاً به صورت پيش فرض انتخاب شده است.
قسمت Delay Multiplier هم نياز به تنظيم خاصي ندارد. با استفاده از اين قسمت ميتوان كمي وقفه در عمليات پروگرام شدن به وجود آورد كه اين كار ممكن است برخي مشكلات احتمالي را در هنگام پروگرام كردن برطرف كند.
در اين قسمت نياز به تنظيم بخش ديگري نيست و پروگرامر آمادهي استفاده است.
تا به اينجا ما مقدمات كار با ميكروكنترلرهاي خانوادهي AVR را ياد گرفتيم و الان ميتونيم در حد آماتور از ميكروكنترلر در مدارهايي كه طراحي ميكنيم، استفاده كنيم.
اما كار با ميكروكنترلرهاي AVR به همين جا ختم نميشود، از اينجا به بعد ما سعي ميكنيم مبحث ميكروكنترلر را به صورت حرفهاي تر دنبال كنيم.
در ادامهي اين جلسه برميگرديم به بحث برنامه نويسي در زبان C تا كمي بيشتر با اين زبان آشنا شويم.
يك نكته را بايد قبل از شروع بحث متذكر شوم، در ميكروكنترلر، همهي وروديها منطقي ميشوند. يعني اگر سطح ولتاژ پايهي ورودي (كه مثلاً يك سنسور نوري به آن متصل شده است) بين 0 تا 2.5 ولت باشد، آيسي آن را 0 منطقي در نظر ميگيرد و اگر بين 2.5 تا 5 ولت باشد، آن را 1 منطقي در نظر ميگيرد.
ساختارهاي كنترلي
در حالت عادي، دستورات داخل برنامهي ما، از اولين دستور تا آخرين دستور به ترتيب اجرا ميشوند. اما اگر بخواهيم بعضي از دستورات فقط تحت شرايط خاصي اجرا شوند يا مثلاً بخشهاي ديگري از برنامه چندين بار تكرار شوند، بايد بتوانيم روند اجراي دستورات برنامه را كنترل كنيم. براي اين منظور دستوراتي در زبان C وجود دارند كه به آنها دستورات يا ساختارهاي كنترلي ميگوييم.
اولين ساختار كنترلي كه با آن آشنا ميشويم دستور if است.
ریپورتر
8th May 2009, 08:08 PM
if _ else:
به كمك اين دستور، ما ميتوانيم براي اجراي هر بخش از برنامه شرط يا شروطي بگذاريم كه اگر اين شروط برقرار نباشند، ميكروكنترلربدون اجراي آن دستورات از روي آنها رد شود و روند اجراي برنامه به بعد از اين دستورات منتقل شود. اين دستور در برنامه به شكل زير استفاده ميشود.
if (شرط يا شروط)
{
دستوراتي كه فقط اگر شروط بالا برقرار باشند اجرا ميشوند
}
else
{
دستوراتي كه فقط اگر شروط بالا برقرار نباشند اجرا ميشوند
}
نكات مهم در مورد اين ساختار:
1- بعد از هر كدام از دستورات در داخل if و else بايد حتماً ";" گذاشته شود.
2- دقت كنيد كه بعد از خود if و else نيازي به ";" نيست.
3- اگر بخواهيم چند شرط براي if بگذاريم ، به نحوي كه فقط اگر همهي شروط برقرار بودند دستورات اجرا شوند، بايد به شكل زير عمل كنيم:
if (شرط1 && شرط2 && شرط3)
4- اگر بخواهيم چند شرط براي if بگذاريم ، به نحوي اگر هركدام ازشروط برقرار بودند، دستورات مربوطه اجرا شوند بايد به شكل زير عمل كنيم:
if (شرط1 || شرط2 || شرط 3 )
5- اگر بخواهيم تساوي 2 عبارت، يا يك عبارت با يك مقدار را چك كنيم به شكل زير عمل مي كنيم:
if (a == b && f == 20)
اين عبارت 2 شرط دارد كه اگر متغير a برابر با متغير b باشد و اگر متغير f هم برابر با مقدار 20 باشد، دستورات مربوط به if اجرا ميشوند.
6- اگر بخواهيم مقدار خروجي مثلاً يك سنسور نوري را چك كنيم كه 1 منطقي است يا نه، به صورت زير عمل ميكنيم:
if ( PORTB.1== 1 )
يا
if (PORTB.1 !== 0 )
اين 2 عبارت دقيقاً يك كار را انجام ميدهند. همانطور كه ميبينيد، "==!" به معناي عدم تساوي است.در حالت كلي "!"در اين زبان به معناي نقيض است.
ریپورتر
8th May 2009, 08:09 PM
اميدوارم مطالب ارائه شده تا به اينجا داراي سطح كيفي مناسبي بوده باشند و و دوستان عزيز ما بهرهوري مناسب را از اين مطالب كرده باشند. اگر پيشنهاد يا نظري در مورد اين بخش داريد حتماً با ما در ميان بگذاريد تا انشاالله بتوانيم با الهامگيري از نظرات سازنده شما دوستان عزيز، اين بخش را پربارتر كنيم.
در اين جلسه هم بحث برنامه نويسي زبان C را دنبال ميكنيم و در ادامهي مبحث جلسهي قبل، شما را با 2 ساختار كنترلي ديگر آشنا ميكنيم.
ابتدا يك نكتهي ديگر در مورد ساختار if() و else:
الزامي براي نوشتن قسمت else نيست، يعني ميتوان فقط if را بدون داشتن else استفاده كرد. همانطور كه ميدانيد، از else زماني استفاده ميكنيم كه بخواهيم در صورت نادرست بودن شروط ، دستورات مشخصي اجرا شوند(به جلسهي 31 مراجعه شود)
ساختار while():
عملكرد اين ساختار به اين صورت است كه ما شرط يا شروطي را براي آن تعريف ميكنيم و تا زمانيكه اين شرط يا شروط برقرار باشند، دستوراتي كه تعيين ميكنيم دائماً اجرا شوند و مكرراً تا زمانيكه شروط برقرار هستند اين دستورات تكرار ميشوند.
اين ساختار به صورت زير نوشته ميشود.
while( شرط يا شروط )
{
دستور1 ;
دستور2 ;
دستور3 ;
…
}
دستورات 1 تا 3 و كلاً هر دستوري كه در قسمت مشخص شده نوشته شده باشد، مكرراً تازمانيكه شروط داخل پرانتز برقرار باشند اجرا ميشوند.
نكات مهم در مورد اين ساختار:
تمام نكاتي كه در مورد ساختار else-if در جلسهي گذشته مطرح كرديم در مورد سختار while هم صادق هستند.
همانطور كه قبلاً هم گفته شد، زبان C يك زبان "Case Sensitive" است، يعني در اين زبان بين حروف بزرگ و كوچك تفاوت است. while، if، else همگي با حروف كوچك نوشته ميشوند و اگر با حروف بزرگ نوشته شوند كار نميكنند.
همانطور كه قبلاً گفته شد، دستور while(1) يك حلقهي بي نهايت است و دستورات داخل آن تا زمانيكه ميكروكنترلر روشن باشد مكرراً اجرا خواهند شد.
در ادامهي اين جلسه قصد داريم يكي از مهمترين و پركاربردترين قابليتهاي ميكروكنترلر ATmega16 به نام ADC يا همان A to D را معرفي كنيم.
ریپورتر
8th May 2009, 08:09 PM
ADC چيست؟
ADC مخفف "Analog-Digital Converter" و به معناي مبدل آنالوگ به ديجيتالاست.
اگر بخواهيم اين قابليت را به صورت ساده توصيف كنيم، يك ولت متر ديجيتال است كه بر روي پايههاي ميكروكنترلر نصب شده است و به وسيلهي آن ميتوان ولتاژ پايههاي ورودي را با دقت مناسبي اندازهگيري كرد. همانطور كه ميدانيد ما تا به حال در هيچ آي سي نميتوانستيم شدت ولتاژ ورودي را به دقت اندازه گيري كنيم و فقط ميتوانستيم بدانيم آيا ولتاژ ورودي بالاي 2.5 ولت است يا زير 2.5 ولت، و وروديهايمان را به صورت 0 و 1 برسي ميكرديم.(آي سي ها وروديهاي خود را منطقي ميكنند)
اما به كمك اين قابليتِ ميكروكنترلرهايِ خانوادهي AVR، ما ميتوانيم با دقت مناسبي ولتاژ ورودي خود را بررسي كنيم.
يكي از كاربردهاي مهم ADC ميتواند در رباتهاي امدادگر دانشاموزي براي تشخيص رنگ باشد. همانطور كه ميدانيد هر رنگ، ميزان مشخصي از نور را بازتاب ميدهد و بقيه را جذب ميكند، ما با اندازهگيري مقدار نور بازتاب شده، ميتوانيم رنگ را تشخيص دهيم. در اينجا ما براي اندازهگيري ميزان شدت نور بازتاب شده، بايد از ADC ميكروكنترلر استفاده كنيم تا بتوانيم ولتاژ خروجي سنسور نوري خود را به دقت اندازهگيري كنيم.
ADC يكي از مهمترين و پر كاربردترين قابليتهاي ميكروكنترلرهاي خانوادهي AVR است كه به تدريج با كاربردهاي فراوان آن در بخشهاي مختلف آشنا خواهيد شد.
در اين جلسه ما نحوهي انجام تنظيمات اوليهي CodeWizard براي راهاندازي ADC را آموزش ميدهيم.
ابتدا CodeWizard را باز كرده و در آن، لبهي ADC را انتخاب ميكنيم، و در لبهي ADC، گزينهي "ADC Enabled" را تيك ميزنيم و سپس مانند شكل زير تنظيمات را انجام ميدهيد :
http://roshd.ir/Portals/0/0and1/Robotic2/ADC-Enabled.jpg
همانطور كه ميبينيد، دومين قسمتي كه تيك زده شده "Use 8 bits" است.در ادامه در مورد دليل اين كار توضيح داده شده است.
همانطور كه گفته شد، وظيفهي ADC، اندازه گيري ولتاژي است كه بر روي پايهي ورودي قرار گرفته است. اما ADC عددي را كه مولتي متر به ما نشان ميدهد گزارش نميكند، بلكه متناسب با ولتاژ پايهي ورودي، عددي را در بازهي 0 تا 255 به ما گزارش ميكند. يعني عدد 0 را به ولتاژ 0ولت اختصاص ميدهد، و 255 را به 5 ولت؛ و هر ولتاژي بين 0 تا 5 ولت را، متناسباً، با عددي بين 0 تا 255 گزارش ميكند. در حقيقت براي سهولت در محاسبه، مي توانيد فرض كنيد اندازهي ولتاژ ورودي بر حسب ولت، ضربدر 51، برابرست با عددي كه ADC براي آن ولتاژ مشخص، به ما گزارش ميكند.
به عنوان مثالي ديگر، اگر خروجي مدار يك سنسور نوري را به پايهي ورودي ADC متصل كرده باشيد، و خروجي مدار سنسور 2 ولت باشد،ADC عدد 102 را به ما گزارش ميكند.
اگر تيكِ گزينهي "Use 8 bits" را برداريم، بازهي ما به 0 تا 1024، گشترش پيدا خواهد كرد و در حقيقت دقت اندازهگيري ما 4 برابر خواهد شد. يعني 5 ولت ما، به جاي 255، با عدد 1024 گزارش خواهد شد، و ولتاژهاي بين 0 و 5 ولت نيز متناسباً با عددي بين 0 تا 1024 گزارش خواهند شد. اما در كارهاي ما نيازي به اين دقت بالا نيست و معمولاً "Use 8 bits" را تيك ميزنيم تا بازهي ما بين 0 تا 255 باشد.
دربارهي تنظيمات ADC مطالب زيادي وجود دارد كه ما از مطرح كردن تمام آنها در اين بخش ميپرهيزيم، دوستاني كه علاقهمند هستند، ميتوانند از طريق كتابهاي مرجع و ديگر مراجع موجود، مطلب را پي بگيرند، اما در همين حدي كه مطالب در اينجا مطرح ميشوند، براي كار ما تقريباً كافيست و الزامي در مطالعهي منابع جانبي نيست.
ریپورتر
8th June 2009, 08:25 PM
در جلسه ی گذشته در مورد ساختار ADC یا همان مبدل آنالوگ به دیجیتال توضیحات مفصل داده شد. در این جلسه، نحوه ی استفاده از ADC در برنامه را توضیح خواهیم داد.
در میکرو کنترلر ATMEGA16، 8 پایه ی به ADC اختصاص داده شده، یعنی شما می توانید به صورت همزمان، خروجیِ 8 سنسور یا مدار جانبی را به میکروکنترلر خود وصل کنید و اطلاعات آن ها را به وسیله ی ADC دریافت کنید.
اما این 8 پایه کدام پایه ها هستند؟ این 8 پایه، پایه مربوط به پورت A هستند که با فعال کردن ADC در CodeWizard، این پایه ها در اختیار ADC قرار می گیرند. دقت کنید که برای استفده از ADC حتماً باید قبلاً تنظیمات را در CodeWizard انجام داده باشید.
این 8 پایه طبق شکل زیر از ADC0 تا ADC7 نام گذاری شده اند.
http://roshd.ir/Portals/0/0and1/Robotic2/ATMEGA16_pinouts.GIF
چگونه از ADC در برنامه استفاده کنیم؟هنگامیکه شما تنظیمات اولیه را برای فعال سازی ADC در CodeWizard انجام می دهید، به شما این امکان داده می شود که در هر قسمت از برنامه، مقدار هر یک از 8 ADC را بخوانید و از آن استفاده کنید. عبارت" (شماره ي ADC )read_adc " در هر قسمت از برنامه، حاوي مقدار ADC مورد نظر شماست. مثلاً اگر بخواهيم مقدار ADC0 را بررسي كنيم كه آيا از 100 بزرگتر است يا خير، به شكل زير عمل ميكنيم:
if(read_adc(0) > 100)
يا مثلاً اگر بخواهيم مقدار ADC1 را در داخل يك متغير نگه داري كنيم، به شكل زير عمل مي كنيم:
int a;
a= read_adc(1);
مبدل آنالوگ به ديجيتال، يكي از مهمترين قابليتهايست كه اكثر ميكروكنترلرهاي خانوادهي AVR آن را دارند. در ميكروكنترلرهاي قديميتر، براي اين كار، بايد يك آي سي به صورت جداگانه بر روي مدار تعبيه ميشد.
در جلسهي آينده مبحث بسيار مهم PWM را شروع خواهيم كرد. به وسيلهي اين قابليت بسيار مهم،ما ميتوانيم سرعت موتورها يا هر المان ديگري كه به ميكروكنترلر متصل ميشود را كنترل كنيم. PWM نيز يكي از قابليتهاي مهم خانوادهي AVR است كه در جلسات آينده مفصلاً به آن خواهيم پرداخت.
ریپورتر
8th June 2009, 08:26 PM
ما قبل از شروع بحث PWM در AVR، ابتدا كمي به قسمتهاي مكانيكي ربات ميپردازيم.
شاسي ربات
شاسي در رباتهاي مختلف بسته به كاربري ربات، ممكن است از جنسهاي مختلفي باشد كه محدود به چند نوع فلز يا آلياژ خاص نيست، اما به طور معمول در رباتهاي مسابقاتي دانشآموزي معمولاً شاسي رباتها را از جنسهاي پلكسي گلاس، صفحهي آلمينيوم و يا MDF ميسازند.
جهت آشنايي دوستان با اين انواع در مورد هر كدام توضيح مختصري بيان ميشود.
پلكسي گلاس:
نوعي پلاستيك فشرده است كه نسبت به حجمش استحكام خوبي دارد. همچنين نسبت به فلزات وزن بسيار كمتري دارد. نوع بي رنگ آن كاملاً شبيه شيشه است، اما بسيار سبكتر از آن است. همچنين مانند شيشه در ضخامتهاي مختلفي در بازار موجود است. شكننده است و مانند فلزات انعطاف پذيري ندارد. تنها راه براي انعطاف دادن به آن اعمال حرارت بالا توسط آتش مستقيم يا ... است. براي بريدن آن ميتوان از اره مويي استفاده كرد، اما راه بهتر و راحتتر، استفاده از كاتِر مخصوص پلكسي گلاس است. از همان جايي كه پلكسي گلاس را تهيه ميكنيد، ميتوانيد كاتِر مخصوص آن را هم تهيه كنيد. چگونگي استفاده از آن را هم از فروشنده سوال كنيد.
پلكسي گلاس در ضخامتهاي مختلف موجود است. براي ربات مين ياب يا مسيرياب ضخامت 4 يا 5 ميليمتر مناسب است.
ميتوان از پلكسي گلاس مشكي يا دودي هم استفاده كرد كه موجب زيبايي بيشتر ربات ميشود.
MDF
ممكن است بسياري از دوستان با اين نوع آشنايي داشته باشند،زيرا در تهيهي كابينت ، كمد و بسياري از اساس منزل استفاده ميشود. اين نوع، از تركيب برادههاي چوب با نوعي چسب توليد ميشود(مشابه نئوپان) و نسبت به چوبهاي معمولي استحكام بيشتري دارد. هيچگونه انعطافي ندارد، و ميتوان با اره برقي و معمولي آن را بريد.
MDF در ضخامتهاي مختلفي وجود دارد كه طبيعتاً هرچه ضخامت آن بيشتر باشد،استحكام و وزن آن نيز بالاتر ميرود.
MDF 8 ميليمتري براي شاسي رباتهاي مسيرياب پيشرفته و آتش نشان مناسب است، زيرا براي ساخت اين رباتها محدوديت زيادي براي حجم نداريم، و استحكام بسيار خوبي هم دارد.
با اينكه تقريباً پلكسي گلاس از هر نظر از MDF مناسبتر است، اما كمي هم از MDF پرهزينه تر است و به همين خاطر MDF هنوز كاربرد زيادي در ساخت رباتها دارد.
صفحهي آلمينيومي
در رباتهاي فوتباليست دانشاموزي، به دليل برخوردهاي شديدي كه گاهاً ممكن است بين رباتها پيش آيد و فشاري كه به بدنهي ربات وارد ميشود،معمولاً شاسي ربات را از جنس صفحهي آلمينيوم 2 يا 3 ميليمتري ميسازند، اين امر موجب استحكام بسيار بالاي بدنه ميشود.MDF نيز استحكام مناسبي دارد، اما از لحاظ حجمي، حجم صفحههاي فلزي بسيار كمتر از MDFاست.تنها ايراد صفحهي آلمينيوم، وزن زياد آن است ممكن است كار را دچار مشكل كند، از اين رو دوستان بايد در استفاده از آن دقت لازم را داشته باشند.
چگونه موتورها را به بدنه متصل كنيم؟
چند راه براي اتصال موتورها به بدنهي ربات وجود دارد. يكي از سادهترين و سريعترين روشها براي اتصال موتورهاي گيربكس دار به بدنه ، استفاده از بَست ديواركوب لولهي آب است. به شكل زير دقت كنيد.
http://roshd.ir/Portals/0/0and1/Robotic2/motor1.jpg
گيربكس چيست و چه كاربردي در ساخت ربات دارد؟
براي سرعت موتور كميتي به نام rpm يا "دور بر دقيقه" تعريف ميشود كه اين كميت، تعداد چرخش شفت موتور را در مدت يك دقيقه نشان ميدهد.موتورهاي عادي بدون گيربكس rpm بالا و قدرت كمي دارند. rpm بالا موجب بالا رفتن سرعت ربات ميشود. قدرت كم و سرعت زياد،در مجموع موجب غير قابل كنترل شدن ربات ميشود و هدايت ربات را دچار مشكل ميكند.
با اتصال يك گيربكس يا چرخدنده به شفت موتور، ميتوان سرعت موتور را پايين آورد و قدرت آن را بالا برد. گيربكسي در تصوير بالا روي موتور نصب شده است، سرعت موتور را تا 16/1 پاييين آورده است و سرعت نهايي موتور را به 330 rpm رسانده است.(در تصوير بالا گيربكس زير بَست قرار گرفته است). در اين موتور، سرعت شفت موتور قبل از اتصال به گيربكس 5280 rpm بوده است. اين سرعت براي يك ربات مسير ياب مقدماتي بسيار بالاست. سرعت موتور رباتهاي ما بايد زير 200 rpm باشند.
تمام اطلاعات مربوط به موتور را معمولاً شركتهاي معتبر موتورسازي بر روي بدنهي موتور مينويسند.
انواع موتورهاي گيربكسدار با سرعتها و قدرتهاي مختلف در حال حاضر در بازار موجود است. يكي از راههاي ارزان براي تهيهي اين موتورهاي گيربكس دار،براي پروژههاي ساده، استفاده از موتور ماشين اسباببازيهاي ارزان قيمت ساخت چين است. قيمت اين ماشينها زير 2000 تومان بوده و از هر اسباب بازي ميتوان يك موتور و گيربكس را به همراه چرخ آن استخراج كرد. به شكل نگاه كنيد.
http://roshd.ir/Portals/0/0and1/Robotic2/gearbox.jpg
در جلسهي آينده به مبحث ميكروكنترلر برميگرديم و نحوهي كنترل سرعت موتورها را از طريق PWM در ميكروكنترلرهاي خانوادهي AVR بررسي ميكنيم.
ریپورتر
8th June 2009, 08:27 PM
در اين جلسه به مبحث ميكروكنترلر برميگرديم و در مورد PWM و كاربردهاي آن در ساخت ربات توضيح خواهيم داد.
PWM چيست؟
در بسياري از موارد، ما نياز به كنترل ولتاژ بر روي پايههاي خروجي ميكروكنترلر را داريم. مثلاً اگر بخواهيم سرعت موتور را كنترل كنيم، بايد ولتاژي كه بر روي موتور اعمال ميشود را كنترل كرد. در حقيقت سرعت موتور تقريباًً تابع مستقيمي از ولتاژي است كه بر روي آن اعمال ميشود. يعني اگر ولتاژ كاريِ موتوري (ولتاژ استاندارد براي فعال سازي موتور كه بر روي بدنهي آن نوشته ميشود) 12 ولت باشد، با اعمال ولتاژ 6 ولت روي آن، ميتوانيد سرعت چرخش آن(rpm) را حدوداً به نصف كاهش دهيد.
كنترل سرعت ربات، در همهي سطوح رباتيك اهميت بسيار زيادي دارد، از رباتهاي مسيرياب ساده گرفته تا رباتهاي فوتباليست. ما تا كنون ياد گرفتهايم كه چگونه ميتوان به موتور دستور حركت يا توقف داد، اما راهي براي كنترل سرعت موتور ياد نگرفتهايم.
يادآوري
همانطور كه ميدانيد سطح ولتاژ پايههاي خروجي ميكروكنترلر منطقي است، يعني يك پايهاي كه براي كنترل موتور ربات استفاده ميشود فقط ميتواند 0 يا 1 باشد. ما 2 پايه از ميكروكنترلر را به حركت ربات اختصاص ميدهيم، براي صدور دستور حركت، بايد يك پايه را 0 و پايهي ديگر را 1 كنيم، در اين حالت بين 2 پايهي موتور اختلاف پتانسيل برقرار ميشود و حركت ميكند. اگر هم بخواهيم موتور معكوس بچرخد، بايد پايهاي كه 1 بود 0 ، و پايهاي كه 0 بود را 1 كنيم؛ و براي توقف موتور، بايد هر دو پايه را 0 يا هر دو پايه را 1 كنيم (تا بين 2 پايهي موتور اختلاف پتانسيل 0 ولت باشد). در نتيجه در حالت عادي ما فقط 2 فرمان "حركت" و "توقف" را ميتوانيم به موتورها بدهيم، و ما هيچ كنترلي بر روي سرعت موتور نداريم.
PWM تكنيكي است كه به كمك آن ميتوانيم ولتاژ پايههاي خروجي ميكروكنترلر، و در نتيجه سرعت موتور يا ساير قطعات جانبي كه به ميكروكنترلر متصل ميشود را كنترل كنيم.
PWM
PWM مخفف واژهي Pulse Width Modulation و به معناي "مدولاسيون پهناي پالس" است. همانطور كه گفتيم PWM تكنيكي براي كنترل ولتاژِ پايهي خروجي است. حال ببينيم چگونه با اين تكنيك ميتوان ولتاژ خروجي را كنترل كرد.
ميدانيم كه ولتاژ در پايههاي خروجي ميكروكنترلر يا 0 است يا 5 ولت، اما براي كنترل سرعت موتور، بايد بتوانيم حداقل ولتاژ يكي از پايهها را بين 0 تا 5 تغيير دهيم. PWM روشي است تا ما بتوانيم با استفاده از همين پايهي خروجي معمولي، به نوعي ولتاژ را بين 0 تا 5 ولت تغيير دهيم.
در اين روش، ما با سرعت بالايي سطح ولتاژ خروجي را 0 و بلافاصله 1 ميكنيم(مثلاً هزار بار در ثانيه)، نمودار ولتاژ خروجي بر حسب زمان به شكل زير ميشود.
http://roshd.ir/Portals/0/0and1/Robotic2/50preH.jpg
نمودار بالا ولتاژ خروجي اين پايه بر حسب زمان است.
در شكل بالا جمع 2 بازهاي كه با فلشهاي 2طرفه نشان داده شده است، (به عنوان مثال) 10 ميكرو ثانيه است. كه 5ميكرو ثانيه خروجي 1 و سپس 5ميكرو ثانيه 0 ميشود. اما همانطور كه گفته شد، اين عمل هزاران بار در ثانيه تكرار ميشود، اما آيا موتور نيز به همين تعداد در ثانيه روشن و خاموش ميشود؟
جواب منفيست، اتفاقي كه روي ميدهد اين است كه موتور، اين موج را در درون خود به نوعي ميانگين گيري ميكند و در حقيقت آنرا به شكل زير مي بيند:
http://roshd.ir/Portals/0/0and1/Robotic2/AVE-50preH.jpg
يعني در واقع موتور اين موج را به صورت يك ولتاژ 2.5 ولت معمولي دريافت ميكند.
به همين ترتيب ميتوان هر ولتاژي بين 0 تا 5 ولت را بر روي خروجي مورد نظر ايجاد كرد. اگر بخواهيم ولتاژي بالاتر از 2.5 ولت داشته باشيم، بايد طول بازههاي زمانياي كه خروجي 1 است را نسبت به بازههايي كه خروجي 0 است بيشتر كنيم. به عنوان مثال براي ايجاد ولتاژ 2.5 ولت، بايد 5 ميكرو ثانيه سطح ولتاژ خروجي 1 باشد، سپس 5 ميكرو ثانيه سطح ولتاژ 0 شود تا موجي به شكل بالا ايجاد شود.
يا به عنوان مثالي ديگر، اگر بخواهيم در خروجي ولتاژ 4 ولت داشته باشيم، بايد بايد 8 ميكرو ثانيه سطح ولتاژ خروجي 1 باشد، سپس 2 ميكرو ثانيه سطح ولتاژ 0 شود، تا ولتاژ پايهي خروجي مورد نظر 4 ولت باشد.
در حقيقت ولتاژ خروجي از رابطهي سادهي زير به دست ميايد:
(طول بازهاي كه خروجي 0 است) / ( طول بازهاي كه خروجي 1 است)
پس طبق رابطهي بالا،براي ايجاد ولتاژ 4 ولت، ميتوان به جاي استفاده از بازههاي 8 و 2 ميكرو ثانيهاي، از بازههاي 4 و 1 ميكرو ثانيهاي استفاده كرد. (يعني 4ميكرو ثانيه 5ولت، 1 ميكرو ثانيه 0 ولت) زيرا: 2÷ 8 = 1÷4
نمودار ولتاژهاي 4 ولت و 1 ولت در زير نشان داده شده است:
http://roshd.ir/Portals/0/0and1/Robotic2/80preH.jpghttp://roshd.ir/Portals/0/0and1/Robotic2/20preH.jpg
نمودار نحوهي توليد ولتاژ 4 ولت با تكنيك PWM.
نمودار نحوهي توليد ولتاژ 1 ولت با تكنيك PWM.
حال ببينيم چگونه ميتوان برنامهاي نوشت تا بر روي پايهاي دلخواه از ميكروكنترلر PWM ي براي ولتاژ 4 ولت ايجاد كرد.
هر دستوري كه بر روي خروجيهاي ميكروكنترلر قرار ميگيرد، تا زماني كه دستور بعدي، خروجي را تغيير ندهد، آن خروجي تغييري نخواهد كرد. يعني مثلاً زماني كه پايهاي را 1 ميكنيم، تا زمانيكه با دستور ديگري آن پايه را 0 كنيم، مقدار خروجي آن پايه 1 خواهد ماند. به اين عمل اصطلاحاً Latch كردن ميگويند. ميكروكنترلر همواره اطلاعاتي كه بر روي خروجي قرار ميدهد را Latch ميكند و تا زمانيكه اطلاعات جديد بر روي پايه قرار نگيرد، اطلاعات قبلي را تغيير نميدهد.
در نتيجه، مثلاً اگر ميخواهيم پايهاي را 5 ميكروثانيه 1 وسپس 0 كنيم، كافيست پايهي مورد نظر را 1 كنيم و 5ميلي ثانيه در برنامه تاخير ايجاد كنيم و سپس پايهي مورد نظر را 0 كنيم.
پس وقتي مي خواهيم مثلاَ بر روي پايهي B.4 ، يك PWM براي ولتاژ 2.5 ولت ايجاد كنيم، بايد به شكل زير عمل كنيم.
while(1)
{
PORTB.4=1;
5 ميكرو ثانيه تاخير
PORTB.4=0;
5 ميكرو ثانيه تاخير
}
در بالا يك حلقهي بينهايت تعريف شده است كه بر روي پايهيB.4، يك PWM براي 2.5 ولت ايجاد ميكند.
در جلسهي آينده با توابعي كه براي ايجاد تاخير (delay) در برنامه استفاده ميشوند آشنا خواهيد شد. همچنين ميآموزيد كه چگونه ميتوان از PWM ميكروكنترلرهاي خانوادهي AVR استفاده كنيد.
اگر مطالب اين جلسه كمي پيچيده به نظر ميرسند جاي نگراني نيست، زيرا مبحث PWM مبحث گستردهايست و كاربردهاي زيادي در صنعت دارد و فقط محدود به ميكروكنترلر هم نميشود. پس طبيعيست كه سطح مطالب كمي بالا باشد و دوستان نيز گاهاً در درك مفاهيم دچار مشكل شوند
ریپورتر
8th June 2009, 08:28 PM
در اين جلسه نيز مبحث PWM را دنبال ميكنيم. عزيزان براي درك مطالب اين جلسه حتماً بايد جلسهي قبل را مطالعه كرده باشند. در اين جلسه به آيسي L298 نيز اشاراتي شده است كه دوستان ميتوانند جهت ياداوري، بخش مربوط به L298 در جلسهي 17 (http://roshd.ir/Roshd/Default.aspx?tabid=443&EntryID=1391)را نيز مرور كنند.
ابتدا با توابعي كه براي ايجاد وقفه در اجراي دستورات برنامه توسط CodeVision براي كاربران در نظر گرفته شده آشنا ميشويم.
همانطور كه در جلسهي پيش ديديم، در قسمتهايي از برنامه ممكن است نياز پيدا كنيم تا براي لحظاتي روند اجراي دستورات را متوقف كنيم. CodeVision براي اين كار توابعي را از پيش تنظيم كرده است. (در مورد مبحث «توابع» در زبان C در آينده مفصل توضيح خواهيم داد.)
delay
براي ايجاد تاخير در روند اجراي دستورات، CodeVision دو تابع زير را در اختيار ما قرار داده است.
delay_ms( );
delay_us( );
تابع ()delay_ms براي ايجاد تاخيرهايي در حد ميلي ثانيه به كار ميرود. در داخل پرانتز، يك عدد صحيح مثبت مينويسيم كه نشان دهندهي اندازهي تاخير مورد نيز ما بر حسب ميلي ثانيه است. به بيان سادهتر، مثلاً اگر داخل پرانتز عدد 100 را بنويسيم، روند اجراي برنامه به اندازهي 100 ميلي ثانيه در همان خط متوقف خواهد شد.
تابع ()delay_us براي ايجاد تاخيرهايي در حد ميكروثانيه به كار ميرود. نحوهي استفاده از آن دقيقاً مانند ()delay_ms است.
به عنوان يك مثال عملي،همان برنامهي ايجاد PWM 2.5 ولت را با استفاده از توابع delay بازنويسي ميكنيم.
while(1)
{
PORTB.4=1;
delay_ms(5); // 5 milliseconds delay
PORTB.4=0;
delay_ms(5); //5 milliseconds delay
}
تنها نكتهي بسيار مهم در استفاده از توابع delay اضافه كردن هِدِرفايل Header file باعنوان delay.h به برنامه است.( در مورد هدر فايلها هم در آينده توضيح خواهيم داد، اما در اين جلسه هيچ توضيحي در مورد آن نميدهيم تا از بحث اصلي يعني PWM منحرف نشويم.) براي اين كار، جمله
http://roshd.ir/Portals/0/0and1/Robotic2/incmega16.JPG
كه اولين جملهي برنامهي شما است را پيدا كنيد. (اين جمله را CodeWizard در برنامهي شما نوشته است). حال كافيست اين جمله را درست زير ان تايپ كنيد:
http://roshd.ir/Portals/0/0and1/Robotic2/incdelay.JPG
دقت كنيد كه اين دستور نيازي به « ; » ندارد !!
با آموختن تابع delay، ديگر شما ميتوانيد هر ولتاژي را كه ميخواهيد بر روي پايههاي خروجي ايجاد كنيد. البته دوستان دقت داشته باشند كه ولتاژي كه با تكنيك PWM شبيه سازي ميشوند، در حقيقت ولتاژ خاصي نيستند و فقط شبيه سازي شدهي ولتاژهاي مختلف هستند. هرچند كه در راهاندازي موتورها اين تكنيك بسيار كارآمد است، اما بايد دقت نظر لازم را در استفاده از اين تكنيك در ساير موارد را داشته باشيد.
همانطور كه ميدانيد موتورهاي متعارفي كه براي ساخت رباتها استفاده ميشود،ممكن است ولتاژهاي كاري مختلفي داشته باشند (مثلاً 12ولت، 24 ولت، 6 ولت و ...) و براي راهاندازي آنها بايد از درايورهاي موتور مثل L298 استفاده كنيم. سوالي كه ممكن است پيش آيد اين است كه وقتي ما ميكروكنترلر را به درايورهاي موتور(مثل L298) وصل ميكنيم و از تكنيك PWM براي كنترل سرعت موتور استفاده ميكنيم، چه وضعيتي پيش ميآيد؟ مثلاً وقتي ما PWM مربوط به ولتاژ 2.5 ولت را توليد ميكنيم، درايور ما چه عكس العملي نشان ميدهد؟ آيا ولتاژ 2.5 ولت بر روي پايههاي موتور قرار ميگيرد؟
براي پاسخ دادن به اين سوال بايد به ساختار PWM دقت كنيم، ما وقتي PWM مربوط به 2.5 ولت را توليد ميكنيم، در حقيقت سطح ولتاژ خروجي را با فواصل زماني برابر 0 و 1 ميكنيم، پس اگر اين خروجي را، به ورودي L298 وصل كنيم(مثلاً پايهي 7)، L298 نيز موتور را با همين الگو كنترل ميكند و ولتاژي كه به موتور ميدهد را 0 و 1 ميكند. و همانطور كه ميدانيد، L298 هر ولتاژي كه بر روي پايهي شمارهي 4 آن قرار گرفته باشد را بر روي موتور قرار ميدهد(اگر ولتاژ كاري موتور 12 ولت باشد، بايد اين پايه به 12 ولت متصل شود) . پس جواب سوال بالا منفيست!!! وقتي ما PWM مربوط به 2.5 ولت را توليد ميكنيم، در حقيقت سطح ولتاژ خروجي در 50 درصد زمان 1 و بقيهي زمان 0 است. پس اگر همان طور كه در بالا اشاره شد، اين PWM به درايوري مثل L298 داده شود، و ولتاژ پايهي 4 ِ آن 12ولت باشد، درايور، ولتاژ 6 ولت را به موتور ميدهد. در نتيجه اهميتي ندارد چه ولتاژي بر روي پايهي 4 ِ L298 قرار گرفته باشد، وقتي كه ما PWM مربوط به 2.5 ولت را توليد ميكنيم، درايور ولتاژي كه به موتور ميدهد را 50 درصد ميكند. در نتيجه بهتر است از اين به بعد به جاي آن كه بگوييم PWM مربوط به 2.5 ولت، بگوييم PWMااا50 درصد. يا به جاي PWM ِمربوط به 1 ولت، بگوييم PWMااا20 درصد
PWM در ميكروكنترلرهاي AVR
انجام تنظيمات اوليه براي استفاده از PWM براي راه اندازي موتور درميكروكنترلرهاي AVR كمي پيچيده است، اما در اينجا هم CodeWizard به كمك ما آمده است و كار را كمي سادهتر كرده است. ما در جلسهي آينده بخشي از تنظيمات CodeWizard را بدون توضيح مطرح مينماييم، زيرا توضيح هر بخش از آن نيازمند مقدمات مفصلي است و تاثير چنداني هم در روند كار ما ندارد، اما به دوستاني كه ميخواهند ميكروكنترلر را كاملاً حرفهاي دنبال كنند، پيشنهاد ميكنم از منابعي كه قبلاً معرفي شده است، مطالب را تكميل كنند.
به هر حال دوستان عزيز با انجام اين تنظيمات اوليهي مختصر در CodeWizard، ميتوانند از الگويي به مراتب سادهتر از آنچه تا به حال آموختهايم، براي ايجاد PWM براي هدايت موتورهاي ربات استفاده نمايند.
در ميكروكنترلرهاي خانوادهي AVR، نيازي نيست در هربار استفاده از PWM ، چندين خط برنامه بنويسيم. در ATmega16 چهارپايهي مشخص از آي سي به اين موضوع اختصاص داده شده است. يعني اين چهارپايه علاوه بر كاربردهاي معمولي خود، اين قابليت را دارند كه در مواقع لزوم براي توليد PWM استفاده شوند.
حال سوال اينجاست كه اين چهارپايه چه تفاوتي با بقيهي پايههاي خروجي آيسي دارند كه آنها را از ساير پايههاي خروجي ميكروكنترلر متمايز ميسازد؟
براي اين چهارپايه نيازي به اجراي الگويي كه تا به حال براي ايجاد PWM فراگرفتهايد نيست. در اين روش، فقط شما بايد يك عدد صحيح بين 0 تا 255 انتخاب كنيد، و طبق الگوي زير آن را در برنامهي خود بنويسيد.
يك عدد صحيح بين 0 تا 255 = نام رجيستر مربوطه ;
اين عدد، بيانگر توان PWM شماست، و شما توان PWM ِ مورد نياز خود را با اين عدد مشخص ميكنيد. كه 255 بالاترين توان و مربوط بهPWMااا100 درصداست، و 0 پايينترين توان و مربوط به PWMااا0 درصد است.
به عنوان مثال اگر اين عدد را 128 قرار دهيد، همان PWMااا50 درصد را ايجاد كردهايد. يا مثلا اگر اين عدد 51 باشد، PWMااا20 درصد بر روي پايه قرار دادهايد.
رجيسترهاي مربوط به اين 4 پايه
همانطور كه ميدانيد، براي پايههايي كه در CodeWizard به صورت خروجي تعريف شدهاند، رجيستري به نام «PORTx» وجود دارد كه هر مقداري در اين رجيستر قرار داده شود، مقدار پايههاي خروجي متناظر با آن رجيستر را مشخص ميكند.(رجوع به جلسهي 24،تعريف رجيستر PORTx).
در اين جلسه با 4 رجيستر ديگر آشنا ميشويم، كه وقتي تنظيمات مربوط به PWM ِ موتور در CodeWizard را انجام دهيم، هر مقداري كه در آنها ريخته شود، توان PWM پايهي متناظر را مشخص ميكنند.
اين رجيسترها OCR0، OCR1AL، OCR1BL و OCR2 نام دارند كه به ترتيب، متناظر پايههاي PB.3، PD.5، PD.4 و PD.7 هستند.
پس مثلاً اگر در بخشي از برنامهي خود بنويسيم :
OCR0=127;
در حقيقت بر روي پايهي PB.3 ميكروكنترلر، PWMااا50-درصد به وجود آوردهايم.
به مثالهاي ديگري توجه كنيد: (توضيح هر دستور در جلوي دستور و بعد از // آورده شده است)
OCR1AL=51; // 20% Duty Cycle on PD.5
OCR1BL=255; //100% Duty Cycle on PD.4
OCR2=0; //0% Duty Cycle on PD.7
در جلسهي آينده، در مورد نحوهي انجام تنظيمات اوليه جهت توليد PWM در CodeWizard را توضيح خواهيم داد.
ریپورتر
8th June 2009, 08:29 PM
با عرض سلام خدمت دوستان عزيزم
در اين جلسه، با توضيح در مورد نحوهي انجام تنظيمات اوليه در CodeWizard، مطلب راه اندازي موتورهاي ربات به كمك PWM را تكميل خواهيم كرد.
همانطور كه در جلسهي پيش هم متذكر شديم، در اينجا مجال نيست تا تمام مباحث مربوط به PWM و تايمرها را باز كنيم و مفصل به آنها بپردازيم، به همين خاطر در اين جلسه قسمتي از تنظيمات در CodeWizard را بدون توضيح آموزش ميدهيم.
براي انجام تنظيمات به كمك CodeWizard، ابتدا بايد طبق روندي كه در جلسهي 26 (http://roshd.ir/Default.aspx?tabid=443&EntryID=1391) توضيح داده شد، يك پروژهي جديد در CodeVision بسازيد.
پس از انجام تنظيمات ساير لبهها (مانند Ports، Chip و .... ) در CodeWizard، لبهي Timers را باز كنيد.
همانطور كه ميبينيد ميكروكنترلر ATmega16 داراي 3 تايمر مجزا است و ما براي توليد PWM بايد از اين تايمرها استفاده كنيم. تايمرها كاربردهاي متعددي دارند، و يكي از مهمترين مباحث در ميكروكنترلر هستند، ما هم در مورد تايمرها در جلسات آينده مفصل توضيح خواهيم داد. اما در اين جلسه فقط استفاده از تايمرها را براي ايجاد PWM براي كنترل موتورهاي ربات استفاده ميكنيم.
Timer0
Timer0 مربوط به رجيستر OCR0 است و بايد به شكل زير تنظيم شود.
http://roshd.ir/portals/0/0and1/robotic2/timer0.jpg
نكتهاي كه در مورد تنظيم هر 3 تايمر بايد رعايت شود، اين است كه در بخش "Clock Value" بايد پايينترين فركانس را انتخاب كنيد. در اين مورد توضيح مختصري ميدهم، ولي اگر عزيزان اين بند را متوجه نشوند اهميت زيادي ندارد: اندازهي فركانسي كه انتخاب ميكنيد در اين بخش، در حكم اندازهي همان Delayهايي است كه براي توليد PWM به صورت عادي (كه در ابتداي جلسهي قبل توضيح داديم) استفاده ميكنيم. يعني در حقيقت طول موج را در نمودار ولتاژ بر زمان تعيين ميكند. هر چه فركانس بالاتري را انتخاب كنيد، طول موج كمتر ميشود. در عمل ديده شده كه هر چه فركانس پايينتر باشد و در نتيجه طول موج بيشتر باشد، موتورها بهتر هدايت ميشوند. به همين خاطر در بالا گفته شد كه دوستان پايينترين فركانس را براي "Clock Value" انتخاب كنند.
Timer1
تايمر1 بايد به شكل زير تنظيم شود. دقت كنيد كه ممكن است در بخش Clock Value شما فركانسي كه در شكل زير نمايش داده شده است را در گزينهها نداشته باشيد، ولي همانطور كه گفته شد فقط مهم اين است كه شما پايينترين فركانس را انتخاب كنيد.
http://roshd.ir/portals/0/0and1/robotic2/timer1.jpg
همانطور كه ميبينيد، تايمر1 داراي دو خروجي مجزا است كه رجيسترهاي مربوط به آنها OCR1AL و OCR1BL هستند.
Timer2
تايمر2 ميز به شكل زير تنظيم ميشود و مانند تايمر0 فقط يك خروجي دارد.
http://roshd.ir/portals/0/0and1/robotic2/timer2.jpg
Watchdog
يا سگ نگهبان نيز يكي از مباحث مربوط به تايمرهاست كه در جلسات آينده به آن خواهيم پرداخت.
حال كه همهي تنظيمات لازم را در CodeWizard انجام دادهايد، "Generate, Save and Exit" انتخاب كنيد و وارد فضاي برنامه نويسي شويد.
نكتهي بسيار مهم:
براي كنترل هر موتور، علاوه بر يك پايهي PWM، يك خروجي معمولي نيز لازم داريم تا بتوانيم به وسيلهي اين دو پايه و به كمك درايور موتور، اختلاف پتانسيل مورد نظر را بر روي دو پايهي موتور برقرار كنيم. اين 2 پايه را به دو پايهي ورودي L298 متصل ميكنيم و دو پايهي موتور را نيز، به دو پايهي خروجي L298 متصل ميكنيم. حال ميتوانيم موتور را به وسيلهي ميكروكنترلر با سرعت دلخواه كنترل كنيم. به عنوان مثال اگر بخواهيم موتور ما تقريباً با سرعت نصف بچرخد، و پايههاي PD.6 و PD.7 (مربوط به رجيستر OCR2) را به L298 متصل كرده باشيم،برنامهي زير را بايد بنويسيم:
OCR2=127;
PORTD.6=0;
و اگر بخواهيم موتور ما با همين سرعت و در جهت معكوس بچرخد، مينويسيم:
OCR2=127;
PORTD.6=1;
براي درك اين موضوع دقت كنيد كه در اين حالت چه ولتاژي توسط L298 بر روي موتورها قرار داده ميشود. همانطور كه ميدانيد، سرعت و جهت چرخش موتور وابسته به اختلاف ولتاژي است كه بر روي پايههاي موتور قرار داده ميشود.
تا به اينجا مباحث پايهاي در ميكروكنترلرهاي AVR مطرح شده است و همين آموختههاي دوستان، نيازهاي اوليهي شما عزيزان را براي ساخت رباتهاي نسبتاً حرفهاي برطرف ميسازد.
از اين به بعد، مطالب به با دامنهي گستردهتري پيرامون ساير مباحث مربوط به رباتيك،ارائه خواهد شد. در هر جلسه مطلب جديدي را مطرح كرده و در مورد آن توضيح ميدهيم و ديگر مطالب به شكل كنوني به صورت زنجيرهوار و وابسته به هم، نخواهند بود.
ریپورتر
8th June 2009, 08:30 PM
در اين جلسه در مورد كاربرد PWM در ساخت يك ربات مسيرياب حرفهاي توضيح ميدهيم.
در رباتهاي مسيرياب ساده كه در جلسه های قبل در مورد آن توضيح داديم، هنوز ميكروكنترلر وارد ربات ما نشده و تصميصماتي كه ربات ما براي يافتن خط ميگيريد بسيار مقدماتي هستند و ربات نميتواند مسيرهاي پيچيده را با سرعت مناسبي دنبال كند.
يكي از مهمترين فوايد استفاده از ميكروكنترلر در ساخت رباتهاي مسيرياب، استفاده از قابليت PWM براي هدايت موتورهاي ربات است. اما به چه صورت از PWM استفاده ميكنيم؟
http://roshd.ir/Portals/0/0and1/Robotic2/سنسورها%20وسط.GIF
به شكل بالا نگاه كنيد، در جلسهي نوزدهم گفتيم 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
}
&nبbsp; ; PORTD.6=0
; OCR2=255
; PORTD.3=0
; OCR1BL=255
{
منبع:www.roshd.ir (http://www.roshd.ir)
ریپورتر
5th July 2009, 10:52 AM
اين جلسه تصميم داريم شما را با ليگ رباتهاي مين ياب يا "Deminer" آشنا كنيم. اما اهميت اين رباتها چيست و اصولاً چرا چنين مسابقاتي برگزار ميشود؟
پاراگراف زير عيناً از دفترچهي قوانين مسابقات كشوري رباتهاي مين ياب در تبيين اهداف رباتهاي مينياب آورده شده است:
«بر اساس گزارشات موجود، ايران سومين كشور دنيا از لحاظ مينهاي دفن شده است. در طول 8 سال جنگ تحميلي عراق بر عليه ايران بالغ بر 16 ميليون مين در سرزمينهاي مرزي غرب و جنوب كشور كاشته شده است كه بعضاً به علت دورافتاده بودن و صعبالعبور بودن مناطق خنثي نشده باقي مانده و همه ساله افراد زيادي از بين مردم عادي و نظاميان قرباني ميكنند. استانهاي آذربايجان غربي، كرمانشاه، كردستان، ايلام و خوزستان، هنوز در معرض خطر انفجار مينهاي باقيمانده از بيست سال پيش هستند. كشف و خنثي سازي مينها كاري بسيار خطرناك و پرهزينه است. اين اميد وجود دارد كه رباتهاي مينياب بتوانند اين خطر را رفع نموده و تلفات انساني و هزينه مينيابي را كاهش دهند.»
http://roshd.ir/Portals/0/0and1/Robotic2/nemudar.JPG
اين پاراگراف به خوبي هدف از ساخت چنين رباتهايي را تبيين ميكند. اولين دورهي مسابقات رباتهاي مينياب در ايران، 6 سال پيش و توسط دانشگاه اميركبير برگزار شد، اما آن مسابقات در سالهاي بعد تداوم نيافت. اما مجدداً بعد از چند سال ليگ رباتهاي مينياب جايگاه خود را در بين ليگهاي مسابقاتي رباتيك ايران باز كرد و توانست به يكي از پر طرفدارترين ليگهاي رباتيك در ايران تبديل شود. در حال حاضر مسابقات متعددي ساليانه در اين ليگ برگزار ميشود كه معتبرترين آن هم مسابقات ملي رباتيك خوارزمي است كه آبان ما سال گذشته دورهي نخست آن برگزار شد.
هر چند كه اين ليگ توسط فداراسيون جهاني روبوكاپ به عنوان ليگ مسابقات جهاني شناخته نشده است، اما در تمامي مسابقات معتبري كه هر سال در كشور ما برگزار ميشود، نظير خوارزمي، IranOpen، موشهاي هوشمند، دانشگاه نوشيرواني بابل و... مسابقات در اين ليگ برگزار ميشود و طرفداران زيادي هم دارد.اين ليگ در 3 زير شاخهي زير برگزار ميشود:
1- رباتهاي مينياب خودكار
2- رباتهاي مينياب غيرخودكار(دستي)
3- رقابت فني
در اين جلسه بحث ما فقط در مورد رباتهاي مين ياب خودكار خواهد بود، در جلسات آينده، در مورد رباتهاي مين ياب غير خودكار و رقابت فني ليگ هم توضيح خواهيم داد.
اين ليگ جزو ليگهاي دانشجويي دسته بندي ميشود، اما به دليل عدم پيچيدگيهاي فنياي كه نسبت به ساير ليگهاي دانشجويي(مثل رباتهاي فوتباليستو ...) دارد، باعث شده تا اين ليگ در اكثر مسابقات داخلي پرشركت كنندهترين ليگهاي دانشجويي باشد. حتي در مسابقات امسال تيمهاي دانشآموزي حرفهاي هم در اين مسابقات شركت داشتند كه اتفاقاً موفق به كسب جايگاههاي مناسبي هم شدند.
در ادامه تشريح ميكنيم كه اين ربات چه وظايفي بر عهده دارد و در پيست مسابقه بايد چه عملي را انجام دهد.
يك ربات مين ياب، بايد قادر باشد تمامي مينهاي كارگذاري شده در يك ناحيهي مشخص را كشف و خنثي يا نابود سازد. اما شايد ساخت رباتي كه بتواند مينها را خنثي يا نابود سازد كار بسيار پيچيدهاي باشد، زيرا اين كار براي انسانها هم كار سادهاي نيست و نياز به قابليتهاي فيزيكي و هوشي بسيار بالايي دارد، و تا به حال رباتي با چنين قابليتهايي ساخته نشده است. پس اين بخش (يعني خنثي سازي مينها) از مسابقات حذف شده است و كار ربات مين ياب در زمين مسابقه به كشف مينها و تهيهي نقشهي ميدان مين بسنده شده است. ابتدا در مورد مشخصات زمين مسابقه و نحوهي كارگذاري مينها در اين زمين و سپس در مورد نحوهي كشف مينها توضيح ميدهيم و در نهايت هم به نقشهاي كه بايد از ميدان مين تهيه ميشود ميپردازيم.
زمين مسابقه
زمين مسابقه را هيئت داوري و كميتهي برگزاري هر مسابقه با توجه به امكانات و شرايط برگزار كنندهها طراحي ميكنند، پس طبيعي است كه زمين مسابقات مختلف با هم تفاوتهايي داشته باشد، اما تشابهاتي بين همهي آنها وجود دارد كه به آنها خواهيم پرداخت.
http://roshd.ir/Portals/0/0and1/Robotic2/زمين-مسابقه.JPG
شكل كلي زمين مسابقات مينياب به شكل بالاست. ابعاد زمين معمولاً در حدود 5×5 متر است و معمولاً در داخل زمين موانعي مكعب شكل با ابعاد گوناگون بين (20 تا 50 سانتي متر) قرار دارد. جنس زمين از گچ و خاك است و سعي شده است تا جاي امكان سطح آن مسطح و سفت باشد. مرزهاي زمين با نوارهايي سفيد رنگ (با پهناي حدوداً 30 سانتيمتر) مشخص شده و خارج از اين مرزها مين كاشته نشده است. مينها در زير اين زمين و با فاصلهي حدوداً 10سانتي متر از سطح آن كاشته شدهاند و جاي آنها را به جز تيم داوري هيچ فرد ديگري نميداند و در واقع كار اصلي اين رباتها اين است كه جاي مينها را با علايمي مشخص نشان دهند. اما رباتها چگونهدر اين زمين ميتوانند جاي مينها را پيدا كنند؟
http://roshd.ir/Portals/0/0and1/Robotic2/M409AP.JPG
http://roshd.ir/Portals/0/0and1/Robotic2/landmineun.jpg
كشف مين
همانطور كه در عكس بالا ميبينيد، يكي از پركاربردترين عناصر در مينها و كلاً تسليحات جنگي، فلزات هستند. اين مسئله اساس كار رباتهاي مينياب است، رباتهاي مين ياب به يك عدد سنسور فلزياب مجهز هستند كه ميتواند فلزات را تا فاصلهي معيني(حدوداً 20 سانتيمتر) در زير خاك نيز تشخيص دهند. در مسابقات هم به جاي مين واقعي، از يك عدد قوطي كنسرو ماهي استفاده شده است. كار اصلي ربات اين است كه اين سنسور را در تمام نقاط زمين حركت دهد و هرجا كه توسط سنسور، جاي مين (قوطي فلزي) را پيدا كرد، ربات بر روي آن نقطه 5 ثانيه توقف كند و يك LED قرمز را روشن كند، تا به اين وسيله به تيم داوري جاي مين را اعلام كند.
زمين مسابقه به مربعهاي 50×50 سانتيمتر تقسيم شده است، كه مينها در وسط بعضي از اين مربعها كارگذاري شده است. زمانيكه رباتي جاي يك مين را اعلام ميكند، داور با توجه به اين كه جاي مينها را مي داند، مشخص ميكند كه ربات جاي مين را درست تشخيص داده است يا خير، و امتياز هر مين را جداگانه محاسبه ميكند. امتياز نهايي هر تيم، بر حسب تعداد مينهاي درست كشف شده، زمان، و تعداد برخوردها با مانع و ديوارهها، طبق فرمول خاصي محاسبهميشود.در نهايت امتياز تهيهي نقشهي ميدان مين توسط ربات(كه امتياز زيادي هم هست) به اين امتيازات اضافه ميشود. اما نقشه چيست؟
نقشههاي مينها
رباتها بايد امكانات مكانيابياي در اختيار داشته باشند تا بتوانند به وسيلهي آنها مختصات دقيق مينها را مشخص كنند و در پايان مسابقه مختصات تمام مينهاي كشف شده را در اختيار كاربر قرار دهند. اين بخش تقريباً پيچيدهترين بخش ساخت يك ربات مينياب خودكار است، و تيمهاي محدودي اين قابليت را دارند كه از محل مينها نقشهاي تهيه كنند.
تهيهي نقشهي مينها اجباري نيست، اما هر تيمي كه بتواند اين كار را انجام دهد امتياز قابل توجهي دريافت خواهد كرد كه شانس آن را براي موفقيت بسيار افزايش خواهد داد. در جلسهي آينده در مورد تهيهي نقشهي مينها بيشتر توضيح ميدهيم
منبع:سایت رشد
ریپورتر
14th July 2009, 07:24 PM
در جلسهي قبل توضيحاتي در مورد رباتهاي مينياب خودكار داده شد و دوستان تا حد زيادي با اين ربات و نحوهي عملكرد آن آشنا شدند. در اين جلسه نيز در مورد رباتهاي مينياب خودكار، توضيحات جلسات پيش را تكميل خواهيم كرد و در مورد نحوهي ارايهي نقشهي مينها توضيح خواهيم داد، سپس الگوريتمهاي متداول در ساخت رباتهاي مينياب را مورد بررسي قرار خواهيم داد.
رباتهاي مينياب خودكار بايد به سيستمهايي مجهز باشند كه وقتي ميني را كشف ميكنند، بتوانند موقعيت(مختصات مكاني) آن مين را ثبت كنند، و در پايان زمان جستجو، مختصات تمام مينها را در اختيار كاربر بگذارند تا كاربر بتواند با در اختيار داشتن اين مختصات مكان مينها را به راحتي پيدا كند. همانطور كه در جلسهي پيش هم گفته شد، زمين مسابقه به مربعهاي 50×50 سانتيمتري فرضي تقسيم شده است و مينها دقيقاً در وسط بعضي از اين مربعهاي فرضي كاشته شدهاند. اعلام مختصات مينها نيز بايد بر اساس همين تقسيم بنديهاي فرضي انجام شود. مثلاً اگر زمين مسابقه 5×5 متر باشد، اين تقسيمبندي زمين مسابقه را به 100 خانه تقسيم ميكند كه در وسط بعضي از آنها (كمتر از 10 خانه) مين كاشته شده است. ربات بايد قادر باشد توسط 2 عدد بين 1 تا 10 مختصات هر مين را اعلام كند. به عنوان مثال به شكل زير نگاه كنيد، اين شكل مكان مينهايي كه در زمين مسابقه دفن شدهاند را نشان ميدهد.
http://roshd.ir/Portals/0/0and1/Robotic2/map-deminer.GIF
ربات در پايان زمان مسابقه، بايد بتواند صورت خودكار مختصات خانههايي را كه در آنها مين دفن شده است را به طريقي به كاربر (داور مسابقه) اعلام كند: مثلاً اگر زمين مسابقه مانند شكل بالا باشد، ربات بايد 3 جفت عدد روبهرو را اعلام كند. (3،2) و (6،4) و (6،9).
بعضي از رباتها اين اعداد را توسط نمايشگرهاي كوچكي كه بر روي آن تعبيه شده است نشان ميدهند. اين نمايشگرها مشابه نمايشگرهاييست كه در ساخت ساعتهاي مچي ديجيتال استفاده ميشوند. كار با اين نمايشگرها را نيز در جلسات آينده توضيح خواهيم داد.
الگوريتمهاي جستجوي زمين براي كشف مين
http://roshd.ir/Portals/0/0and1/Robotic2/robo-deminer.jpg
كار اصلي يك ربات مينياب اين است كه سنسور فلزياب را در تمام نقاط زمين حركت دهد و در هر كجا كه وجود فلز را احساس كرد، وجود مين فرضي را اعلام كند. اما 2 نكتهي بسيار مهم را در ساخت يك ربات مينياب بايد مد نظر قرار دهيم تا ربات عملكرد مطلوبي داشته باشد:
1- در جستجوي خود به دنبال مين كليهي نقاط زمين را پوشش دهد و هيچ نقطهاي از زمين نباشد كه سنسور فلز ياب از روي آن گذر نكرده باشد.
2- عمل بالا را در كمترين زمان ممكن انجام دهد. به عنوان مثال اگر ربات يكي از نواحي زمين را چندين بار بگردد، ممكن است زمان زيادي تلف شود، پس بايد الگوريتمي طراحي شود كه هر نقطه از زمين بيش از يك بار هم جستجو نشود.
اما پياده سازي اين 2 نكته كار سادهاي نيست و كمتر تيمي ميتواند اين 2 نكته را به دقت اجرا كند، الگوريتم سادهتري هم براي جستجوي زمين وجود دارد كه در اين راه نيازي نيست 2 نكتهي بالا رعايت شوند، اكثر تيمها هم براي هدايت رباتهاي خود در زمين مسابقه از الگوريتم «تصادفي» (Random) استفاده ميكنند. اما طبيعيست كه عدم رعايت دو نكتهي بالا در طراحي ربات، موجب كاهش دقت و سرعت ربات خواهد شد.
الگوريتم جستجوي تصادفي
در اين روش، ربات زمين مسابقه را طبق هيچ الگوي خاصي جستجو نميكند، و زمانيكه به ديوارهها يا موانع برسد، فقط جهت خود را عوض ميكند و راه را ادامه ميدهد، هر زماني هم كه وجود مين را احساس كند، 5 ثانيه بر روي آن متوقف ميشود و مجدداً به راه خود ادامه ميدهد. در اين الگوريتم سازندگان ربات فقط 2 مشكل اساسي در پيش رو دارند:
1- چگونه وجود مانع يا ديواره را در جلوي خود تشخيص دهند.
2- چگونه وقتي مانع را در جلوي خود تشخيص دادند، جهت خود را به گونهاي تغيير دهند كه با مانع برخورد نكنند.
براي تشخيص موانع و ديوارههاي اطراف زمين، بايد از سنسورهاي فاصلهياب استفاده نمود. توسط اين سنسورها ميتوان فاصله از مانعي كه در روبروي ربات قرار دارد را تشخيص داد. در نتيجه زماني كه اين فاصله كمتر از حد معيني شد ميتوان تشخيص داد كه ربات به مانع نزديك شده است و امكان برخورد با مانع وجود دارد. در مورد انواع سنسورهاي فاصله ياب و نحوهي كار با آنها هم در جلسات آينده توضيح خواهيم داد.
زماني كه ربات به مانع نزديك شد، براي جلوگيري از برخورد ربات با موانع و ديوارهها بايد ربات جهت حركت خود را تغيير دهد. سادهترين راه براي تغيير جهت اين است كه ربات مسير حركت خود را مثلاً 90 درجه تغيير دهد، يعني هرگاه مانعي را در جلوي خود احساس كرد، به اندازهي ربع دايره ربات به دور خود بچرخد و به مسير خود ادامه دهد.
اين الگوريتم پر كاربردترين الگوريتم براي جستجوي زمين مسابقه است، زيرا پيادهسازي آن پيچيدگي فني زيادي ندارد و به خاطر سادهتر بودن سيستم، احتمال بروز خطاهاي پيشبيني نشده در آن كمتر است.
الگوريتمهاي جستجوي منظم
در اين الگوريتم، زمين مسابقه توسط الگوي مشخصي جستجو ميشود كه به واسطهي آن، هيچ قسمتي از زمين جستجو نشده باقي نميماند و هيچ قسمتي هم چند بار جستجو نميشود.
سادهترين الگو براي جستجوي منظم زمين اين است كه ربات، زمين را به صورت رديف به رديف جستجو كند، شكل زير نماي كلي حركت ربات را توسط اين الگوريتم نشان ميدهد:
http://roshd.ir/Portals/0/0and1/Robotic2/masir-harekat.GIF
در شكل بالا، ربات حركت خود را از خانهي (1و1) شروع ميكند، و در خانهي (1و10) به پايان ميرساند. در اين روش اگر در زمين مسابقه مانعي وجود داشته باشد، كار كمي پيچيدهتر ميشود و ربات بايد قادر باشد زمانيكه مانع را احساس ميكند، به گونهاي از برخورد با مانع پيشگيري كند كه از مسير حركت خود نيز منحرف نشود. به شكل زير دقت كنيد:
http://roshd.ir/Portals/0/0and1/Robotic2/obstacle-avoid-dance.GIF
در شكل بالا، مانع در خانهي شمارهي (6و4) قرار دارد. ايدهالترين مسير براي ردّ مانع در شكل بالا نشان داده شده است.
ریپورتر
18th July 2009, 10:24 AM
با عرض سلام خدمت دوستان
اميدوارم بحثمون در جلسات پيش در مورد رباتهاي مينياب خودكار مفيد و جذاب بوده باشه. در 2 جلسهي قبل هدف ما صرفاً آشنايي اجمالي با اين رباتها بود و قصد نداشتيم به طور تخصصيتر وارد بحث شويم. اما در مورد نحوهي طراحي اين رباتها بحثها و نكات مفصلي بايد مطرح شود كه اين نكات بهتدريج در جلسههاي آينده تشريح خواهند شد. از جملهي اين مباحث، سيستمهاي حركتي چهارجهته، سنسورهاي فاصلهياب مختلف، قطب نماي الكتريكي، و سيستمهاي مكانيابي هستند، كه تلاش ميكنيم هركدام از اين مباحث را در جلسههايي مفصلاً مورد برسي قرار دهيم.
اما در اين جلسه بحث را در مورد رباتهاي مينياب كنترل از راه دور (Manual) و رقابت فني ليگ رباتهاي مينياب ادامه خواهيم داد.
http://roshd.ir/Portals/0/0and1/Robotic2/manual-deminer.jpg
تفاوت بارز رباتهاي مينياب كنترل از راه دور با رباتهاي مينياب خودكار، در نحوهي هدايت آنها است؛ در رباتهاي مينياب خودكار همانطور كه توضيح داده شد، تمامي حركات ربات توسط مدارات داخلي ربات كنترل ميشود و هيچكس حق ندارد به هيچ وجهي حركات و تصميمات ربات را كنترل كند و آن را به نوعي هدايت كند، اما در رباتهاي مينياب كنترل از راه دور، يك نفر به عنوان اپراتور به داور معرفي ميشود كه اين فرد حق دارد توسط سيستمهاي كنترل از راه دور، ربات را در زمين مسابقه مستقيماً كنترل كند. اما نكتهي اساسي اينجاست كه زميني كه ربات بايد در آن جستجو كند زمين بسيار ناهموار و نامناسبي است، و طراحي و ساخت رباتي كه فقط بتواند در تمام نقاط اين زمين حركت كند بسيار كار دشواري است. عكس زير يك تصوير از زمين مسابقهاي است كه ربات بايد تمام آن را به دنبال مين جستجو كند!
http://roshd.ir/Portals/0/0and1/Robotic2/manual-zamin.jpg
همانطور كه احتمالاً حدس زدهايد در اين رباتها بر خلاف رباتهاي مينياب خودكار، بيشتر پيچيدگيهاي فني در بخش مكانيك است، زيرا كنترل تمام بخشهاي ربات بر عهده اپراتوري است كه توسط دستگاه كنترل از راه دور، ربات را كنترل ميكند، و طبيعتاً نيازي به سيستمهاي كنترل هوشمند و الگوريتمهاي پيچيدهي رد مانع و غيره ندارد.
حالا كمي تخصصيتر اين ليگ را بررسي كنيم. براي شروع بند اول از دفترچهي قوانين را عيناً ميبينيم:
«هدف از اين مسابقه طراحي رباتهايي است كه بتوانند در زمينهاي ناهموار حركت كرده و مينهاي دفن شده در زمين را كشف نمايند.
در اين مسابقه كنترل ربات توسط يك اپراتور انجام ميشود. اپراتور در فاصلهي 20 الي 30 متري زمين مسابقه مستقر شده و هيچگونه ديدي بر روي جزييات زمين مسابقه ندارد. اعضاي تيم حق فرمان دادن و كمك به اپراتور را ندارند. اپراتور فقط توسط وسايلي كه روي ربات نصب است حق كنترل ربات را دارد.»
همانطور كه در قوانين ميبينيد، اپراتور فقط ميتواند با وسايلي مانند دوربين كه بر روي ربات نصب شده است زمين را ببيند و ربات را هدايت كند و هيچگونه ديد مستقيمي بر روي زمين مسابقه ندارد. و اما در مورد زمين مسابقه:
زمين مسابقه
توضيحات زمين مسابقه را هم عيناً از متن قوانين ذكر ميكنيم:
«زمين مسابقه به ابعاد تقريبي 8 در 6 متر است و قسمتهايي از آن داراي سطح شيبدار با شيب حداكثر 35 درجه به صورت درههايي به عمق حداكثر 75 سانتي متر و يا تپههايي به ارتفاع حداكثر 75 سانتيمتر از جنس خاك سفت و سيمان و گچ و در قسمتهاي با ارتفاع كمتر صرفاً خاك است. زمين داراي سنگريزهها و قلوهسنگهايي به ابعاد مختلف است.
ممكن است حوضچه آب به عمق حداكثر 15 سانتي متر نيز وجود داشته باشد. ساختار و تركيب زمين شبيه بيابان طبيعي ايران خواهد بود. در قسمتهاي مسطح ممكن است از سيم خاردار و قطعات سنگ بزرگ و بوتههاي خار و ضايعات غيرفلزي نظير الوار استفاده شود.
زمين از مناطقي تشكيل ميشود كه در حد فاصل اين مناطق ممكن است سطوح صعبالعبور شامل سنگ، چاله آب به عمق حداكثر 15 سانتيمتر، سيم خاردار تكرشته، سطح شيبدار و سيم خاردار چندرشته و غيره وجود داشته باشد.»
اين توضيحات به طور كامل شرايط زمين مسابقه را روشن ميكند.
در مورد مينهاي دفن شده در زمين مسابقه هم شرايط مشابه رباتهاي مينياب خودكار است و مينهاي فرضي هم همان قوطيهاي كنسرو ماهي هستند.
در حقيقت تفاوت عمدهي رباتهاي مينياب كنترل از راه دور و خودكار در ساختار مكانيكي آنهاست كه در مورد رباتهاي مينياب كنترل از راه دور، اين ساختار ميبايست بسيار كاملتر و توانمندتر باشد تا بتواند شرايط دشوار زمين مسابقه را بپيمايد، اما از طرفي در رباتهاي مين ياب خودكار، رباتها از نظر الكترونيكي و برنامهنويسي بسيار پيشرفتهتر هستند و عمدهي پيچيدگي آنها هم در همين بخشهاست.
توضيحات دقيقتر در مورد جزئيات اين ليگ را ميتوانيد در دفترچهي قوانين مسابقات بخوانيد. براي دريافت دفترچهي قوانين اولين دورهي مسابقات رباتيك خوارزمي اينجا كليك كنيد. لازم به ذكر است اين قوانين براي مسابقات IranOpen نوشته شده است، كه در مسابقات خوارزمي هم عيناً از همين قوانين استفاده شد.
رقابت فني
هدف از ايجاد اين ليگ كشف ايدهها و طرحهاي نو در ارتباط با رباتهاي مينياب است. براي اين طرحها 4 دستهبندي كلي تعيين شده است كه تيمها ميتوانند ايدههاي خود را در ارتباط با يكي از اين 4 موضوع به رقابت بگذارند:
• شناسايي مينهاي غير فلزي
• ايدههاي بديع براي حركت در زمينهاي ناهموار
• خارج ساختم مين از زمين
• علامتگذاري محل كشف مين
http://roshd.ir/Portals/0/0and1/Robotic2/mine-pointing.jpg
طبق قوانين مسابقات اولويت با ايدهها و طرحهاييست كه به مرحلهي اجرا رسيدهاند، اما طرحهايي كه به صورت مقاله يا شبيهسازي شده هم ارايه شوند قابل بررسي هستند.
ریپورتر
25th July 2009, 09:23 AM
در مورد ميكروكنترلرهاي AVR در جلسات گذشته توضيحات مفصلي داده شده است و دوستان تا حد خوبي با اين خانواده از ميكروكنترلرها آشنا شدهاند، اما اين آشنايي براي انجام پروژههاي حرفهايتر كافي نيست و مطالب بسيار گستردهي ديگري هم در مورد اين خانواده از ميكروكنترلرها وجود دارد كه هنوز مطرح نشدهاند، ولي اهميت بسيار زيادي دارند. از اين رو ما سعي ميكنيم در خلل كار، مجدداً جلساتي را به مباحث مرتبط با AVR اختصاص دهيم تا خلأ موجود در اين بخش را به تدريج برطرف كنيم.
در اين جلسه به موضوع انواع حافظه در ميكروكنترلرهاي ميپردازيم.
با نحوهي پروگرام كردن ميكرو كنترلر آشنا شديد. همانطور كه ميدانيد، اطلاعاتي كه در مرحلهي پروگرام كردن به ميكروكنترلر منتقل ميشود، با خاموش كردن سيستم(يعني قطع جريان برق ميكروكنترلر)، از بين نميرود و نيازي نيست براي هر بار استفاده از ميكروكنترلر مجدداً آن را پروگرام كنيم، و تا زمانيكه برنامهي پروگرام شده روي ميكروكنترلر توسط كاربر Erase نشود، آن برنامه پاك نخواهد شد. اين نوع حافظه را «حافظهي غير فرّار» ميگوييم، در اين نوع حافظه اگر جريان برق قطع هم شود اطلاعات از بين نخواهند رفت. مثال ديگر اين نوع حافظهها، هارد ديسك كامپيوترهاي شخصي خانگيست.
نوع ديگر حافظهها، حافظههاي «فرّار» نام دارند، در اين نوع، با قطع جريان برق، اطلاعات هم از بين ميروند. مثال آن حافظهي RAM در كامپيوترهاي شخصي خانگيست.
در ميكروكنترلرهاي AVR چند نوع حافظه وجود دارد كه در زير به اختصار در مورد هر يك آنها توضيح ميدهيم.
حافظهي FLASH
اين حافظه در مرحلهي پروگرام كردن، و براي ذخيرهي برنامهي كامپايل شده توسط كامپيوتر (فايل با پسوند hex.) در ميكروكنترلر مورد استفاده قرار ميگيرد. همانطور كه توضيح داده شد اين حافظه از نوع حافظههاي غير فرّار است.
حافظهي SRAM
وقتي در برنامههاي خود متغيري تعريف ميكنيم، در زمان اجراي آن توسط ميكروكنترلر، بهطور معمول از حافظهي SRAM استفاده ميشود. مثلاً وقتي در برنامه جملهي زير را مينويسيد:
int TEMP;
ميكروكنترلر براي ساختن اين متغير 2-بايتي، از حافظهي SRAM استفاده ميكند.
حافظهي SRAM از نوع حافظههاي فرّار است و اطلاعاتي كه در آن ذخيره ميشوند، پس از خاموش شدن ربات و قطع جريان برق از ميكروكنترلر، همگي پاك ميشوند. اگر بخواهيم براي تعريف حافظه از فضاي ديگري به جز SRAM استفاده كنيم، بايد در الگوي تعريف متغير، تغيير كوچكي دهيم كه در ادامه شرح داده شده است.
حافظهي EEPROM
گاهي اوقات ما نياز داريم اطلاعاتي كه در متغيرها ذخيره شدهاند با خاموش شدن ربات يا دستگاه پاك نشوند و براي استفاده در زمانهاي ديگر هم قابل استفاده باشند. براي اين منظور حافظهي EEPROM تعبيه شده است. EEPROM جزو حافظههاي غير فرّار است.
براي استفاده از اين حافظه بايد متغيرها را به گونهاي تعريف كنيد كه به جاي استفاده از SRAM از EEPROM استفاده كنند. براي اين منظور طبق الگوي زير عمل مي كنيم:
eeprom int TEMP;
يعني پيش از تعريف متغير، كلمهي كليدي «eeprom» را ذكر ميكنيم. اگر اين كار را نكنيم، متغير به صورت پيش فرض در حافظهي SRAM تعريف ميشود.
براي مثال فرض كنيد ربات مينيابي داريم كه مختصات مينهاي كشف شده را در متغيرهايي از حافظهي ميكروكنترلرش ذخيره كرده است. اگر اين متغيرها در SRAM باشند، زمانيكه ربات خاموش شود اين اطلاعات پاك ميشوند و ديگر قابل بازبيني نيستند، در اينگونه موارد بهتر است اطلاعات در eeprom ذخيره شوند تا خيالمان از بابت ذخيرهي اين اطلاعات راحت باشد.
رجيسترها
در مورد رجيسترها توضيحاتي داده شده است. رجيسترها هم جزو متغيرهاي فرّار هستند و با قطع جريان برق پاك ميشوند. مهمترين مزيت رجيسترها نسبت به SRAM سرعت بالاي آنها بهخاطر نزديك بودن به واحد پردازشگر مركزي است. و مهمترين محدوديت آنها هم كم بودن تعداد آنهاست. نيازي نيست كه ما در برنامههاي خود مستقيماً از رجيسترها استفاد كنيم، اما خود ميكروكنترلر براي اجراي برنامههاي خود مكرراً از آنها استفاده ميكند.
مطالب مطرح شده مختصر و اجمالي هستند، ولي اين مطالب براي رفع نياز دوستان و انجام پروژههاي مختلف كفايت ميكنند و نياز به بررسي تخصصيتر روي اين مبحث نيست.
منبع:www.roshd.ir (http://www.roshd.ir)
pinky
25th July 2009, 08:42 PM
با تشکر از توضیحات خوبت دوست عزیز....................
من میخوام ربات اتش نشان بسازم................
این توضیحات خوب شما فقط مقدمه بود .............
اگر لطف کنین در طی چند روز اینده توضیحات بیشتری نسبت به چگون بستن قطعات مورد نیاز ربات اتش نشان بفرمایین بسیار باعث شادی من میشوید و همچنین برنامهavr این ربات اتش نشان...................
لطفا با توجه به این که 6 شهریور من باید ربات را تحویل بدم لفا در صورت امکان توضیحات تکمیلی را بفرمایید..............
ریپورتر
28th July 2009, 05:36 PM
با تشکر از توضیحات خوبت دوست عزیز....................
من میخوام ربات اتش نشان بسازم................
این توضیحات خوب شما فقط مقدمه بود .............
اگر لطف کنین در طی چند روز اینده توضیحات بیشتری نسبت به چگون بستن قطعات مورد نیاز ربات اتش نشان بفرمایین بسیار باعث شادی من میشوید و همچنین برنامهavr این ربات اتش نشان...................
لطفا با توجه به این که 6 شهریور من باید ربات را تحویل بدم لفا در صورت امکان توضیحات تکمیلی را بفرمایید..............
سلام درباره این موضوع به سایت www.roshd.ir (http://www.roshd.ir) مراجعه کنید
ریپورتر
11th August 2009, 10:42 AM
در اين جلسه كمي از دنياي الكترونيك و كامپيوتر فاصله ميگيريم و به بررسي يك سيستم مكانيكي خاص براي حركت ربات در زمين مسابقه ميپردازيم.
ما تا كنون با 2 سيستم براي حركت ربات آشنا شدهايم: يكي سيستمي كه براي خودروهاي شهري استفاده ميشود و براي پيچيدن خودرو به هر سمت، چرخهاي جلو به همان سمت متمايل ميشوند. دوم سيستم حركت ديفرانسيلي كه براي حركت تانك يا و خودروهاي سنگين راهسازي استفاده ميشود كه توضيح كامل آن هم در جلسهي 18 داده شده است.
وجه اشتراك اين دو سيستم اين است كه در هر دو، وسيلهي مورد نظر (خودرو يا ربات)، فقط در يك راستا ميتواند جلو عقب برود و اگر بخواهد به سمت ديگري به جز جلو يا عقب برود، بايد به دور خود بچرخد. براي مثال در شكل زير اگر بخواهد از نقطهي A به نقطهي B برود، ابتدا بايد 90 درجه به راست بچرخد، سپس به سمت جلو حركت كند تا به نقطهي B برسد.
http://roshd.ir/Portals/0/0and1/Robotic2/norm-mov.GIF
اين جلسه با سيستم حركتي جديدي آشنا ميشويم كه به ربات ما اين قابليت را ميدهد كه ربات بتواند در دو راستاي عمود برهم بدون چرخش حركت كند. يعني همانگونه كه به راحتي ميتواند به جلو يا عقب حركت كند، بتواند هركجا كه لازم بود بدون اين كه به سمتي بچرخد، مستقيماً به چپ يا راست حركت كند. يعني در شكل بالا براي رسيدن به نقطهي B، ديگر نيازي نيست ربات به سمت راست بچرخد و بعد حركت كند، بلكه ميتواند مستقيماً به سمت راست حركت كند و به B برسد.
اما چگونه ممكن است ربات بتواند در دو راستاي عمود بر هم حركت كند بدون اينكه به دور خود 90 درجه بچرخد؟
ابتدا با نوعي چرخ خاص آشنا ميشويم كه مهمترين عنصر براي طراحي اين سيستم حركتي جديد است:
http://roshd.ir/Portals/0/0and1/Robotic2/omni-wheel2.jpg
اين چرخها اُمني ويل (Omni Wheel) نام دارند. شكل بالا يك اُمني ويل است كه به يك موتور گيربكس-دار متصل شده است. همانطور كه ميبينيد تعداد زيادي چرخ كوچك بر روي يك چرخ بزرگتر در راستاي عمود بر هم تعبيه شدهاند.
چند مدل ديگر از اين چرخها در زير نشان داده شده است:
http://roshd.ir/Portals/0/0and1/Robotic2/omni-wheel.JPG http://roshd.ir/Portals/0/0and1/Robotic2/omni-wheel4.jpg http://roshd.ir/Portals/0/0and1/Robotic2/omni-wheel3.jpg
اما چگونه از اين چرخ عجيب براي طراحي خود استفاده ميكنيم؟
رايجترين نحوهي چينش و استفاده از اين نوع چرخ، براي طراحي يك سيستم حركتي چند جهته (منظور سيستم حركتي است كه ربات بهوسيلهي آن ميتواند در 2 راستاي عمود بر هم بهراحتي بدون چرخش حركت كند)، در شكل زير نشان داده شده است: (عكس از زير ربات است)
http://roshd.ir/Portals/0/0and1/Robotic2/omni-sys.jpg
همانطور كه ميبينيد چهار عدد اُمني ويل دو به دو روبروي يكديگر تعبيه شدهاند.
بهعنوان مثال اگر موتورهاي شمارهي 1 و 3 همزمان در جهتي كه در شكل مشخص شده است بچرخند و موتورهاي 2 و 4 خاموش باشند، چرخهاي كوچك روي اُمني ويلهاي شمارهي 2 و 4 به روي زمين چرخانده ميشوند و ربات به سمت راست بهراحتي حركت ميكند.
برعكس اين نيز ممكن است. يعني موتورهاي 2 و 4 در يك جهت يكسان بچرخند و موتورهاي 1 و 3 خاموش باشند. در اينصورت چرخهاي كوچك روي اُمني ويلهاي 1 و 3 روي زمين چرخانده ميشوند و ربات در راستايي عمود بر حالت بالا حركت ميكند.
بيشترين كاربرد سيستمهاي حركتي چندجهته در رباتيك، در ساخت انواع رباتهاي فوتباليست و مينياب است. اين سيستم را نميتوان در ساخت تمام رباتها بهكار برد، مثلاً در ساخت ربات مسيرياب تقريباً به هيچ شكل نميتوان از اين سيستم استفاده كرد.
اما راهاندازي و استفاده از اين سيستم بر روي ربات، كمي پيچيدهتر از سيستمهاي حركتي قبلي است. در جلسهي آينده چند نكتهي اساسي براي استفاده از اين سيستم مطرح ميشود كه اگر اين به اين نكات توجه نشود، درعمل ربات نميتواند عملكرد مطلوب و قابل قبولي را داشته باشد.
منبع:www.roshd.ir
ریپورتر
22nd August 2009, 06:05 PM
در اين جلسه نيز، بحث را در مورد سيستمهاي حركتي چهار جهته ادامه خواهيم داد و شمارا با نوع ديگر اين سيستم كه در آن بهجاي 4 چرخ، فقط 3 چرخ وجود دارد، آشنا خواهيم كرد، همچنين به نكاتي اشاره خواهيم كرد كه براي استفاده از اين سيستم ميبايست حتماً به آن توجه كرد.
شكل زير تصوير يك ربات فوتباليست است كه در آن از سيستم حركتي 4-جهته استفاده شده و به دلايلي كه در ادامه مطرح خواهد شد، به جاي 4 چرخ، از 3 چرخ استفاده شده است.
http://roshd.ir/Portals/0/0and1/Robotic2/three-omnidirectional-wheel.jpg
واين نيز تصوير يك نمونهي ديگر از رباتهاي 3-چرخه با استفاده از اُمني ويل است:
http://roshd.ir/Portals/0/0and1/Robotic2/wowwee_rovio.jpg
استفاده از سيستم 3-چرخه، 2 مزيت مهم نسبت به سيستم 4-چرخه دارد:
مزيت نخست: سيستم 3-چرخه اين است كه جاي كمتري را در ربات اشغال ميكند. اين موضوع در رباتهاي فوتباليست اهميت زيادي پيدا ميكند، زيرا در اين رباتها همواره مشكل كمبود فضا وجود دارد و طراحان اين رباتها در تلاشند تا حد ممكن از سيستمها و قطعاتي استفاده كنند كه جاي كمتري اشغال ميكنند.
مزيت دوم: در سيستم 4-چرخه، يكي از مهمترين مشكلاتي كه وجود دارد اين است كه بهسختي ميتوان ارتفاع 4 چرخ را با يكديگر تراز كرد، يعني در اين سيستم ممكن است بهدليل ناهمواري زمين مسابقه، يكي از چرخهاي ربات با زمين اصطكاك نداشته باشد، مثلاً ممكن است يك سنگريزه زير يكي از چرخها گير كند و يكي از چرخها از روي زمين بلند شود. اين مشكل اصولاً براي همهي سيستمهاي چهار-چرخه وجود دارد، حتي براي خودروهاي سواري! اما چاره چيست؟
براي حل اين مشكل در خودرو ها از سيستم تعليق استفاده ميشود، يعني بهوسيلهي فنر و كمك فنر و ...، چرخها اين قابليت را پيدا ميكنند كه كمي نسبت به شاسي ماشين بالا و پايين بروند و به اين واسطه ميتوان اطمينان حاصل نمود كه هر چهار چرخ خودرو بهطور كامل با زمين اصطكاك دارند.
هرچند طراحي يك سيستم تعليق براي چرخهاي ربات كمي دشوار است، ولي تنها راهي است كه استفاده از سيستمهاي 4-چرخه را براي ما ممكن ميسازد.
اما استفاده از سيستم 3-چرخه كمي پيچيدهتر از سيستم چهار-چرخه است، زيرا در سيستم 4-چرخه به-سادگي مشخص بود براي حركت به هر سمت بايد كدام موتورها حركت كنند، اما در سيستم 3-چرخه كار كمي پيچيدهتر است، زيرا در همهي حركتها هر 3 موتور درگير هستند، اما سرعت و جهت آنها با يكديگر متفاوت است.
تنظيم سرعت موتورها را ميتوان با استفاده از PWMها انجام داد. يعني براي هدايت هر موتور از يك PWM ميكروكنترلر استفاده ميكنيم. ميدانيم كه براي حركت به جلو، عقب، چپ و ... بايد سرعت و جهت هر 3 موتور را تنظيم نمود. براي پيدا كردن سرعتهاي مناسب براي حركت ربات در هر جهت را ميتواناز بحثهايي كه در مورد بردارها در دروس دبيرستاني خواندهايد استفاده كرد، اما روش بسيار سادهتر و بعضاً كارآمدتر، استفاده از روش سعي و خطا است. مثلاً اگر ميخواهيم ربات به سمت چپ حركت كند، بايد با كم و زياد كردن عدد PWMها مشخص كنيم هر موتور با چه سرعتي و در چه جهتي حركت كند.
در جلسهي چهلم (http:///) در مورد رباتهاي مينياب خودكار و الگوريتمهاي جستجوي زمين مسابقه توضيح داده شد. يك نكتهي بسيار مهم در ساخت رباتهايي كه از الگوريتم جستجوي منظم استفاده ميكنند وجود دارد كه بايد حتماً به آن توجه كرد. همانطور كه گفته شد ربات در اين الگوريتم ميبايست بهصورتي كه در شكل نشان داده شده است، كل زمين مسابقه را جستجو كند.
http://roshd.ir/Portals/0/0and1/Robotic2/masir-harekat.GIF
اما مشكل اين است كه ربات در حالت عادي بدون سيستمهاي تصحيح حركت نميتواند اين مسير را طي كند، زيرا طول زمين 5 متر است، و در اين مسافت طولاني نميتوان مطمئن بود كه ربات مسير مستقيم را طي كند.مثلاً طبق شكل بالا ربات حركت خود را در زمين مسابقه از خانهي (1و1) شروع ميكند و انتظار ميرود در انتهاي زمين به نقطهي (10و1) برسد، اما به دلايل گوناگون (مثلاً ناهمواريهاي سطح زمين يا عدم هماهنگي موتورها) بهجاي خانهي (10و1) به خانهي (10و2) ميرسد و در نتيجه بخشي از زمين مسابقه را نميتواند پوشش دهد.
براي حل اين مشكل چند راه وجود دارد (كه البته هيچ كدام هم زياد ساده نيستند)، متداولترين راه براي حل اين مشكل استفاده از قطبنماي الكتريكي است. بهوسيلهي قطبنماي الكتريكي، ربات ميتواند با دقت بسيار بالايي زاويهي خود را نسبت به قطب شمال و جنوب بهدست آورد، و بهكمك آن ميتواند هرگونه انحرافي را از مسير خود تشخيص دهد. يعني مثلاً اگر ربات 2 درجه به سمت راست منحرف شده باشد (2 درجه به سمت راست چرخيده باشد)، با استفاده از قطبنماي الكتريكي ميتوان اين انحراف را متوجه شد و سپس با فرمان مناسب به موتورها، مسير حركت ربات را اصلاح كرد. استفاده از قطبنماي الكتريكي نيازمند آموزش مبحث ارتباط سريال در ميكروكنترلر است، در جلسههاي آينده به اين موضوع مفصلاً خواهيم پرداخت.
نكتهي بالا فقط مربوط رباتهاي مينياب با سيستم حركتي 4-جهته نيست، بلكه در سيستم حركت ديفرانسيلي(سيستم حركت تانك) هم بايد به اين موضوع دقت كرد، مگر اينكه نخواهيم از الگوريتم جستجوي منظم استفاده كنيم و ربات الزامي به حركت دقيق نداشته باشد.علاوه بر آن در رباتهاي فوتباليست دانشاموزي هم بايد به موضوع انحراف ربات دقت كرد، در غير اين صورت ربات ممكن است بهجاي دروازهي حريف، به دروازهي خودش گل بزند.
منبع:www.roshd.ir
ریپورتر
8th September 2009, 09:46 AM
در ابتداي بحث لازم به ذكر است كه از امسال، فدراسيون جهاني روبوكاپ، قوانين مسابقات رباتهاي فوتباليست دانشاموزي را به كلي تغيير داده است، اين تغييرات باعث به وجود امدن تغييراتي بنيادين در ساختار رباتهاي فوتباليست دانش آموزي شده است. اما به دلايلي هنوز در اكثر مسابقات داخلي از قوانين سال گذشته استفاده ميشود. به همين خاطر ما هم در اين جلسه ابتدا در مورد قوانين قبلي اين ليگ توضيح خواهيم داد، در چند جلسه آينده هم به قوانين جديد ليگ خواهيم پرداخت.
مسابقات فوتباليست دانشاموزي داراي 2 زير شاخه است كه در هر يك مسابقاتي جداگانه برگزار ميشود: 1- در اولي هر تيم فقط ميتواند يك ربات را در هر زمان در زمين بازي داشته باشد باشد، كه به آن "يك به يك (1×1)" ميگويند. 2- در ديگري هر تيم ميتواند در هر لحظه حداكثر 2 ربات در زمين بازي داشته باشد كه به آن "دو در دو (2×2)" ميگويند.
بيشتر قوانين بازي در هر دو زير شاخه يكي است، اما طبيعتاً تفاوتهايي هم وجود دارد. يكي از مهمترين تفاوتها در اندازهي زمين بازي آنها است، كه در بخش 2×2 اندازهي زمين بازي و دروازهها كمي بزرگتر از 1×1 است.
پس بحث را از زمين مسابقه شروع ميكنيم:
ابعاد زمين 2×2 و 1×1 در تصاوير زير نشان داده شده است.
http://roshd.ir/Portals/0/0and1/Robotic2/soccer-2x2-pf.jpg
زمين بازي بخش 2×2
http://roshd.ir/Portals/0/0and1/Robotic2/soccer-1x1-pf.jpg
زمين بازي بخش 1×1
دور تا دور زمين با ديوارههاي مشكي رنگي به ارتفاع 14 سانتي متر محصور شده است.
در كف زمين مسابقه نيز، يك طيف رنگي از سياه تا سفيد (مانند شكل زير) در حد فاصل بين دو دروازه كشيده شده است تا به كمك آن، رباتها بتوانند موقعيت تقريبي خود را بدست بياورند. در ادامه در مورد اين موضوع بيشتر توضيح خواهيم داد.
http://roshd.ir/Portals/0/0and1/Robotic2/greyscale.jpg
و اين هم نماي كلي يك زمين مسابقهي استاندارد:
http://roshd.ir/Portals/0/0and1/Robotic2/soccer-playfield.jpg
توپِ بازي:
تشخيص توپ براي ربات به هيچ وجه كار سادهاي نيست، زيرا ربات مثل انسان چشم ندارد و نميتواند توپ را مستقيماً ببيند. در رباتهاي پيشرفتهي دانشجويي، يك دوربين تصاويري از زمين مسابقه تهيه ميكند و تصاوير دريافتي خود را به صورت ديجيتال شده تحويل يك كامپيوتر ميدهد و كامپيوتر پس از انجام پردازشهاي فراوان بر روي تصوير دريافت شده، ميتواند مكان توپ را تشخيص دهد. البته اين اتفاقات در كسري از ثانيه صورت ميگيرد و در هر ثانيه دهها تصوير از زمين مسابقه گرفته شده و توسط كامپيوتر پردازش ميشود. اما به هر حال اين روند كمي پيچيده است و نميتوان از ليگهاي دانشآموزي انتظار انجام چنين روندي را داشت.
توپ مورد استفاده براي اين ليگ ميبايست داراي خاصيتي باشد كه رباتهاي دانشآموزي كه طبيعتاً نميتوانند زياد هم پيشرفته باشند، بتوانند به راحتي آن را تشخيص دهند. اين توپهاي داراي تعداد زيادي فرستندهي مادون قرمز هستند كه اين فرستندهها در همه جهت از خود نور مادون قرمز ساتع ميكنند. به اين ترتيب ميتوان توسط يك سنسور مادون قرمز معمولي بر روي ربات (كه در جلسهي ..... در مورد آن توضيح داده شد) به راحتي نور ساتع شده از توپ را دريافت كرد و مكان توپ را تشخيص داد. شكل زير تصويري از اين توپ ها است:
http://roshd.ir/Portals/0/0and1/Robotic2/soccer-BALL.jpg
داخل اين توپ چند عدد باطري قرار ميگيرد تا انرژي لازم آن براي توليد نور تأمين شود. جنس بدنهي آن نيز پلاستيك شفاف است.
ابعاد و وزن رباتها
براي بخش 2×2: وزن ربات نبايد از 2.5 كيلوگرم بيشتر باشد. ارتفاع آن هم نبايد بيش از 22 سانتي متر باشد. كل ربات نيز بايد در استوانهاي تو خالي به شعاع 22 سانتي متر جا شود.
براي بخش 1×1: وزن ربات نبايد بيش از 2 كيلوگرم باشد. محدوديت ارتفاع هم همان 22 سانتي متر است. كل ربات نيز بايد در استوانهاي تو خالي به شعاع 18 سانتي متر جا شود.
برخي از قوانين بازي
بازي در دو نيمهي 10 دقيقهاي برگزار ميشود كه بين 2 نيمهي بازي 5 دقيقه وقت استراحت وجود دارد.
شروع بازي از نقطهي وسط زمين است و بر اساس قرعهي سكه تعيين ميشود كدام تيم بازي را شروع كند.
در پايان زمان بازي، تيمي برنده است كه بيشترين گل را به تيم مقابل زده باشد. زماني يك تيم به تيم ديگر گل ميزند كه بتواند توپ را وارد دروازه ي تيم مقابل كند(مانند فوتبال معمولي)
بازي خطا هم دارد. مثلاً يكي از خطاها اين است كه اگر تيمي به هر طريقي، زماني كه توپ در نقطهي ديگري از زمين است به ربات تيم مقابل ضربهي محكمي بزند يا مداوماً ربات تيم مقابل را هُل بدهد، داور اعلام خطا ميكند.
همچنين اگر يك ربات به هر طريقي به زمين مسابقه يا ربات تيم مقابل آسيب جدي وارد كند، بنا به تشخيص كميته ي داوري با آن برخورد خواهد شد.
در اين ليگ، پنالتي، آفسايد، ضربهي آزاد و تايم اوت (زمان استراحت به درخواست تيمها) وجود ندارد.
در اين جلسه با قوانين ليگ و كليات رباتها آشنا شديم.
منبع:www.roshd.ir
ali khorshidi
11th September 2009, 06:10 PM
سلام دوست عزیز باید بگویم که رنگ زمین های روبات های فوتبالیست دیگر به شکل سیاه و سفید نیست و به رنگ سبز درآمده و دیگر رنگ ها و تشخیص آن ها در موقعیت یابی روبات ها (زمین رقیب یا خودی) به کار نمی رود و به جای آن از سنسور های قطب نما یا اصطلاحا compass استفده می شود که کمی گران است (حدود 40 هزار تومان) ولی در عوض دیگر مشکلات ir رو ندارید.
مبنای کار این سنسور های قطب نما این است که مشخص میکند روبات شما در شمال است یا جنوب و براساس آن موقعیت خود را حدس می زند .
یک چیزی که هم جدیدا دیده ام این است که مسابقات را روی زمین اجرا می کنند. یعنی دیگر زمین بازی روی پایه نیست و از سطح زمین فاصله ندارد . در مورد این نکته برای خودم هم سوال پیش آمد که چراااا!!!!!؟؟؟؟
کسی میدونه ؟؟؟(آیا همون سنسور قطب نما باعث این چیز شده یا امکانات کم ایران اوپن به دلیل نداشتن میز؟؟؟!1
در آخر هم بگویم که همه ی این چیز ها را در مسابقات بین المللی ایران اوپن 2009 (فروردین88) دیدم و شاید هنوز هم مسابقاتی وجود داشته باشد که با همان تشخیص رنگ زمین کار می کنند.!!!
ریپورتر
12th September 2009, 09:57 AM
سلام دوست عزیز باید بگویم که رنگ زمین های روبات های فوتبالیست دیگر به شکل سیاه و سفید نیست و به رنگ سبز درآمده و دیگر رنگ ها و تشخیص آن ها در موقعیت یابی روبات ها (زمین رقیب یا خودی) به کار نمی رود و به جای آن از سنسور های قطب نما یا اصطلاحا compass استفده می شود که کمی گران است (حدود 40 هزار تومان) ولی در عوض دیگر مشکلات ir رو ندارید.
مبنای کار این سنسور های قطب نما این است که مشخص میکند روبات شما در شمال است یا جنوب و براساس آن موقعیت خود را حدس می زند .
یک چیزی که هم جدیدا دیده ام این است که مسابقات را روی زمین اجرا می کنند. یعنی دیگر زمین بازی روی پایه نیست و از سطح زمین فاصله ندارد . در مورد این نکته برای خودم هم سوال پیش آمد که چراااا!!!!!؟؟؟؟
کسی میدونه ؟؟؟(آیا همون سنسور قطب نما باعث این چیز شده یا امکانات کم ایران اوپن به دلیل نداشتن میز؟؟؟!1
در آخر هم بگویم که همه ی این چیز ها را در مسابقات بین المللی ایران اوپن 2009 (فروردین88) دیدم و شاید هنوز هم مسابقاتی وجود داشته باشد که با همان تشخیص رنگ زمین کار می کنند.!!!
سلام خیلی ممنون از اطلاعاتی که دادین
ali khorshidi
15th September 2009, 12:42 PM
سلام
چند وقت پیش به طور اتفاقی در اینترنت تصاویر روباتی را دیدم که ظاهرش عین یک تخم مرغ(فقط کمی بزرگتر) بود و خیلی ساده به نظر می رسید و در نگاه اول نمی شد فهمید که این چیست و به چه منظوری است حس کنجکاوی من برانگیخته شد و به دنبال کلیپ هایی از این روبات گشتم.(و خوشبختانه پیدا هم کردم و لینکش را در پایین همین مطلب برایتان گذاشته ام)
یک روبات تخم مرغی شکلی که با فشار یک کلید گوش هایش باز می شد و با مکثی کوتاه شروع به خواندن آهنگ می کرد.
تا اینجای کار نمی شد اسم این کوچولو را یک روبات یا شی ای هوشمند گذاشت!
اما زمانی که آهنگ به جاهای خوبش رسید روبات حرکتی کرد و گوش هایش با ریتم آهنگ باز و بسته و حتی می چرخید و اگر از این آهنگ خوشتان نمی آمد کافی بود فقط یکی از حلقه های کنار روبات را لمس کنید.
حرکت این روبات برای من بسیار جالب بود چون روبات هیچ چرخی نداشت و در حقیقت برای حرکت خودش می چرخید اما نه تمام بدنه بلکه قسمتی از آن و حتی در حین حرکت هم گوش هایش را می چرخاند و باز و بسته می کرد.
قابلیت های اتصال به usb و بلوتوث هم جالب بود و نرم افزاری کامپیوتری هم برای گذاشتن آهنگ و کنترل باز و بسته شدن و چرخیدن گوش ها و حرکت روبات متناسب با ریتم آهنگ هم طراحی شده بود.
بله این وسیله سرگرمی ساخت یکی از غولان صنعت الکترونیک یعنی شرکت سونی بوده و نامش ((rolly)) و طراحی و ساخت آن توسط متخصصان سگ روباتیک سونی (aibo آیبو) انجام گرفته بود .(اگر بخواهید مطالبی هم در مورد آیبو ها و دیگر روبات های سونی قرار می دهم).
هدف من از نوشتن این مطلب این بود که از این طرح ها ایده بگیرید و بدانید که روبات واجب نیست که حتما 4 چرخ یا 3 چرخ یا اصلا چرخ دار باشد بلکه می توان با همین تعداد موتوری که لازمه ی ساخت یک روبات چرخ دار است ، یک چیز متفاوتی ساخت، فقط تنها لازمه ی آن فکر است.
مطمئن باشید همین روبات سونی هم اولش به همین شکل نبوده و فقط یک نقاشی کاغذی و یک طرح ساده و شاید هم دست نیافتنی بوده !!!
پیشنهاد می کنم حتما کلیپش را ببینید.
مشخصات فنی:
1 گیگابایت حافظه داخلی
سیستم بلوتوث داخلی( برای گرفتن موسیقی ها)
باتری 3.7 ولت (1560 میلی آمپر ساعت)
پشتیبانی از فرمت های : mp3, atrac, aac
اندازه : 65*65*104 میلی متر
وزن : 300 گرم
قیمت در ایران : حدود 450 هزار تومان
لینک کلیپ : http://video.google.com/videoplay?docid=-4999081638545971555&ei=7FCvSsidBJic2wLC680n&q=rolly&hl=en#
http://www.brusselsgirlgeekdinner.be/wp-content/uploads/2008/05/rolly1.jpg
http://blogs.pcworld.com/staffblog/archives/rolly-1.jpg
http://www.slashgear.com/gallery/data_files/2/7/8/sony-rolly1_48.jpg
سحرسجاد
19th September 2009, 10:44 AM
سلام. من در مورد نحوه ی اتصال سنسورهای مادون قرمز به ربات فوتبالیست می خواستم بدونم ممنون اگه جوابمو بدین
ریپورتر
19th September 2009, 10:59 AM
سلام
وصل کردن سنسورها که از طریق سوکت انجام میشه و باید اطراف هر سنسور پوششی باشه تا نورهای اطراف توی کار ربات اختلال ایجاد نکنه و در ارتفاعی از پایین ربات نصب بشه که ارتفاعش تا نصف توپ رباتیک باشه
ریپورتر
22nd September 2009, 04:56 PM
در جلسه ی گذشته در مورد لیگ رباتهای فوتبالیست دانش آموزی و برخی قوانین آن توضیحاتی داده شد. این جلسه نیز به تشریح ساختار فنی یک ربات فوتبالیست دانش آموزی میپردازیم.
همانطور که در جلسه ی پیش گفته شد، در کف زمین مسابقه، یک طیف رنگی از سفید تا سیاه بین دو دروازه کشیده شده است. به کمک این طیف می توان جایگاه تقریبی ربات را در زمین مسابقه پیدا کرد. اما چگونه؟
يك سيستم مكانيابي تقريبي
یک سنسور مادون قرمز معمولی به همراه یک فرستنده ی مادون قرمز در زیر ربات به گونهاي تعبیه می شود كه نوري كه از فرستنده ساتع ميشود، پس از برخورد با زمين به گيرنده مادون قرمز برسد. (مشابه حالتي كه در ربات مسيرياب سنسورها همراه با فرستنده مادون قرمز در زير ربات تعبيه ميشوند). سپس با اندازه گيري ولتاژ خروجي مدار گيرنده توسط ADC ِ ميكروكنترلر( سيم خروجي مدار گيرنده به يكي از ADCها وصل ميشود)، ميتوان ميزان نوري كه از سطح زمين مسابقه بازتاب ميشود را اندازه گيري كرده و با توجه به طيف رنگي موجود، مكان تقريبي ربات در زمين مسابقه را تعيين نمود. يافتن موقعيت مكاني ربات در زمين مسابقه، به ربات كمك ميكند تا در موقعيتهاي مختلف، تاكتيكهاي مناسبتري را اتخاذ كند. مثلاً وقتي كه ربات به نزديك دروازهي تيم مقابل رسيده است، بهترين راهكار براي گل زدن اين است كه به طرف دروازه با تمام قدرت شوت كند، اما وقتي ربات هنوز به نيمهي زمين حريف نرسيده است، شوت كردن توپ ممكن است راهكار مناسبي براي گل زدن نباشد و بلعكس لازم باشد كه ربات سعي كند دروازهي خود را از خطر حملهي تيم مقابل محافظت كند.
روشهاي پيدا كردن توپ
با توجه به اين كه توپ اين بازي يك منبع نور مانند لامپهاي رشتهاي معمولي يا آتش است، سادهترين راه براي تشخيص توپ، همان سيستمي است كه در جلسهي پنجم براي پيدا كردن آتش در ربات آتش نشان معرفي شد كه در ادامه مختصراً تشريح ميشود. سيستم حركتي ربات به صورت ديفرانسيلي يا همان تانكي است. ربات در حالت عادي وقتي هنوز توپ را تشخيص نداده است، با متوقف نمودن يك موتور، به دور خود ميچرخد. يكي سنسور نوري معمولي در قسمت جلوي ربات و به سمت روبرو، بر روي آن نصب ميشود. با يك دور چرخش ربات به دور خود، اين سنسور قادر خواهد بود كل زمين مسابقه را پوشش دهد. با توجه به اينكه تنها منبع نوري در زمين مسابقه همان توپ است، پس هرجا كه سنسورِ جلوي ربات، نوري را دريافت كند، به اين معني خواهد بود كه توپ در راستاي مقابل ربات قرار دارد؛ و در نتيجه ربات بايد چرخش خود را متوقف كند و با روشن نمودن هر دو موتور مستقيم در همان راستا به طرف توپ حركت كند. تصاحب توپ، اولين گام براي حمله به سمت دروازهي تيم مقابل است، و تيمها به اين موضوع توجه ويژهاي نشان دادهاند، از همين رو روشهاي متفاوتي براي اين موضوع تا كنون كشف و مورد استفاده قرار گرفته است. روشي كه در بالا شرح داده شد الگوريتم بسيار سادهاي است كه طبيعتاً كارايي بالايي هم ندارد و در حال حاضر كمتر تيمي با اين الگوريتم در مسابقات حاضر ميشود. بزرگترين مشكل اين روش، سرعت پايين آن براي تشخيص توپ و سپس به تصاحب درآوردن آن است. در ادامه با ساختاري آشنا خواهيم شد كه كارايي بسيار بالاتري نسبت به اين سيستم دارد و در حال حاضر يكي از متداولترين سيستمهايي است كه در مسابقات مورد استفادهي تيمهاي مختلف قرار ميگيرد.
در اين ساختار، سيستم حركت ربات به صورت چهار جهته (Omni Directional) است و ربات هيچگونه حركت چرخشياي ندارد، و همواره در هر شرايطي، جلوي ربات به سمت زمين تيم مقابل است. همانطور كه ميدانيم، وقتي سيستمِ حركت ربات چهار جهته باشد، ربات بدون اينكه نياز به چرخش داشته باشد، ميتواند به هر سمتي كه نياز است حركت كند. در ادامه به دو سوال زير در مورد اين سيستم پاسخ ميدهيم:
1- روبات چگونه توپ را تشخيص ميدهد؟
2- روبات چگونه توپ را به تصاحب خود در ميآورد؟
در اين سيستم، بر دور تا دورِ ربات، سنسورهاي نوري به طوري تعبيه ميشوند كه ربات بتواند بدون چرخش، تمام نقاط زمين را زير پوشش قرار دهد. در اين سيستم ممكن است دهها سنسور نوري معمولي در دور تا دور ربات نصب شود تا به اين طريق بتوان مطمئن شد كه تمام زمين زير پوشش چشمهاي ربات قرار ميگيرد. اين سنسورها همگي به ميكروكنترلر كه پردازندهي مركزي ربات است متصل شدهاند. به محض اينكه هر كدام از اين سنسورها، نوري دريافت كنند، ميكروكنترلر با توجه به محل نصب سنسور بر روي بدنه ربات، جايگاه توپ را در زمين مسابقه مشخص ميكند. مثلاً اگر سنسوري كه در سمت چپ ربات نصب شده است نوري را از توپ دريافت كند، پردازنده تشخيص ميدهد كه توپ در سمت چپ ربات واقع شده است.
در شكل زير نحوهي نصب سنسورهاي نوري بر روي بدنهي ربات نشان داده شده است.
http://roshd.ir/Portals/0/0and1/Robotic2/Junior2.jpg
همانطور كه ميبينيد، سنسورهاي نوري در يك محفظهي تيره رنگي قرار گرفتهاند كه نور فقط از روبهرو مي تواند وارد اين محفظه شود و به سنسور برسد، در حقيقت اين كار زاويهي ديد سنسور را محدودتر ميكند. به نظر شما دليل اين عمل چيست؟
اما پيدا كردن توپ در زمين مسابقه، مرحلهي اول كار است، در مرحلهي بعدي ربات بايد سعي كند به سمت توپ حركت كند و آن را به تصاحب خود در بياورد.
همانطور كه گفته شد، همواره جلوي ربات بايد به سمت زمين تيم مقابل باشد و ربات هيچگونه حركت چرخشياي ندارد. در نتيجه ربات براي تصاحب توپ در هر شرايطي، بايد سعي كند خود را به پشت توپ برساند، و سپس با حركت رو به جلو بايد توپ را همراه با خود تا زمين تيم مقابل حمل كند تا بتواند در فاصلهي مناسبي از دروازهي حريف، توپ را به سمت آن شوت كند. در جلسهي آينده ابتدا با مكانيزمي آشنا ميشويم كه ربات بتواند به كمك آن و بدون اينكه توپ را از خود جدا كند، آن را جابجا كند. سپس با مكانيزم ديگري آشنا خواهيم شد كه امكان شوت كردن توپ را براي ربات فراهم ميسازد. براي طراحي و استفاده از اين مكانيزمها قوانين دقيق و محدوديتهايي در دفترچهي قوانين ذكر شده است كه در جلسهي آينده به آنها نيز خواهيم پرداخت.
ali khorshidi
25th September 2009, 02:02 PM
سلام
ببخشید منم یه سوالی داشتم :
اینجا کسی هست که روی سنسور های کامپس و جی پی اس کارکرده باشه ؟؟؟؟؟
اگه کسی هست ، ممنون می شوم اطلاعاتی رو درباره راه اندازی اونها بذاره >>>>{big green}
c30_2two
17th October 2009, 12:39 AM
سلام فراموش نشه که باید avcc به 5 ولت وصل بشود
در غیر اینصورت خروجی adc به ازای هر ولتاژ بزرگتر از 0 میشه 255
ریپورتر
23rd October 2009, 10:54 AM
http://technabob.com/blog/wp-content/uploads/2007/03/asimo_vs_usb_robot.jpg
یه مجله ی رباتیک رو برای اونایی که میرن کلاس رباتیک آماده کردم که می تونن از این لینک (http://www.filefactory.com/dlf/f/35e3e4/b/8/h/b1bd2404ac244fce5961cae3d7148469/j/0) دانلود کنن. کلکسیون این مجله هم روی این لینک (http://rs228.rapidshare.com/files/71011844/ServoMagazine_06-2007.pdf) هستش.
ریپورتر
12th November 2009, 08:18 PM
اين جلسه هم مبحث رباتهاي فوتباليست را كه در گذشته به آن پرداخته بوديم ادامه خواهيم داد و با مكانيزم بسيار مهمي در رباتهاي فوتباليست آشنا خواهيم شد كه براي حفظ توپ از آن استفاده ميشود.
اولين سوالي كه مطرح ميشود اين است كه در حالت كلي روبات چه نيازي به چنين سيستمي دارد؟
همانطور كه ميدانيد، يكي از مهمترين قابليتهاي يك بازيكن فوتبال، توانايي او در حفظ توپ يا به اصطلاح پا به توپ بودن اوست. اين موضوع در رقابت رباتها هم به همين اندازه اهميت دارد و رباتي كه توانايي بيشتري در حفظ توپ داشته باشد، صاحب موقعيتهاي بيشتري در زمين خواهد شد و در نتيجه مي تواند بهتر بازي كند.
اما چگونه مي توان براي ربات چنين سيستمي طراحي كرد؟
براي پاسخ به اين سوال ابتدا بايد به قوانين اين ليگ مراجعه كرد تا از محدوديتهايي كه براي استفاده از چنين سيستمهايي وضع شده است مطلع شويم. بند زير ترجمهايست از قانوني كه فدراسيون جهاني روبوكاپ براي حركت توپ در مسابقات اين ليگ وضع كرده است.
حركت توپ:
1- يك ربات نميتواند توپ را نگه دارد.
تذكر: نگه داشتن توپ به اين معناست كه رباتي كنترل كامل توپ را از طريق حذف تمام درجات آزادي توپ در دست گيرد. مثلاً متصل كردن توپ به بدنه روبات، احاطه كردن توپ توسط بدنهي ربات و مانع شدن از دسترسي رباتهاي ديگر، چرخاندن و يا به دام انداختن توپ توسط هر كدام از اجزاي بدنهي روبات. زمانيكه ربات در حركت است، در صورتيكه چرخش توپ متوقف شود و يا در جلوي ربات نچرخد، ميتواند نشان دهندهي اين باشد كه توپ به دام افتاده است.
2- توپ نميتواند زير بدنهي ربات نگه داشته شود.
3- در تمامي زمانها توپ بايد قابل ديدن باشد.
4- رباتهاي ديگر بايد به توپ دسترسي داشته باشند.
5- تنها استثنا براي نگه داشتن توپ، استفاده از استوانهاي چرخشي است كه به توپ چرخش به عقب ميدهد تا توپ را روي سطح خود نگه دارد.
همانطور كه مي بينيد براي طراحي چنين سيستمي قوانين بسيار سخت گيرانهاي وضع شده است تا از اختلالهاي احتمالي در تقابل سيستمهاي مختلف با يكديگر جلوگيري شود؛ و در حقيقت فقط يك شيوه براي حفظ توپ قابل طراحي و استفاده است كه در ادامه تشريح مكانيزم آن خواهيم پرداخت.
مبناي فعاليت اين مكانيزم اين است كه با اعمال نيرويي به توپ، آن را در جهتي به دوران در مياورد كه باعث ميشود توپ به سمت خود ربات هدايت شود. به شكل زير نگاه كنيد:
http://roshd.ir/portals/0/0and1/robotic2/mech_dribbler_CAD.jpg
اين شكل، تصويري شماتيك از مكانيزم سيستم حفظ توپ يك تيم حرفهاي است كه اين مكانيزم را ابتدا در نرم افزارهاي حرفهاي طراحي جامدات طراحي كامپيوتري كردهاند. اگر اين استوانه در راستايي كه در شكل نشان داده شده است بچرخد، توپي كه با آن در تماس است به سمت خود استوانه متمايل مي شود و در نتيجه همواره با نيروي مناسبي متمايل به سمت خود ربات است. در اين سيستم توپ همواره در حال دوران است و در مواقعي كه ربات ثابت است، توپ بر روي زمين سر ميخورد تا بتواند دوران داشته باشد.
رباتي كه در تصوير ميبينيد به اين سيستم مجهز شده است:
http://roshd.ir/portals/0/0and1/robotic2/Skuba_09_Robot.jpg
همانطور كه گفته شد، اين سيسنم تنها سيستم مجاز براي حفظ توپ در زمين مسابقه است. براي طراحي چنين سيستمي، نياز به يك موتور مجزا با سرعت چرخش زياد (rpm بالا) داريم كه بتواند با سرعت بالايي توپ را بر روي زمين بچرخاند.
ربات به وسيلهي اين سيستم نسبتاً ساده، مي تواند توپ را به هر نقطه از زمين مسابقه جابجا كند و اگر اين مكانيزم دقيق طراحي شود ميتواند توپ را حتي در هنگامي كه ربات با سرعت زياد به سمت عقب حركت ميكند هم حفظ كند. كاربرد اين مكانيزم فقط محدود به رباتهاي دانشاموزي نيست و تقريباً در تمام سطوحِ رباتهاي فوتباليست اين سيستم مورد استفاده قرار ميگيرد. در زير تصوير ربات يكي از مطرحترين تيمهاي حاضر در ليگ رباتهاي فوتباليست دانشجويي سايز كوچك است كه با همين سيستم حفظ توپ ميكند.
http://roshd.ir/portals/0/0and1/robotic2/ssl-cmellon.jpg
در جلسهي آينده با مكانيزم ديگري آشنا خواهيم شد كه به ربات قابليت شوت زدن را ميدهد و مبناي كار آن آهنرباهاي الكتريكي است. همچنين با مدارات الكترونيكي و سيستمهاي كنترل قدرت در آن آشنا خواهيم شد.
ریپورتر
9th December 2009, 10:37 AM
در این جلسه طبق قرار قبلی به موضوع سیستم شوت در رباتهای فوتبالیست دانشآموزی خواهیم پرداخت. بدون مقدمه وارد بحث میشویم.
رباتهای فوتبالیست هم مثل یک بازیکن فوتبال واقعی باید بتوانند توپ را شوت کنند یا آن را پاس بدهند. برای این کار، ربات نیاز به یک بازوی مکانیکی دارد تا در مواقع لزوم توپ را با قدرت دلخواه به سمت مقصد مورد نظر شوت کند. این بازو فقط کافیست بتواند توپ را از جلوی ربات با سرعت هل بدهد. شدت شوت را می توان با کنترل قدرت این بازوی مکانیکی تعیین کرد.
برای طراحی این بازوی مکانیکی، معمولاً از یکی از دو سیستم زیر استفاده میشود:
1- سیستم پنوماتیک یا بادی
2- سیستم سلنویید یا آهنربای الکتریکی
هر کدام از این دو سیستم مزایا و معایبی دارند، به عنوان مثال سیستم پنوماتیک دارای پیچیدگیهای فنیای است که پیاده سازی این سیستم را بر روی ربات برای ما دشوارتر میکند. همچنین این سیستم فضای بیشتری را نسبت به سیستم سلنویید اشغال میکند. در این جلسه ما فقط به تشریح سیستم دوم خواهیم پرداخت و در مورد مدارات الکترونیک و راهانداز آن توضیح خواهیم داد.
استفاده از سیستم سلنویید یا آهنربای الکتریکی برای سیستم شوت
همانطور که گفته شد، اساس کار ما در طراحی این سیستم، یک آهنربای الکتریکی است. آهنرباهای الکتریکی در مدلها و اندازههای مختلف در بازار موجود است. در این سیستم ما نیاز به یک آهنربای الکتریکیای داریم که بتواند مانند شکل زیر، یک اهرم را در راستای افقی به سمت جلو هل دهد. این اهرم نیز باید به نوعی با توپ در تماس باشد تا نیروی سلنویید را به توپ منتقل کند.
http://roshd.ir/portals/0/0and1/robotic2/selenoid_arm.gif
قسمت متحرک در سلنویید اصطلاحاً پیستون نام دارد، جابه جایی این پیستون در انواع مختلف متفاوت است، اما معمولاً در حدود 3-2 سانتی متر است.
سلنویید ها در حالت کلی به دو دسته تقسیم میشوند:
1- ضربه زن یا هل دهنده (Push Type)
2- کشنده (Pull Type)
http://roshd.ir/portals/0/0and1/robotic2/actuators_solenoid.jpg
سلنوییدهای "ضربه زن" در هنگام برقرار شدن جریان، پیستون را با شتاب به سمت خارج بدنهی اصلی سلنویید هل میدهند. نوع دیگری که در بازار ایران نیز بیشتر در دسترس است، سلنوییدهای کشنده است، این نوع سلنوییدها در هنگام برقرار شدن جریان الکتریکی، پیستون را به سمت داخل میکشند.
برای کسب اطلاعات بیشتر در مورد سلنوییدها میتوانید به لینک زیر مراجعه کنید:
http://www.societyofrobots.com/actuators_solenoids.shtml (http://www.societyofrobots.com/actuators_solenoids.shtml)
مدارات الکترونیکی و راه انداز سلنویید
ولتاژ کاری این سلنوییدها معمولاً در حدود 30 ولت است، اما برای افزایش توان و قدرت شوت، میتوان با رعایت برخی نکات اختلاف پتانسیل بالاتری را بر روی سلنویید اعمال کرد، کما اینکه برخی تیمها تا 120 ولت نیز بر روی سلنویید اختلاف پتانسیل قرار میدهند.
اما سوالی که در اینجا مطرح میشود این است که چگونه میتوان چنین اختلاف پتانسیلی را در ربات تأمین کرد؟
برای این منظور چند عدد خازن 20 ولتی را ابتدا به صورت موازی شارژ میکنند، سپس آنها را به صورت سری به سلنویید متصل میکنند. در شکلهای زیر این مراحل به تفکیک نشان داده شده است.
مدار شماره 1، خازنها به صورت موازی در حال شارژ شدن:
http://roshd.ir/portals/0/0and1/robotic2/charge_circuit.gif
و مدار شمارهی 2، خازنها به صورت سری در حال تخلیه در سلنویید (در زمان شوت کردن توپ) :
http://roshd.ir/portals/0/0and1/robotic2/decharge_circuit.gif
همانطور که در شکل بالا میبینید، در مدار شمارهی 2، برای تأمین ولتاژ مورد نیاز سلنویید، خازنها با یکدیگر به صورت سری بسته شدهاند، همانطور که میدانید در این حالت ولتاژ اعمال شده بر روی سلنویید، برابر با جمع ولتاژ این 4 خازن است.
بدیهیست که ربات در طول بازی ممکن است دهها و صدها شوت بزند و در هر بار شوت زدن نیز باید یکبار خازنها دِشارژ و سپس مجدداً شارژ شوند. اما چگونه میتوان مداری طراحی کرد که بتواند در یک حالت خازنها را به صورت موازی شارژ کند، و در حالت دیگر خازنها را به صورت سری به سلنویید متصل کند؟
برای پاسخ به این سوال ابتدا با نوعی سوییچ الکترومکانیکی به نام "رله" آشنا میشویم. رله نوعی کلید الکتریکی است، که به وسیلهی آن میتوان جریان الکتریکی را قطع و وصل نمود، تنها تفاوت آن با کلیدهای فشاری معمولیای که روی بسیاری از دستگاههای خانگی وجود دارند این است که، شما برای قطع وصل کردن جریان، نیازی به فشار دادن کلیدی ندارید، بلکه باید آن را به وسیلهی جریان الکتریکی کنترل کنید.
http://roshd.ir/portals/0/0and1/robotic2/relay_ov.jpg http://roshd.ir/portals/0/0and1/robotic2/relay_2c.jpg
رلهها بر حسب نوع استفاده در انواع مختلفی ساخته میشوند، معروفترین نوع رله، رلههای 2 حالته (1 کانتَکت) هستند.(شکل بالا سمت چپ)
این رلهها 5 پایه دارند که شکل آن به صورت شماتیک در زیر کشیده شده است:
http://roshd.ir/portals/0/0and1/robotic2/relay_1.gif
همانطور که در شکل نشان داده شده است، در حالت عادی پایههای 1 و 2 به یکدیگر متصل هستند، اما زمانیکه بر روی پایههای + و – (شکل بالا) جریان قرار گیرد، اتصال به شکل زیر برقرار میشود:
http://roshd.ir/portals/0/0and1/robotic2/relay_2.gif
ولتاژی که برای تحریک پایههای + و - رله باید استفاده شود معمولاً 5 یا 12 ولت است. ولتاژ فعال سازی رلههای معمولاً بر روی بدنهی آنها درج میشود.
برای کسب اطلاعات جامعتر در مورد رله نیز می توانید به لینک زیر مراجعه کنید:
http://www.rowand.net/Shop/Tech/AllAboutRelays.htm (http://www.rowand.net/Shop/Tech/AllAboutRelays.htm)
حال که با رله آشنا شدهایم، میتوان با استفاده از چند عدد رله مداری طراحی نمود که ، در حالت معمولی خازنها با یکدیگر موازی بسته شوند و برای شارژ شدن به باطری متصل شوند، و در حالت دیگر، رلهها به صورت سری بر روی سلنویید تخلیه شوند.
منبع:سايت رشد
ریپورتر
19th December 2009, 10:31 PM
در این جلسه طبق قرار ابتدا به مداری نسبتاً ساده برای سیستم شوت میپردازیم. برای طراحی مدارات الکترونیکی راهاندازی سلنویید در سیستم شوت ربات روشهای مختلفی وجود دارد، ما ابتدا به تشریح روشی که در جلسهی گذشته معرفی شد خواهیم پرداخت.
اساس کار و مبنای علمی طراحی این مدار در جلسهی گذشته تشریح شد. در زیر مداری را میبینیم که 2 عدد خازن را در حالت نخست که رلهها تحریک نشدهاند، توسط ولتاژ 12 ولت شارژ میکند، و در حالت دوم (رلهها تحریک شدهاند) خازنها بهصورت سری بر روی سلنویید تخلیه میشوند.
حالت نخست:
http://roshd.ir/portals/0/0and1/robotic2/sel_charge_circuit.gif
حالت دوم:
http://roshd.ir/portals/0/0and1/robotic2/sel_decharge_circuit.gif
البته مداری که برای سیستم شوت بسته میشود معمولاً از تعداد بیشتری خازن استفاده میشود تا ولتاژ نهایی که بر روی سلنویید قرار میگیرد بیشتر باشد. اما ما در اینجا برای سادهتر شدن مدار، فقط از 2 خازن استفاده کردهایم.
همچنین نوع رلهای که برای این مدارها معمولاً استفاده میشود، از نوعی که در مدار بالا استفاده میشود نیست، نوع دیگر رله وجود دارد که با تحریک آن میتوان همزمان 2 اتصال را برقرار کرد که به اصطلاح به این نوع رله 2 کانتَکت (یا 2 کُنتاکت) میگویند. در حقیقت بهجای هر دو رلهی معمولی (یک کانتَکت) در مدار بالا، میتوان از یک رلهی 2-کانتَکت استفاده کرد.
http://roshd.ir/portals/0/0and1/robotic2/relay_2con.jpgهمانطور که گفته شد، برای راهاندازی سلنویید در سیستم شوت رباتهای فوتبالیست روشهای دیگری هم وجود دارد که یکی از مهمترین مزایای آنها اشغال فضای کمتر نسبت به روش بالا است،اما محدودیتهایی هم دارند که از جملهی آنها میتوان به هزینهی بالای آن اشاره کرد. در جلسات آینده با روش دیگری آشنا خواهیم شد که بدون استفاده از خازن و رلههای متعدد، سلنوید را تحریک کرد.
در ادامهی این جلسه به مبحث رباتهای فوتبالیست دانشآموزی برمیگردیم و آخرین تغییراتی که از سوی فدراسیون جهانی روبوکاپ اعمال شده است را در قوانین این لیگ بررسی خواهیم کرد.
یکی از مهمترین تغییراتی که در قوانین اعمال شده است، در رنگآمیزی کف زمین مسابقه و دیوارههاست. در قوانین جدید کف زمین مسابقه توسط یک موکت سبز رنگ پوشیده شده است.
فضای داخل دروازهها نیز در یک سمت بهرنگ زرد و در سمت دیگر بهرنگ آبی، رنگآمیزی شده است.
http://roshd.ir/portals/0/0and1/robotic2/j_s_oview.jpg http://roshd.ir/portals/0/0and1/robotic2/j_s_oview2.jpg
این تغییر در رنگ کف زمین مسابقه باعث میشود نتوان سیستم مکانیابیای که مبتنی بر طیف رنگی کف زمین است استفاده کرد و در نتیجه تعیین مختصات تقریبی ربات در زمین مسابقه کمی پیچیدهتر می شود. در جلسات آینده در مورد انواع سیستمهای مکانیابی بحث خواهیم کرد.
در قوانین جدید تغییر خاصی در سایز زمین و دروازهها نداریم ، همچنین در سایز و وزن خودِ رباتها هم تغییری وجود ندارد، بهجز یک مورد که منطقهی تسخیر توپ برای ربات 1 سانتیمتر افزایش داشته است و در مجموع به 3 سانتیمتر رسیده است.
منطقهی تسخیر توپ (Ball Capturing Zones) در قوانین مسابقات خوارزمی 1388 این چنین ترجمه شده است:
"مناطق تسخیر توپ بهعنوان هر فضای داخلی در رباتها که شامل یک لبه مستقیم در قسمتهای بر آمده رباتها باشند، تعریف میشود."
در حقیقت بخشی از ربات که برای دریافت توپ در نظر گرفته شده است، منطقهی تسخیر توپ در ربات نامیده میشود. طبق قوانین جدید حداکثر عمق نفوذ توپ در داخل بدنهی ربات (که همان منطقهی تسخیر توپ است) نمیتواند بیش از 3 سانتیمتر باشد.
در نهایت مهمترین تغییری که در قوانین جدید اعمال شده است، تغییر در نوع توپ مسابقات است. از مهمترین مزایای این توپ جدید نسبت مدل قبلی میتوان از مصرف انرژی کمتر، عدم تداخل با نور محیط و مقاومت فیزیکی بیشتر نام برد.
در مورد ساختار فنی این توپ و روشهای آشکارسازی امواجی مادون قرمزی که از آن انتشار مییابند در جلسهی آینده توضیح خواهیم داد.
منبع:سایت رشد
ریپورتر
11th January 2010, 11:35 AM
این جلسه در مورد نحوهی استفاده از LCDهای کاراکتری (Alphanumeric LCD) در محیط CodeVision توسط میکروکنترلرهای AVR توضیح خواهیم داد.
نمايشگر چيست؟
نمایشگر قطعهاي الکترونیکی است که با اتصال آن به میکروکنترلر میتوان هرگونه تصویری را بهنمایش درآورد. نمایشگرها در مدلهای بسیار متنوع برای کاربردهای مختلف در بازار وجود دارند. از LCDهای رنگیای که در موبایلها استفاده میشوند گرفته تا مدلهای بسیار ابتدایی مانند 7segment قبلاً با آن آشنا شدهایم. در این جلسه ما با نوعی نمایشگر LCD آشنا خواهیم شد که بهوسیله ی آن میتوان تمام نمادهایی که در سیستم کدگذاری ASCII وجود دارند را به نمایش در آورد. همانطور که قبلاً اشاره شد، این نمادها شامل تمام حروف الفبای بزرگ و کوچک، اعداد لاتین و .... هستند. این نوع LCD را در اصطلاح تجاری LCDهای کاراکتری (Alphanumeric LCD) میگویند.
http://roshd.ir/portals/0/0and1/robotic2/16x2lcd-750.jpg
http://roshd.ir/portals/0/0and1/robotic2/blue_lcd.jpghttp://roshd.ir/portals/0/0and1/robotic2/blue_lcd2.jpg
نمایشگرها در ساخت رباتها و دستگاههای هوشمند الکترونیکی کاربرد بسیار زیادی دارند. با ذکر چند مثال شما را با کاربرد این نمایشگرها بیشتر آشنا میکنیم.
در ربات مینیاب برای اعلام مختصات مینها به داور، باید روبات مجهز به نمایشگری باشد که بتوان این اطلاعات را بر روی آن به نمایش درآورد.
در ربات فوتبالیست، نمایشگر در زمان مسابقه کاربرد مستقیمی ندارد، اما در مراحل عیبیابی و تنظیمات اولیه سنسورها کاربرد زیادی دارد. مثلاً برای تنظیم حساسیت هر سنسور، اطلاعات آن بر روی صفحه نمایش به کاربر نشان داده میشود و کاربر میتواند آن را سریع تر تنظیم کند. بهعنوان مثال برای تنظیم سنسورهای نوری میتوان ولتاژ خروجی آن را توسط ADC اندازهگیری کرد و بر روی LCD نمایش داد.
از دیگر موارد کاربرد این نوع LCDها میتوان به دستگاههای تلفن خانگی اشاره کرد که بهکمک آن، دادههایی مثل شمارهی تلفن فرد تماسگیرنده، دفترچه تلفن و ... را نمایش میدهد.
LCDهای کارکتری در سایزهای مختلفی وجود دارند. سایز این نوع LCD را بر اساس تعداد کاراکترهایی که در هر سطر و ستون نمایش داده میشوند، تعیین میکنند. پرکاربردترین سایز LCDهای کاراکتری 16*2 است، یعنی این LCD میتواند 2 ردیف 16 تایی کاراکتر را همزمان روی صفحه نمایش دهد. قیمت این LCD در تهران حدود 3000 تومان است.
چگونه از LCD استفاده کنیم؟
در ساختمان داخلی این LCDها مدارات متعددی وجود دارد که اطلاعاتی که برای نمایش دادن به LCD فرستاده میشود را پردازش کرده و اطلاعات مورد نظر ما را روی صفحه بهنمایش در میآورند. این اطلاعات باید از طریق پایههای LCD به آن منتقل شوند. برقراری ارتباط و نمایش اطلاعات بر روی LCD کار چندان ساده ای نیست، اما CodeVision در اینجا هم به کمک ما آمده است و کار را بسیار ساده کرده است.
توضیح در مورد نحوهی استفاده از LCD را از تنظیمات نرمافزاری آن در محیط codevision شروع میکنیم.
تنطیمات اولیه در CodeVision برای راهاندازی LCD:
Codevision را باز کرده و طبق روندی که قبلاً گفته شد پروژهی جدیدی بسازید. سپس در Code Wizard تنظیمات مربوط به لبهی Chip را طبق آنچه قبلاً گفته شد انجام دهید.
حالا سراغ لبهی LCD میرویم.
برای راهاندازی LCDهای کارکتری، باید تمام پایههای یکی از پورتهای میکروکنترلر را به پایههای مربوطه در LCD متصل کنیم.
ابتدا باید تعیین کنیم میخواهیم کدام پورت را به LCD اختصاص دهیم.
سپس باید با تعیین تعداد کاراکترهای قابل نمایش در هر سطر از LCD نوع آن را مشخص کنیم. مثلاً اگر LCD ما 16*2 است، باید عدد 16 را انتخاب کنیم.
سپس نحوهی اتصال پایههای میکروکنترلر به LCD را با توجه به نوع LCD به شما نشان میدهد.
http://roshd.ir/portals/0/0and1/robotic2/LCD_CW.gif
برای مثال ترتیب اتصال پایهها برای LCD 16*2 بر روی پورت "B" در زیر نشان داده شده است.
پایه PB.0 به پایهی چهارم LCD متصل شود.
پایه PB.1 به پایهی پنجم LCD متصل شود.
پایه PB.2 به پایهی ششم LCD متصل شود.
پایه PB.3 به جایی متصل نمیشود.
پایه PB.4 به پایهی یازدهم LCD متصل شود.
پایه PB.5 به پایهی دوازدهم LCD متصل شود.
پایه PB.6 به پایهی سیزدهم LCD متصل شود.
پایه PB.7 به پایهی چهاردهم LCD متصل شود.
بعد از اینکه طبق ترتیب ذکر شده پایهها را متصل کردیم، و تنظیمات اولیه را در CodeWizard انجام دادیم، سراغ برنامهنویسی آن می رویم. CodeVision توابعی را آماده کرده است که به کمک آنها میتوانیم بهسادگی اطلاعات موردنظر خودمان روی LCD نمایش دهیم، اما از آنجایی که ما هنوز با مبحث توابع آشنایی نداریم، فعلاً این توابع را به صورت دستورهاي از پیش تعیین شده استفاده میکنیم. در جلسههاي آینده حتماً در مورد مبحث توابع مفصلاً توضیح خواهیم داد.
4 دستور اصلی برای نمایش اطلاعات روی LCD:
1- lcd_putchar(‘ ‘);
این دستور برای نمایش یک کاراکتر بر روی LCD استفاده میشود. مثلاً دستور زیر حرف F را بر روی LCD نمایش میدهد: lcd_putchar(‘F’);
2- lcd_putsf(“ “);
این دستور برای نمایش یک رشته از حروف بر روی LCD استفاده میشود. مثلاً دستور زیر جملهی it is a test را بر روی LCD نمایش میدهد:
lcd_putsf(“it is a test”);
3- lcd_clear();
این دستور برای پاک کردن LCD مورد استفاده قرار میگیرد. این دستور هر کاراکتری را که روی LCD در حال نمایش باشد پاک میکند.
4- lcd_gotoxy( , );
بهکمک این دستور میتوان تعیین کرد کاراکتر یا جملهی مورد نظر ما در کدام سطر و ستون در LCD نوشته شود. مثلاً دستورهاي زیر lcd را پاک کرده و واژهی Hello را از وسط سطر دوم مینویسد. شمارهگذاری سطرها و ستونها از 0 شروع میشود. پس سطر شمارهی 1 ، سطر دوم است.
lcd_clear();
lcd_gotoxy(1,7);
lcd_putsf(“Hello”);
سایر پایههای LCD:
LCD نیز مانند هر قطعهی الکترونیکی دیگر نیاز به 2 پایه برای تغذیه + و – دارد. در LCDهای 16*2 اختلاف پتانسیل مورد نیاز برای تغدیه باید 5 ولت باشد. پایه شمارهی 1 باید به GND و پایهی شمارهی 2 باید به 5 ولت متصل شود. پایهی شمارهی 3 نیز برای تنظیم نور زمینه در LCD تعبیه شده است. در حالت معمولی باید این پایه مستقیماً به GND متصل شود.
پایههای 15 و 16 نیز برای تغذیهی نور پشت زمینه هستند. پایهی 15 به Vcc (5 ولت) و پایهی 16 به GND متصل میشود.
http://roshd.ir/portals/0/0and1/robotic2/lcd_run_circ.gif
منبع:سایت رشد
ریپورتر
29th March 2010, 10:14 AM
بتدا مقدمهای کوتاه در باب رباتهای آتشنشان:
همانطور که می دانید ربات آتشنشان از نظر پیچیدگیهای فنی، عموماً در سطح دانشآموزی ردهبندی میشود. از آنجا که این لیگ جزو لیگهای رسمی فدراسیون جهانی روبوکاپ نیست، برای طراحی و ساخت این رباتها قوانین ثابتی وجود ندارد و در هر مسابقه قوانینی ویژهی همان مسابقات وضع میشود. در مجموع شاید بتوان گفت وجه اشتراک رباتهای آتشنشان در تمام مسابقات فقط همین عملیات اطفأ حریق آنهاست. در مورد سایر ویژگیهای این ربات ها در مسابقات مختلف، تقریباً نکتهی مشترکی وجود ندارد و در هر مسابقه قوانینی مختص همان مسابقه وضع میشود. مثلاً در یک مسابقه سطح زمین مسابقه از ماسه بادی پوشیده شده است و در دیگری سطح زمین مسابقه از جنس MDF سفید است. در حال حاضر معتبرترین مسابقاتی که این لیگ را نیز دارا هستند، جام دانشگاه امیرکبیر (AUT CUP) و مسابقات دانشگاه نوشیروانی بابل است.
همانطور که گفته شد، مهمترین ویژگی و توانایی یک روبات آتشنشان، قابلیت یافتن و خاموش کردن آتش است. اما در مسابقات مختلف، برای بالا بردن سطح فنی روباتها، تعریف روبات را کمی پیچیدهتر میکنند و به عنوان مثال قابلیت مسیریابی ساده را نیز به روبات اضافه میکنند و روبات باید بخشی از زمین مسابقه را با توجه به خط سیاهی که در زمینهی سفید کشیده شده است پیمایش کند.
برای تشریح ساختار یک روبات آتشنشان، نخست میپردازیم به روش های مختلف کشف و خاموش کردن آتش:
همانطور که قبلاً هم گفته شد، آتش یک منبع پرنور در طیف مادون قرمز است، به بیان دیگر آتش به شدت از خود مادون قرمز گسیل می کند. در نتیجه راحتترین روش برای آشکار سازی آتش و تشخیص آن استفاده از سنسورهای مادون قرمز معمولی است که در جلسهی چهاردهم دو مدار برای راه اندازی آن ارایه شد. اما روش پیدا کردن آتش:
سیستم حرکتی روباتهای آتش نشان معمولاً دیفرانسلی (مانند تانک) است.
برای تشریح سادهترین روش پیدا کردن آتش، شکل زیر را در نظر بگیرید:
http://www.roshd.ir/portals/0/0and1/robotic2/robo-051-01.gif
در شکل بالا روبات و آتش به صورت نمادین نشان داده شدهاند و قسمت جلوی ربات نیز با فلش مشخص شده است (در قسمت جلوی ربات باید یک چرخ هرزگرد نیز نصب شود). حال کافیست یک سنسور نوری را در جلوی ربات و در راستایی که فلش نشان می دهد نصب کنید (یعنی راستای دید سنسور در جهتی باشد که شکل نشان میدهد). این سنسور را با یکی از آن دو مدار راهاندازی کنید. سادهترین الگوریتم کشف آتش این است که به ربات دستور دهیم تا در جا بهدور خود بچرخد، این امر باعث میشود سنسوری که در جلوی آن قرار دارد، کل زمین را با یک بار چرخیدنِ روبات ببیند. حال کافیست به روبات دستور دهیم که هر وقت سنسور جلوی روبات آتش را دید، چرخیدن را متوقف کنند و مستقیماً به سمت آتش حرکت کند. به این ترتیب ربات به سرعت میتواند آتش را پیدا کند و به سمت آن حرکت کند. این الگوریتم آنقدر ساده است که حتی بدون استفاده از مدارات میکروکنترلردار نیز میتوان آن را پیاده سازی کرد.
حالا مشکل این است که اگر روبات همینطور مستقیم به سوی آتش حرکت کند با آن برخورد خواهد کرد و احتمالاً آسیب خواهد دید. پس نیاز به سیستم دیگری داریم که روبات را در فاصلهی مناسبی از آتش متوقف کند تا از برخورد با آتش جلوگیری شود و روبات از آنجا بتواند آتش را با مکانیزمهایی که بعداً در مورد آن صحبت خواهیم کرد خاموش کند. این فاصله در حدود 20 سانتیمتر است که البته در مورد رباتهای مختلف متفاوت است. برای این کار نیز الگوریتم سادهای وجود دارد که باز هم با یک سنسور نوری معمولی مشکل ما را حل میکند. کافیست یک سنسور نوری را به شکلی بر روی ربات نصب کنید تا فقط هنگامی که ربات به آتش نزدیک شد این سنسور آتش را ببیند. مهمترین نکتهی این روش هم مکان نصب این سنسور نوری است. این سنسور باید در قسمت جلوی ربات (در شکل بالا با فلش نشان داده شده است) و با ارتفاع 15 سانتیمتر از شاسی ربات نصب شود. جهت دید آن نیز باید عمود بر زمین مسابقه باشد. یعنی این سنسور باید بر روی یک پایهی 15 سانتی متر بر روی همان سنسور اول نصب شود، و زاویهی آن نیز عمود بر زمین مسابقه باشد (یعنی راستای دید آن به سمت کف زمین مسابقه باشد تا بتواند از بالا آتش را مستقیماً ببیند). به این ترتیب این سنسور فقط زمانی آتش را میبیند که ربات دقیقاً بر روی اتش قرار گرفته باشد، حال میتوان با کمی تغییر زاویهی این سنسور آن را طوری تنظیم کرد که از کمی عقبتر نیز همین سنسور آتش را ببیند.
در نهایت کافیست به ربات دستور دهیم تا به محض دیدن آتش توسط سنسور دوم، حرکت خود را متوقف کند و عملیات اطفا حریق را آغاز کند.
منبع:سایت رشد
pooriarezai7
1st April 2010, 10:49 PM
سلام.چجوری این رنگارو حساب کردید 1 کیلو اهم شد؟
لطفا توضیح بدید
نسترن امیری
13th April 2010, 11:38 AM
سلام برای گارگاه رباتیک چی لازم داریم؟
ریپورتر
13th April 2010, 12:05 PM
اينا براي شروع خوبه
۱- منبع تغذيه ۴۶ ولت ۵ آمپر
۲-هويه
۳-قلع کش
۴-فيبر سوراخ دار
۵-برد برد
۶-LED رنگ های مختلف و اندازه های مختلف
۷-مقاومت از رنج .۵ اهم تا ۱ مگا اهم
۸-خازن عدسی ۱۰n , 100n , 33n
9-خازن پولي استر از 1uf تا ۲۲۰۰uf
10-کريستال ۱۲MZH و ۱۱.۰۵۹۲
۱۱-array 10k,1k,470
12-پروگرامر ( حتما 89s51 , 89c51 , 89c4051) را پراگرام کند
۱۳-مولتی متر
۱۴-micro 89s51
۱۵-گيت های منطقی and,or,nor,xnor,not,...
16-سیم به مقدار لازم
۱۷-انبر دست و سیم چین و پیچ گوشتی در اندازه های مختلف
۱۸-پایه ای سی ۸و۱۰و۱۴و۱۶و۱۸و۲۰و۴۰ پین
16- IC های زير
L298
L293
LM328
LM358
555
7805
7808
GP2S04
BD138
BD139
TIP41
TIP42
POT 1k , 10k , 5k , 100k
Multiturn 1k , 5k , 10K , 100k
کليد
پايه سوکت
pooriarezai7
13th April 2010, 01:34 PM
آره واسه یه کارگاه ابتدایی در سطح مدرسه یا آموزشگاه برای ساخت ربات های ساده اینا بسته.
ممنونم مهدی جان{happy}
ریپورتر
13th April 2010, 02:21 PM
آره واسه یه کارگاه ابتدایی در سطح مدرسه یا آموزشگاه برای ساخت ربات های ساده اینا بسته.
ممنونم مهدی جان{happy}
سلام اره بابا اضافه هم هست البته ميگم بستگي به پروژه رباتت داره ولي همين ها براي شروع بسه
robofire
28th April 2010, 11:47 PM
سلام خیلی خوب پیش می روید
لطفا اگر می شود مطلبی راجع به سنسور قطب نما و طریقه ی بستن آن در مدار توضیح دهید
با تشکر
ریپورتر
29th April 2010, 02:42 PM
این جلسه هم سیستمهای مختلف خاموش کردن آتش را مورد بررسی قرار دهیم.
یکی از سادهترین و رایجترین روشهای خاموش کردن آتش پاشیدن آب یا مواد ضد اشتعال دیگر بر روی آتش است. برای مجهز کردن ربات به این سیستم، فقط نیاز به یک عدد پمپ آب و یک مخزن کوچک برای ذخیرهی آب و یک مدار راه اندازی مختصر داریم. این روش از نظر پیچیدگی از سایر روشهای رایج سادهتر است و پیچیدگی مکانیکی و الکترونیکی زیادی هم ندارد.
پمب آب :
برای پمپ آب از پمپ آب شیشه شوی خودروی پراید استفاده میکنیم. برای تهیهی این پمپ میتوانید به فروشگاههای قطعات یدکی پراید مراجعه کنید.
این تصویر یک عدد پمپ شیشه شوی پراید به همراه منبع ذخیرهی آب آن است.
http://www.roshd.ir/portals/0/0and1/robotic2/robo-052-01.png
نحوهی استفاده :
این پمپ با ولتاژ 12 ولت راه اندازی میشود. وقتی به دو سر موتور این پمپ ولتاژ 12 ولت با جریان مناسب اعمال شود، این پمپ از دریچهی 1 آب را به داخل میکشد و از دریچهی 2 آب را با فشار به بیرون میپاشد. در نتیجه دریچهی شماره 1 باید توسط یک شیلنگ به یک مخزن آب متصل شود و آب خروجی از دریچهی 2 نیز باید توسط یک شیلنگ به سمتی هدایت شود که ربات بتواند آن را به روی آتش بریزد.
برای راه اندازی آن ابتدا سوکتی که بر روی دو سیم موتور نصب شده است با سیم چین جدا کنید (نیازی به آن سوکت نیست). حالا باید این دو سیم خارج شده از پمپ را توسط یک مدار کنترلی ساده کنترل کنید تا در مواقع لزوم پمپ روشن و خاموش شود.
مدار راه اندازی:
این پمپ جریان نسبتاً زیادی برای راه اندازی نیاز دارد، ما در اینجا قصد طراحی مداری را داریم که در آن یک خروجی 0 یا 5 ولت از میکرو کنترلر دریافت میکنیم و آن را به یک رلهی 5 ولت میدهیم تا رله تحریک شود، رله هم در حالت تحریک شده یک باطری 12 ولت را به پمپ متصل میکند. اما جریان خروجی میکروکنترلر ممکن است برای راه اندازی رله نیز کافی نباشد، در نتیجه از یک تقویت ترانزیستوری ساده نیز برای تقویت جریان خروجی میکروکنترلر به رله استفاده میکنیم. در نهایت مدار زیر را خواهیم داشت:
http://www.roshd.ir/portals/0/0and1/robotic2/robo-052-02.gif
دقت کنید در این مدار ما از 2 منبع تغذیه استفاده میکنیم. یکی 12 ولت، یکی 5 ولت. ولتاژ 5 ولت برای استفاده در مدار میکروکنترلر، کلکتور ترانزیستور و در نهایت تحریک رله، و 12 ولت برای فعال سازی پمپ آب. همانطور که در جلسات گذشته گفته شد، برای تحریک رلهی 5ولت باید به پایههای تحریک آن ولتاژ 5 ولت بدهیم. در مدار بالا نیز پس از تحریک رله، ولتاژ 12 ولت به پمپ منتقل میشود و باعث فعال شدن آن میشود.
اما بپردازیم به راههای دیگری که برای خاموش کردن آتش وجود دارد. یکی دیگر از مطرحترین روشها برای خاموش کردن آتش، روش خفه کردن آن است.
روش خفه کردن آتش :
در این روش با گذاشتن یک در پوش بر روی ظرفی که در آن آتش درست شده است، مانع رسیدن اکسیژن به آتش میشویم و به این طریق آتش به سرعت خاموش میشود.
http://www.roshd.ir/portals/0/0and1/robotic2/robo-052-03.jpg
این روش سرعت بسیار مناسبی دارد و اگر به درستی اجرا شود بسیار سریعتر از روش قبلی میتواند آتش را خاموش کند. اما پیاده سازی این سیستم بر روی روبات کمی پیچیده است. پیچیدگی مکانیکی این سیستم نسبتاً بیشتر از سیستم قبلی است و نیاز به طراحی مکانیکی دقیق و کمی تجربه در این زمینه دارد.
برای خاموش کردن آتش روشهای ابتکاری دیگری هم وجود دارد، از دوستان عزیز هم تقاضا میکنم اگر ایدهی خاصی برای خاموش کردن آتش به ذهنشون میرسه در بحث ما مشارکت کنند و ایدهی خوبشون را با بقیهی دوستان در میان بگذارند.
جلسهی آینده دوباره به سراغ برنامه نویسی زبان C میرویم و شما را با مبحث توابع در زبان C آشنا خواهیم کرد. در باب اهمیت این مبحث باید عرض کنم که مبحث توابع شاید بتوان گفت مهمترین و پر کاربردترین مبحث در زبان C و اصولاً پایهی برنامه نویسی درمتُد ساخت یافته است.
ریپورتر
11th June 2010, 07:45 PM
در این جلسه در مورد استفاده از توابع در برنامهنویسی به زبان C بحث خواهیم کرد. به طبع اکثر مطالبی که در این جلسه مطرح میشود، فقط مختص بحث روباتیک نیستند، بلکه مربوط به روش برنامه نویسی به زبان C هستند. از این منظر بحث این جلسه بسیار مهم و پرکاربرد است.
بدون مقدمهی بیشتر به بحث باز میگردیم. تا کنون روش برنامهنویسی ما به این صورت بوده که تمام دستوراتی که می خواهیم روبات آنها را اجرا کند، به ترتیب در قسمتی که نوشته شده است (“Place your code here”) مینویسیم، و میکروکنترلر هم آنها را به ترتیب مشخص شده اجرا میکند.
اما این روش در طراحی و نوشتن برنامههای بزرگتر برای رباتهای حرفهای تر ما را دچار مشکل خواهد کرد. مثلاً در نوشتن یک برنامهی پیشرفتهتر، ممکن است در چندین جای مختلف برنامه، یک سری دستورات خاص عیناً تکرار شود. مثلاً فرض کنید در یک روبات مین یاب، ممکن است در 10 جای مختلف برنامه نیاز باشد به موتورها فرمان توقف داده شود. این فرمان توقف برای 4 موتور، حداقل نیاز به 8 خط برنامه دارد. حالا فرض کنید این رویه برای ده ها فرمان دیگر نیز در برنامه تکرار میشود، که فرمان "توقف" شاید سادهترین و کوتاهترین آنها باشد!
این روش برنامهنویسی علاوه بر زمان بَر بودن و پیچیده بودن، مشکلات دیگری هم دارد، از جمله این که از خوانایی برنامه به شدت کاسته میشود و به جز شخصی که برنامه را نوشته است، افراد دیگر به سختی خواهند توانست برنامهی نوشته شده را بررسی کنند و در صورت لزوم تغییراتی در آن اعمال کنند یا بخشهایی به آن اضافه یا کم کنند. در نتیجه امکان انجام یک کار گروهی بر روی یک برنامه میسر نخواهد بود و بالاخره برنامه های بزرگ و حرفهایتر(مثل یک بازی کامپیوتری، یا یک سیستم اتوماسیون) شاید اصلاً امکان به وجود آمدن نداشته باشند.
همچنین در چنین برنامهای، به علت حجم بسیار زیاد برنامه، اشکال زدایی به شدت مشکل میشود و در صورت بروز هر گونه خطایی در سیستم، به سختی میتوان مشکل را در برنامه یافت و آن را اصلاح کرد.
این مشکلات و شاید بسیاری دیگر، متخصصان امر را وادار به تهیهی چارچوب و اصول دقیقی در روش نوشتن برنامهها کرد. این اصول در قالب متدهای مختلف برنامه نویسی در طول سالیان متمادی، از لحظهی شکل گیری کامپیوتر تا به امروز، توسط افراد و نهادهای مختلف بین المللی مربوطه عرضه و تکمیل شده است. و هدف آنها نیز صرفاً کشف راهکارهایی برای بهبود روشهای برنامه نویسی و به دنبال آن ایجاد برنامههایی کار آمدتر و مناسبتر، با هزینههای پایینتر بوده است.
نخستین متدی که مورد پذیرش اکثر نهادها و شرکتهای بزرگ بین المللی قرار گرفت ، متد "ساخت یافته" بود. این متد بسیاری از مشکلات شرکتهای بزرگ تولید نرم افزار و کاربران حرفهای را حل کرد و تا سالها به عنوان کاملترین متد مورد پذیرش و استفاده قرار گرفت. هر چند پس از آن متدهای دیگری هم ارایه شد که شاید کار آمدتر هم بودند، اما هنوز هم این متد، به دلیل سادگی نسبی، طرفداران بسیاری دارد.
زبان C یک زبان ساخت یافته است، یعنی در برنامهنویسی به این زبان، برنامهنویس موظف است اصول برنامهنویسی ساخت یافته را رعایت کند. به همین خاطر از این به بعد ما تلاش خواهیم کرد شما را هر چه بیشتر با این متد برنامه نویسی آشنا کنیم تا انشاالله بتوانید برنامههای حرفهای تری را برای رباتهای پیشرفتهتر بنویسید.
برنامهنویسی ساختیافته:
مبنای برنامه نویسی ساخت یافته بر استفاده از توابع است. در این متد، یک برنامهی بزرگ، به چندین زیر برنامهی کوچکتر تقسیم میشود که هر کدام از این زیر برنامهها بخش یا بخشهایی از وظایف برنامهی اصلی را انجام میدهند. این زیر برنامهها در مجموع برنامهی اصلی را تشکیل میدهند. هریک از این زیر برنامهها تابع نام دارند.
در حقیقت در متد ساخت یافته، هیچ قسمتی از برنامه خارج از این توابع نوشته نمیشود، بلکه برای هر بخش از برنامه، متناسب با عملی که آن بخش انجام میدهد، تابعی تعریف میشود.
برای نوشتن یک برنامهی ساخت یافته، ابتدا باید تمام اعمالی که قرار است توسط این برنامه انجام شود لیست شوند. مثلاً برای یک ربات، باید تمام فرمانهایی که قرار است به بخشهای مختلف ربات داده شود(مثل موتورها، LCD، سنسورها و ...) لیست شوند، سپس برای هر بخش، یک تابعی متناسب با آن تعریف شود تا اعمال مربوط به آن بخش توسط آن تابع اداره شود. مثلاً برای موتورها میتوان تابعی تعریف نمود که کنترل موتورها را انجام دهد و بنا بر شرایط فراخوانی تابع، ربات را به یک جهت مشخصی حرکت دهد.
بحث در مورد توابع را به صورت مفصل در جلسهی آینده ادامه خواهیم داد، اما لازم میدانم در اینجا به چند مورد از مهمترین فواید برنامه نویسی با متد ساخت یافته، به نقل از کتاب مهندس جعفر نژاد قمی اشاره کنم.
1نوشتن برنامههای ساخت یافته آسان است، زیرا برنامههای پیچیده به بخشهای کوچکتری تقسیم میشوند و هر بخش توسط تابعی نوشته میشود. دستورالعملها و دادههای موجود در تابع، مستقل از سایر بخشهای برنامه است.
2همکاری بین افراد تیم را فراهم میکند. به طوری که افراد مختلف میتوانند بخشهای مختلفی از برنامه را بنویسند.3اشکال زدایی برنامههای ساخت یافته سادهتر است. اگر برنامه اشکالی داشته باشد، بررسی تابعی که اشکال در آن به وجود آمده است، ساده است.4برنامه نویسی ساخت یافته موجب صرفه جویی در وقت میشود. بدین ترتیب که، اگر تابعی بنویسید که عملی را در برنامهای انجام دهد، میتوانید آن تابع را در برنامهی دیگری که به این عمل نیاز دارد، به کار ببرید. حتی اگر، با تغییر اندکی در توابع نوشته شده، بتوانید آنها را در برنامههای دیگر به کار ببرید، باز هم مقرون به صرفه است.
توابع:
توابع در زبان C از دو زاویه قابل بررسی هستند، نخست تعریف توابع؛ دوم، فراخوانی توابع.
تعریف تابع: از یک مجموعه دستورات برنامهنویسی تشکیل شده است که عملکرد و وظایف آن تابع را مشخص میسازد.
فراخوانی تابع: دستوراتی که در داخل آن تابع تعریف شده است را اجرا میکند.
فراخوانی هر تابع، توسط یک دستور صورت میگیرد، این دستور همان نام تابع است. یعنی در هر کجای برنامه که نام یک تابع نوشته شود، روند اجرای برنامه در آن خط متوقف میشود، و دستوراتی که در داخل آن تابع نوشته شده است، یکبار اجرا میشود. پس از اجرای دستورات داخل آن تابع، اجرای برنامه مجدداً از همان جایی که متوقف شده بود دنبال میشود.
منبع:http://www.roshd.ir
jojepanbeyi
16th August 2010, 05:32 PM
سلام دوست عزیز من تازه می خوام شروع کنم به یادگیری روباتیک.واسه شروع راهنمایی نیاز دارم اگه کمکم کنید ممنون میشم[golrooz]
hengameh
16th August 2010, 05:39 PM
سلام دوست عزیز من تازه می خوام شروع کنم به یادگیری روباتیک.واسه شروع راهنمایی نیاز دارم اگه کمکم کنید ممنون میشم[golrooz]
سلام دوست عزیزم
خیلی خوش اومدین[esteghbal]
خب برای شروع شما میتونین از مطالب اولیه این تایپیک استفاده کنین هر جاییشم که گنگ بود و نیاز به کمک داشت میتونین رو بچه های گله این بخش حساب کنین
(البته رو کمکه منم میتونی حساب کنی ولی نه بعنوانه یه گل[nishkhand])
0212121
19th August 2010, 06:30 PM
سلام دوست عزیز من هم مثل تو تازه شروع کردم ولی با استفاده از مطالب این تاپیک تا حد زیادی پیش رفتم اگه از اول همه مطالب را بخونی و یه کم پشتکار دا شته باشی میتونی رباتت را بسازی اگه باز هم به مشکلی بر خوردی می تونی با بچه ها تالار برق مشورت کنی
رو بچها حساب ویژه باز کن آخه خیلی گلن من و هم خیلی کمک کردن[esteghbal]
mhkcoder
7th September 2010, 04:44 PM
سلام یه سوال دارم اونم اینکه چرا تو انجمن های فارسی انقد سرعت پاینه و مباحثی که میتونن مثل این مبحث مفید باشن باید انقد طول بکشن اخرشم بی سرو ته رها شن[tafakor]
hengameh
7th September 2010, 04:56 PM
سلام
این الان بیشتر انتقاده تا سوال
ولی دوست عزیز در کمال احترام باید عرض کنم این حضور دوستان دیگس که به آدم انگیزه میده برای ادامه دادن وقتی دوستان کم لطفی کنن نتیجه اون بی نتیجه رها شدنه بحثه بعدشم واقعن به نظرت این تایپیک نیمه کاره رها شده؟
در مورد سرعت کمم متاسفانه کاری از دسته ما ساخته نیست چون سرعت تو ایران خیلی پایینه و ما هم یه فروم ایرانی هستیم[nishkhand]
ریپورتر
27th September 2010, 06:32 PM
این جلسه با نحوهی تعریف توابع آشنا خواهیم شد.
همانطور که در جلسهی گذشته هم اشاره شد، وقتی تابعی توسط تابع دیگری فراخوانی میشود، دستورات آن تابع اجرا میشود. پس از اجرای دستورات تابع، کنترل اجرای برنامه به برنامه فراخوان بر میگردد. پس از برگشت از تابع فراخوانی شده، اولین دستور بعد از فراخوانی تابع (در تابع فراخوان) اجرا میشود.
بحث را با تعریف تابع دنبال خواهیم کرد. برای تعریف تابع باید اهداف تابع مشخص باشد. اینکه تابع باید دقیقاً چه بخش از مسولیتهای کل برنامه را انجام دهد و بر آن اساس چه ورودی و خروجیهایی دارد.
تعریف توابع
یک تابع در زبان C طبق الگوی زیر تعریف میشود:
<نوع خروجی تابع) نام تابع <ورودیهای تابع)
{
<دستور 1>
<دستور 2>
.
.
.
n دستور
}
الگوی تابع:
خط اول هر تابع را، که متشکل از نام تابع، ورودیها و خروجیهای تابع است را الگو یا پروتوتایپ (Prototype) تابع میگویند.
نام تابع:
نام تابع باید از قوانین Identifierها در زبان C پیروی کند، یعنی همان قوانینی که برای تعیین نام متغیرها و یا کلاً هر شناسهای که در زبان C ، باید رعایت شود. نام تابع را معمولاً متناسب با مسولیتی که آن تابع بر عهده دارد تعیین میکنند.
وردوی تابع
ما میتوانیم در هنگام فراخوانی هر تابع، اطلاعاتی را به آن منتقل کنیم تا تابع بر اساس این اطلاعات رفتار مناسبی انجام دهد، در زبان C به این ورودیهای تابع، پارامتر میگویند.
در حقیقت پارامترها وسیلهای برای تبادل اطلاعات بین تابع فراخوان و فراخوانی شونده هستند. یک پارامتر میتواند یکی از انواع داده در زبان C مثل int، char و ... باشد. همچنین برای هر پارامتر باید یک نام تعیین شود. تعریف پارامترهای یک تابع دقیقاً مانند تعریف متغیر است. مثلاً برای تعریف تابعی که فقط یک ورودی از جنس int دارد باید خط اول تابع به این شکل باشد:
نام تابع نوع خروجی تابع (int temp)
برای دسترسی به اطلاعات ورودی در داخل تابع، باید از نام پارامتر مربوطه استفاده کنیم. مثلاً اگر بخواهیم مقدار ورودی تابع بالا چک کنیم که آیا از عدد فرضی 100 بزرگتر است با خیر میتوانیم دستور زیر را در داخل تابع بنویسیم:
نام تابع نوع خروجی تابع (int temp)
{
if (temp > 100)
{
دستورات
}
else
{
دستورات
}
}
اگر بخواهیم بیش از یک ورودی داشته باشیم، باید در داخل پرانتز پارامترها را با کاما از یکدیگر جدا کنیم:
<نام تابع <نوع خروجی تابع (int temp, int temp2)
چگونه مقدار ورودی تابع را تعیین میکنیم؟
همانطور که گفتیم مقدار ورودی تابع در هنگام فراخوانی تابع تعیین میشود. در قسمت فرواخوانی تابع به این موضوع خواهیم پرداخت.
خروجی تابع
در تعریف بالا <نوع خروجی تابع> یکی از انواع موجود در C مثل int یا char یا ... است، که توسط کاربر تعریف میشود. تابع میتواند مقداری را بر اساس نوع خروجی تابع به تابع فراخواننده باز گرداند. در صورتی که تابع ما خروجی نداشته باشد، باید به جای نوع خروجی، کلمهی کلیدی «void» را بنویسیم.
بر خلاف ورودیهای تابع، خروجی نیازی به نام ندارد. همچنین یک تابع نمیتواند بیش از یک خروجی داشته باشد. برای باز گرداندن یک مقدار به عنوان خروجی، باید آن مقدار را در جلوی کلمهی کلیدی «return» بعد از آخرین خط دستورات تابع بنویسیم. مثلاً فرض کنید تابعی که خروجی آن از جنس int تعریف شده است، میخواهد مقدار 100 را به عنوان خروجی بازگرداند، شکل کلی آن اینگونه خواهد بود:
int ورودی تابع) نام تابع)
{
دستور1;
دستور2;
دستور3;
...
return 100;
}
این مقدار ممکن است در داخل یک متغیر ذخیره شده باشد و شما بخواهید مقدار داخل متغیر را بهعنوان خروجی بازگردانید، برای این کار کافیست در جلوی return نام متغیر را بنویسید. بهعنوان مثال، خط زیر، مقدار داخل متغیر temp را که قبلاً از جنس int تعریف شده است را باز میگرداند.
return temp;
دقت کنید که دستور return حتماً باید در آخرین خط هر تابع نوشته شود، زیرا دستوراتی که بعد از این دستور نوشته شوند، اجرا نخواهند شد، و روند اجرای برنامه به تابع فراخواننده باز گردانده خواهد شد. استفاده از مقداری که به عنوان خروجی باز گردانده میشود مربوط فراخوانی تابع است که در آن بخش به آن اشاره خواهیم کرد. بحث در مورد فراخوانی توابع و نحوهی کار با ورودی و خروجیهای تابع را به جلسهی آینده موکول خواهیم کرد. حالا برای جمعبندی مطالب این جلسه، یک مثال کامل را مطرح میکنیم.
یک تابع به نام move برای کنترل حرکت روبات تعریف خواهیم کرد. این تابع خروجی ندارد، اما یک ورودی از جنس کاراکتر دارد. این کاراکتر 4 مقدار متفاوت میتواند داشته باشد. اگر این ورودی حرف F باشد، روبات باید به سمت جلو حرکت کند. اگر B باشد، به سمت عقب. R باشد به سمت راست؛ و L باشد باید به سمت چپ حرکت کند.
در این جلسه به تعریف این تابع خواهیم پرداخت و فراخوانی آن را به جلسهی آینده موکول خواهیم کرد.
(void move char(dir
{
if (dir == ‘F’)
{دستورات مربوط به جلو رفتن روبات را اینجا مینویسیم}
else if (dir == ‘B’)
{دستورات مربوط به عقب رفتن روبات را اینجا مینویسیم}
else if (dir == ‘R’)
{دستورات مربوط به راست رفتن روبات را اینجا مینویسیم}
else if (dir == ‘L’)
{دستورات مربوط به چپ رفتن روبات را اینجا مینویسیم}
}
همانطور که میدانید، نام تنها پارامتر این تابع، dir است که از جنس کاراکتر تعریف شده است.
خروجی تابع هم Void تعریف شده است و به این معنی است که این تابع خروجی ندارد.
ریپورتر
27th September 2010, 06:34 PM
جلسه گذشته در مورد تعریف توایع و نحوهی معرفی ورودی و خروجیهای توابع بحث کردیم. در این جلسه در مورد فراخوانی توابعی که تعریف شدهاند و نحوهی کار با ورودی و خروجیهای آنها بحث خواهیم کرد.
فراخوانی توابع
برای اجرای دستورات هر تابع، باید تابع فراخوانی شود. برای فراخوانی توابع، کافیست نام تابع را در هر قسمت از برنامه که به آن تابع نیاز هست، بنویسید. سپس مقادیری که باید به عنوان ورودی به تابع تحویل شود را در جلوی نام تابع در داخل یک پرانتز بنویسید. و در پایان هم ";" را فراموش نکنید. به عنوان مثال برای تابعی با نام move به شکل زیر عمل میکنیم:
move(مقادیر ورودی)
نحوهی تعیین ورودیهای تابع
به عنوان مثال تابع ()move را از جلسهی گذشته در نظر بگیرید. این تابع برای کنترل حرکت روبات نوشته شده است و باید یک کاراکتر را به عنوان ورودی دریافت کند.فرض کنید در قسمتی از برنامه میخواهیم به روبات دستور جلو رفتن بدهیم. برای این کار کافیست تابع ()move را با مقدار ورودی (‘F’)، فراخوانی کنیم. برای این کار، کافیست دستور زیر را بنویسید:
move(‘F')
اگر این تابع چند ورودی داشت، باید در هنگام فراخوانی مقادیر توسط کاما از یکدیگر جدا شوند. به عنوان مثال:
temp( ‘F’ , 200);
همانطور که میبینید تابع temp دو ورودی دارد که یکی از جنس حروف (Character) و دیگری از جنس عددی (Integer) است. دقت کنید که اگر جنس پارامتر از Char باشد، باید کاراکترهایی که به عنوان ورودی به تابع ارسال میشوند، در داخل ‘ ‘ قرار گیرند. اطلاعاتی که در هنگام فراخوانی تابع، در جلوی نام تابع (در داخل پرانتز) به عنوان مقادیر ورودی ظاهر می شوند، آرگومان تابع نام دارند. دقت داشته باشید پارامتر ها متغیرهایی هستند که هنگام تعریف تابع، در جلوی نام تابع و در داخل پرانتز قرار می گیرند، اما آرگومانها در هنگام فراخوانی در جلوی نام تابع درج میشوند.
نحوهی استفاده از خروجی تابع
همانطور که در جلسهی گذشته توضیح داده شد، هر تابع میتواند یک مقدار را به عنوان خروجی تابع به فراخواننده بازگرداند. این مقدار از طریق نام تابع قابل دسترسی خواهد بود. یعنی همانطور که مقداری که داخل هر متغیر ذخیره شده است از طریق نام آن متغیر قابل دسترسی است، مقداری که به عنوان خروجی تابع بازگردانده شده است هم، از طریق نام تابع قابل دسترسی است. به عنوان مثال تابع زیر را در نظر بگیرید:
int compass ()
{
دستورات مربوطه;
return degree;
}
این تابع برای خواندن مقدار سنسور قطبنمای الکتریکی نوشته شده است که این مقدار همان زاویهی قطب نما نسبت به قطبهای کرهی زمین است؛ و یک خروجی از جنس int دارد که حامل زاویهای است که قطب نمای الکتریکی نشان میدهد. حالا هر کجا که نام تابع نوشته شود، یکبار تابع فراخوانی میشود و خروجی تابع از طریق نام تابع قابل دسترسی خواهد بود. به عنوان مثال اگر بخواهیم خروجی تابع بالا را از طریق یک دستور شرطی چک کنیم، میتوان دستور زیر را نوشت.
if ( compass() > 128)
{ دستورات;}
همچنین میتوان مقدار خروجی را داخل یک متغیر کمکی ذخیره کرد، بهعنوان مثال:
Temp= compass();
دقت داشته باشید که اگر تابع، پارامتر ورودی هم نداشته باشد، باید پرانتزِ باز و بسته جلوی نام تابع درج شود.
همانطور که گفته شد، ما نمیتوانیم هیچ بخش از برنامه را خارج از توابع بنویسیم، یعنی هر خط از برنامهی ما، باید حتماً در یکی از توابع گنجانده شده باشد. اما سوال این جاست که تا کنون که ما کار با توابع را بلد نبودیم، دستوراتی که مینوشتیم چگونه اجرا میشدند؟
تابع main():
در هر برنامهای که در زبان C نوشته میشود، میبایست تابعی با نام ()mainوجود داشته باشد. روند اجرای برنامه از همین تابع شروع میشود، یعنی اولین تابعی که دستوراتش اجرا میشود همین تابع است. برای اجرای هر برنامهای که ما در زبان C مینویسیم، تابع ()main در برنامهیِ ما، توسط سیستم عامل فراخوانی میشود، و پس از اجرای تمام دستورات ()main، کنترل دوباره به سیستم عامل باز گردانده میشود. در حقیقت، تابع ()main تنها تابعی است که وجودش الزامی است و با اتمام کار این تابع، روند اجرای دستورات برنامه هم پایان میرسد.
در محیط CodeVision هم در همان ابتدا تابع ()main توسط CodeWizard تعریف میشود و دیگر نیازی نیست ما مجدداً این تابع را تعریف کنیم. با کمی دقت میتوانید الگوی تعریف تابع()main را در برنامه پیدا کنید. نکتهی مهم این که همانطور که در بالا گفته شد، پس از اجرای دستورات تابع ()main کار برنامه به اتمام میرسد و میکروکنترلر دیگر کاری انجام نمیدهد، به همین خاطر اگر میخواهیم برنامهای که نوشتهاید مکرراً اجرا شود باید آنها را در داخل یک حلقهای بنویسیم که دستوراتش بی نهایت بار تا زمانی که میکروکنترلر روشن است انجام شود. برای این کار میتوانید از حلقهی ()while به شکل زیر استفاده کنید:
while(1)
{
دستورات;
}
نوشتن عدد "1" به جای شرط حلقه، در داخل پرانتز، به این مفهوم است که شرط اجرای حلقه همواره برقرار است و دستورات داخل حلقه باید بینهایت بار انجام شوند. اما خوشبختانه CodeWizard این کار را هم برای ما انجام داده است و حلقهای به شکل بالا برای کار ما تعریف کرده است که ما دستوراتمان را در داخل آن حلقه بنویسیم. (برای یاد آوری رجوع شود به جلسهی 26 (http://roshd.ir/Default.aspx?tabid=443&EntryID=1614)).
نکتهی مهم در مورد تعریف توابع
توابع باید در کدام قسمت برنامه تعریف شوند؟ برای این که توابعی که تعریف میکنیم در همهی بخشهای برنامه قابل استفاده و فراخوانی باشند، باید آنها درست قبل از تابع ()main تعریف کنیم. یعنی ابتدا خطی که الگوی تابع()main نوشته شده است را پیدا کنید، سپس هر تابعی که میخواهید را قبل از آن تعریف کنید. البته بحث در مورد حوزهی استفاده و دسترسی به توابع بسیار مفصل است،اما این مطالب برای انجام کارهای ما کفایت میکنند. برای کسب اطلاعات بیشتر در این زمینه، میتوانید به بخش توابع از ک تاب مهندس جعفرنژاد قمی یا سایر کتابهای آموزش زبان C مراجعه کنید.
نکتهای مهم در مورد شروع برنامههای ساختیافته
ابتدا بدون پرداختن به جزئیات پیاده سازی توابع، ورودیها و خروجیهای تابع، بدنهی اصلی برنامه را بنویسید. به عبارت دیگر، در قدم اول لازم نیست تک تک دستورات داخل توابع را بنویسید، ابتدا فقط تعیین کنید هر تابع قرار است چه عملی را انجام دهد و از آن در قسمتهای مورد نیاز استفاده کنید.
his
15th October 2010, 11:20 PM
کامپس چه جوری کارمی کنه؟
hengameh
17th October 2010, 01:39 PM
سلام دوست عزیز تا جایی که من از برنامه نویسی سر در میارم این compass متغیریه که داره تعریف میشه میگه int compass ینی تعریف کردم متغیری به این نام همونطور که همه میدونیم برای استفاده از یه متغیر در طول برنامه اول از همه باید برای سیستم اون متغیرو تعریف کرد intدرستوری برای تعریف متغیری از جنس عدد صحیحه
g.r
4th December 2010, 07:54 PM
سلام اقا مهدی میشه بگید برای یک ربات اتش نشانی چه چیزهای لازم (وسایل مورد نیازش)
warrior
5th December 2010, 07:25 PM
مرسی
ریپورتر
13th December 2010, 07:51 PM
همانطور که میدانید، ما تا کنون توانستهایم مدار اصلی روبات را با استفاده از دو روش پیادهسازی کنیم و بسازیم. روش اول استفاده از بِرِد بُرد بود که گفتیم این روش بیشتر کاربرد آزمایشگاهی دارد و نمیتوان از آن بهعنوان مدار نهایی روبات برای شرکت در یک مسابقه با غیره استفاده نمود، زیرا بسیار آسیبپذیر بوده و با کوچکترین تماس اشتباهی با مدار به راحتی اتصالات مدار قطع میشوند. http://www.roshd.ir/portals/0/0and1/robotic2/robo-056-01.jpg
روش دوم استفاده از بُردهای سوراخدار بود، و گفتیم برای استفاده از این بردها باید تمام اتصالات با استفاده از تکههای کوچک سیم لحیم شوند. این روش هرچند روش بسیار مطمئنتری نسبت به برد برد است، اما این روش هم ایراداتی دارد، از جمله اینکه این اتصالات، زیاد مطمئن نیستند، همچنین برای پیادهسازی مدارات بزرگ و پیچیده، کار بسیار دشوار میشود، زیرا باید تعداد بسیار زیادی سیم را از جاهای مختلف مدار رد کرد و این کار بسیار دشوار خواهد بود. همچنین در چنین مداری به دلیل حجم زیاد اتصالات و سیمهای روی مدار، در صورتی که نقصی در مدار به وجود آید، بهسختی میتوان تشخیص داد مشکل از کدام یک از اتصلات است.
http://www.roshd.ir/portals/0/0and1/robotic2/robo-056-02.jpg
اما روش مطمئن و متداول چیست؟
http://www.roshd.ir/portals/0/0and1/robotic2/robo-056-03.jpg
حتماً تا به حال مدارهايی مشابه بالا را در بسیاری از دستگاههای خانگی و روباتها دیدهاید که در آنها نه خبری از سیمکشیهای پیچیده است، و نه بِرِد بُرد. در این نوع مدارها ارتباط بین قطعات مختلف مدار از طریق مسیرهای مسی است. در حقیقت در این نوع مدار، مسیرهای مسیای که روی بورد کشیده شده است جای سیمها را گرفتهاند. این نوع مدار را PCB میگویند که مخفف “Printed Circuit Board” به معنای مدار چاپی است. مدارهای چاپی یا PCB بر خلاف بِرِد بُرد و بورد سوراخدار، بهصورت اختصاصی برای یک مدار خاص طراحی میشود و طبیعتاً فقط یک کاربرد خاص دارد و نمیتوان مانند دو نمونه دیگر هر مدار دیگری را بر روی آن پیاده سازی کرد.
در PCB جای تمام قطعات و مسیرها از پیش تعیین و تعبیعه شده است و فقط شما کافیست المانها مورد نظر را در محلهای تعیین شده لحیم کنید تا مدار کامل شود.
PCB چگونه تهیه میشود؟
مرحلهی اول در ساخت PCB یک مدار، کشیدن نقشهی شماتیک مدار است. شما باید بتوانید نقشهی مداری که میخواهید PCB آن را بسازید با استفاده از نمادهای شماتیک طراحی کنید.
به عنوان مثال در جلسهی نوزدهم ما نقشهی شماتیک مدار یک روبات مسیریاب ساده را کشیدیم.
در گام بعدی میبایست با استفاده از یکی از نرم افزارهای طراحی PCB، نقشهی PCBِ مدار را بر اساس نقشهی شماتیک آن طراحی کنیم.
در چندین جلسهی آینده ما آموزش طراحی PCB را در یکی از قدرتمندترین نرمافزارهای موجود پی خواهیم گرفت.
این نرم افزار Altium Designer نام دارد. قابلیت بسیار زیاد و طراحی ایده آل این نرم افزار، آن را تبدیل به مطرحترین نرم افزار موجود در زمینهی الکترونیک کرده است.
بحث آموزش این نرم افزار را از جلسهی آینده شروع خواهیم کرد. از این جهت دوستان عزیز لازم است برای جلسهی آینده این نرم افزار را از فروشگاههای فروش نرمافزار و CDهای آموزشی، تهیه کرده و بر روی کامپیوترهای خود نصب کنند. ما آموزشمان را با نسخهی 08 این نرمافزار انجام خواهیم داد. از همین رو دوستان عزیز دقت کنند که نسخهی تهیه شده از 08 قدیمیتر نباشد.
اما در ادامهی این جلسه ما کمی در مورد تکنولوژیهای مختلف ساخت PCB توضیح خواهیم داد.
در حالت کلی 2 تکنولوژی متفاوت از نظر ساختار بیرونی، برای تولید قطعات و مدارات الکترونیکی وجود دارد که تفاوت آنها در شکل پایههای قطعات است. در تکنولوژی اول، اتصال قطعات با بورد اصلی از طریق سوراخهایی است که در بورد ایجاد شده است و برای برقراری اتصال باید پایههای قطعهی مورد نظر از درون این سوراخها رد شوند.
http://www.roshd.ir/portals/0/0and1/robotic2/robo-056-04.jpg http://www.roshd.ir/portals/0/0and1/robotic2/robo-056-05.jpg
تمام قطعاتی که تا به حال با آنها کار کردهایم، با استفاده از همین روش ساخته شدهاند. در این روش، پس از اینکه پایههای قطعه در سوراخها قرار گرفت، باید لحیم شوند تا اتصال کامل گردد.
http://www.roshd.ir/portals/0/0and1/robotic2/robo-056-06.gif
http://www.roshd.ir/portals/0/0and1/robotic2/robo-056-07.jpg
این روش به زبان انگلیسی، "through hole technology" نام دارد.
روش دوم SMD نام دارد که مخفف “Surface Mountain Device” است. در این روش در بورد اصلی هیچگونه سوراخی برای نصب قطعات وجود ندارد. و پایههای قطعات هم به گونهای ساخته نشدهاند که از درون سوراخهای بورد عبور کنند.
http://www.roshd.ir/portals/0/0and1/robotic2/robo-056-08.jpg
در این روش، پایههای قطعات بر روی بورد لحیم میشوند و نیازی به سوراخ بر روی بورد نیست.
هر کدام از دو روش کاربردها و ویژگیهای منحصر به خود را دارند که باعث شده هر دو روش در حال حاضر مورد استفاده قرار بگیرند.
مهمترین ایراد روش SMD دشورای لحیم کاری آن به صورت دستی است، که باعث شده اکثر طراحان، در مداراتی که قرار است توسط انسان لحیم کاری شوند، نتوانند از روش SMD استفاده کنند. البته در کارخانههایی که لحیم کاری به وسیلهی روباتهای صنعتی انجام میگیرد، تکنولوژی SMD کاربرد بسیار بیشتری نسبت به تکنولوژی دیگر دارد.
ریپورتر
13th December 2010, 07:52 PM
آموزش نرم افزار 08 Altium Designer را شروع میکنیم..
این نرم افزار شامل مجموعهای از مقلات راهنما است که به شما کمک میکند با محیط این نرم افزار بیشتر آشنا شوید. منبع اصلی آموزش ما هم در این قسمت همین مقالات هستند. برای دسترسی به این مقالات که در فرمت PDF در اختیار کاربر قرار گرفتهاند، میتوانید با فشار دادن F1 به این مقالات دسترسی پیدا کنید. این مقالات بر اساس موضوع دسته بندی شدهاند تا به راحتی بتوان به مطلب مورد نظر دسترسی پیدا کرد. اگر زبان انگلیسی دوستان در حد مطلوبی باشد این مطالب میتوانند بسیار مفید واقع شوند.
شروع کار با Altium Designer:
برای آشنایی با محیط این نرم افزار میتوانید از منوی Help>>Getting Started>>Welcome To The Altium Designer Environment تمام اطلاعات مورد نیاز در مورد کار با محیط این نرم افزار و و پنلهای مختلف آن و ابزارهایی که برای طراحی در اختیار کاربر قرار داده است را در اختیار داشته باشید. اما ما سعی میکنیم تمام مطالب مورد نیاز در این بخش را در اختیار دوستان عزیز قرار دهیم.
این نرم افزار جنبههای متعدد و کاربردهای متفاوتی دارد و فقط محدود به طراحی PCB نشده است، اما بخشهای دیگر این نرم افزار فعلاً در بحث ما کاربرد ندارند و ما نیز در چند جلسهی آینده صرفاً به آموزش طراحی PCB به کمک این نرم افزار میپردازیم.
برای شروع طراحی یک PCB، ابتدا از منوی File این مسیر را دنبال کنید تا یک فایل PCB Project ایجاد شود:
File >> New >> Project >> PCB Project
همچنین میتوانید به جای این کار از منوی "view" قسمت "Home" را انتخاب کنید و از آنجا قسمت "Printed Circuit Board Design" را انتخاب کنید. و سپس "New Blank PCB Project" را انتخاب کنید.
در پنل “Projects” در قسمت چپ صفحه، یک پروژهی جدید با نام “PCB_Project1.PrjPCB” ایجاد میشود. که هیچ سندی (Document) در آن ثبت نشده است.
http://www.roshd.ir/portals/0/0and1/robotic2/robo-057-01.jpg
توضیح آن که یک فایل با پسوند ".PrjPCB" در حقیقت یک فایل نوشتاری است که در آن اطلاعات مربوط به پروژهی شما مانند سندهای مربوط به پروژه مثل فایل شماتیک آن و... در آن نوشته شده است.
حالا برای save کردن یا ذخیرهی این فایل در داخل حافظهی کامپیوتر خود، منوی “File>>save Project As” را انتخاب کنید و آدرس مکانی که میخواهید در آنجا ذخیره کنید را مشخص کنید و سپس یک نام دلخواه انتخاب کنید و گزینهی Save را انتخاب کنید.
در گام بعدی ما باید یک فایل شماتیک خالی (Blank) به پروژهی خود اضافه کنیم. توضیح آن که ما برای طراحی هر PCB باید ابتدا نقشهی شماتیک(schematic) آن را بکشیم. در اینجا ما ابتدا به نحوهی طراحی یک مدار شماتیک به وسیلهی این نرم افزار میپردازیم.
برای تشکیل یک فایل شماتیک جدید، مراحل زیر را طی میکنیم.
1- از منوی فایل "File>>New>>schematic" را انتخاب میکنیم. یک فایل شماتیک جدید با نام “sheet1.schdoc” در همان پنل “Projects” به وجود میآید و به صورت خودکار به پروژهی ما اضافه میشود و جزو اسناد پروژه (Document) قرار میگیرد.
http://www.roshd.ir/portals/0/0and1/robotic2/robo-057-02.jpg
2- حالا فایل شماتیک جدید را از طریق منوی File>>save as در مکان مورد نظر در حافظه ذخیره کنید. بهتر است همان نامی که برای پروژه اصلی انتخاب کردهاید را برای فایل شماتیک هم استفاده کنید و آن را با پسوند ".SchDoc" ذخیره کنید. آدرس ذخیره ی آن هم بهتر است همان آدرس قبلی باشد.
وقتی که فایل شماتیک جدید باز میشود، شما متوجه تغییر در فضای برنامه خواهید شد. نوار ابزار اصلی شامل تعدادی دکمهی جدید خواهد شد که به شما امکان طراحی و ویرایش (Edit) فایل شماتیک را میدهد.
تنظیمات مربوط به شماتیک:
اولین چیزی که باید قبل از شروع کشیدن شماتیک مدار خود انجام دهید، تنظیمات اولیهی مناسب است. برای این کار مراحل زیر را دنبال میکنیم.
1- از منوها، "Design >> Document Option" را انتخاب کنید. تنها تغییری که ما فعلاً نیاز داریم، تنظیم سایز صفحه (Sheet Size) به فرمت استاندارد A4 است. از لبهی “Sheet Option” ، قسمت “Standard Style” را پیدا کنید.
2- “A4” را در این قسمت انتخاب کرد و OK را بزنید تا از این صفحه خارج شوید.
3- برای اینکه سندِ شماتیک در صفحه به طور کامل نمایش داده شود، از منوها "View >> Fit Document" را انتخاب کنید.
نکتهی مهم اینکه در این نرم افزار، یک سری میان برهایی طراحی شده است که سرعت کار ما را برای استفاده از منوهای مختلف بالا میبرد. برای دسترسی به هر منو به جای کلیک کردن بر روی منو میتوانید حرف مربوط به آن منو را تایپ کنید. مثلاً حرفی که منوی “View” را باز میکند، "V" است. حروفی که برای هر منو در نظر گرفته شده است، از طریق خط فاصله زیر آن حرف، در نام منو مشخص شده است. مثلاً اگر دقت کنید در منوی “View” زیر حرف “V” خط کشیده شده است.
این رویه برای گزینههای مهم در هر منو هم ادامه پیدا میکند. مثلاً برای همین “Fit Document” اگر دقت کنید زیر حرف “D” خط کشیده شده است. در نتیجه برای انتخاب گزینهی “Fit Document”، از منوی “View” فقط کافی بود حرف “V” و سپس “D” را پشت سر هم تایپ کنیم. از این پس برای همهی موارد مهم، میانبرها هم ذکر میشوند تا دوستان بتوانند راحت تر و سریعتر به منوهای مختلف دسترسی داشته باشند.
حالا به تنظیمات عمومی فایل شماتیک میپردازیم.
1- از منوها “Tools >> Schematic Preferences” را انتخاب میکنیم {میانبر : T,P}. تنظیماتی که در این پنجره انجام میدهید در تمام فایلهای شماتیکی که شما بر روی آن کار میکنید اعمال خواهد شد.
2- از درخت انتخابیای که در سمت چپ این پنجره قرار دارد گزینهی “Schematic – Default Primitives” را انتخاب کنید و در آن “Permanent” را تیک بزنید و ok را بزنید تا از این قسمت خارج شوید.
3- حالا توسط منوی “File>>Save” یا میانبر {F,S}، فایل خود را Save کنید.
ریپورتر
9th March 2011, 05:25 PM
طراحی یک مدار شماتیک را از روی یک طرح اولیه، در فضای Altium Designer شروع خواهیم کرد.
برای کشیدن یک مدار شماتیک ابتدا باید بتوانیم مدار مورد نظرمان را بر روی کاغذ بکشیم. برای این منظور یک مدار آنالوگ در نظر گرفته شده است (طبق آموزش خود نرمافزار).
http://www.roshd.ir/portals/0/0and1/robotic2/robo-058-01.gif
این مدار مولتی ویبراتور(Multi Vibrator) نام دارد. توضیح آن که به مدارهایی که همواره بین دو حالت نا پایدار در نوسان هستند، مولتی ویبراتور میگویند. به عنوان مثال مدارهای چراغ چشمک زن، که با نظم زمانی مشخص، یک LED را روشن و خاموش میکنند، یکی از انواع مولتی ویبراتور محسوب میشوند.
در این مدار نیز اگر طبق شکل زیر، دقیقاً قبل از کلکتورِ 2 ترانزیستور، دو عدد LED قرار داده شود، این دو LED با فاصلهی زمانی یک ثانیه روشن وخاموش میشوند. در حال حاضر عملکرد این مدار مد نظر ما نیست و لذا بیش از به تشریح ساختار این مدار نمی پردازیم.
این مدار شامل دو عدد ترانزیستور “2N3904” است که ترانزیستور NPN است. همچنین 4 عدد مقاومت و 2 عدد خازن با اندازههایی که در تصویر مشخص شده در مدار وجود دارد.
قرار دادن المانها و بارگذاری کتابخانهها
قدم اول در طراحی یک مدار شماتیک، انتخاب و جایگذاری تک تک المانها از داخل کتابخانهها(Libraries)ی نرم افزار است. پس ابتدا باید روش جستجو و پیدا کردن قطعات مختلف مدار را در این کتابخانهها یاد بگیریم. در زیر مراحل جستجو و انتخاب قطعات مدار آموزشی یاد شده را، از کتابخانههای نرم افزار توضیح میدهیم:
ابتدا 2 ترانزیستور را که هر دو از نوع 2N3904 هستند را جستجو میکنیم.
1- از منوها “Design>> Browse Library” را انتخاب کنید. {D,B}.
2- دکمهی “Search” را از بالای پنجرهی “Libraries” انتخاب کنید. یا {T,C}
3- تنظیمات این صفحه را طبق شکل زیر انجام دهید:
http://www.roshd.ir/portals/0/0and1/robotic2/robo-058-02.gif
4- اما در این مثال نیازی نیست گزینهی “Include Subdirectories” تیک زده شود(بر خلاف تصویر).
http://www.roshd.ir/portals/0/0and1/robotic2/robo-058-03.gif5- در قسمت بالای پنجرهی جستجو (قسمت سفید) نام قطعهی مورد نظر را تایپ میکنیم. نام یک قطعه ممکن است پیشوند یا پسوندهای متفاوتی داشته باشد که کارخانههای سازندههای مختلف به آن اضافه میکنند. به همین خاطر بهتر است برای جستجوی بهتر قبل و بعد از نام قطعه از علامت"*" استفاده کنیم. پس برای جستجوی ترانزیستور مورد نظر می توانیم “*3904*” را در قسمت یاد شده بنویسیم و کلید search را بزنیم.
6- نتیجهی جستجو در خود پنجرهی “Libraries” نمایش داده خواهد شد.
7- در پنجرهی “Libraries” قطعهی 2N3904 را مشاهده میکنید. همانطور که میبینید، علاوه بر نام قطعه، نام کتابخانهای که قطعه در آن یافت شده است، همینطور یک توضیح بسیار مختصر مثل ذکر نوع ترانزیستور، در همین قسمت در جلوی نام قطعه درج میشود.
در این نرم افزار قطعات بر اساس کاربرد، در کتابخانههای مختلف قرار گرفتهاند. کتابخانهای که ترانزیستور مذکور را در آن پیدا کردیم، Miscellaneous نام دارد که به معنای گوناگون یا متفرقه میباشد. در این کتابخانه بسیاری از قطعات پر مصرف الکترونیکی مثل ترانزیستورها، خازن، مقاومت، رگولاتور و ... وجود دارد.
قرار دادن المانها در نقشهی شماتیک مدار
اولین قطعاتی که ما در مدار شماتیک قرار میدهیم،همان 2 ترانزیستور است که آنها را Q1 و Q2 مینامیم. برای تعیین طرح کلی مدار، به مداری که بالا کشیده شده است توجه کنید و مراحل زیر را دنبال کنید.
1- ابتدا برای اطمینان یک بار میانبر {V,D} را بزنید، تا صفحه شماتیک با اندازهی پنجره تنظیم شود.(همان View>>Fit Document است).
2- اگر پنل Libraries بسته شده است دوباره آن را با میانبر {D,B} باز کنید.
3- همانطور که گفته شد قطعات پر مصرف الکترونیکی مثل ترانزیستورهای بالا در کتابخانهی Miscellaneous Devices.IntLib قرار داده شدهاند.
4- از این کتابخانه ترانزیستور مورد نظر را به روش گفته شده در بالا، یا از طریق جستجو در همین پنل Libraries انتخاب کنید، و از قسمت بالای همین پنل، گزینهی “Place 2N3904” را انتخاب کنید. همچنین میتوانید به جای انتخاب این گزینه روی نام قطعه دبل کلیک کنید. حالا همانطور که میبینید قطعهی مربوطه به نشانگر ماوس شما بر روی صفحه نمایش چشبیده است و شما میتوانید در هر جای صفحهی شماتیک که میخواهید، با یک کلیک آن را قرار دهید.
5- اما قبل از قرار دادن قطعه در صفحه، ویژگیهای قطعه را تنظیم میکنیم. در حالیکه شماتیک قطعه مورد نظر به نشانگر ماوس شما چسبیده است، کلید TAB را فشار دهید تا پنجرهی زیر باز شود.
http://www.roshd.ir/portals/0/0and1/robotic2/robo-058-04.gif
6- شما باید برای قطعهی مورد نظر یک نام تعیین کنید، برای این کار از قسمت “Properties” این صفحه، یک نام مثل "Q1" را در داخل کادر "Designator" تایپ کنید.
7- در قدم بعدی باید فوت پرینت”Foot print” را چک کنید. فوت پرینت، همان نمایش قطعهی مورد نظر ما در مدار چاپیای است که در پایان در اختیار خواهیم داشت. مثلاً برای ترانزیستورِ بالا، فوت پرینت به شکل
http://www.roshd.ir/portals/0/0and1/robotic2/robo-058-05.gif
است. نقاط سبز نشان دهنده مکانهایی است که باید برای عبور پایههای المان مورد نظر و لحیم کاری آنها، بر روی مدار چاپی(PCB) سوراخ شوند. خطوط زرد رنگ در حالت معمول در مدار چاپی منعکس نخواهند شد. البته این در اختیار طراح است که این خطوط در مدار چاپی نهایی منعکس شوند و یا نشوند. قسمت خاکستری کنار هر سوراخ هم نشان دهندهی قسمت مسیای است که برای لحیم کاری پایههای قطعه در نظر گرفته شده است.
مطمئن شوید نام فوت پرینتی که در قسمت “Models for Q1” انتخاب شده است (قسمت پایین، سمت راست این پنجره)، "T0-92A" است.
بقیهی تنظیمات را به صورت پیش فرض رها کنید و ok را بزنید تا از این پنجره خارج شوید.
ریپورتر
9th March 2011, 05:26 PM
این جلسه هم بحث طراحی مدار شماتیک یک مدار را بر اساس طرح اولیهی آن بر روی کاغذ، پی میگیریم. هدف نهایی ما هم طراحی یک مدار چاپی برای این مدار است.
حالا آمادهایم تا قطعه را در مدار قرار دهیم:
1- نشانگر ماوس را همراه با المان حرکت دهید و در قسمت وسط صفحه، کمی سمت چپتر، هر جا که مایل بودید، با یک کلیک قرار دهید.
2- بعد از اینکه المان اول را جا گذاری کردید، مشاهده خواهید کرد که هنوز المان به نشانگر ماوس شما چسبیده است، این ویژگی این نرم افزار به شما این امکان را میدهد تا در جای دیگر صفحه، یک کپی از آن با ویژگیهای مشابه را قرار دهید. پس با توجه به اینکه ترانزیستور دیگر ما هم دقیقاً مثل ترانزیستور اول است، فقط کافی است در جای دیگری قطعه را دوباره با یک کلیک قرار دهید و نیازی به تنظیم مجدد مشخصات قطعه نیست، در مورد نام قطعه هم این نرم افزار به صورت هوشمند برای دفعات بعدیای که این قطعه بر روی صفحه شماتیک قرار داده میشود، یک واحد به نام آن اضافه میکند؛ در این مثال نام ترانزیستور دوم به صورت اتوماتیک "Q2" درج میشود. اما قبل از این که ترانزیستور دوم را در مدار جایگذاری کنیم، به طرح اولیهی مدار نگاه کنید.
3- همانطور که میبینید 2 ترانزیستور به صورت آینه قرار گرفتهاند، یعنی قرینهی همدیگر در مدار جایگذاری شدهاند. برای تغییر جهت ترانزیستوری که به نشانگر ماوس چشبیده است کلید ‘x’ را فشار دهید.
http://www.roshd.ir/portals/0/0and1/robotic2/robo-059-01.gif
4- قطعه جدید را در سمت راست Q1 قرار دهید. با استفاده از دکمهی “Page Down” بر روی کیبرد، برای زوم کردن بر روی قطعه میتوانید استفاده کنید تا آن را بهتر ببینید.
5- حالا هر 2 ترانزیستور در مدار جایگذاری شده است، پس با فشار دادن دکمهی “Esc” کیبرد یا کلیک راست، نشانگر ماوس به حالت معمولی بر میگردد.
حالا میخواهیم 4 مقاومت را طبق طرح اولیه در مدار جایگذاری کنیم. توضیح اینکه ابتدا باید تمام المانهای مدار را جایگذاری کنیم، بعد سراغ اتصالات بین آن ها برویم.
مراحل زیر را دنبال کنید:
1- دوباره پنل “Libraries” را به وسیلهی میانبر {D,B} را باز کنید. و کتابخانهی Miscellaneous Devices.IntLib را انتخاب بکنید.
2- در کادر سفید زیر نام کتابخانهها، “res1” را تایپ کنید.
3- از قسمت انتخاب قطعهها در قسمت پایینتر، “Res1” را انتخاب کنید و روی آن دبل کلیک کنید. حالا نماد شماتیک مقاومت به نشانگر شما میچسبد تا آن را در مکان مورد نظر قرار دهید.
4- حالا مجدداً باید مشخصات این قطعه تنظیم شوند، برای این کار یک بار Tab را فشار دهید تا پنجرهی تنظیمات مربوط به این قطعه باز شود. برای تعیین نام این قطعه، در کادر روبروی Designator از قسمت Properties این پنجره، نام R1 را برای این قطعه تایپ کنید.
5- مطمئن شوید نام فوت پرینت مربوطه، "AXIAL-0.3" است.
6- از قسمت Properties این صفحه، در بخش Comment اندازهی مقاومت را مینویسیم. هر چه در این بخش نوشته شود در مدار شماتیک و در PCB نهایی منعکس میشود. پس داخل کادرِ Comment برای مقاومت R1، اندازهی 100K را مینویسیم.
7- سمت راست صفحه از قسمت Parameters for R…، تیکِ Value را بردارید، یعنی در این قسمت هیچ کدام از گزینهها تیک نداشته باشند. سپس ok را بزنید تا از این صفحه خارج شوید.
8- برای قرار دادن قطعه در مدار، یکبار کلید Space را فشار دهید تا قطعه 90 درجه بچرخد و در راستای درست قرار گیرد.
9- سپس مطابق طرح اولیهی مدار که در بالا آورده شده است، مقاومت را درست در بالای Q1 قرار دهید. (به هم متصل نشوند).
10- حالا مقاومت R2 که دقیقاً مشخصاتش مانند R1 است را به همین ترتیب در بالای سر Q2 قرار میدهیم.
11- 2 مقاومت R3 و R4 باقی مانده است که جفت آن ها 1K اهم هستند. برای جا گذاری این 2 مقاومت فقط یکبار Tab را فشار دهید تا صفحه تنظیمات مربوطه باز شود و در این صفحه هم، فقط کافیست در قسمت Comment، عبارت 1K را تایپ کنید. حالا OK را بزنید تا از این صفحه خارج شوید.
12- سپس مطابق طرح اولیه، R3 و R4 را مانند شکل زیر جایگذاری کنید. و کلید Esc را فشار دهید تا زا حالت قطعه گذاری خارج شوید.
http://www.roshd.ir/portals/0/0and1/robotic2/robo-059-02.jpg
حالا 2 خازن را جایگذاری میکنیم. مراحل زیر را دنبال کنید.
1- خازنها هم در کتابخانهی Miscellaneous Devices.IntLib قرار دارند. که از طریق پنل Libraries قابل دسترسی است. ( میانبر بازکردن پنل Libraries: {d,b})
2- برای پیدا کردن شماتیک خازن، با نوشتن عبارت cap در کادر سفید، آن را در این کتابخانه جستجو کنید.
3- حالا از لیست قطعات، "cap" را انتخاب کنید. و روی آن دبل کلیک کنید تا آمادهی قرار دادن در مدار شود.
4- برای تنظیم مشخصات خازن TAB را فشار دهید. نام قطعه را C1 تعیین کنید. برای این کار، در کادر روبروی Designator عبارت C1 را بنویسید. در قسمت Comment، اندازهی خازن را بنویسید که در اینجا 20n است. (یعنی 20 نانوفاراد).
حالا از قسمت بالا، سمت راست این پنجره، تیکِ گزینهی Value را بر دارید. تنظیمات این قسمت برای شبیه سازی مدار در فضای مجازی(Simulation) است، که در این آموزش مدّ نظر ما نیست.
سپس فوت پرینت قطعه را از قسمت پایین، سمت راست این پنجره، RAD-0.3 انتخاب کنید. OK را بزنید و از این پنجره خارج شوید.
5- حالا 2 عدد از این خازن را در طبق نمونههای قبلی جایگذاری کنید. مکان این 2 خازن تقریباً در وسط مدار، در بین ترانزیستورها و مقاومتها، با کمی اختلاف ارتفاع نسبت به همدیگر است. درست مانند طرح اولیهای که در اختیار داریم.
6- حالا ESC را بزنید تا از حالت قطعه گذاری خارج شوید.
آخرین قطعهای که باید در مدار جایگذاری شود، کانکنتور یا سوکت اتصال دهنده است. کانکتور قطعهای است که از آن برای اتصال سیمهای خروجی مدار استفاده میشود. به کمک این قطعه ما میتوانیم سیم خروجی را هر بار به راحتی از مدار قطع یا به آن وصل کنیم. سوکتها انواع گوناگونی دارند که کاربردهای بعضاً متفاوتی دارند. به عنوان مثال USB هم یکی از انواع سوکتهاست که در کامپیوتر کاربرد بسیار زیادی دارد. برای این مدار از نوعی سوکت استفاده شده است که "پین هِدِر" نام دارد. نوع سوکت ها وابسته به تعداد سیمهای خروجی مدار تعیین میشوند، با توجه به این که این مدار فقط 2 سیم خروجی دارد، ما از کانکتور 2 پین یا 2 پایه استفاده میکنیم. در مورد انواع سوکتها در جلسات آینده مفصلاً حرف خواهیم زد.
اما در اینجا فعلاً میپردازیم به نحوهی انتخاب و جایگذاری این سوکت در مدار. مراحل زیر را دنبال کنید.
1- این قطعه در کتابخانهای به نام "Miscellaneous Connectors.IntLib" وجود دارد. پس ابتدا از پنل "Libraries"، این کتاب را انتخاب کنید. همانطور که گفته شد ما نیاز به یک سوکت 2 پین داریم، پس در قسمت جستجوی این پنل عبارت “*2*” را بنویسید.
2- “Header 2” را از لیست قطعات در این پنل انتخاب کنید و با دبل کلیک آن را آمادهی گذاشتن در مدار کنید. Tab را بزنید تا پنجرهی تنظیمات باز شود. نام قطعه را Y1 تنظیم کنید.(در قسمت Designator نام قطعه را بنویسید.) و چک کنید فوت پرینت قطعه HDR1X2 باشد. سایر تنظیمات را به صورت پیش فرض رها کنید. OK را بزنید و از این پنجره خارج شوید.
3- قبل از قرار دادن قطعه در صفحه، یکبار X را بزنید تا قطعه در جهت صحیح قرار بگیرد. حالا آن را در مکان مناسب(بر اساس طرح اولیه) قرار دهید.
4- Esc را بزنید تا از حالت قطعه گذاری خارج شوید.
5- با میانبر {F,S} پروژه را Save کنید.
تا اینجا ما همهی قطعات را در مدار جایگذاری کردیم(طبق شکل زیر). همانطور که میبینید قطعات با فاصله از هم گذاشتهاند، این نکته در سیم کشی بین قطعات به ما بسیار کمک میکند. دلیل اهمیت این موضوع این است که ما نمیتوانیم سیمها را از روی قطعات رد کنیم، اگر این اتفاق بیفتد پایههای آن قطعه به هم متصل میشوند و مدار دچار مشکل میشود.
http://www.roshd.ir/portals/0/0and1/robotic2/robo-059-03.jpg
برای جابجا کردن قطعات، شما میتوانید روی آن قطعه کلیک کنید و دکمه را نگه دارید و آن را جابجا کنید، سپس در موقعیت مورد نظر دکمهی ماوس را رها کنید.
ریپورتر
9th March 2011, 05:26 PM
تا به اینجا ما تمام قطعات مدار را در نقشهی شماتیک جایگذاری کردیم. در این جلسه سیم کشی و برقراری اتصال بین این المانها را بر اساس طرح اولیهی مدار انجام خواهیم داد.
سیم کشی مدار:
سیم کشی مدار در حقیقت ایجاد ارتباط بین قطعات یک مدار است. برای این کار مجدد به طرح اولیهی مدار مراجعه کنید و مراحل زیر را دنبال کنید.
http://www.roshd.ir/Portals/0/0and1/Robotic2/robo-060-01.gif
1- برای اینکه صفحهی شماتیک را درست ببینید، میتوانید کلیک راست را روی هر قسمت صفحه فشار دهید و صفحه را جابجا کنید و سپس آن را ول کنید. همچنین با استفاده از دکمههای Page Down و Page Up، میتوانید روی یک قسمت زوم کنید. همچنین با نگه داشتن کلید Ctrl و چرخاندن چرخ ماوس، روی صفحه زوم کنید.
2- ابتدا مقاومت R1 را به پایهی base ترانزیستور Q1 متصل میکنیم. برای این کارابتدا Place>>Wire را انتخاب کنید.(میانبر{P,W}). همچنین میتوانید روی علامت http://www.roshd.ir/Portals/0/0and1/Robotic2/robo-060-02.gif در نوار ابزار بالا کلیک کنید. همانطور که میبینید شکل نشانگر ماوس عوض میشود و در حالت گذاشتن سیم قرار میگیرید.
3- نشانگر را در پایینترین قسمت مقاومت R1 قرار دهید. وقتی در موقعیت درست قرار گرفته باشید، یک علامت ضربدر قرمز بر روی نشانگر ماوس شما مشخص خواهد شد. این علامت هنگامی نمایان میشود که نشانگر ماوس شما بر روی محل اتصال الکتریکی یک المان قرار گیرد.
4- با یک کلیک در محل ذکر شده، یک سر سیم را در آن نقطه قرار دهید. حالا با حرکت ماوس میبینید که یک سیم از آن نقطه تا نشانگر ماوس کشیده شده است.
5- میخواهیم انتهای R1 را به پایهی base در Q1 وصل کنیم. پس نشانگر را بر روی پایهی ترانزیستور قرار دهید تا ضربدر قرمز ظاهر شود، سپس با یک کلیک، سر دیگر سیم را در محل مورد نظر قرار دهید.
حالا این اتصال برقرار شده است.
6- توضیح این که هنوز نشانگر ماوس به شکل عادی باز نگشته است و میتوان دوباره در مدار سیم کشی کرد، برای خروج از این حالت میتوانید کلید Esc را فشار دهید، اما فعلاً این کار را نکنید.
7- حالا میخواهیم C1 را به سیمی Q1 و R1 را به هم متصل کرده است، وصل کنیم. (به طرح اولیه نگاه کنید). نشانگر ماوس را در محل اتصال سمت چپ خازن قرار دهید تا ضربدر قرمز ظاهر شود. حالا یک سر سیم را در این مکان ثابت کنید. حالا به صورت افقی حرکت کنید تا به سیمی که Q1 و R1 را به هم متصل کرده است برسید، و سر دیگر سیم را دقیقاً روی این سیم با یک کلیک ثابت کنید. پس دیدیم چگونه میتوان 2 سیم را به یکیدیگر متصل نمود.
اگر بخواهید در مسیر یک سیم بیش از یک زاویهی 90 درجه داشته باشیم، باید در نقطهای که میخواهیم زاویهی حرکت سیم را عوض کنیم، یک کلیک کنید. البته در این مثال تقریباً نیازی به این نکته نیست، زیرا قطعه در مکانهای مناسبی جایگذاری شدهاند. و نهایتاً با یک شکست به میتوان دو پایه را به هم متصل کرد.
8- و حالا باقی مدار را طبق شکل زیر خودتان سیم کشی کنید:
http://www.roshd.ir/Portals/0/0and1/Robotic2/robo-060-03.jpg
9- و وقتی تمام اتصالات را برقرار کردید، Esc را بزنید تا از نشانگر ماوس به شکل عادی برگردد.
10- و نکتهی آخر اینکه اگر میخواهید یک قطعه را به همراه همهی اتصالاتش جابجا کنید،( یعنی قطعه پس از جابه جایی اتصلاتش را حفظ کرده باشد) باید در هنگام جابجا کردن قطعه کلید Ctrl را نگه دارید.
Net چیست؟
Net یا شبکه، مجموعهای از اتصالات بین قطعات در یک قسمت از مدار است. مثلاً اتصالات بین پایهی بِیس در Q1، پایهی مقاومت R1 و خازن C1، در مجموع یک Net یا همان شبکه هستند.
برای راحتتر شناختن Netهای مهم در مدار، میتوان برای آنها نام گذاشت. به این نام Net Label میگویند. مثلاً یکی از مهمترین شبکهها در هر مدار، شبکهی ولتاژ مثبت است، تمام سیمها و اتصالات در این شبکه مستقیماً به پایهی مثبت منبع تغذیه اتصال دارند. همچنین شبکهی پایهی منفی یا Gnd.
برای این مدار میخواهیم شبکههای + و – مدار را توسط Net Label نام گذاری کنیم. برای این کار مراحل زیر را دنبال کنید:
1- از منوها Place>> Net Label را انتخاب کنید یا میانبر{P,N}. مجدداً نشانگر ماوس شما تغییر خواهد کرد.
2- برای مشخص کردن نام، قبل از قرار دادن Net Label، TAB را فشار دهید تا پنجرهی تنظیمات باز شود.
3- در کادرِ Net در این صفحه، "12V" را تایپ کنید و OK را بزنید تا از این پنجره خارج شوید. در حقیقت در این جا ما نام Net یا شبکه را مشخص کردهایم.
4- حالا نشانگر را مانند شکل بالا، بر روی سیم بالایی مدار قرار دهید تا ضربدر قرمز ظاهر شود، حالا با یک کلیک، آن را در آن نقطه قرار دهید. ما شبکهی تغذیهی + را در مدار تا به اینجا نام گذاری کردهایم.
5- همانطور که میبینید هنوز در حالت قرار دادن Net Label هستید. مجدد TAB را بزنید و این بار “Gnd” را در داخل کادر تایپ کنید.
6- طبق شکل، نشانگر ماوس را بر روی سیم پایینی مدار قرار دهید، و زمانی که ضربدر قرمز شد، با یک کلیک آن را قرار دهید. پس شبکهی Gnd هم نام گذاری شد.
7- حالا Esc را بزنید تا از این حالت خارج شوید.
8- حالا پروژه را Save کنید. میانبر{F,S}.
ریپورتر
9th March 2011, 05:27 PM
کامپایل کردن مدار شماتیک:
طرح شماتیکی که در این نرم افزار کشیده میشود، بیش از یک نقاشی ساده است. در حقیقت این طرح مبیّن ارتباطات الکتریکی بین قطعات مدار است.
وقتی که شما طرح شماتیک یک پروژه را ترسیم میکنید، این طرح باید از نظر اتصالات الکتریکی توسط خود نرم افزار بررسی شود. این عمل در Altium Designer، کامپایل کردن نام دارد(Compile). در حقیقت وقتی شما یک پروژه را کامپایل میکنید، قوانین الکتریکی بر روی مدار شما اعمال میشوند و مدار بررسی میشود. البته این قوانین را شما هم میتوانید تعیین کنید و در آن تغییراتی اعمال کنید. در باب این مسئله بعداً مفصلاً صحبت خواهیم کرد.
برای کامپایل کردن مدار Project>> Compile PCB Project را باید انتخاب کنید.
وقتی مدار کامپایل شود، خطاهایی که در مرحلهی طراحی مدار رخ داده است در پنل “Messages” نشان داده میشود. بر روی این پنجره کلیک کنید تا Errorهای مدار را ببینید.
اگر این پنل را نمیبینید، از طریق View>>WorkSpacePanel>>system>>Messages آن را باز کنید.
اگر مدار را درست کشیده باشید، نباید هیچ خطایی نمایش داده شود و در نتیجه در این پنل هیچ چیز نمایش داده نمیشود. اگر خطایی در این پنجره نمایش داده شده است، مدار را مجدداً از روی تصویر چک کنید و خطای آن را بر طرف کنید.
حالا برای اینکه کار با این پنل را بهتر فراگیرید، خودماً یک خطا در مدار به وجود خواهیم آورد و سپس آن را مجدداً کامپایل خواهیم کرد.
برای این کار مراحل زیر را انجام دهید.
1- از طریق میانبر {P,W} آمادهی گذاشتن سیم در مدار شوید.
2- در سمت چپ مقاومت R1، بر روی سیم 12V در بالای مدار کلیک کنید و یک سیم از آنجا تا سیم Gnd در پایین مدار بکشید و این دو مسیر را به هم وصل کنید.
3- همانطور که میدانید سیم بالای شبکه(Net)ی 12ولتِ مدار، و سیم پایین شبکهی Gnd مدار است. و هر کدام از این دو مسیر یا شبکه جداگانه نام گذاری شدهاند. پس وقتی این دو مسیر به یکدیگر متصل شوند، در حقیقت این دو مسیر با یکدیگر ادغام شده و یک مسیر بزرگتر شامل هر دوی آنها تشکیل میشود، اما ما قبلاً آنها را جدا از هم نامگذاری کردهایم، و شبکهی جدید به وجود آمده، نمیتواند نام هر دوی آنها را داشته باشد. پس در اینجا باید یک خطا رخ دهد.
4- حالا دوباره از طریق میانبر {C,C} مدار را دوباره کامپایل کنید.
5- همانطور که میبینید در پنل Messages یک خطا نشان داده شده است.
پس حالا مجددا مدار را به حالت اولیهی خود بر میگردانیم.
1- برای باز گشت به حالت قبلی، Ctrl+Z را از روی کیبورد فشار دهید. فشار دادن همزمان این دو کلید، آخرین تغییری که روی مدار انجام شده را برمیگرداند. اگر این دو کلید را، دو بار فشار دهید، مدارِ شما، 2 مرحله به عقب باز خواهد گشت و به همین ترتیب میتوانید با فشار دادن همزمان این دو کلید، چندین مرحله مدار را به عقب بازگردانید.
2- سپس دوباره مدار را کامپایل کنید و مطمئن شوید خطایی وجود ندارد.
3- از طریق میانبر{V,F}، تصویر را مرتب کنید.
4- و در نهایت مدار بدون خطا خود را save کنید.{F,S}
حالا دیگر ما مدار شماتیک خود را کامل و چک کردیم، حالا دیگر نوبت ساختن PCB است.
ساختن یک فایل PCB:
برای این کار باید یک فایل PCB به پروژهی خود اضافه کنید، سپس باید اطلاعات مدار شماتیک را به فایل PCB اضافه کنیم. مراحل زیر را دنبال کنید:
1- از پنل Projects در سمت چپ فضای کار، بر روی نام پروژه خود که با پسوند .PrjPCB موجود است کلیک راست کنید. و بر روی Add New to Project کلیک کنید. سپس بر روی PCB کلیک کنید. تا یک فایل PCB به پروژهی ما اضافه شود.
2- سپس از منوی File گزینهی Save all را انتخاب کنید تا همهی فایلهای پروژه Save شوند. باید برای فایل PCB جدید یک آدرس برای ذخیره وارد کنید. پس همان آدرسی که پروژه در آن save شده است را وارد کنید و همان نامی که برای پروژه انتخاب کردید برای آن هم بنویسید.
حالا باید مداری که به صورت شماتیک طراحی کردهایم، تبدیل به PCB کنیم.
3- برای این کار باید اطلاعات مدار شماتیک را به فایل PCB منتقل کنیم.
پس از پنل Projects در سمت چپ فضای کار، روی نام فایل شماتیک کلیک کنید تا نقشهی شماتیک نشان داده شود.
سپس Design>> Update PCB Document… را انتخاب کنید.
4- این پنجره برای انتقال اطلاعات فایل شماتیک به فایل PCB طراحی شده است.
بر روی Validate Changes کلیک کنید. اگر تمام موارد بدون نقص باشند و قابل انتقال به فایل PCB باشند، در جلوی تمام موارد یک تیک سبز رنگ ظاهر میشود. اگر هر موردی ایراد داشت، پنجره را ببندید و ایراد را رفع کنید و سپس این مراحل را مجدد طی کنید.
5- پس حالا که همهی موارد بدون اشکال است، گزینهی Execute Changes راانتخاب کنید. حالا هر اطلاعاتی که برای ساخت PCB لازم بود از فایل شماتیک به فایل PCB منتقل شد.
6- Close را بزنید تا از این صفحه خارج شوید. حالا باید بتوانید PCB خود را به همراه جای قطعاتی که روی آن تعبیه شده است ببنید. اگر چیزی نمیبینید، میانبر {V,F} را بزنید. احتمالاً PCB شما در قسمت پایین سمت راست صفحه قرار دارد. اگر میخواهید صفحه را جابه جا کنید تا مدار PCB را ببینید، میتوانید روی هر قسمت از صفحه کلیک راست کنید و در حالی که کلیک راست را نگه داشتهاید صفحه را جابجا کنید.
http://www.roshd.ir/Portals/0/0and1/Robotic2/robo-061-01.gif
7- روی PCB خود کلیک کنید و آن را به وسط صفحه مشکی رنگ که خط کشی شده است انتقال دهید. (روی آن کلیک کنید و آن را انتقال دهید و سپس کلیک را رها کنید).
8- از میانبر {F,L} پروژه را Save کنید.
حالا زمان این است که قطعات روی بورد را مرتب کنیم. اما قبل از این کار باید چند تنظیم مهم در مورد سایز بورد، اندازهی مسیرها و فاصلهی بین مسیرها را انجام دهیم.
ریپورتر
9th March 2011, 05:28 PM
تا به حال موفق شدیم یک شمای اولیهی مدار PCBمان را آماده کنیم. اما این طرح نیاز به تغییرات اساسی دارد تا به شرایط مطلوبی برسد.
ابتدا قبل از هر کاری لازم است واحد اندازه گیری را مشخص کنیم، یعنی این که اینچ باشد یا متر. برای انتخاب واحد اندازهگیری باید از کلید “Q” بر روی بورد استفاده کنید. برای اینکه ببینید واحد اندازه گیری در حال حاضر کدام یک از این دو ست، به قسمت پایین سمت چپ پنجره نگاه کنید، در این قسمت مختصات نشانگر ماوس بر روی صفحه نشان داده میشود، واحد اندازه گیری هم در جلوی آن درج میشود. در این جا برای بالاتر رفتن دقت اندازهگیری، به جای استفاده از واحد متر یا اینچ ، از واحد یک هزارمِ آنها استفاده میشود. یعنی به جای متر از میلی متر(mm)، و به جای اینچ از mil استفاده میشود. هر بار که Q را فشار دهید، واحد اندازه گیری عوض میشود.
همانطور که قبلاً گفته شد، PCB ممکن است یک رو یا دو رو باشد. یعنی اینکه میتوانیم تعیین کنیم کل مسیرهای مدار از یک طرف بورد رد شوند، یا در هر دو طرف بورد برای عبور مسیرهای مدار استفاده شود. این بستگی به تعداد مسیرها و کلاً حجم مدار دارد، اگر مدار بزرگ باشد، نمیتوان کل مسیرها را از یک طرف مدار عبور داد. هرچند این مدار ما مدار بزرگی نیست، اما ما برای این آموزش از PCB دو رو استفاده میکنیم.
برای تعیین یک یا دو رو بودن PCB مراحل زیر را دنبال کنید:
1- از منوها Design>> Rules را انتخاب کنید.
http://www.roshd.ir/Portals/0/0and1/Robotic2/robo-062-01.gif
2- در قسمت سمت چپ این پنجره بر روی شاخهی Routing دبل کلیک کنید تا این شاخه باز شود.
3- از زیر شاخههای آن بر روی Routing Layers دبل کلیک کنید و تنها زیر شاخهی آن را که همنام خودش است انتخاب کنید.
4- حالا از سمت راست این صفحه در قسمت Constraints میتوانید تعیین کنید PCB شما یک رو باشد یا دو رو. همانطور که میبینید در این قسمت 2 تا گزینه وجود دارد، Top Layer به معنای لایهی روی بورد و Bottom Layerبه معنای لایهی پشت بورد است. اگر هر دو گزینه تیک خورده باشد، هم از روی بورد و هم از پشت آن مسیرهای مدار عبور خواهند کرد. پس هر دو گزینه را تیک بزنید.
5- Apply را بزنید تا تغییرات تثبیت شود.
اما هنوز این پنجره را نبندید. تنظیم بعدیای که باید انجام دهید مربوط به پهنای مسیرهای مسی روی بورد است. این مسیرهای مسی در حقیقت نقش همان سیمهای اتصال دهنده را در مدار ایفا میکنند.
برای این تنظیم مراحل زیر را دنبال کنید:
1- از همین شاخهی Routing بر روی زیر شاخهی Width دبل کلیک کنید و تنها زیر شاخهی آن را انتخاب کنید.
2- در قسمت پایین سمت راست صفحه میتوان پهنای مسیرها را تعیین کرد.
3- همانطور که میبینید در این قسمت میتوان برای هر طرف بورد جداگانه پهنای مسیرها را تعیین کرد. همچنین 3 عدد برای هر طرف بورد نوشته شده است. این 3 عدد مربوط به حداقل پهنا، حداکثر پهنا، و پهنای معمول برای مسیرهاست. شما برای هر دو طرف مدار(Top layer و Bottom Layer) و برای هر 3 قسمتی که توضیح داده شد، عدد 0.8 را تایپ کنید. یعنی در هر 6 کادر این قسمت عدد 0.8 را بنویسید. با این کار پهنای کل مسیرهای رو و پشت بورد 0.8 میلی متر تعیین میشود.
دقت کنید که دستگاههایی که در کشور ما برای چاپ و تولید PCB موجود هستند ، عملاً نمیتوانند مسیرهای با پهنای کمتر از 0.2میلی متر را درست بکشند، پس دقت کنید که پهنای مسیرها را به هیچ عنوان کمتر از 0.2 میلی متر تعیین نکنید.
4- دوباره Apply را بزنید تا تغییرات تثبیت شوند، اما هنوز هم این پنجره را نبندید.
تنظیم بعدی مربوط به تنظیم حداقل فاصلهی بین مسیرها بر روی بورد است. یعنی میتوان تنظیم کرد دو مسیر مجاور هم حداقل چه فاصلهای داشته باشند.
برای این کار مراحل زیر را دنبال کنید.
1- از همین پنجره بر روی شاخهی Electrical دبل کلیک کنید و از زیر شاخههای آن clearance، و سپس تنها زیر شاخهی آن را انتخاب کنید.
2- مجدداً از قسمت Constraints ، روی عددی که در مقابل عبارت ”Minimum Clearance” کلیک کنید و عدد 0.4 را وارد کنید.
3- Apply را بزنید. حالا حداقل فاصلهی بین دو مسیر 0.4 میلیمتر تعیین شده است.
4- OK را بزنید تا از این صفحه خارج شوید.
حالا باید شکل و سایز مدار را تعیین کنید.
روشهای متفاوتی برای تعیین سایز PCB وجود دارد. روشی که ما الان معرفی میکنیم هم اندازه و هم شکل کلی مدار را میتوان همزمان تعیین نمود.
مراحل زیر را دنبال کنید.
در قسمت پایین فضای کار، چندین لبه وجود دارد، از جمله Top layer، Bottom Layer، Mechanical1و ... که در کنار هر کدام یک مربع رنگی قرار دارد. از بین آنها Keep-Out Layer را پیدا کنید و آن لبه را انتخاب کنید. که یک مربع صورتی رنگ در کنار آن وجود دارد. اگر نمیبینید آن را، در قسمت پایین سمت راست صفحه دو فلش کوچک وجود دارد، بر روی فلش سمت راست کلیک کنید تا تا بقیهی لبهها نمایش داده شوند
saimonfox
8th June 2011, 07:50 PM
thank you (kheyli ali bood)
)
cool.wink
9th January 2012, 02:36 PM
با عرض سلام خدمت دوستان. كسي راجب نحوه تشخيص دروازه تو مسابقات ليگ دانش آموزي فوتباليست دو به دو اطلاعاتي داره؟تو مسابقات دانش آموزي ايران اوپن قراره از دروازه هايي استفاده شه كه يك تيرشون زرد رنگ و تير ديگه به رنگ آبي هستش!
asal71
26th March 2012, 06:28 PM
بسیار سپاسگزارم ازمطالب ارزشمندشما[golrooz]
fantastic girl2
26th March 2012, 07:48 PM
با عرض سلام خدمت دوستان. كسي راجب نحوه تشخيص دروازه تو مسابقات ليگ دانش آموزي فوتباليست دو به دو اطلاعاتي داره؟تو مسابقات دانش آموزي ايران اوپن قراره از دروازه هايي استفاده شه كه يك تيرشون زرد رنگ و تير ديگه به رنگ آبي هستش!
من تقریبا 3 سال پیش رو این روباتا کار می کردم، به جای رنگ با مختصات دوازه کار کن و تو الگوریتم نه خواه که روبات هرجا که بود به طرف دروازه شوت کنه یه نقطه یا نقاطی از دیواره ها رو برو بشین محاسبه کن که اگه توپ اون جا بخوره میره تو دروازه.....................،با رنگ نیاز به پردازش تصویر هست که زوده یه کوچولو.....
خوش حال میشم بتونم اطلاعاتمو در اختیار دوستان قرار بدم.
یاسمن . د.ه
26th March 2012, 09:33 PM
سلام من هم این چیزا رو خوب بلدم اگه کاری داشتی بهم بگو . خوشال میشم .[shaad][shaad][golrooz]
hadi elec
27th March 2012, 03:06 AM
http://www.techno-electro.com/uploads/posts/2010-08/1283113803_robot2.jpg
معمولا اکثر افراد برای ورود به علم رباتیک با ربات های مسیر یاب یا تعقیب خط پا به این عرصه می گذارند . ربات های تعقیب خط دارای سنسور هایی در جلوی ربات هستند که با تشخیص خط سیاه موجود در سطح زمین تصمیم به پیچیدن می گیرند . در کل یکی از جذاب ترین ربات ها ربات تعقیب خط است که بخاطر سخت افزار ساده و نحوه برنامه نویسی باعث شده حتی دانش آموزان نیز به این علم علاقه مند شوند .
کتابی بسیار ساده و جالب را برای شما آماده کردیم که توسط دوست خوبمان جناب آقای فتوحی جمع آوری شده است . از سخت افزار و قطعات ساده الکترونیک شروع به آموزش کرده و سپس آموزش کار با میکروکنترولر AVR مخصوصا Atmega8 را داده است و در ادامه نحوه کار با نرم افزار CodVision را آموزش داده است . جالب توجه این است در آخر این کتاب برنامه نویسی یک ربات مسیریاب عملی را برای شما قرار داده است که شاید خیلی ها دنبال آن باشند . در صورتی که کتاب یا مقاله ی جالبی در زمینه رباتیک دارید برای ما ارسال نمایید تا در سایت با نام شما قرار گیرد و دیگران نیز از آن استفاده نمایند .
---------------------------------------------------
حجم فایل: 670KB
---------------------------------------------------
---------------------------------------------------
http://www.techno-electro.com/templates/main1/images/icon_download.gifدانلود فایل (http://techno.directdl.net/dl1/Ebooks/lineFollower%5BTechnoElectro.Co%5D.zip)
---------------------------------------------------
به نکات زیر توجه کنید :
* پسورد تمامی فایل ها تکنو الکترو - سایت تخصصی برق و الکترونیک (http://www.techno-electro.com/) میباشد.
sepehr-m-s
25th April 2012, 07:40 PM
لطفاً شمای فنی وسایل الکترونیک را برام بگید.
یاسمن . د.ه
27th June 2012, 03:59 PM
ببخشید نتونستم دانلود کنم.[afsoorde]
bjjasos
3rd July 2012, 11:50 PM
درود به برو بچ برق گرفته از آقا هادی ممنون که اون فایل غیر قابل دانلود رو برامون گذاشتن خیلی خوب بود که آدرس منبع تو رمز بود خیلی بدرد خورد . میخواستم بدونم در مورد ربات های صنعتی واینجور چیزا بخصوص قسمت الکترونیک و کنترلش جزوه ای چیزی پیدا میشه. منظورم بیشتر رو درایور های موتور هاش و نحوه استفاده از انکودر تو pbp وcodevision
طيبه اوشني
10th July 2012, 01:27 PM
با سلام متاسفانه من قادر به دانلود نيستم چه بايد بكنم؟
TERRORIST
10th July 2012, 01:50 PM
با سلام متاسفانه من قادر به دانلود نيستم چه بايد بكنم؟
سلام
خدمت شما
دانلود (http://s3.picofile.com/file/7432755157/Training_robot_www_mohandesyar_com_2_.pdf.html)
parastoo zare
22nd May 2013, 05:20 PM
سلام ببخشید ما داریم یه ربات میسازیم وچند تا سوال دارم ممنون میشم جواب بدید[shaad]
ببخشید اگر بخوایم از یک چیزی خیلی کوچک استفاده کنیم که سطح بسیار نازکی داشته باشه ومثل سنسور عمل کنه شما چی رو معرفی میکنین؟استفاده از سنسور رو روهم کمی توضیح بدین که هزینه معمولی و خیلی خیلی نازک باشه[nadanestan]
diana*
18th December 2013, 05:26 PM
سلام .کسی میدونه چطور میشه شارژر خورشیدی ساخت؟[soal]
diana*
19th December 2013, 12:37 PM
sh_dokhtar2چجوری میشه ربات مین یاب ساخت.[nadanestan]
creeping
18th February 2014, 02:24 AM
[golrooz]
استفاده از تمامی مطالب سایت تنها با ذکر منبع آن به نام سایت علمی نخبگان جوان و ذکر آدرس سایت مجاز است
استفاده از نام و برند نخبگان جوان به هر نحو توسط سایر سایت ها ممنوع بوده و پیگرد قانونی دارد
vBulletin® v4.2.5, Copyright ©2000-2025, Jelsoft Enterprises Ltd.