تبليغاتX
E.l.e.B.o.y.s
منوی کاربری

Make Your HomePage    Send Email To Admin    Add to Favorites

پيغام مدير : با سلام امیدوارم از مطالب وبلاگ راضی شده باشید

با تشکر   

لينك دوستان
_.:: P30 پدرام ::.._

براي تبادل لينک ابتدا لينک مارو بانام:E.l.e.B.o.y.s در وبلاگ ياسايتتان قراردهيد ،

سپس از طریق فرم نظرات به ما خبر دهيد تاما هم اين کار رو براي شما بکنيم.

چت بامديـــــر
جستجوگر

Google
  
            
     در كل اينترنت
     در اين سايت

آرشيو
طراح قالب
پردازش تصوير با مطلب (قسمت2)

دوستان عزیزم سلام. یه خورده دیر کردم واقعا ببخشید! اما به قول یکی از دوستان که نظر گذاشته بود٬ یه موقعه هایی آدم نوشتنش نمیاد دیگه! تازه ۱ هفته هم کامپیوترم قات زده بود (امان از دست این ویروسا) راستی با اینکه هنوزم درصد بالایی از بازدیدهای وبلاگ بخاطر مقالات ربات مسیریاب هستش٬ اما واقعا خوشحالم که عده کسانی که از پردازش تصویر استقبال کرده بودن هم کم نبود (بگو ماشاءالله). امروز می خوام یه مبحثی از پردازش تصویر در مطلب رو بگم که البته از تمام توابعش در پروژه خودمون قرار نیست استفاده کنیم اما از اونجایی که هم یکی از مثالهای مهم خود مطب هست و هم خیلی جذابه یادگرفتنش خالی از لطف نیست...

Morphological Opening قابلیتی هستش که با استفاده از اون می تونید اجزاء کوچک یا ضائد موجود در یک تصویر رو از بین ببرید در حالی که به اجزاء بزرگتر و یا باشکل مورد نظر شما هیچ خدشه ای وارد نشه! برای مثال می تونید در تصویر نقشه فیبر یک مدارچاپی خطوط سیمهای اتصال رو از بین ببرید در حالی که جای قطعات بزرگتر مثل آیسی های و... لطمه ای نزنید. (خیلی گنگه؟ یه مثال دیگه) فرض کنید تصویر یه قطره خون زیر میکروسکوپ را دارید که مثلا داخلش انواع گلوبول سفید و قرمز هزار جور ذره دیگه با سایزهای کوچیک و بزرگ هستش. حالا اگر بخواید تعداد گلوبول سفیدارو بشمارید مجبورید اول ذرات کوچکترو حذف کنید و بعد تعداد کل ذرات باقیموندرو بشمارید! اصلا بیاید با همین مثال شروع کنیم:

1.  I = imread('nodules1.tif');
2.  level = graythresh(I)
3.  bw = im2bw(I,level);
4.  bw = ~bw;
5.  imshow(bw);

خوب توضیحات رو با شماره خطوط پیش می برم. خط اول کد رو که جلسه پیش توضیح دادم برای خواندن یک تصویر از آدرس مورد نظر در یک متغیر هستش. نصویر مورد نظر ما در اینجا یک تصویر grayscale یا سیاه و سفید هستش. حتما قبل از اجرای دستور دوم یکبار (Imshow(I رو اجرا کنید تا این تصویر سیاه و سفید رو ببینید. خط دوم و سوم از دو تابع im2bw و graytresh به صورت پشت سرهم استفاده شده که نحوه کار هریک در این مثال به صورت زیر هستش:

(BW = im2bw(I,level : همونطور که در مقاله قبل توضیح دادم تصاویر در مطلب انواع مختلف دارن از جمله رنگی یا RGB و سیاه سفید Grayscale و یا باینری و... توابع مختلفی جهت تبدیل این نوعها به هم تعبیه شده که از جمله اونها im2bw هست که جهت تبدیل انواع تصاویر به نوع باینری که تنها دارای نقاط سیاه و سفید هستش بکار میره. این تابع تصویر ورودی رو اول به نوع سیاه سفید تبدیل می کنه و در مرحله بعدی اون رو به یک تصویر باینری تبدیل می کنه. تصویر باینری خروجی BW به ازاء تمام پیکسل هایی که مقدار روشنایی آنها کمتر از مقدار level باشد مقدار ۰ (یا سیاه) و برای بقیه پیکسلها مقدار ۱ (یا سفید) اختیار خواهد کرد.

(level = graythresh(I : همیشه برای بدست آوردن این حدآستانه level که در تابع بالایی استفاده می شود از تابع graythresh با ورودی تصویر مورد نظر استفاده می کنیم و بعد این level را در توابعی همچون im2bw استفاده نماییم.

قبل از اجرای دستور خط چهارم حتما یکبار دستور (imshow(BW را جهت مشاهده تصویر باینری تولید شده اجرا کنید. مشاهده می کنید تمام نقاط به رنگ سیاه و بقیه تصویر سفید می باشد (تصویر باینری فقط دارای نقاط ۰ سیاه و ۱ سفید می باشد). حالا فرض کنید بخوایم این حالتو برعکس کنیم یعنی نقاط سفید و زمینه سیاه باشه باید از دستور خط ۴ استفاده کنیم. می بینید که علامت ~ در مطلب مثل NOT منطقی عمل کرده و تمام نقاط صفر رو یک و یک رو صفر کرده. با اجرا دستور خط ۵ یکبار دیگه تصویر تولید شدرو ببینید.
یه مراحلی رو طی کردیم که خود این مراحل هم فقط جنبه آموزش داشتن وگرنه همون تصویر سیاه و سفید اول رو هم می تونستیم ذرات ریزش رو باهمین روشی که در زیر توضیح می دم٬ حذف کنیم. اما چون ما در بعضی مثل همینجا به اطلاعات اضافی تصویر احتیاجی نداریم و همچنین چون سرعت پردازشات روی تصاویر باینری بسیار بالاتر هستش٬ در صورت لزوم یه همچین مراحلی رو ابتداعا طی می کنیم و تصویر باینری ایجاد می کنیم. خوب حلا بریم سر اصل قضیه که حذف کردن ذرات ریز باشه:

1.  se = strel('disk',5);
2.  bw2 = imopen(bw,se);
3.  imshow(bw);
4.  figure, imshow(bw2);

(IM2 = imopen(IM,SE : اصل قضیه Morphological Opening همین تابع imopen هستش که دارای دو ورودی٬ یکی تصویر مورد نظر (IM) و دیگری یک المان ساختاری (SE) هستش که مشخص کننده خصوصیات اجزایی که باید از تصویر حذف بشن٬ از جمله شکل و بزرگی آنها هستش.

(SE = strel(shape,parameters : این تابع تولید کننده همون المان ساختاری مصرف شده در تابع بالاس. این تابع بر اساس ورودی هایی که بهش داده میشه یک ماتریس دوبعدی از صفر و یک ها میسازه که نقاط ۱ در کنار یکدیگر یک جزء کوچک رو میسازن و تابع imopen با توجه به این ساختار اجزایی که کوچکتر از این جزء هستند رو از تصویر حذف می کند. پس بایستی دقت کنیم ساختار تولید شده در این دستور نه خیلی کوچک باشد که اجزاء ضاید را در بر نگیرد و نه خیلی بزرگ باشد که برخی از اشکال تصویر که قصد حذف شدن آنها را نداریم نیز از بین بروند!
ورودی shape یک رشته است که یکی از چند حالت 'disk', 'ball, 'octagon,.. را که مشخص کننده شکل ساختار تولید شده است٫ می باشد. بر اساس رشته shape وارد شده پارامترهای متفاوتی را جهت مشخص کردن سایز آن بایستی در ورودیهای بعدی وارد کنید که جزئیات بیشتر را با جستجو کردن نام تابع 'strel' در راهنمای مطلب بیابید. اما برای نمونه
(SE = strel('disk',R باعث ایجار یک ساختار دیسک شکل با شعاع R به صورتی که در شکل مشاهده می کنید می شود.

خوب با صدا زدن دو دستور خط ۱ و ۲ المان ساختاری مورد نظر تولید شده و تمام اجزایی که کوچکتر از این ساختار باشند توسط دستور imopen حذف می شوند و خروجی در متغیر bw2 قرار می گیرد. کد خط چهارم همانطور که می دانید تصویر bw را نمایش می دهد و کد خط ۵ باعث ایجاد یک پنجره تصویر جدید و نمایش bw2 در آن می شود. پس همزمان می توانید تصویر اصلی و اصلاح شده آن را مشاهده نمایید. که خروجی چیزی شبیه شکل زیر خواهد شده.

دوستان این مقاله زیادی طولانی شد اما به نتایج جالبی داریم می رسیم. حتما به راهنمای مطلب سر بزنید که از اینجور مثالا توش زیاده! یادتون نره از این تکنیک در جاهای مختلفی می تونید استفاده کنید.

[+] نوشته شده توسط نیما در 19:56 | |

پردازش تصوير با مطلب (قسمت1)

دوستان خوبم سلام ....

همونطور که قول داده بودم قراره بخش پردازش تصویر پروژه با مطلب رو از این مقاله شروع کنیم. خوب دوستان ما پروژه خودمون رو (ربات مسیریاب توسط پردازش تصویر) به چند بخش تقسیم می کنیم و هر بخش رو بصورت مجزا آموزش میدم. این ربات توسط یک دوربین فیلم برداری ساده مثل وبکم کامپیوتر و یا حتی سادتر٬ بطور مکرر از مسیر تصاویری تهیه تولید می کنه (پایان مرحله اول) در مرحله بعدی این تصاویر پردازش و مسیر حرکت ربات از اطلاعات بدست آمده از آنها استخراج می شود (پایان مرحله دوم) و در مرحله آخر کاری که میکروکنترلر در رباتهای عادی انجام می دهد ما با استفاده از پورت های کامپیوتر انجام داده و فرامین حرکتی را برای سیستم کنترل موتورهای ربات ارسال می کنیم (چپ گرد٬ راست گرد). اما بیاد مراحل رو از وسط شروع کنیم! یعنی مرحله پردازش تصویر. فکر می کنیم یه تصویر توسط دوربین در محیط مطلب در اختیار ما قرار داده شده و ما پردازشات لازم جهت استخراج مسیر حرکت رو روی اون انجام میدیم٬ تا بعدا برسیم به مراحل بعدی... مقدمه دیگه بسه بریم سر اصل مطلب:

 اگر همونطور که گفتم به یه کتاب مطلب نگاهی انداخته باشید حتما از همون ابتدای امر متوجه شدید که در این نرم افزار اکثر عملیات ها برپایه ماتریس ها انجام میشه (ضرب٬ تقسیم٬ جمع٬...). مطلب یجورایی شبیه یه زبون برنامه نویسی هستش و ما در اون از متغیرها٬ عملگرها و توابع و... بسبک زبانهای برنامه نویسی جهت حل مثائل خودمون استفاده می کنیم. اصلا بیاید یه مثال عملی بزنیم:

>> I = 1:10

I =

     1     2     3     4     5     6     7     8     9    10


اجرا کردن دستور I = 1:10 باعث ایجاد یک متغیر به نام I و به شکل یک ماتریس یک بعدی با محتوای ۱ تا ۱۰ می شود (این اولبن و آخریم مثال سطح پایینم بود! توقع دارم اینارو خودتون با خوندن یک کتاب یاد بگیرید) حالا بریم سراغ یک مثال تخصصی:

RGB = imread('peppers.png'); ٪متغیر = imread('مسیر ونام فایل تصویر');
imshow(RGB);


تابع "imread" یکی از توابع جعبه ابزار پردازش تصویر می باشد که جهت لود کردن یک فایل توصویری در یک متغیر به سبکی که مشاهده می کنید استفاده می شود. می بینید که در کادر متغیرها (بطور پیشفرض کادر بالا سمت چپ میحیط مطلب) متغیر RGB با ابعاد <384x512x3 unit8> ایجاد شده است. یعنی یک ماتریس سه بعدی که بعد اول ۳۸۴ خانه و معرف تعداد پیکسلهای ارتفاع تصویر٬ بعد دوم ۵۱۲ پیکسل طول تصویر و بعد سوم ۳ خانه که چون تصویر از نوع رنگی (RGB) می باشد یک خانه حاوی مقدار RED و خانه های بعدی نگدارنده مقادیر GREEN و BLUE پیکسل مورد نظر می باشد. جهت درک قضیه به تصویر مقابل دقت کنید.
unit8 نوع تصویر RGB در مطلب را مشخص می کند. باید بدانید سه نوع مکعب رنگ unit8, unit16 و Double برای تصاویر رنگی در مطلب در نظر گرفته شده است. برای مثال در کلاس unit8 هر بعد مکعب که بیانگر یکی از رنگهای قرمز٬ سبز و آبی می باشد دارای ۲۵۶ (۲۸) مقدار تعیین شده می باشد که در کل ۲۵۶*۲۵۶*۲۵۶= ۲۲۴ رنگ مختلف تولید می شود. برای کلاسهای دیگر هم بهمین روال می باشد با این تفاوت که تعداد رنگ آنها بیشتر می باشد.دستور بعدی (خط دوم)٬ دستور "imshow" جهت نمایش تصاویر موجود در متغیر ها با فرمت ذکر شده می باشد. بعد از فراخوانی این دستورات ابتدا اطلاعات موجود در تصویر 'peppers.png' (موجود در مسیر جاری مطلب) داخل متغیر RGB ریخته شده و با دستور imshow مرورگر تصاویر نرم افزار عکس مربوطه را نمایش می دهد.

»افزایش کنتراست تصویر
خوب حالا بیاید یکم کارای پردازشی روی تصاویر انجام بدیم. تصویر pout.tif رو در یک متغیر لود کنید و اون رو نمایش برای خودتون بدید (دقیقا مثل کد زیر). می بینید که این عکس کنتراست پایینی داره !

I = imread('pout.tif');
imshow(I);

برای مشاهده نحوه توزیع شدت رنگ در یک تصویر می توانید با صدا زدن دستور 'imhist' نمودار هیستوگرام آن را رسم کنید (شکل ۱) .

figure, imhist(I);

می بینید که در شکل ۱ رنج شدت نازک می باشد و تمام پتانسیل ۰ تا ۲۵۵ را پوشش نمی دهد بدین معنی که بخشی از مقادیر بزرگ و بخشی از مقادیر کوچک را که باعث ایجاد کنتراست بالا می شوند را در خود ندارد.
در این جعبه ابزار روشهای گوناگونی جهت افزایش کنتراست یک تصویر در نظر گرفته شده است که یکی از آنها استفاده از تابع histeq جهت پخش کردن مقادیر شدت در کل رنج پتانسیلی تصویر می باشد. با اجرای این دستورات به ترتیب زیر می بینید که نمودار هیستوگرام از نمونه شکل۱ به شکل۲ و تصویر از شکل۳ به شکل۴ تغییر می کند...

I2 = histeq(I);
figure, imshow(I2);


بهمین روش می توانید تصاویر دیگری را جهت تمرین وارد این محیط کرده و میزان کنتراست آنها را افزایش دهید.
مقاله این سری خیلی طولانی شد٬ اما می بینید که پردازش تصویر به خصوص در مطلب بحث بسیار سبک و شیرینی هستش! در جلسات آینده وارد مباحث پیشرفته تری خواهیم شد...

فعلا یاحق ...

[+] نوشته شده توسط نیما در 12:3 | |

یه شروع دوباره (پردازش تصویر با مطلب)

دوستان خوبم سلام...
بخدا یه ساعته دارم فکر می کنم برا سه چهار خط اول این پست چی باید بنویسم و چی باید بگم (آخه میدونید که ۱ سالی هست نیومدم!!!!) تورو خدا خدتونو بزنید به کوچه علی چپ بیخیال شید دیگه٬  بیاید یجور رفتار کنیم انگار فقط ۱هفتس دیر کردم! بزارید من کمتر خجالت بکشم (اخ مرسی٬ قربون مرامتون)

خوب دوستان بعد از پایان آخرین سلسه آموزشیم (آموزش Protel 99) قول داده بودم که راجع به پردازش تصویر مقالاتی رو شروع کنم  که ظاهرا هم علاقمند زیاد بوده و هم عده زیادی ابراز لطف کرده بودن که از همشون ممنونم. طبق روال ابتدا برنامه آموزشی این سری خودم رو اعلام می کنم و در مقالات بعدی آموزش اصلی رو شروع خواهم کرد.

همونطور که ممکنه مطلع باشید بحث پردازش تصویر یکی از دروس دانشگاهی اون هم در مقطع کارشناسی ارشد هستش و میشه نتیجه گرفت اگر ما بخواهیم بطور پایه٫ مفهومی و فورمولی به این موضوع بپردازیم مقالاتی بسیار طولانی٬ تخصصی و سنگین رو خواهیم داشت که اصلا تو کار ما نیست. پس من چطوری می خوام شروع کنم؟
آها٬ مطمئنم خیلی هاتون با نرم افزار Matlab کارکردید یا حداقل اسمشو شنیدید. این نرم افزار یجورایی میشه بگی جهت حل مثائل ریاضی٬ شبیه سازی و... برای رشته های گوناگون طراحی شده که تمام محاسباتش در قالب ماتریس ها انجام میشه. این برنامه دارای جعبه ابزارهای گوناگونی هستش که همراه بسته نرم افزاریش ارائه میشه که هرکدون مربوط به کار خاص و رشته خاصی هستش. درواقع یادگیری کار با این نرم افزار دو بخش داره: ۱- اصول اولیه و فرمولهای مبتدی کار با ماتریس ها و اعداد و همچنین برنامه نوبسی مبتدی در مطلب. ۲- یادگیری نحوه کار با جعبه ابزار مربوط به کار خودمون یا آشنایی با توابع موجود در آن.

یادگرفتن مرحله اول کار بسیار آسونی هست و حتی یک دانش آموز زرنگ سطح راهنمایی (اگه زرنگ نباشه دبیرستان!) هم میتونه با مطالعه یه کتاب خودآموز طی ۴ یا ۵ ساعت به ابن مرحله تسلط نسبی پیدا کنه! با این حال من خودم مثل همیشه خط به خط کدهایی که استفاده می کنمو کاملا توضیح میدم و سعی می کنم برای همه قابل فهم باشه ولی توصیه می کنم برای اینکه خودتون بتونید کدهای من رو گسترش بدید و چیزای جدید بنویسید و بهتر متوجه بشید حتما یه کتاب مطلب مطالعه کنید.
اما مرحله دوم که ممکنه برای هر جعبه ابزار یه کتاب جداگانه وجود داشته باشه یه مقدار تخصصی تره که در این مقالات قصد دارم به معرفی و آموزش دستورات تعدادی از این جعبه ابزارها بپردازم. (درضمن منظور از جعبه ابزار مجموعه ای از توابع و دستورات مرتبط هستش که جهت انجام پردازشات و محاسبات روی داده های بخصوصی است که توسط افراد یا شرکت ها با استفاده از همین دستورات مبتدی مطلب نوشته شده اند٬ هستش. مثلا جعبه ابزار پردازش تصویر و یا منطق فازی که هرکودوم حاوی توابعی در زمینه خودشون هستند.)

راستی نکنه یوقت از حیبت و اسم نرم افزار مطلب بترسیدا (ولی واقعا نرم افزار عظیمیه!!!) در سطح مبتدی و متوسط واقعا شیرین و آسونه اینو قول میدم. بچه ها این نرم افزار تو کشورهای خارجی خیلی خیلی خیلی گرونه٬ تازه برای هر جعبه ابزارش هم جداگونه باید خیلی خیلی خیلی پول بدی! اما در ایران خود نرم افزار و شونصدتا جعبه ابزارش باهم تو ۳٬۴ تا سی دی ۱۰۰۰ تا ۱۵۰۰ تونم هست پس بیاید کمال سواستفاده رو ببریم!!!

خیلی حرف زدم!! تو این سلسه مقالات آموزشیم قصد دارم پردازش تصویر رو در قالب یک پروژه آموزش بدم. پروژه مربوطه یک ربات مسیریاب هستش که مسیر خودش رو توسط پردازش تصویر تشخیص میده!! البته این ربات بجای سنسورهای رنگ از یک دوربین کوچیک فیلم برداری با رابط USB (مثل وبکم) استفاده می کنه و مغز اصلی رباط بجای میکروکنترولر کامپیوتر هستش و توسط درگاه سریال کامپیوتر فرمان میگیره. اگر توجه کرده باشید ربات تولید شده از این روش اصلا نمیتونه تو مسابقات شرکت کنه و فقط جنبه آموزشی برای مقالات ما رو داره که البته از همین ایده میتونید در رباتهای دیگه بجز مسیریاب که بعدا اشاره می کنم استفاده کنید. پیشنهاد کلی اینه که شما از بدنه یک ربات مسیریاب که از قبل آماده کردید جهت آزمایش این پروژه استفاده کنید. در طی این دوره ما احتیاج داریم با تعدادی از جعبه ابزارهای مطلب از جمله:

  • جعبه ابزار Image processing
  • جعبه ابزار Image Acquisition
  • جعبه ابزار Data Acquisition
  • ...

کار کنیم که در مقالات آینده به ترتیب با دستورات موجود در این پکیجها آشنا خواهیم شد و پروژه خودمون رو کامل می کنیم. در پست بعدی (۳یا ۴ روز دیگه) کار با جعبه ابزار Image processing که شرین ترین بخش پروژه هست رو شروع می کنم.
موفق باشید ....

[+] نوشته شده توسط نیما در 0:28 | |

چی بگم؟

سلاااااااااااااااااااااااااااااااااااااااااااام....
اوه اوه می دونم خیلی ها از دستم شاکی ان ولی خوب دیگه٬ پیش میاد!!!!  . راستش این مدت (۱ ماهی هست ننوشتم ها؟) خیلی تنبل شدم! فکر کنم دلیل اصلیش همین پروژه آخری بود که می خواستم آموزش بدم (اتصال دسته پلی استیشن به میکرو).... به نظر من که خیلی سخت بود٬ تا یه جاهایی پیش رفتم و بعد که فکرشو کردم این مطالب رو چطور باید تو وبلاگ آموزش بدم تا دوستان هم بتونن یاد بگیرن مخم صوت کشید! کسایی که مطالب وبلاگ منو دنبال می کنند خیلی خوب می دونن فرق این وبلاگ با خیلی های دیگه چیه!!!؟! من اصلا دوست ندارم فقط برای یه مقاله ای رو از یجایی کپ بزنم و سر ماه شونصدتا پروژه بی ربط تو وبم باشه٬ خوب یه کتاب ۳۰۷ مدار می خرم!!!!! هرکی هم میاد فقط یه نگاه می ندازه و بعدش هم یا علی از تو مدد!!! نخیر اینجا میای باید قدم به قدم راهنمایی بشی٬ مرحله به مرحله و پله پله پیشرفت کنی و... یعنی تا حالا که سعی کردم اینجوری بوده باشه (بوده؟)

راستش امروز هم برای آموزش نیومدم٬ اصلا نمی دونم چرا اومدم !! شاید از شما خجالت کشیدم٬ خواستم محبت های شما رو جبران کنم. چندوقته خیلی ها ایمیل میزنن که تصاویر پست های قبلی نمیاد! درست هم میگن٬ علتش یه نامردیه کوچیکه! جایی که روش عکس ها مو آپلودمی کردم یهو قاط زد و تمام عکس های وبلاگ من هم بهم ریخت . امروز خواستم تک تک مقالات رو درست کنم اما دیدم کار بسیار مشکلیه! برا همین هرچی عکس داشتم یجا کردم و گذاشتم برای دانلود. حالا دیگه ربط دادن عکس ها با مقالاتی که تصاویرشون خراب شده زحمتش افتاد گردن شما!!! البته فقط دو سه تا مقاله هست که بدون تصاویرش واقعا نامفهوم میشه٬ بقیه رو بدون عکس هم میشه تحمل کرد.... بازم به بزرگی خودتون ببخشید .

یه نکته مهم دیگه که امروز منو وادار کرد تا این پست رو بدم یه درد و دل کوچیک بود!!! راستش از همون روز اول که من این وبلاگ رو تشکیل دادم٬ قصدم انجام یه کار گروهی بود! کسایی که از اول با من بودن حتما یادشونه که تو لیست نویسندگان این وبلاگ چه کسایی اومدن و حتی بدون نوشتن یه مطلب رفتن (مثلا فاضل٬ مقداد٬ ... و حالا هم فرزاد). خلاصه مطلب اینکه تا حالا سعادت همکاری با کسی رو نداشتم اما الان اومدم یه فراخوان برای همکاری بدم...
همینجا از دوستانی که تمایل دارند آموخته هاشون رو در زمینه الکترونیک٬ روباتیک و موارد مربوطه با دوستان خودشون در این وبلاگ تقسیم کنند بطور جد درخواست همکاری می کنم . البته یکی دونفری پیشنهاد داده بودن که به علت چلمن بازی این جانب ایمیل هاشون گم شد :( لطفا با من تماس بگیرید bg.nima[at]gmail.com

راستی حالا که این پست خیلی بیربط شد بزارید حداقل یه نکته مثبت هم داشته باشه... از همون روزای اول خیلی ها به من میل زدن که ما چیزی راجع به ربات و یا حتی الکترونیک ساده و غیره نمی دونیم و چطوری باید شروع کنیم؟ در جواب این دوستان این راه پیشنهادی من هستش:
از اونجایی که بخش اعظم یا حداقل بخشی که ما در ساخت ربات بیشتر بهش توجه می کنیم الکترونیک و زیرمجموعش٬ کار با میکروکنترلر هستش به این دوستان اینطور پیشنهاد می کنم که٬ با کتاب های الکترونیک دیجیتال شروع کنند. هرچی کتاب زخیم تر و پرزرق و برق تر باشه بهتره  آخه ساده تر و جذابتر میشه! از اسم الکترونیک دیجیتال اصلا نترسید که حتی یه دانش آموز اول دبیرستان هم میتونه به راختی از ۳  ۴ فصل اول کتاب سر در بیاره (بقیش هم با علاقه و تمرین براحتی قابل درکه). فقط مراقب باشید کتابی رو انتخاب کنید که هرچه بیشتر سبک و مقدماتی باشه (۳  ۴ فصل اولش کافیه). بعد از اون برید سراغ میکروکنترلر! اگر در این زمینه هم تجربه کافی ندارید پیشنهاد می کنم کتابهای آموزش کاربا میکروکنترلر AVR به زبان C رو تهیه کنید. در حال حاضر کتابهای زیادی منتشر شده که من از خیلی هاشون بیخبرم برا همین نمی تونم کتاب خصی رو پیشنهاد کنم... از بچه ها خواهش می کنم اگه کتابهای خوبی رو در این زمینه ها مدنظر دارند برای کمک به دوشتاشون تو قسمت نظرات بنویسن. خوب دیگه بعد از خوندن این دوتا کتاب دیگه راه و چاه دستتون میاد و بقیه راه رو خودتون زودتر از من پیدا می کنید...

الان خیلی نادم ام ولی چه میشه کرد !! دعا کنید دوباره به اون روزای اول برگردم!!! (ای خدا چرا منو گرفتار این ژهر ماری کردی )... اگه منم٬ که دوباره می نویسم!!! حالا که اینطور شد بزودی یه زود منتظر مقالات من در زمینه پردازش تصویر با مطلب باشید.....

راستی از دوستانی که تو این مدت خیلی لطف کردن و کما بیش به ما تیکه انداختن ممنونیم (سپیده٬ علی٬ علیرضا و ...) اصلا وبلاگ به مدد همین دوستان سروپاست. پس فعلا بای...... نظر هم یادتون نره!!!

[+] نوشته شده توسط نیما در 16:42 | |

ارتباط دسته PlayStation با کامپیوتر 2

دوستان با مرام خودم  بازم سلام. راستش الان که دارم این مطلب رو می نویسم٬ هم بدجوری خوابم میاد و هم اینکه بدجوری دیرم شده!!! (بلیط شهرستان دارم). اما ترسیدم برم و دیگه برنگردم اونوقت دیگه از اینی هم که هستم پیشتون بدقول تر بشم !! ............. .... ... ...

۲ روز بعد: راستش دیرم شده بود و همون موقع رفتم شهرستان و الان دارم ادامه اش رو می نویسم. خلاصه ببخشید اگه یکم دیر شد . راستی از همه شمایی که نظر میزارید و سوالات٬ نظرات و ابراز علاقه های خودتون به من هدیه می کنید واقعا ممنونم. یادتون نره که همیشه تنها انگیزه من برای نوشتن مقاله بعدی همین نظرات شما بوده! هنوز بخش مهمی از پروژه پست قبلی باقی مونده که امروز کاملش می کنم:

خوب نحوه اتصال منبع تغذیه جداگانه برای راه اندازی Force Feedback دسته رو هم توضیح دادم اما در تصویر زیر می تونید شماتیک دقیق پروژه رو برای راه اندازی دودسته بطور همزمان مشاهده می کنید.

فکر می کنم با استناد به این شماتیک دیگه پاسخ خیلی از سوالاتتون رو گرفته باشید. اما الان مهمترین بخشی که باقی می مونه بخش نرم افزاری پروژه هستش.

بخش نرم افزار:
اگر قسمت الکترونیکی مدار رو تهیه کرده باشید و اون رو به کامپیوتر وصل کنید٬ خواهید دید که این سیستم به خودی خود اصلا برای کامپیوتر شناخته شده نیست. وظیفه شما در این مرحله استفاده از نرم افزار تهیه شده در این زمینه برای شناساندن دسته پلی استیشن به کامپیوتر می باشد. من خودم نسخ مختلف موجود در اینترنت رو امتحان کردم که یا برای ویندوز ۹۸ بودن و یا اینکه اصلا کار نمی کردن. اما نسخه ای رو که من اینجا برای دانلود گذاشتم بسیار سهل الاستفاده و با درصد بالایی در تمام سیستم ها جواب می دهد.

 از اینجا دانلود کنید (۱۲۴ kb)

بعد از بارگذاری نرم افزار فوق و بازکردن فایل زیپ آن٬ فایل Install.exe رو اجرا کنید و از پنجره ظاهر شده گزینه "Multitap PlayStation en LPT1" را از منوی کشویی انتخاب٬ تیک را چک زده و قسمت آخر را نیز روی ۰٪ باقی بگذارید. حال دکمه "Acepter" را فشار دهید.
برای اینکه بفهمید نرم افزار موفق به شناختن دسته پلی استیشن شده و  بخش سخت افزاری پروژتان را بخوبی اسمبل کرده اید٬ از کنترل پنل گزینه "Game Controllers" را انتخاب کنید بایستی در لیست موجود در پنجره باز شده گزینه "25Pin Gamepad" نیز موجود باشد. دکمه Properties هر گزینه در این لیست مربوط به تنظیمات آن می باشد. با فشاردن این دکمه صفحه تنظیمات دسته شناخته شده باز می شود که در این صفحه می توانید کارکرد تمام دکمه های دسته را امتحان و مشاهده کنید. در این قسمت حتی می توان نحوه کارکرد Joystick و یا Analog Contioller دسته پلی استیشنتان (در صورت داشتن این قابلیت) مشاهده کنید و از منطق آن سر در بیارید.
باید توجه کنید که این برنامه از توابع DirectX که تنها مخصوص ویندوز است استفاده می کند. بنابراین استفاده از این پروژه در سایر سیستم عامل ها مقدور نمی باشد.

حرف آخر: همونطور که گفتم برای استفاده از قابلیت شوک دسته احتیاج به یک تغذیه ۹ ولت خارجی دارید. نکته موجود اینکه که می تونید این ۹ ولت رو بواسطه یک رگولاتور از یکی از کابل های تغذیه تولید شده توسط پاور بگیرید و به طریق ممکن موردکه به ذهن خودتون میرسه٬ اون رو به کانکتور ۲۵ پایه وصل کنید.
خوب دیگه نمی خوام این سری از مقالات رو زیاد کش بدم (درواقع چیزی هم نداره که بخوام کشش بدم). هدف اصلی من از انجام این پروژه زمینه سازی برای انجام پروژه ای سخت تر و اصلی تر که ارتباط دسته پلی استیشن با میکروکنترلر٬ هستش که از جلسه بعد انشاالله آموزشها در این مورد خواهد بود.

[+] نوشته شده توسط نیما در 20:10 | |

ارتباط دسته PlayStation با کامپیوتر 1

دوستان با محبتم سلام. شرمنده از این که دوباره تو نوشتن مطالب وقفه ایجاد شد . راستش این اواخر یکم بی حوصله شدم (مطمئنم بخاطر زیادی تعطیلات هستش) و مورد دیگه اینکه بخدا این مطلب رو دو سه بار تا نصفه نوشته بودم ولی هر دفعه یجوری تمام زحمتهام یا پاک می شد یا.... خوب دیگه بگذریم.

پروژه جدیدی که می خواهیم شروع کنیم برمیگرده به یکی از علایق بزرگ من در علم الکترونیک! می دونید من اشتیاق زیادی به ایجاد ارتباط بین قطعات مختلف دارم مثلا میکرو با کامپیوتر٫ کامپیوتر با تلفن٫ یخچال با اتو و...  .

اما این یکی یکم متفاوت تر٫ سخت تر و بدردبخورتر هستش. اصل مطلب اینکه می خواستم یه ربات Manual (کنترل دستی) بسازم. به انواع کنترل های مختلف فکر کردم اما در آخر به ذهنم رسید که تو این پروژه از بهترین و محبوب ترین کنترلر دنیا یعنی دسته پلی استیشن استفاده کنم. فکر کنم منظورمو فهمیدید!؟!! درواقع قصد دارم تو این پروژه جدید آموزش استفاده از دسته Play Station بجای کنترلرهای دست ساز رو شروع

کنم. مزایای این روش اصلا قابل مقایسه با نمونه های ممکن دیگه نیست! اولا: این کنترلر کاملا استاندار و خوش فرم و خوش دست هستش. دوما: بجز 4 کلید جهتی٫ 7 کلید کنترلی دیگه هم داره که فکر می کنم برای هر کاری کافی باشه (طراحی یه کنترلر با این همه دکمه کار آسونی نیست) و سوما: اگر با دسته های دارای Joystick پلی استیشن آشنا باشید که واقعا این روش رو تحصین می کنید! کنترل ربات با جوی استیک همونقدر لذت داره که انگار بعد از یه عمر خر سواری حالا بیای ماکسیما سوار شی (جون چه حالی میده ) چهارما: فکر می کنید چطوری بشه از قابلیت شوک این دسته ها استفاده کرد(یعنی میشه بیخیالش شد؟) ؟  قول میدم که با شنیدن این صحبت ها الان دارن توی دلتون قند آب می کنن. اما صبر کنید! در کنار تمام این مزایا یه عیب بزرگ وجود داره که حداقل پیر من یکی رو که در آورده .

برای استفاده از این روش بایستی بین دسته PlayStation و میکروکنترلرتون ارتباط برقرار کنید٫ یعنی کاری کنید که دسته و میکرو با هم حرف بزنن و زبون همو متوجه بشن که این کار اصلا آسون نیست! این یعنی یه درد سر بسیار بزرگ!!!!

کاربرد: این پروژه همونطور که گفتم برای کنترلر رباتهای Manual مثل امدادگر ها و سایر ربات های مسابقاتی و... کاربرد داره. حالا هر جور شما راحتین.

 به علت عواقب زیادی که در حین اجرای این پروژه ممکنه برای همه ما پیش بیاد (نا امیدی شدید٫ احساس یاس٫ تمایل به خودکشی و....) ترجیح می دم یه نمونه ساده تر کار رو آموزش بدم تا ایجاد ذوق و انگیزه کنم و بعد برم سراغ پروژه اصلی و اون هم چیزی نیست جز ارتباط دسته PlayStation با کامپیوتر و استفاده از اون در بازی ها و... (نمی خواید بگید که: برو بابا ما اهل بازی نیستیم ). دیگه حرافی کافیه بریم سر آموزش.

 قطعات مورد نیاز:

  • دیود 1N4148 یا 1N914 پنج عدد
  • کانکتور DB-25 از نوع نر 1 عدد
  • دسته PlayStation 1 ترجیحا از نوع شوک و دارای Joystick
  • قاب کانکتور DB25 1 عدد (اختیاری)
  • آدایتور (ترانس) 9 ولت (اختیاری)
  • هویه٫ مولتی متر٫ ...

روش کار:
همونطور که ملاحضه می کنید قطعات مورد نیاز این پروژه بسیار کم و ساده هستند اما انرژی و زمانی که باید صرف ساخت اون کنید برعکسه. کار رو با تئوری های دسته PlayStation شروع می کنیم. کانکتور دسته دارای 9 پین هستش که به صورت استاندارد و برای تمام دسته ها هر پین مانند شکل نامگذاری میشه که در مقالات بعدی علت نامگذاری و کاربرد هر کدام توضیح داده خواهد شد. کاری که فعلا لازمه شما انجام بدید اینه که ابتدا پیچ های دسته بازی رو بار کنید تا بتونید به جایی که اتصالات کابل کانکتور لحیم شده اند دسترسی پیدا کنید. حالا با مولتی متر امتحان کنید که هر پین به کدوم سیم متصل هست و حتما رنگ سیم رو مقابل اسمش یاداشت کنید و مواظب باشید که او رو گم نکنید! (مثلا سیم قرمز = V+ و سیم سیاه = Gnd و زرد =  Cmd و...). اگر مولتی متر ندارید از یه مدار ساده چراغ و باطری جهت این کار استفاده کنید. اگر از دسته شوک استفاده می کنید٫ بجز پین چهرم از چپ که Not Connected یا بی مصرف هست بایستی هر پین معادل یک رنگ سیم مستقل باشد و دسته های معمولی 7 سیم دارند که پین 9V در انها Not Connected می باشد. حالا کابل را از چهار پنج سانت قبل از کانکتور ببرید و سر هر هشت سیم را لخت کنید (اگه دلتون نمیاد دسته رو ناقص کنید می تونید از هر روش دیگه که به عقلتون میرسه استفاده کنید!)

 تصویر مقابل کانکتور DB-25 ما را نشان می دهد. پین های قرمز رنگ بیانگر آنهایی هستند که در این مدار ی ا پروژه مورد استفاده قرار می گیرند و پبن های آبی رنگ بیانگر آنهایی هستند که اگر بخواهیم دسته دومی هم داشته باشیم باید مورد استفاده قرار بگیرند. یعنی شما می توانید بازی ها را همزمان با دو دسته و دونفره انجام دهید ;) .

 نصب دیودها: پنج دیود داشتیم که باید آنها را به ترتیب به پینهای 5 تا 9 کانکتور لحیم کنیم مساله ای که اهمیت دارد جهت لحیم کردن دیودهاست. همونطور که در شکل ملاحضه می کنید بایستی سمت خط دار دیودها به طرف بیرون باشد. در غیر این صورت با مشکل مواجه خواهید شد!

 حالا نوبت می رسه به اتصال سیمها: همونطور که در شماتیک مشاهده می کنید بایستی سیم ها رور به صورت زیر به پینهای کانکتور متصل کنید:

Controller                                  Parallel

1- Dat                                       10(pad1), 13(pad2)
2- Cmd                                      2
3- 9V (shock)                             +9v battery
4- GND                                      18, 19, -9V battery
5- V+                                        5,6,7,8,9 through diodes
6- Att                                        3
7- Clk                                        4
9- Ack                                       12(pad1), 15(pad2)

در جدول بالا و همچنین در شماتیک زیر نحوه اتصال سیمهای دو دسته PlayStation همزمان به یک کانکتور به تصویر کشیده شده بنابر این من از توضیحات اضافی پرهیز می کنم. فقط سیم V+ رو باید به انتهای هر 5 دیودی که به کانکتور اتصال دادید لحیم کنید.

 استفاده از Force Feedback (اختیاری): فورس فیدبک ویا همون شوک دسته بازی به تغذیه 9 ولت جداگانه احتیاج داره که برای استفاده از اون مجبوریم از یک منبع تغذیه بیرونی و جداگانه استفاده کنیم. سیم 9v+ رو بایستی به سر مثبت منبع تغذیه و سر منفی اون رو باید به پینهای 18 و 19 کانکتور وصل کنید. فقط توجه کنید که جهت مثبت و منفی منبع تغذیه شما اشتباه نشود.

راستش می خواستم تو همین مطلب سروتهش رو هم بیارم اما می دیدم این خودش پروژه جالبی هستش و تازه خودش کلی وقت می گیره! حالا تا شما دسته (یا دسته هاتون) رو تهیه کنید و بخش سخت افزاری رو تموم کنید من برمی گردم و بقیه کار رو که دیگه تقریبا نرم افزاری هست توضیح می دم... امیدوارم این سری از مقالات مورد توجهتون قرار بگیره . خیلی زود بر می گردم٫ پس تا مقاله بعد بای.

[+] نوشته شده توسط نیما در 2:7 | |

آموزش گام به گام Protel 99 SE (قسمت آخر)

دوستان رباتیکی و الکترونیکی و مکانیکی و ...کی و ...کی و ... با محبتم سلام . بابا ما یه وبلاگ رباتیکی افتتاح کردیدم!! نمی دونستیم اینقدر مافیا پشت اینکار خابیده!!! یکی مطلب این یکی رو کش میره یکی برا اونیکی فحش میفرسته یکی زیراب اونیکی رو پیش این یکی میزنه و اوووووووووه. ولی گفته باشم من خودم GodFather ام دور منو خط بکشید .

جلسه پیش وارد پنجره Load NetList شدیم و با انجام مراحل ذکر شده قطعاتمون رو روی محیط طراحی PCB قرار دادیم. بعد از انجام اینکار بایستی قطعات شما روی محیط طراحی قرار بگیرند٬ اما اگر نتونستید اونها رو ببینید بایستی از منوی View گزینه Fit Board رو انتخاب کنید. می بینید که قطعات شما به صورت نامرتبی روی محیط قرار گرفته اند و خطوط سبز رنگ هم بیانگر اتصال بین پایه های قطعات است (البته نه به این صورت). حالا بایستی این قطعات رو به دلخواه و سلیقه خودتون کنار همدیگه طوری بچینید که اولا جای زیادی اشغال نکنند و دوما اینکه خطوط سبز رنگی که نماینگر اتصالات هستند بیش از حد با یکدیگر تداخل نداشته باشند زیرا موجب اختلال در مراحل بعدی که مسیریابی خودکار هستش٬ میشه. برای انجام اینکار می تونید از خطوط سبز و قرمزی که هنگام جابجا کردن قطعات ظاهر میشن کمک بگیرید. خط سبز پیشنهاد پروتل به عنوان مکانی مناسب و خط قرمز نمایانگر مکانی نا مناسب هستش. البته در این مرحله نظر و سلیقه شما اهمیت بیشتری داره و گزینه های ذکر شده فقط پیشنهاد هستند.

حالا بایستی یک قاب بدور قطعاتتون بکشید که در واقع نمادی از بورد اصلی شماست که مرز های آن را مشخص می کند. برای اینکار از زبانه های پایین صفحه زبانه " KeepOutLayer " را انخاب کنید. حالا با استفاده از ابزار Line که در جعبه ابزارهای سمت چپ صفحه قرار دارد مرزی به دور قطعات خود رسم کنید. (این ابزار دقیقا شبیه ابزار Wire در محیط طراحی شماتیک است). نمونه کار من رو می تونید در تصویر مشاهده کنید.

برای استفاده از ابزار مسیریابی خودکار پروتل که اتصالات بین پایه های قطعات رو به صورت خودکار طراحی می کنه٬ بایستی یک سری تغییراتی در تنظیمات این قسمت ایجاد کنیم.برای این کار از منوی Design>Rules را انتخاب کنید. پنجره ای که ظاهر می شود حاوی تنظیمات مسیریابی و اتصالات بین پایه ها از قبیل ضخامت اتصالات٬ قطر سوراخها و ... می باشد. در حالات پیشفرض مسیریابی برای بوردهای دوطرفه انجام می شود و ما در این قسمت می خواهیم کاری کنیم که طراحی برای بورد های یک طرفه صورت گیرد. سپس از لیست موجود در پنجره باز شده گزینه Routing Layers را انتخاب کنید (۱). حالا از لیست پایین صفحه روی تنها گزینه موجود دوبار کلیک کنید (۲). پنجره ای ضاهر می شود که بایستی در کادر Rule Attribute مقدار لیت های کشویی Toplayer و Buttom Layer را همانند شکل به ترتیب به قادیر Any و Not Used تغییر دهید (۳و ۴). حالا Ok را فشار دهید و پنجره تنظیمات را ببندید تا دوباره به محیط طراحی بازگردید. البته تصاویر و راهنمایی های گزینه های موجود در پنجره تنظیمات کاملا گویای اعمال آنها هستند و شما می توانید بعدها اعمال آنها را بررسی کنید.

حالا تنها مساله ای که باقی می مونه انجام مرحله مسیریابی خودکار هستش. در این مرحله خود برنامه پروتل اتصالات بین پایه های قطعات رو به صورت خودکار به طریقی که مشاهده خواهید کرد رسم می کنه! برای انجام اینکار از منوی Auto Route گزینه All رو انتخاب کنید و از پنجره ظاهر شده دکمه Rute All رو فشار بدید. (اگر سوالی از شما پرسیده شد yes را انتخاب کنید). حالا مدت زمانی طول می کشد تا این مسیریابی صورت گیرد. در صورت عدم وجود خطا این عمل با موفقیت انجام خواهد شد و گزارشی از نحوه کار نمایش داده خواهد شد. باید توجه داشته باشیم که بد چیدن٬ نزدیک هم چیدن٬ تنگ رسم کردن مرز بورد و برخی از موارد دیگر می تواند در پروژه های پیچیده تر٬ این مرحله را دچار نقص کند که با روی هم افتادن برخی از خطوط اتصال مواجه خواهید شد. نمونه کار من رو می تونید در تصویر مقابل مشاهده کنید.

خوب دیگه! فکر کنم دیگه باید این سری از مقالات رو همینجا تمومش کنم... البته این مبحث خیلی گسترده هستش و هنوز هم مراحل زیادی برای گسترش کارمون وجود داره که بایستی از اونها صرف نظر می کردم. بالاخره من سعی کردم تاحدی که ممکنه برای انجام یه پروژه رباتیکی و الکترونیکی به طراحی PCB احتیاج داشته باشید٬ شما رو با این نرم افزار آشنا کنم. امیدوارم مورد پسندتون واقع شده باشه.

این مبحث هم تموم شد!!! حلا چکار کنیم؟؟؟ نه نه ایندفه دیگه نمی خوام ناپدید بشم! چونکه کلی برای سری جدید مقالاتم فکر کردم. باورتون نمی شه یه موضوع دارم باقلوا اما الان  نمی گم.... حالا که خیلی اسرار می کنید فقط می گم که یجورایی به مباحث کنترل حرکت ربات ربط داره (شاید امدادگر ویا هرنوع دیگه ). منتظر نظرات شما هستم. پس تا مبحثی جدید خدا نگدار.

[+] نوشته شده توسط نیما در 1:37 | |

آموزش گام به گام Protel 99 SE (قسمت 4)

دوستان گلم سلام. فکر کنم دیگه عادتم شده که همیشه اول هر پست باید یکم قصه بگم و مقدمه چینی کنم.. اما امروز حوصله اینکارو ندارم برا همین یراست می رم سر اصل مطلب.

در مقاله قبلی درباره فوت پرینتها توضیح دادم و فوت پرینت تمام قطعات پروژمون رو هم به مقدار مناسبشون تغییر دادیم. اما برای تهیه PCB از شماتیک بدست آمده هنوز باید چند مرحله دیگه رو بصورت زیر طی کنید.

۱- از منوی Design گزینه Create Netlist رو انتخاب کنید تا پنجره جدیدی با عنوان "Netlist Creation" ظاهر بشه. مقدار پیش فرض تمام فیلدهای این پنجره رو به صورت پیشفرض باقی بگذارید و روی دکمه OK کلیک کنید. با انجام این مرحله زبانه جدیدی با عنوان YourSheetName.NET ایجاد خواهد شد (من از نامهای پیشفرض استفاده کردم و در شکل زیر این زبانه را با نام Sheet1.NET مشاهده می کنید) که حاوی اطلاعاتی در مورد نحوه اتصال پایه های قطعات پروژه به یکدیگر می باشد (مثلا پایه شماره دو ی فلان مقاومت به پایه شماره ۱ گیرنده متصل است و... ). با ایجاد این فایل کاملا آماده وارد شدن به مرحله بعدی که محیط طراحی PCB یا همون فیبر مدارچاپی هستش٬ شدید.

۲- از لیست زبانه ها٬ زبانه Documents را انتخاب کنید تا بتوانید محتویات آن را مشاهده کنید. می بینید که فایل شماتیک٬ فایلی که در مرحله قبل تولید کردیم و سایر ملحقات پروژه ما در این پوشه قرار دارد. حالا می خواهیم به همان روشی که در جلسات اول یک سند شماتیک به این پوشه اضافه کردیم٬ یک سند PCB هم اضافه کنیم. پس همانند شکل روی یک قسمت خای از آیکن در این پوشه راست کلیک کنید و از منوی ظاهر شده گزینه New را انتخاب کنید. پنجره New Document همانند شکل باز خواهد شد. از میان گزینه های آن آیکن PCB Documents را همانند شکل انتخاب کنید و بر روی دکمه OK کلیک کنید. یک نمونه از این سند به پوشه Documents اضافه خواهد شد. شما می توانید نام آن را به دلخواه تغییر دهید (فقط نام و نه پسوند).

حالا روی آیکون این سند دوبار کلیک کنید تا وارد محیط جدیدی طراحی فیبر مدار چاپی که محیطی سیاه رنگ است٬ شوید. حالا بایستی نتیجه کارهایی را که در مراحل قبلی بدست آوردیم وارد این محیط کنیم.

۳- از منوی Design گزینه Load Nets را انتخاب کنید تا پنجره "Load/Forward Annotate Netlist" همانند شکل ظاهر شود (البته این پنجره در مرحله بعدی به این صورت پر خواهد شد). روی دکمه Browse از این پنجره کلیک کنید پنجره جدیدی باز خواهد شد که تمام محتویات پروژه شما را به صورت درختی نمایش می دهد. از زیر مجموعه پوشه Documents فایلی را که در مرحله ۱ همین مقاله ایجاد کردید (مثلا نام فایل من بدون تغییر Sheet1.NET هستش) انتخاب کنید و دکمه OK را کلیک کنید تا پنجره "Load/Forward Annotate Netlist" رو بصورت زیر مشاهده کنید.

در صورتی که تمام مراحل قبلی این مقاله و مقالات قبلی را به درستی اجرا کرده باشید کادر Error هر کدام از گزینه های لیست بالا خالی خواهد بود. اما اکثر خطا ها در صورت وجود٬ مربوط به مرحله نام گذاری قطعات ویا تعیین فوت پرینت آنهاست٬ بعلاوه توضیح مختصری هم در کادر Error فیلد مربوطه دز صورت بروز خطا نمایش داده خواهد شد که شما را در حل مشکل راهنمایی خواهد کرد. بعد از رفع تمام مشکلات (در صورت وجود) زمانی که بدون هیچ مشکلی به مرحله فوق رسیدید٬ تنها کافیست روی دکمه Execute پنجره نمایش داده شده در تصویر٬ کلیک کنید.

می خواستم این آموزش رو تو همین پست تموم کنم و تقریبا تا آخرای کار پیش رفته بودم. اما دیدم خیلی طولانی میشه و هم از حوصله شما و هم از حوصه من خارجه!!!
ایشالله این سری آموزشها توی پست بعدی تموم میشه و بعد از اون یجورایی می خوام بترکونم!!!!  توضیح بیشتر بمونه واسه بعد. فعلا بای تا پست بعدی .

[+] نوشته شده توسط نیما در 11:21 | |

آموزش گام به گام Protel 99 SE (قسمت 3)

سلام٬ دیدید برگشتم....... هااااااااااااااااااااااااااااااااااا

از مبحث پروتل تا اینجای کار فقط یادگرفتیم که چطور شماتیک مدارمون رو طراحی کنیم. از تصویر این شماتیک می تونید در جاهای مختلف مثلا مثل من تو آموزش های وبلاگ و یا توضیحات پایان نامه و... تون استفاده کنید. اما برای طراحی فیبر مدار چاپی پروژه ای با شماتیک موردنظر (هر شماتیکی که طراحی کردید) باید یک سری مراحل دیگه رو هم طی کنید که در این قسمت و قسمتهای بعدی (نهایتا یکی ۲ قسمت دیگه) به تشریح این مراحل می پردازم...

تعریف FootPrint: هر قطعه ای که روی محیط طراحیطون قرارش میدید دارای خاصیتی بنام FootPrint هستش. این فوت پرینت یا معادل فارسیش "شکل پایه"٫ همونطور که از اسمش پیداست بیانگر شکل و فرم پایه ها و بسته سخت افزاری اون قطعه بر روی فیبر مدار چاپی می باشد. به عنوان مثال شکل بسته و یا فاصله سوراخهای پایه های یک مقاومت با یک خازن بر روی فیبر چاپی متفاوت هستش. برای مشخص کردن این خاصیت باید از FootPrint کمک بگیریم. برای مثال فوت پرینت (یا طرح پایه) یک مقاومت رو باید برابر AXIAL0.4 قرار بدیم٬ که در پایین مراحل انجام این کار به همراه توضیح بیشتری در مورد فوت پرینت ها مشاهده می کنید.
ابتدا روی شمایل قطعه مورد نظرتون دابل کلیک کنید تا پنجره زیر باز بشه 

همونطور که میبینید بعد از دابل کلیک بر روی قطعه پنجره فوق ظاهر میشه که باید در کادر FootPrint ٫ طرح پایه مورد نظرتون رو وارد کنید. مثال ما یک مقاومت هستش که فوت پرینت مربوط به مقاومت AXIAL0.4 هستش که من در کادر مربوطه وارد کردم. اما این FootPrint اینقدرها هم پیچیده نیست و برای قطعات مختلف دارای قانون خاصی به فرم زیر هستش:

AXIAL  : برای قطعات ۲ پایه که به صورت تخت یا خابیده روی برد قرار می گیرند بکار می رود - مثلا AXIAL0.4 برای یک قطعه مثل مقاومت با فاصله 0.4" بین سوراخ پایه های آن بکار می رود.

RAD     : برای قطعات ۲ پایه که بصورت ایستاده روی برد قرار می گیرند بکار می رود - مثلا RAD0.2 برای یک قطعه مثل خازن عدسی یا مقاومت با فاصله 0.2" بین سوراخ پایه های آن بکار می رود.

POLAR : برای قطعات ۲ پایه که جهت قرار گیری پایه های آن اهمیت دارد بکار می رود - مثلا POLAR0.2 برای یک قطعه مثل خازن که قطبیت پایه های آن اهمیت دارد بکار می رود.

SIP : برای ایجاد سوراخهای پین های یک خطی بکار می رود. مثلا  SIP8 برای یک ردیف هشت تایی پین ها می توان استفاده کرد.

DIP : برای قطعات با دو ردیف پایه مثل آیسی ها بکار می رود. برای مثال DIP8 برای یک آیسی ۸ پایه می تواند استفاده شود.

XTAL1  : فوت پرينت مخصوص كريستال ها مي باشد.

اين ها فقط چند نمونه پركاربرد از فوت پرينتها هستند. ساير فوت پرينتها رو هم مي تونيد از اينترنت و يا از داخل پروژه هاي نمونه نرم افزار پروتل و يا اينترنت خارج كنيد. راستی حالا که این عکس بالا رو داریم بیاید بقیه فیلدها رو هم مرور کنیم

Lib Ref: این فیلد مشخه قطعه در کتابخانه های پروتل می باشد. برای مثال اگر روی یک مقاومت دوبار کلیک کنید و پنجره بالا باز شود٬ مقدار این فیلد برای مقاومت برابر RES1 می باشد و اگر آن را مثلا به FUSE1 تغییر دهید می بینید که قطعه کلا از مقاومت به فیوز تبدیل می شود.

Part Type: متن دلبخواهی است که در کنار شمایل قطعه نمایش داده می شود.

Part: برخی از قطعات دارای دو قسمت مجزا هستند که ممکن است ما تمایل به نمایش قسمت های مختلف آن را داشته باشیم که از این قسمت می توانیم اینکار را انجام دهیم. برای مثال آپ امپ های LM357 بصورت DUAL OPaMP هستند یعنی ۲ آپ امپ در یک بسته که برای انتخاب هر آپ امپ باید از این فیلد استفاده کنید.

فیلدهای Designator و Footprint هم در دو پست اخیر به طور مفصل شرح داده شدند. اما در آخر فقط اشاره کوچکی به فوت پرینت قطعات پروژه خودمون (از جلسه اول آموزش پروتل تا حالا داریم روی مدار سنسورها کار می کنیم) می کنم.
فوت پرینت مربوط به تمام مقاومت ها رو برابر AXIAL0.4 ٬ فوت پرینت آیسی آپ امپ را برابر DIP8 (از LM357 که ۸ پایه دارد استفاده می کنیم) ٫ فوت پرینت کانکتور ۳ پین رو برابر SIP3 ٫ فوت پرینت پک فرستنده و گیرنده رو برابر DIP4 (من فوت پرینت مخصوص این قطعه رو نتونستم پیدا کنم اما چون این قطعه ۴ پایه داره از DIP4 استفاده کردم) و فوت پرینت پتانسیومتر رو هم برابر VR-5 قرار بدهید.

حالا پروژه شما آماده وارد شدن به مرحله بعدی یعنی طراحی برد مدار چاپی هستش. این کار رو ایشالله تو جلسه بعدی آموزش خواهم داد. پس فعلا تا پست بعدی خدانگهدار .

[+] نوشته شده توسط نیما در 19:29 | |

آموزش گام به گام Protel 99 SE

دوستان گلللللللللللللللللللللللللللم سلام . من هیچ توجیه موجهی برای این غیبت کبری خودم ندارم بجز اینکه بگم ببخشید چون سرم خیلی شلوغ بود و البته همچنین هم شلوغ هست !!!! ولی خوب دلم خیلی برای محبت های شما و مطلب نوشتن ها خودم تنگ شده بود و می خوام سعی کنم یه جورایی به زور هم که شده ادامه بدم...
فکر می کنم برای شروع بهتره همون کار نیمه کارمون خودم یعنی "آموزش گام به گام Protel 99 SE" رو ادامه بدیم و تموم کنیم, پس بی هیچ مقدمه ای .... :

طی دو مقاله قبل یک پروژه جدید باز کردیم و بعد از وارد شدن به مرحله طراحی شماتیک مدار، قطعات مورد نیاز پروژمون رو روی محیط طراحی قرار دادیم و اتصالات بین اونها رو با استفاده از ابزار Wire برقرار کردیم و اما...
هر کدوم از قطعاتی که روی محیط کار قرار می دیم از سادترن تا پیچیده ترینشون دارای یک نام منحصر به فرد باید باشند که البته به صورت قراردادی ترجیح داده میشه این نام کوتاه و مرطبت با نام اصلی قطعه باشه. مثلا برای مقاومت ها R1,R2,... و براي خازن ها ‍‍C1,C2,... انتخاب میشه. همونطور که ملاحضه می کنید با قرار دادن هر قطعه روی محیط طراحی یک نام برای اون به صورت پیشفرض انتخاب میشه که البته این نام به صورت ?R یا ?C و .... می تونید ببینید که مثلا اگر ۱۰ تا مقاومت روی محیط قرار بدیم هر ۱۰ تا با نام ?R هستند که این مخالف منحصر به فرد بودن نام قطعات هستش. بنابراین باید بعد از اتمام طراحی و تکمیل سیم کشی این علامت سوالها طوری تغییر بدیم که هر قطعه نام منحصر به فردی داشته باشه. به طور معمول بجای علامت سوال از اعداد استفاده می کنند یعنی نام ۱۰ مقاومت با به صورت R1,R2,R3,... تغییر خواهد کرد. این تغییر نام رو می تونید هم به صورت دستی و هم به صورت اتوماتیک انجام بدید.

روش دستی: روی تصویر قطعه مورد نظر دوبار کلیک کنید پنجره ای ظاهر می شود که حاوی برخی از خصوصیات قطعه مورد نظر می باشد. نامی که ما در مورد آن صحبت کردیم را در کادرِDesignator مشاهده می کنید. با تغییر متن موجود در این کادر نام قطعه نیز تغییر خواهد کرد.

روش اتوماتیک: اما برای روش اتوماتیک که بسیار سریعتر و دقیقتر می باشد از منوی Tools گزینه Annotate... را انتخاب کنید تا پنجره Annotate به باز شود.

کمبوباکسی که در شکل به شماره ۱ مشخص شده است دارای چهار گزینه است که من فقط ۲ گزینه اول را شرح می دهم. All Parts که اگر انتخاب شود باعث نامگذاری دوباره تمام قطعات می شود. ممکن است بعضی از قطعات قبلا به همین روش یا به روش دستی نام گذاری شده باشند که با انتخاب این گزینه از نام قبلی آنها صرف نظر شده و دوباره نام گذاری می شوند. گزینه Parts ? که عکس گزینه قبلی عمل می کند و فقط قطعاتی را که نام آنها شامل ؟ می باشد نام گذاری اتوماتیک می کند.

تیک های موجود در کادر "Group Parts Together if matched by" برای گروه گروه کردن قطعات بر حسب خصوصیات یکسان آنها بکار برده می شود. مثلا تیک زدن Part Type باعث می شود که تمام قطعاتی که Part Type آنها RES1 (یعنی مقاومت) است در یک گروه قرار گیرند. به این معنی که نام همه قطعات یک گروه دارای یک حرف ثابت (مثل R برای مقاومت, C برای خازن ,..) و یک عدد که برای هر قطعه منحصر است, می باشد. مثلا ۱۰ مقاومت بصورت R1 تا R10 نام گذاری می شوند.

و گزینه های کادر آخر (۳) که مشخص کننده نحوه حرکت میان قطعات برای نامگذاری آنها می باشد. تصویر و نام هر گزینه در این قسمت کاملا مبین کارکرد آن می باشد پس من در اینجا توضیح بیشتری نمی دهم. توصیه من این است که حالت پیشفرض تنظیمات این پنجره را تغییر ندهید و با فشردن دکمه OK فقط شاهد نتيجه باشيد. البته بعد از فشردن اين كليد زبانه جديدي باز مي شود كه حاوي گزارشي در مورد تغيير نام قطعات مي باشد. با راست كليك روي عنوان اين زبانه و انتخاب گزينه Close آن را ببندید تا به پنجره طراحی باز گردید و نتیجه را ببینید.

باور کنید بیشتر از این تو وسع ام نیست!! آخه همین مطلب رو هم دارم قایمکی سر کارم می نویسم!!!. قول میدم قسمت بعدی رو به همین زودی ها بنویسم. دوستون دارم و فعلا بای.

[+] نوشته شده توسط نیما در 10:42 | |

آموزش گام به گام Protel 99 SE

دوستان گلم سلام . راستش بدی اینجور آموزشها اینه که هم من و هم شما خوب میدونیم که تو قسمت بعدی چی میخوایم یاد بگیریم یا آموزش بدیم به همین خاطر اون هیجانی رو که هنگام خوندن یا نوشتن (برای من) مقالات ساخت ربات وجود داشت، حداقل در همون حد وجود نداره! ولی شما به این فکر کنید که یاد گرفتن این نرم افزار خیلی مفیده چون اگر به هر نحوی با الکترونیک و مدارات و... سرکار پیدا کنید (مثلا همین ساخت ربات) بدون برو برگرد باید باکه همچین نرم افزاری سروکله بزنید که البته هم کار کردن باهاش و هم نتیجه کارش خیلی شیرین هست... حالا که یکم امید گرفتید  بیاید قسمت دوم رو شروع کنیم:

در مقاله قبل یک پروژه جدید باز کردیم و بعد از وارد شدن به مرحله طراحی شماتیک مدار، رسیدیم به جایی که باید قطعات مورد نیازمون رو روی صفحه طراحی بزاریم:
خوب طبق نقشه مدار سنسورها که اون رو در مقاله قبلی برای دومین بار نشون دادم، برای طراحی شماتیکش این مدار ما به یک پتانسیومتر، دو عدد مقاومت، یک پک سنسور و یک آیسی آپ امپ LM358 استفاده خواهیم کرد:

نکته۱: در محیط طراحی با فشار دادن کلید Page Up & Page Down می توانید زوم-این یا زوم-اوت کنید. البته این کار را از طریق منوها  هم میتونید انجام بدید که به دلیل استفاده زیاد و سرعت بالا همین روش پیشنهاد میشه.
نکته۲: قبل از قرار دادن قطعه روی صفحه می تونید با فشار دادن کلید  Space-bar شماتیک قطعه رو هربار ۹۰ درجه بچرخونید. برای انجام همین کار بعد از قرار دادن قطعه روی صفحه باید روی قطعه کلیک کنید و همزمان با نگه داشتن کلید چپ ماوس Space-Bar رو فشار بدید.

  1. از لیست قطعات -پنجره سمت چپ پایین- "CON3" را که مربوط به کانکتور ۳ پایه می باشد انتخاب کنید و بعد از فشردن دگمه Place یک عدد از آن روی صفحه طراحی قرار دهید
  2. از لیست قطعات "RES1" مربوط که به مقاومت است انتخاب کنید و دوتا از این قطعه نیز روی صفحه قرار دهید.
  3. یک عدد پتانسیومتر که معادل آن در لیست "POT1" می باشد نیز، روی صفحه قرار دهید. طبق روش گفته شده می توانید قطعه را به شکل دلخواه بچرخانید.
  4. حالا یک عدد پک فرستنده و گیرنده سنسور که نام معدل آن در لیست "OPTOISO۱" می باشد روی صفحه قرار دهید.
  5. در آخر نوبت به آپ امپ میرسد که نام معادل آن در لیست همان "OPAMP" می باشد.
  6. در این مدار ورودی های ما تنها دوسر منفی و مثبت یک منبع ۵ولتی هستند و خروجی ما هم تنها یکی می باشد که خروجی تولید شده توسط آپ می باشد. بنابراین ما از ۲ پایه کانکتور برای ورودی ها و یکی برای خروجی مان استفاده می کنیم.
  7. یک جعبه ابزاردیگر در سمت راست محیط وجود دارد که حاوی دگمه هایی برای رسم اتصالات، اشکال و سایر ترسیمات غیر الکترونیکی می باشد.
  8. از این جعبه ابزار دگمه "Power Port" را انتخاب کنید -در شکل با (۲) مشخص شده- و قبل از قرار دادن آن روی صفحه دگمه TAB را فشار دهید. با این کار پنجره جدیدی که حاوی اطلاعات قطعه می باشد همانند شکل باز می شود. یکبار Net را برابر VCC و Style را برابر ‌Bar قرار دهید و بعد از تایید دو عدد از این قطعه روی صفحه قرار دهید و بار دیگر TAB را فشار دهید و مقدار Net و Style را به ترتیب به GND و Power Ground تغییر دهید و بعد از تایید دو عدد از این قطعه نیز در صفحه قرار دهید. نحوه قرار گیری این قطعات را همانند شکل تغییر دهید.
  9. حالا با استفاده از چرخاندن و جا بجا کردن قطعات شکل قرار گیری آنها را به صورتی منظم تر در آورید تا قطعاتی که باید به هم اتصال داشده شوند نزدیک هم قرار گیرند. در اینجا می توانید از تصویر نمونه کمک بگیرید ولی در مدارهای دلخواه خودتان اینکار بسته به سلیقه شما و بر عهده خودتان است.
  10.  دگمه "Wire" که برای رسم اتصالات می باشد -در شکل با (۱) مشخص شده- انتخاب نمایید و سرهای قطعات را همانطور که در نقشه مدارتان دارید، به هم متصل کنید در اینجا می توانید از تصویر کمک بگیرید ولی در سایر مدارات این کار نیز بر اساس طرح مدار خودتان و با دخالت سلیقه خود شما باید انجام شود. سعی کنید این مرحله را با سلیقه خاصی انجام دهید تا مدار شما گنگ و سردر گم کننده نشود.

  11. همانطور که میبینید ممکن است برخی از خطوط بدون داشتن هر اتصالی از روی هم عبور کنند. در هنگام عبور دو خط از روی هم به طور پیشفرض ایندو با نمایش علامت  به یکدیگر متصل میشوند که با انتخاب دایره قرمز و فشار دادن کلید DEL این اتصال از بین میرود.
  12. نکته بسیار مهم در طراحی این مدار، نامگذاری Power Portها یا همان قطعاتی که در مرحله ۸ روی محیط قرار دادید، هستش. شما باید تمام علائم "زمین" رو با یک نام یکسان -در اینجا GND- و تمام "پاور ها"رو با نام یکسان دیگر -دراینجا VCC- نامگذاری کنید. با انجام اینکار هنگام رسم مدار چاپی، تمام اتصالات همنام به هم متصل خواهند شد. مثلا در این مثال، بعدا خواهیم دید که پایه های آپ امپ، پتانسیومتر و... که به سر مثبت و منفی وصل هستند، بدون وجود هیچ خط اتصالی میان انها و پایه های ۱ و ۲ کانکتور، در مرحله بعدی به این پایه های کانکتور وصل خواهند شد. تا، زمانی که ما سر مثبت و منفی منبع را به این دو پایه وصل می کنیم تمام این قطعات مصرف کننده، تغذیه شوند.

خوب دیگه فکر می کنم مطلب به اندازه کافی به جاهای شیرینش نزدیک شده باشه. شما میتونید تا آموزش مطلب بعدی، بعضی از قطعات لیست رو امتحان کنید و یا حتی بعد از آشنایی با اونها مدارات دلخواه خودتون رو به همین روش طراحی کنید تا بتونید همپای این آموزشها فیبر مدار چاپی اون ها رو طراحی کنید.
نام اکثر قطعات موجود در لیست تابلو هستش و اونهایی رو هم از رو اسمشون نمیشه فهمید با استفاده از تصویرشون حتما متوجه خواهید شد مربوط به کدام قطعات هستند. البته برخی از قطعات مثل میکروکنترلرها یا حتی برخی آیسی های ساده در لیست فعلی وجود ندارند که بعدا میگم که چطور باید کتابخانه اونها رو اضافه کرد تا از اونها استفاده کنید.

امیدوارم این مطلب مورد توجهتون قرار بگیره. نظریادتون نره... فعلا یا حق!

[+] نوشته شده توسط نیما در 20:9 | |

شروع سری جدید آموزش ها (Protel 99 SE)

دوستان خوبم سلام. امیدوارم تو این چند وقت به همه کارهاتون رسیده باشید و مثل من بواسطه چندتا امتحان ناخونده استراحتتون کوفت نشده باشه! بهرحال تو این یک هفته و چند روز برای من که هیچ ملالی بزرگتر از دوری شما نبود .

اما به عنوان سری جدید آموزش هام دوست دارم برای شروع، هم در راستای آموزش قبلی و هم به درخواست تعدادی از دوستان مقالات آموزشی گام به گامی در مورد Protel 99 SE و نحوه طراحی فیبر مدار چاپی (PCB) توسط این نرم افزار، رو آموزش بدم. پس بیاید بی معطلی شروع کنیم:

خوبه بدونید برای طراحی PCB از روی نقشه یک مدار توسط این نرم افزار باید چند مرحله رو به ترتیب انجام....
به علت طولانی شدن مقاله ادامه آن را با کلیک بر روی "ادامه مطلب" مشاهده کنید.


ادامه مطلب

[+] نوشته شده توسط نیما در 23:52 | |

پایان سری اول آموزشها (ربات مسیریاب) - اگر بار گران بودیم و رفتیم!

دوستان خوبم سلام...
خیلی خوشحال شدم از اینکه مشتاقانه منتظر ادامه مطالب هستید و حتی صدای بعضی ها از بابت یکی دو پست اخیر که به نظر دوستان ربطی به مباحث آموزشی رباتیک نداره، در اومده بود ! از اونجایی که میتونم شور و هیجان شما رو برای یادگیری مطالب جذابتر درک کنم، هیچ توجیهی نمی تونم بیارم مگر....

مگر اینکه،،،،، بابا به خدا مسیریاب بیشتر از این چیزی نداره! خیلی فکر کردم تا بتونم یه مقاله بدرد بخور دیگه بنویسم اما آخرش به این نتیجه رسیدم که اگر بخوام بیشتر از این چیزی بنویسم، حتما یه مقاله درپیت میشه که بیشتر باعث نارضایتیتون میشه تا رضایت! در واقع یه جورایی میخوام بگم مبحث آموزشی ربات مسیرباب تا اونجایی که من فکر می کنم به پایان رسیده و از اینجا به بعد کار خود شماست که دستبکار بشید و کار عملی رو شروع کنید و مشکلاتی که مطمئنا تو این راه براتون پیش میاد رو بپرسید تا با جواب دادن به اونها (اگر من بلد نباشم هم، اینجا استاد زیاده ) بتونیم راه رو برای شما و دوستان بعد از خودتون هموار کنیم. در این میون اگر بعدها مقاله بدردبخور مرتبط دیگه ای هم بدستم رسید حتما تو وبلاگ قرارش میدم....

اما همه این حرفها به این معنی نیست که دیگه شما رو به خیر و مارو به سلامت! نخیر مبحث ربات مسیریاب به نسبت سادگیش دیر یا زود تموم میشد و من هم این رو میدونستم اما از این به بعد قصد دارم مباحث پیشرفته تری رو تو وبلاگ آغاز کنم.... هنوز تصمیم قطعی نگرفتم و بین انتخاب از میون چند کیس مناسب از جمله آموزش کار با میکرو کنترلر AVR، آموزش پردازش تصویر و یا حتی آموزش PLC، دو دل هستم...

چیزی که الان راجع بهش مطمئنم اینه که به دست کم ۱ هفته کامل استراحت احتیاج دارم. تو این مدت بدجوری منتظر نظرات سازنده شما هستم و بعد از اون یکی از مباحثی رو که بالا گفتم رو حتما شروع خواهم کرد. اگر هم خیلی طالب ربات زیاد باشه ایشالله در آینده با کسب تجربیات بیشتر حتما در مورد ساخت ربات لابیرنت ، میکروماوس و... نیز سری آموزش هایی رو شروع خواهم کرد..

 در آخر یه سوال چند کلمه ای: آیا این وبلاگ و مطالبش ارزش تبدیل شدن به یه سایت موقر رو داره؟؟

دوستون دارم، قربون همتون، تا بعد از استراحت یا حق ......

[+] نوشته شده توسط نیما در 22:28 | |

قوانین مسابقات ربات مسیریاب

دوستان خوبم سلام. راستش خیلی فکر کردم چه چیز دیگه ای باقی مونده تا در مورد مسیریاب بنویسم، داشتم فکر می کردم که "خوب دیگه تموم شد" اما یهو یه مقاله جالب (که همین باشه!) به ذهنم رسید و وقتی مشغول نوشتنش شدم تازه متوجه شدم، به به!!! چه چیزایی که ناگفته نمونده! . با این حال این چیزهای ناگفته یه چیزایی هستند که خیلی چیزن !!! (پایان مقاله میگم که چیَن).
در واقع امروز می خوام در مورد قوانین مسابقات مسیریاب و محدودیت های موجود در اونها صحبت کنم. فکر می کنم اگر با قوانین اولین مسابقات دانشجویی و دانش آموزی کشور که امسال در مشهد برگزار شد شروع کنم و بعد از اون مسابقات حلی کاپ، جای زیادی برای توضیحات اضافی نمی مونه:

قوانین مسابقات مسیریاب مشهد:

هدف از این مسابقه تعقیب مسیری مشخص توسط ربات است. این مسابقه در دو مرحله برگزار می گردد. مسیر مرحله اول که با شرکت تمامی تیمها برگزار نی گردد به شرح زیر می باشد:
ای مسیر دارای خطی با عرض ۱۸ میلیمتر می باشد که ممکن است در قسمتهایی از مسیر تغییرات غیر عادی عرض خط مشاهده شود که حداکثر تغییرات ۹ سانتیمتر می باشد. (مطابق شکل ۱-۱)

در طول مسیر شکستگیهایی با حداکثر زاویه ۱۱۰ درجه نسبت به امتداد خط وجود دارد. (مطابق شکل ۲)

و بریدگی هایی با طول حداکثر ۳ سانتیمتر وجود دارد و ممکن است در شکستها با زاویه حداکثر ۶۰ درجه بریدگی وجود داشته باشد. (مطابق شکل ۳)

در طول مسیر انحناهایی با شعاع حداقل ۱۵ سانتیمتر وجود دارد. (مطابق شکل)

بعد از هر تغییر حداقل ۱۵ سانتیمتر مسیر مستقیم وجود دارد. پس از اتمام مرحله اول تیمهای برتر به مرحله دوم راه پیدا خواهند کرد. زمین مرحله دوم علاوه بر داشتن موارد مذکور در مرحله اول دارای شرایط زیر نیز می باشد:
رنگ مسیر مسابقه به این صورت است که در برخی از قسمتها خط سفید در زمینه سیاه و برخی قسمتها خط سیاه در زمینه سفید می باشد که حداقل به فاصله ۱۵ سانتیمتر قبل و بعد لز تغییر رنگها، پیچ یا بریدگی یا تغییر عرض خط وسط وجود ندارد. (مطابق شکل ۵)

یک یا چند لوپ یا مسیر بسته با حداقل زاویه ۱۰ درجه نسبت به خط افقی نیز ممکن است وجود داشته باشد. (مطابق شکل ۶)

به هرتیم قبل از شروع مسابقه ۳ دقیقه زمان برای تست و آماده کردن ربات داده می شود.
ربات باید در حداکثر ۴ دقیقه مسیر تعیین شده را طی کند.
در صورت نرفتن لوپ یا مسیر بسته ۳۰ ثانیه به زمان کلی اضافه می شود.
رفتن چندین بار لوپ یا مسیر بسته مشکلی ندارد.
در صورت انجام خطا، ربات می تواند تا ۳ بار مسیر را از ابتدا آغاز نماید. (Restart نماید)
در صورت انجام هر Restart، ۵ ثانیه به زمان کلی افزوده می شود. برای شروع بعد از هر Restart ، ربات ۱ دقیقه وقت آماده سازی دارد.
در این مسابقه یک منبع تغذیه دوبل ۳۰ولت، ۳آمپر در اختیار شرکت کنندگان قرار خواهد گرفت.

خطاها:

  1. تماس ربات با خط قرمز کناره که به فاصله ۲۰ سانتیمتری در دوطرف خط اصلی وجود دارد.
  2. دور زدن ربت به دور خود هر چند دوباره به مسیر اصلی باز گردد.
  3. هرگونه تحریک فیزیکی ربات هنگام مسابقه (کشیده شدن سیم، تماس دست با ربات و..)
  4. شروع زودتر از اعلام داور

نحوه امتاز دهی:
تیمی که مسیر مورد نظر را در زمان کوتاهتری با توجه به خطاهای انجام شده طی نماید تیم برتر خواهد بود. به کوچکترین رباتی که هردو مسیر مسابقه را به طور کامل طی کند جایزه ویژه ای تعلق خواهد گرفت. (بر گرفته از دفترچه اولین دوره مسابقات رباتیک دانشجویی و دانش آموزی.)

قوانین مسابقه حلی کاپ:

  • زمين مسابقه به ابعاد cm300×cm180 مي‌باشد. كف زمين با زمينة سفيد از جنس «بَنِر» بوده و مسير مسابقات به رنگ سياه در آن به عرض mm20 چاپ شده است.
  • اين مسابقه در سه مرحلة مقدماتي ـ نيمه نهايي و فينال برگزار مي‌شود.
  • در مرحلة مقدماتي تيم‌ها فرصت كافي خواهند داشت (يك دقيقه فرصت تنظيم و راه‌اندازي (setup)) تا بهترين ركورد خود را ثبت نمايند.
  • از مرحلة مقدماتي 16 تيم برتر مستقيم به فينال رفته و 48 تيم برگزيده ديگر وارد مرحلة‌ دوم مي‌شوند.
  • در مرحلة دوم يك ميز با طرح جديد با ابعاد cm360×cm180 با مشخصات طولي يكسان براي رقابت با يكديگر در نظر گرفته شده است.
  • تيم برگزيده به صورت دوتايي با يكديگر در پيست مرحلة دوم به رقابت مي‌پردازند تا نهايتاً 12 تيم پيروز به 16 تيم فينال رفته، اضافه شوند. [مسابقات در اين مرحله فقط جنبه رقابتي دارد و امتياز‌ ويژه‌اي براي روبوت‌هاي باطري‌دار، در نظر گرفته نمي‌شود.]
  • در فينال نيز مسابقه به صورت ركوردگيري در شرايط سخت‌تري برگزار مي‌شود.
  • زمين مسابقه در مرحلة مقدماتي و نيمه‌نهايي داراي مسير مستقيم و انحناء با حداقل شعاع cm 10 مي‌باشد. در اين مرحله زاويه 90 درجه و بريدگي وجود ندارد.
  • در مرحلة فينال در زمين مسابقه شرايط سخت‌تري ايجاد مي‌شود شامل مسيرهايي با زاوية حداكثر 90 درجه، بريدگي به فاصلة cm3 و زاويه حداكثر 45 درجه.
  • همچنين مسير غيرعادي سياه به شكل مثلث سياه به قاعدة cm10 و ارتفاع cm15 مي‌باشد.
  • در هر مرحله روباتي برنده خواهد بود كه كل مسير مسابقه را در كمترين زمان ممكن طي نمايد.
  • ابعاد روبات cm15×cm15×cm15 مي‌باشد.
  • ميزان انحراف روبات در مرحلة مقدماتي و نيمه‌نهايي cm20 و در فينال cm15 خواهد بود.
  • استفاده از هر نوع پردازش‌گر در بيرون از پيست و يا هر‌ گونه كنترل انساني (ريموت يا سيمي) مطلقاً مقدور نمي‌باشد. تنها وسيلة ارتباطي روبوت با بيرون سيم‌هاي تغذيه مي‌باشد. [استفاده از منبع تغذيه شخصي آزاد مي‌باشد.]
  • قرار دادن هرگونه حافظه كه اطلاعات مسير را در خود ذخيره كرده باشد، مطلقاً مقدور نمي‌باشد.
  • در صورت استفاده از باطري در روبوت و عدم استفاده از منبع تغذيه و يا هرگونه  سيم ارتباطي، زمان ركورد به دست آمده تيم در 9/0 ضرب و با ديگر نتايج محاسبه خواهد شد. [اين امتياز ويژه فقط در مراحل مقدماتي و فينال مي‌باشد و در مرحلة نيمه‌نهايي، مسابقات رقابتي است.]
  • اعضاي تيم در هنگام مسابقات با لباس (كاور) يك شكل بايد حضور يابند.

خوب دوستان فکر می کنم تفاوت رو کاملا مشاهده کرده باشید و با سطح دو تا از برگزار کنندگان بنام این رشته آشنا شده باشید. همونطور که میبینید مسابقات مشهد از همه لحاظ پیشرفته تر و مشکل تر هستش و البته در ازای این همه موانع، مقام آوردن در چنین مسابقه ای به نظر من دلچسب تر، غرورآورتر و صد البته مایه آور تر ( تیم اول ۷۰۰۰۰۰ تومان، دوم ۵۰۰۰۰۰، سوم ۳۰۰۰۰۰، چهارم ۱۵۰۰۰۰ و پنجم ۱۰۰۰۰۰ تومان جایزه گرفتند) هستش...
همینجا در جواب یکی از دوستان که پرسیده بود "آیا میشه در این مسابقات از کیتهای ربات مسیریاب آماده در بازار استفاده کرد؟"، باید بگم که اینکار بلامانع هستش  اما ببینم آیا این رباتها میتونن با این محدودیت ها و موانع روبرو بشن؟ (صد البته نه!!) ولی در کل استفاده از بدنه و سایر تجهیزات این کیتها مشکلی نخواهد داشت.

چیزهای ناگفته ای که در ابتدای مقاله بهش اشاره کردم این بود که به علت این تفاوت قوانین، نمیشه الگوریتم و ترتیب چیدمان ثابتی رو برای سنسورهای رباتهای مسیریاب پیشنهاد کرد. کاری که در واقع اصلا صحیح نیست انجام بشه چون در این صورت تمام خلاقیت و نوع آوری که در این مسابقات وجود داره رو هم حتما نابود میکرد!!!

امیدوارم از این پست هم استفاده کنید و مورد توجهتون قرار گرفته باشه. تا پست بعدی یا حق.

[+] نوشته شده توسط نیما در 22:13 | |

آنچه در مسابقات روبوکاپ آزاد ایران گذشت

دوستان خوبم سلام. به مناسبت پایان مسابقات ایران اوپن، خودم رو به عنوان یه علاقمند که از اخبار این مسابقات آگاهی نسبی داشتم، موظف دونستم تا یه پست رو بصورت کامل به این موضوع اختصاص بدم:

مسابقات ایران اوپن امسال برای اولین بار در ایران، در تاریخ ۱۸ الی ۲۰ فروردین در سالن مبنای نمایشگاه بین المللی تهران با میزبانی دانشگاه آزاد اسلامی قزوین و با همکاری انجمن ربوکاپ ایران، دانشگاه شریف و معاونت پژوهشی واحد علوم و تحقیقات برگزار شد.
طبق گفته های دکتر موسی خانی (رئیس دانشگاه قزوین) در مراسم افتتاحیه، از امسال این مسابقات به پیشنهاد انجمن ربوکاپ بین المللی برگزار خواهد شد تا ایران بتونه توانمندی های خودش رو جهت کسب میزبانی مسابقات ربوکاپ به این نهاد ثابت کنه. طبق گفته های ایشون میزبانی این مسابقات در سال ۲۰۰۷ بر عهده کشور آمریکا و بقرار معلوم میزبانی سال ۲۰۰۸ نیز برعهده کشور چین خواهد بود. به همین منظور انجمن روبوکاپ بین المللی نماینده خودشون (دکتر گرهارد) رو به عنوان ناظر این مسابقات به ایران فرستاده بودند تا ایشاالله اگر اجرای این مسابقات طی سالهای آینده کیفیت خوبی داشته باشه، میزبانی این مسابقات در سال ۲۰۰۹ به ایران واگذار بشه! (امیدواریم)
در کل باید بگم مسابقات این دوره از نظم قابل قبولی برخوردار بود و همچنین استقبال خیلی خیلی خوبی هم ازش شده بود، بطوری که براحتی میشد از ایرادهای موجود چشم پوشی کرد. همچنین بواسطه تجربه اول ایران در این زمینه میشه نمره خیلی خوبی رو برای برگزارکنندگان این مسابقات در نظر گرفت.

شبیه ساز ۳بعدی فوتبال (۳۰ تیم)، شبیه ساز ۲بعدی فوتبال (۲۹ تیم)، شبیه ساز مربی فوتبال (۹ تیم)، رباتهای جونیور و رباتهای امدادگر (۱۰ تیم) از جمله لیگهایی بود که در این دوره از مسابقات روبوکاپ آزاد ایران برگزار شدند.
بیشتر تیمهای خارجی شرکت کننده در این مسابقات در زمینه شبیه سازی فعالیت داشتند که از جمله اونها  آمریکا، چین، اسپانیا و مکزیک رو میشه نام برد.

از جمله زیباترین لیگهای این مسابقات به نظر من میشه به لیگ رباتهای امدادگر یا Rescue اشاره کرد که بخش اعظم تماچاشی هارو بخودش اختصاص داده بود. مسابقات این لیگ در هر سه روز ادامه داشت و در آخر با قهرمانی تیم MRL از دانشگاه آزاد اسلامی قزوین پایان یافت. این تیم همچنین مدال طلای قویترین ربات امدادگر و هوشمندترین ربات امدادگر را نیز از آن خود کرد. ممکنه فکر کنید اینهمه مدال برای این تیم فقط بخاطر میزبان بودن دانشگاه مربوطه هستش اما باور کنید تمام تماشاچیان حاضر به این مساله اقرار می کردند و نتایج کسب شده توسط تیمها جوری بود که یه بچه هم میتونست در اینباره قضاوت کنه! (مثلا تیم MRL تو روز اول با امتیاز ۲۲۵ اول بود و تیم دوم امتیازش ۸۵ بود!!!). اما من خودم به شخصه اقرار می کنم تیم Rescuaqe که مقام دوم رو کسب کرد ربات واقعا زیبا و هوشمندی داشتند و واقعا استحقاق این مقام رو دارند. در زیر تصاویر سه ربات از این لیگ رو مشاهده می کنید.

 تیم پارس -- مقام چهارم تیم رسکویک -- مقام دوم   تیم MRL -- مقام نخست

در گوشه دیگری از نمایشگاه (طبقه دوم) مکانی برای نمایش رباتهای فوتبالیست سایز متوسط دانشگاه قزوین در نظر گرفته شده بود که این بخش هم از استقبال چشمگیری برخوردار بود. اما دلیل تشکیل نشدن لیگ واحد برای این رشته و نمایشی بودن این بخش در این مسابقات، کم بودن تعداد تیمهای فعال در این زمینه در ایران بود که البته این دوستان با خودنمایی خودشون تونستند حق مطلب رو ادا کنند و با حریف طلبی های خودشون زمینه تشکیل چنین لیگی رو در مسابقات بعدی فراهم کنند. (تصویر مقابل نمونه یکی از رباتهای این تیم در حال دیریبل یه بچه هس! قزوینیه دیگه چه میشه کرد )

واما........ واما شیرین ترین بخش نمایشگاه به نظر من غرفه ای بود که روز آخر مسابقات یه گوشه دیگه نمایشگاه برگزار شد.
عده ای از دانشجویان دانشگاه آزاد و سراسری کرمان با هم موسسه خصوصی رو تاسیس کرده بودن و طبق گفته خوشون به عنوان یه فعالیت جنبی شروع به ساخت یه ربات انسان نمای کوچیک کردن. باورتون نمیشه اگر نحوه حرکت این ربات رو می دیدید از شدت ذوق قش میکردید. در حاضر این ربات میتونست توپ قرمز رو شناسایی کنه و با دویدن (راه میرفت) به سمت اون بهش شوت بزنه! اما طبق گفته این دوستان این ربات می تونه ملق بزنه و یا بعد از افتادن از زمین بلند بشه. این ربات  ۱۲ میلیون تومان تا حالا خرج داشته و ۲۰ تومن دیگه هم هنوز کار داره و دلیل نمایش اون هم در این مسابقات، جلب نظر اسپانسرها بودش. آقای موسی خانی به این دوستان قول دادند تا حمایتشون کنند (اگرچه خود دانشگاه قزوین در این زمینه هم فعالیت میکنه) و ما امیدواریم این دوستان هم موفق باشند و هم مثل همیشه مقام آور. (تصویر مقابل مربوط به همین دوست خوش تیپمون هستش)

درمورد مسابقات شبیه سازی از اونجایی که مطمئن نبودم، چیزی ننوشتم. فقط میدونم در رشته مربی فوتبال تیم MRL مدال طلا گرفت و... در مورد رباتهای جونیور هم اطلاع چندانی نداشتم اما فکر میکنم تشویقهای بچه های علامه حلی کارساز بود و یه مقام هایی گرفتند :).
در زیر لینک یک سری از سایتهای مرتبط رو نوشتم که میتونید جهت کسب اطلاعات بیشتر به اونها مراجعه کنید.

خلاصه این بود قسمتی از اتفاقات جالب این سری از مسابقات. امیدوارم مورد توجهتون قرار گرفته باشه. تا پست آینده خدانگهدار.

[+] نوشته شده توسط نیما در 11:52 | |

آموزش ساخت ربات مسیریاب (موتور DC 4)

سلام. بچه ها باورتون نمیشه سخت ترین بخش برای نوشتن مقالاتم چیه؟؟؟؟ بله همین بخش سلام و احوال پرسی!!! هر بار که میام شروع کنم صدتا جمله رو امتحان می کنم که برای شروع یه مقاله علمی مناسب باشه! اما در آخر هیچی به ذهنم نمیرسه بجز   همین سلام خشکو خالی. لااقل یکی تون نظرشو کامنت بزاره ووو من رو از سر در گمی سلام و احوال پرسی پست بعد نجات بده (هر کی بگه من خیلی دوسش دارم )

خوب دیگه از پرحرفی هم که بگذریم میرسیم به مقاله ای که تو پست قبل بهش اشاره کردم، یعنی یه مدار عملی از آیسی L298:

خوب با توضیحاتی که در پست قبل راجع به پایه های این آیسی دادم فکر نمی کنم بجز این دیود ها چیز سوال برانگیز دیگه ای در این مدار باقی بمونه!
زمانی که تغذیه موتور ناگهان قطع میشه، سیمهای داخلی اون برای مدت کوتاهی ولتاژی در جهت معکوس ایجاد می کنند و یا حتی چرخوندن شفت موتور باعث ایجاد ولتاژ در دوسر اون میشه (به علت وجود گیربکس این ولتاژ محصوص هستش) که این ولتاژها میتونن باعث تخریب آیسیهای منطقی بشن. به همین خاطر در این مدارها توصیه میشه ۲ تا دیود 1N5818 به اصتلاح Shuttkey، در دوسر هر موتور  به منظور جلوگیری از این آسیب احتمالی، استفاده بشه. راستی در هنگام استفاده از این دیودها به جهت قرار گیریشون همونطور که در مدار نشون داده شده کاملا دقت کنید، چون نصب کردن اونها در جهت مخالف هم باعث کارنکردن مدار میشه (دیودها فقط از یه سمت جریان عبور میدن) هم این که ممکنه بوووووم....

نکته بعدی اینکه من در اینجا بخاطر اینکه به کم کردن جریان احتیاجی نداشتم پایه های یک و ۱۵ رو مستقیما به سر منفی وصل کردم اما اگر شما خواستید جریان رو محدود کنید با توجه به دستورات مقاله قبل میتونید اینکار رو بکنید.

نکته سوم اینکه من در این مدار ولتاژ Vs رو ۹ ولت انتخاب کردم که شما می تونید هر مقدار دیگه ای رو در رنج ۲.۵ تا ۴۶ ولت استفاده کنید! فقط توجه کنید که این آیسی از اونجایی که سیستم پل-اچ درونی داره درست مانند یه پل-اچ معمولی باعث افت ولتاژ ۱.۴ ولتی خواهد شد. یعنی اگر شما موتوری دارید که حداکثر بهره اون در ولتاژ ۱۲ هست و میخواهید به این بهره برسید باید از منبع ۱۳.۴ولتی استفاده کنید.

نکته چهارم اینکه پایه های ۶ و ۱۱ همونطور که گفتم برای فعال و غیر فعال کردن موتورهای ۱ و ۲ هستند.

جهت InputB InputA Enable
ترمز H H H
ترمز L L H
جلو L H H
عقب H L H
غیرفعال X X L
میتونید این دو پایه رو مستقیما از روی بردتون به سر مثبت ۵ ولت تغذیه وصل کنید (به معنی ۱ منطقی) یا اینکه اونها رو به پایه های میکروتون وصل کنید و از اونجا بهشون ۱ بدید.

و نکته آخر اینکه با ورودی های ۱و۲ هر موتور هم باید طبق جدول صحت بالا رفتار کنید تا باعث حرکت چپگرد و راستگرد موتورتون بشید.

این پست یکم طولانی شد ها؟ اشکال نداره عوضش دفه بعد یکم دیرتر میام، شما هم استراحت کنید خوبه؟   منتظر نظراتتون هستم، فعلا یا خق.

[+] نوشته شده توسط نیما در 0:5 | |

آموزش ساخت ربات مسیریاب (موتور DC 3)

دوستان خوبم دوباره سلام. چند روزی بود نمی نوشتم چون فکر کردم ممکنه خیلی ها هنوز گرفتار مسافرتهای نوروز باشن و موفق نشن مطالب وبلاگ رو دنبال کنن. اما الان دیگه فکر کنم همه برگشتن و حالا نوبت منه که یه مقاله خوب عیدی بهتون بدم:

در پست قبلی بطور مفصل درباره سیستم درونی درایور L298 (سیستم پل-اچ) شرح دادم، و این جلسه قصد دارم به توضیح کاربرد تک تک پایه های این آیسی بپردازم.
خوب، فهمیدیم که برای کنترل چپگرد و راستگرد یه موتور DC به مدار پل-اچ احتیاج داریم که این مدار دارای دو ورودی و دو خروجی -که به موتورها وصل میشن- هستش (این مدار رو میتونید در پست قبل مشاهده کنید). و از اونجایی هم که آیسی L298 یک DUAL H-BRIDGE هستش، یعنی دارای دو مدار پل-اچ در کنارهم برای کنترل ۲ موتور هستش، دست کم باید ۸ پایه داشته باشه (۴ + ۴ = ۸). اما این آیسی همونطور که گفتم ۱۵ پایه هست که پایه های اضافی قابلیتهای جالبی رو برای ما فراهم می کنه که حالا از روی شکل توضیح بیشتری میدم.

INPUT 1,2,3,4:
این چهار پایه دقیقا همون چهار ورودی پل-اچ هایی هستند که در بالا بهشون اشاره کردم. درواقع INPUT 1,2 مربوط به پل-اچ اول و INPUT 3,4 مربوط به پل-اچ دوم هستند.

OUTPUT 1,2,3,4:
این چهار پایه هم توضیحی مثل بالا دارند با این تفاوت که اینها خروجی های پل-اچ هستند و درواقع به موتورها وصل میشن.

ENABLE A,B:
این دو پایه که هرکدوم مربوط به یک موتور هستند برای فعال یا غیر فعال کردن مدار مربوط به خودشون بکار می روند. با ارسال صفر منطقی به این پایه ها مدار پل-اچ داخلی آیسی مربوط به هرکدوم از موتورها به وضعیت کم مصرف میره و درواقع تحریک INPUT های اون پل بی اثر خواهد بود. البته از این پایه ها برای کنترل سرعت موتورها هم استفاده میشه که در مباحث پیشرفته تر به اون اشاره خواهم کرد.

GND:
این پایه هم که همونطور از اسمش پیداست باید به سرمنفی یا زمین منبع تغذیه تون وصل بشه.

Logic Supply Voltage Vss:
این پایه هم درواقع مربوط به تغذیه منطقی آیسی هست که باید به سر مثبت منبعی در رنج ۳.۵ تا ماکسیمم ۷ ولت وصل بشه (البته مقدار پیشنهادی خروجی ۵ ولت یک رگولاتور هستش)

Supply Voltage Vs:
این پایه هم باید به سرمثبت از منبع تغذیه جداگانه ای که برای تغذیه موتورها در نظر گرفتید وصل بشه. این ولتاژ میتونه در رنج +۲.۵ تا ماکسیمم ۴۶ ولت قرار داشته باشه که بسته به نوع موتورتون این ولتاژ تعیین میشود، فقط به مقدار ماکسیمم یعنی ۴۶ ولت توجه کنید.

Current Sensing A,B:
با قرار دادن یک مقاومت میان این پایه ها و سر زمین منبع تغذیه تون می تونید آمپراژ مورد استفاده هر موتور رو تنظیم کنید. این مقدار با استفاده از فرمول Vs/R که R مقدار مقاومت است، بدست میاد. بعدا توضیح بیشتر خواهم داد که حداکثر آمپراژ مصرفی توسط هر موتور، هنگام استفاده از این آیسی در حالت عادی نباید بیشتر از ۲ آمپر باشه. پس با استفاده از این قابلیت می تونید در صورت نیاز این آمپراژ رو تغییر بدید. البته اگر موتوری دارید که کمتر از ۲ آمپر مصرف داره میتونید این ۲ پایه رو مستقیم به سر منفی وصل کنید.

خوب دوستان، فکر می کنم برای این جلسه کافی باشه. توجه کنید که بهترین منبع اطلاعاتی در مورد این آیسی دیتاشیت اون هست که میتونید اون رو از اینجا دانلود کنید. راستی پیشنهاد می کنم این آیسی رو حتما تهیه کنید چونکه اولا در کارهای حرفه ای خیلی بدردتون می خوره و دوما اینکه بخاطر شکل عجیب پایه هاش باید وقت زیادی رو برای سوار کردن اون روی بردبورد یا حتی فیبرهای آماده صرف کنید .

در جلسه آینده مدار کاملی رو از این آیسی برای کنترل موتور DC به همراه مسائل تکمیلی راجع به این آییسی خواهیم داشت پس تا پست بعد خدانگهدار.

[+] نوشته شده توسط نیما در 13:3 | |

آموزش ساخت ربات مسیریاب (موتور DC 2)

سلام دوباره به همه دوستان دوست داشتنی و کامنت نذار خودم !

می تونم بگم آموزش های سری جدیدم، جزو مقالاتی هستند که واقعا در سطح های متوسط و حرفه ای قرار دارند و شاید به جرات بتونم بگم مطالبی هستند که برای اولین بار (به صورت تفصیر و تحلیل کامل و تازه به زبان فارسی) بصورت رایگان در وب قرار می گیرند! حالا شما هی کامنت نذارید و به من دلخوشی ندید ! و اما بریم سر آموزش امروز:

مطالب پایه و حتی تکراری رو در مقاله قبلی راجع به موتورهای DC به عنوان پیش زمینه ای برای معرفی درایور محبوب و جادویی این نوع موتور ذکر کردم. اما دلیل استفاده نکردن از همون درایور ULN2803 و مدارهای دیگه ای شبیه اون، اینه که ما در کنترل موتورمون به قابلیت هایی همچون حرکت به عقب و جلو، کنترل سرعت، کنترل جریان و توقف آنی موتور احتیاج داریم و این نیازهارو درایور مورد نظر ما یعنی L298 براحتی تامین کی کنه. L298 یک آیسی پل-H دوتایی ( DUAL H-Bridge) دارای ۱۵ پایه هستش که همونطور که گفتم قادره وظایفی چون چرخش موتور به عقب و جلو، کنترل سرعت، کنترل جریان و توقف آنی موتور رو برای ما انجام بده. ولی قبل از معرفی بیشتر این آیسی می خوام یکم در مورد واژه ای که برای معرفی این آیسی استفاده کردم یعنی H-Bridge توضیح بدم:

تئوری H-Bridge:
شکل زیر شماتیک ساده ای از مدار پل-اچ به همراه جدول صحت آن نمایش می دهه. برای راه انداختن یک موتور ما باید به آن ولتاژ بدهیم، در این مدار ما این کار را با استفاده از چند ترانزیستور NPN به شرح زیر انجام می دهیم (اگر اطلاعات لازم راجع به ترانزیستور ندارید به این مقاله از وبلاگ دخترا یه نگاه بندازید). با توجه به جدول صحت در می یابیم که برای چرخش یک موتور به سمت جلو (توجه کنید که جهت چرخش جلو و عقب موتور در اینجا فقط نمادهایی برای توضیح هستند. اگرنه ای جهت ها بستگی به نحوه قرار گیری و... موتور شما دارد) بایستی Q1 و Q2 روشن شوند. این کار سر مثبت باتری را به سمت چپ موتور (از طریق Q1) و سر منفی باطری را به طرف دیگر موتور (از طریق Q4) اتصال می دهد.
برای چرخش موتور در جهت مخالف باید ترانزیستورهای قبلی را خاموش کرده و Q2 و Q3 را روشن کنیم. حالا سر مثبت باتری به سمت راست موتور (از طریق Q3) و سمت چپ باطری به سر منفی باطری (از طریق Q2) اتصال داده می شود. در این حالت ما قطبیت باطری را معکوس کرده و باعث چرخش موتور در سمت مخالف خواهیم شد.

می بینید هر بار که موتور روشن می شود دوتا از ترانزیستورها هم در حال گذردهی جریان هستند. هر ترانزیستور در حدود 0.7 ولت افت ولتاژ دارد (علت را می توانید در مقاله بالا بخوانید). پس ولتاژی که از طریق دوترانزیستور به موتور می رسد 1,4 ولت کمتر از ولتاژ منبع می باشد. بدین معنی که اگر شما یک موتور ۱۲ ولت دارید برای اینکه از حداکثر توان آن (در ۱۲ ولت) استفاده کنید باید از یک منبع 13,4 ولتی استفاده کنید.
همچنین توجه کنید که اگر دو ترانزیستور Q1 و Q2 (یا Q3 و Q4) همزمان روشن باشند شما باعث ایجاد اتصال کوتاه در دو سر باطری می شوید اما آیسی L298 دارای منطق داخلی هست که از وقوع این اتفاق جلوگیری می کند.

خوب حالا فهمیدیم کلمات "DUAL H-Bridge" که برای معرفی L298 بکار می رود بدین معنا هست که این آیسی حاوی دوعدد پل-اچ برای کنترل ۲ موتور می باشد. تصویر این آیسی را در شکل مقابل مشاهده می کنید.
این آیسی در حال حاضر در میان ربات سازان محبوبیت زیادی داره و در بازار ایران با قیمتی در حدود ۱۸۰۰ تا ۲۳۰۰ عرضه میشه (من ۱۸۰۰ خریدم :)). در جلسه آینده توضیحات بیشتری راجع به قابلیت ها، نقشه مدارات و طریقه استفاده و... این آیسی خواهم داد.

اما این پست رو کوتاه کردم به اینخاطر که می خواستم تصاویر کوچکترین رباتی رو که مسابقات علامه حلی هم شرکت کرده بود رو به شما هم نشون بدم. از فرستنده این تصاویر و تیم سازنده این ربات که البته به علت بدشانسی نتونست مقامی در مسابقات کسب کنه -ولی ازشون تجلیل شده بود- واقعا تشکر می کنم و آرزوی موفقیت براشون دارم.


البته اونطوری که این دوستان گفتن مدت زیادی روی این طرح کار نکردن و از اینجور تعارفات و .. . امیدوارم از این پست لذت برده باشید. منتظر نظرات سازنده شما هستم، تا پست بعد خدانگهدار.

[+] نوشته شده توسط نیما در 1:50 | |

آموزش ساخت ربات (موتور DC)

دوستان خوبم سلام. عید نوروز رو به همتون تبریک می گم و برای همه آرزوی موفقیت می کنم .

خوب قرار شد کار با موتورهای DC رو شروع کنیم. شاید خیلی هاتون که تو این مدت با استپر کار کردید و یا حداقل با ویژگی هاش آشنایی دارید بگید امکان نداره بشه با موتور DC ربات، اونم مسیریاب ساخت!حداقل به این فکر می کنید که موتور DC  نمی تونه به سرعت توقف کنه، یا کنترل سرعتش مشکله و... (این ضعفها به روشهایی حل می شوند) اما حقیقت اینه که استپر ها با وجود دقت و شاید کنترل آسون، مشکلات زیادی از جمله وزن زیاد، قیمت بالا و قدرت بسیار کم دارند و در مواقعی حتی وزن خودشون رو هم نمی تونن حمل کنند و کلا استفاده از اونها به عنوان نیروی محرکه صحیح نیست. در عوض موتورهای DC حداقل در بازار ایران قیمت بسیار مناسب، اندازه و طرحهای گوناگون، سرعت مناسب و... دارند. و از همه مهمتر اینکه به عنوان یه تجربه اینروزها دیگه همه از این نوع موتور استفاده می کنند پس ما هم می کنیم :).

نکته دیگه ای که باید راجع به موتورهای DC بگم این هست که این موتورها در ولتاژ کاری خودشون سرعت بسیار بالایی دارند و برای حل این مشکل چاره ای نیست جز استفاده از گیربوکس. تو بازار موتورهای مختلفی به همراه گیربکس عرضه میشن اما قیمتهای سرسام آوری دارند. چیزی که من توصیه می کنم این هست که ماشین های اسباب بازی که در اونها از آرمیچر (همون موتور DC) استفاده شده تهیه کنید و از گیربکس های پلاستیکی که برای کاهش سرعت در اونها تعبیه شده استفاده کنید -دقیقا همون کاری که خود من و خیلی های دیگه کردن(به عکسهای مراجعه شود) -. تازه ممکنه بتونید از چرخها و یا بدنه ماشین هم در ساخت رباتتون استفاده کنید.

کنترل موتور DC:
حالا اگر بخوایم بریم سر اصل مطلب باید بپردازیم به نحوه کنترل این نوع موتور. می دونم همه دیدید که موتورهای DC (یا آرمیچر خودمون) دارای دو سر هستند که اگر یکی رو به قطب + و دیگری رو به - باطری وصل کنیم باعث چرخش موتور در یک جهت می شیم و اگر جای سیم ها رو عوض کنیم موتور در جهت معکوس خواهد چرخید.
حالا ساده ترین نوع کنترلی که با دانش فعلی ما پیشنهاد میشه استفاده از همون آیسی ULN2803 هستش به این صورت که یک سر از یک موتور رو به یکی از پینهای خروجی این آیسی وصل کنیم (در مقالات قبلی گفتم که پینهای ۱۸ تا ۱۱ خروجی و ۱ تا ۹ ورودی های اونها هستند) و سر دیگر رو به قطب مثبت منبع مون وصل کنیم. حالا با صفر کردن ورودی (وصل کردن اون به ۰ولت یا ۰منطقی از میکرو)  موتور روشن و با یک کردن اون (۵ولت یا ۱ منطقی از میکرو) موتور خاموش خواهد شد. می تونیم این کار رو با دو موتور همانند مدار زیر انجام بدیم و در واقع ربات مسیریاب ساده ای بسازیم که میتونه خطوط تیره بدون انحرافات شدید (مثل پیچهای تند یا ۹۰) رو با سرعت دنبال کنه.

البته این مدار و حتی تمام مدارهای قبلی آموزش داده شده رو می شد بدون وجود میکرو هم ساخت اما قصد من چیزهای دیگه ای از جمله آموزش کار با میکرو و همچنین آمادگی شما برای کارهای بزرگتر بوده. شما می تونید مثل مثالهای قبلی دو سنسور چپ و راست خودتون رو به ترتیب به پینهای ۰ و ۱ از پورت C میکرو وصل کنید و ورودی های موتور ۱ و ۲ رو هم که در شماتیک بالا نشون داده شده به پینهای ۰ و ۱ از پورت D میکروتون وصل کنید و با پروگرم کردن میکروتون با برنامه زیر، همونطور که گفتم ربات مسیریاب ساده ای بسازید  که میتونه خطوط تیره بدون انحرافات شدید (مثل پیچهای تند یا ۹۰) رو با سرعت دنبال کنه. راستی اگر از این آیسی قبلا در کنترل استپر استفاده کردید دیگه اسراری برای بستن این مدار نیست چون این فقط مقدمه ای بود برای مطالب پست بعد:

Config Pind.0 = Output                                  'Left Motor
Config Pind.1 = Output                                  'right motor
Config Pinc.0 = Input                                   'left sensor
Config Pinc.1 = Input                                   'right sensor
Lm Alias Portd.0
Rm Alias Portd.1
Dim Ls As Bit
Dim Rs As Bit
Do
   Ls = Pinc.0
   Rs = Pinc.1
   If Ls = 1 And Rs = 0 Then
      Rm = 1
      Lm = 0
   End If
   If Ls = 0 And Rs = 1 Then
      Rm = 0
      Lm = 1
   End If
   If Ls = 0 And Rs = 0 Then
      Rm = 1
      Lm = 1
   End If
Loop
End 

البته می دونم این مقاله خیلی هم یونیک (منظور باحال بید) و در سطح مقالات قبلی نیست، اما درواقع به عنوان مقدمه ای برای مقاله بعدیم که معرفی و آموزش نحوه استفاده از یکی از پیشرفته ترین و محبوبترین درایور های موتور DC هست لازم بود. به علاوه اینکه خیلی ها هم میگن چون ما الکترونیک کار نکردیم برای درک بهتر مطالب الکتریکی، بیشتر توضیح بده. بنابراین امیدوارم حداقل این دوستان استفاده کرده باشن. راستی حتما چندتا پست بعدی رو دنبال کنید که قول میدم ضرر نکنید! پس تا بعد یا حق.

[+] نوشته شده توسط نیما در 20:35 | |

آموزش ساخت ربات (سنسور3)

دوستان خوبم سلام. بابا اینقدر گفتید دیر آپدیت می کنی که دیگه خودمم عذاب وجدان گرفتم ! اصلا فلسفه وبلاگ همینه دیگه! هر دو سه روز در میون باید آپ کرد. حالا کار ما که آموزشیه دیگه بدتر تا بیام مطلب آماده کنم شونصد روز طول میکشه... بیخیال بچسبیم به آموزش امروزمون.

امروز می خوام مدار سنسوری رو نشونتون بدم که در عین سادگی -البته از مدار قبلی پیچیده تره- کارایی و بازده بسیار بالاتری داره. درواقع اگر کار شما یکم به سمت حرفه ای شدن پیش بره دیگه مجبورید مدار قبلی رو کنار بگذارید و به مدارهایی که از آیسی های OpAmp بهرمی برند، استفاده کنید. لیست قطعات رو می نویسم و بعد توضیح میدم:

لیست قطعات:

  1. یک عدد آیسی آپ-امپ LM358
  2. مقاومت ۱۰k یک عدد
  3. مقاومت ۲۲۰ دو عدد
  4. پتانسیومتر 10k یک عدد
  5. پک سنسور (گیرنده و فرستنده) از نوع خروجی ترانزیستور

اول از همه بگم که لیست قطعات بالا برای راه اندازی یک سنسور (فرستنده و گیرنده) کافی می باشد و برای افزایش سنسورهاتون باید به نسبت قطعات بیشتری تهیه کنید (البته بجز آیسی که هر یک دونش میتونه ۲ تا سنسور رو راه بندازه). همچنین هم می تونید از سنسورهایی که به صورت یک پک هستند (فرستنده و گیرنده باهم) مثل CNY70 و هم از فرستنده و گیرنده جدا استفاده کنید. چیزی که مهمه اینه که سنسور شما باید از نوع خروجی ترانزیستور باشه! (برای اینکه سردرگم نشید همون CNY70 رو پیشنهاد می کنم). نقشه مدار رو ببینید تا من روش بیشتر توضیح بدم:

مختصری درباره LM358: این آیسی حاوی دوعدد آپ-امپ (DUAL OPAMP) است و ۸ پایه دارد. آپ-امپ ها جهت مقایسه ولتاژهای ایجاد شده از سنسورها بکار می روند. در واقع می دونید در الکترونیک دیجیتال ۵ ولت به معنای بالا یا ۱ و زمین یا ۰ ولت به معنای پایین یا ۰ هستش. ولتاژ خروجی از سنسورها با دور یا نزدیک کردن جسم در رنجهای مختلفی تغییر میکنه، حالا وظیفه آپ-امپ اینه که با وقایسه این ولتاژ خروجی مناسب رو که یا ۱ یا ۰ هست ایجاد کنه تا هنگام وصل این خروجی به میکرو، اجازه تصمیم گیری صریحتر و دقیقتری برای میکروکنترلرمون فراهم کنیم. در واقع خروجی این آیسی یا ۱ هست به معنای قرار گرفتن سنسور روی خط سیاه و یا ۰ هست به معنای حالت عادی یا قرار گرفتن سنسور روی سطح سیاه  و دیگه حالتی بین این دو نخواهیم داشت در صورتی که در مدار قبلی حالت میانگینی هم وجود داشت که در مواقعی باعث اختلال خواهد شد.

قسمتی که با نقطه چین مشخص شده دلخبخواه هست و برای مشاهده و آزمایش خروجی بکار میره که البته پیشنهاد می کنم وقتی این مدار رو روی بردبورد می بندید با قرار دادن این مقاومت و LED خروجی کاملا دقیقتون رو مشاهده کنید.

راستی اگر از CNY70 استفاده می کنید بدونید که: پایه های سمتی از این سنسور که نوشته ندارد مربوط به LED فرستنده و دو پایه قسمتی که نوشته ندارد مربوط به گیرنده هستند. همچنین اگر می خواهید دوسنسور رو با یک آیسی آپ-امپ LM358 راه بندازید، یک مدار دیگه شکل همین ببندید و اینبار بجای پایه های ۱ و ۲ و ۳ به ترتیب از پایه های ۵ و ۶ و ۷ استفاده کنید (که خروجی پایه شماره ۷ هستش). در صورتی که بخواهید بیشتر از دوتا سنسور استفاده کنید باید بازهم آیسی آپ-امپ تهیه کنید. با تنظیم پتانسیومترها می توانید فاصله و حساسیت سنسورها را تعین کنید. البته پیشنهاد می کنم قبل از لحیم کردن این مدار روی فیبر اون رو یکبار روی برد بورد آزمایش کنید.

در نوشتن این مطلب از بخشی از مقاله ربات مسیریاب، برگرفته از دانشنامه سایت رشد استفاده شده است (البته با مقدار زیادی تغییرات). موفق پیروز باشید

[+] نوشته شده توسط نیما در 18:0 | |

تصاویری از بخشهای الکتروینیکی و مکانیکی رباتهای خودم و دوستان

سلام به دوستان دوست داشتنی خودم... می دونم دیگه از دستم کلافه شدید اما گفته بودم که دلیل چیه! حالا به بزرگی خودتون ببخشید و منم قول میدم دیگه پسر خوبی باشم...

بفرمایید اینم تصاویری که قولش رو داده بودم! دو ردیف اول مربوط میشه به بخشهای الکترونیکی و مکانیکی رباتهای (!) خودم. تمام تصاویر Tumbnail هستند یعنی با کلیک روی هر کدوم نمونه بزرگش در یه صفحه جیدی باز میشه. راستی به دلایلی موفق نشدم تصویر ربات بچه های امام دانشگاه امام حسین و خیلی های دیگه رو هم بزارم اما چند تا عکس دیگه که مربوط میشه به ربات های مسیریاب (یا ...) دوستانی که در همین دوره جدید مسابقات حلی کاپ شرکت کرده بودند... راستی تمام این تصاویر اورجینال هستند (برای اولین بار در وب منتشر میشن :)) و توسط دوربین آقا فاضل گرفته شدن (دستش درد نکنه)


AVR, تغذیه, ULN2803

مدار سنسورها

مکانیک رباتم با استپر

ربات قبلی از نمای دیگر

به همراه بدنه :)

مکانیک رباتم با موتور DC

ربات قبلی از نمای دیگر

...و

همونطور که تو تصاویر رباتهام دیدید مدار سنسورهای من با مداری که تو وبلاگ آموزش دادم زمین تا آسمون فرق می کنه. که البته این مدل ۱۰۰٪ کاراتر و حرفه ای تر هستش. به همین خاطر تو مقاله بعدی به تشریح این مدار خواهم پرداخت.

درضمن برای شروع کار حرفه ای تر از مقالات بعدی نحوه کار با موتورهای DC (درایو کردن و...) رو آموزش خواهم داد و از اون به بعد کار رو با این نوع موتور پیش خواهیم گرفت...

برای همتون آرزوی موفقیت دارم. تا بزودی خدانگهدار

[+] نوشته شده توسط نیما در 12:2 | |

هیچی

سلام بچه ها! خیلی ببخشید که دیر به دیر میام! آخه حقیقت کارا جور نمیشه! قرار بود این سری عکسهایی از ربات خودم و ربات چندتا از دوستان که در حلی کاپ هم شرکت کرده بودن به نمایش بگذارم... مشکل اینه که من دوربین ندارم و تا پیدا کردن این دوستانم هم باید یکم صبر کنم! ایشاالله قول میدم تا شب ۵ شنبه یا خودم بیام (یا خبرم ).

راستی بچه ها بابت اشتباه در کد مقاله قبل عذر می خوام... چون تو خونه نوشته بودم و تو کافی نت پست کرده بودم یادم رفت تو کافی نت این قسمتو تصحیح کنم. اما بحث جالب شما رو در کامنتها دیدم و کلی حال کردم... با اجازه آقا رحیم با روش پیشنهادی ایشون هم تصحیحش کردم.. و از مزدک جان هم ممنونم اما از خودش می خوام یه بار دیگه به کدش نگاه کنه، خودش میفهمه اشکال کدش کجاست! (این هم از اولین کمبود بیسکام :).

اما!!!! اما باید بگم دلیل اصلی نوشتن این پست (به ظاهر بیهوده) چیزی نبود بجز معرفی یه وبلاگ پر بار  . طرف کامنت گذاشته بود که من بهت لینکیدم بیا توهم بهم بلینک... وقتی رفتم تو وبلاگش دیدم چه مقالات باحالی داره! یکم که بیشتر دقت کردم دیدم چقدر سبک نوشتنش شبیه منه! یکم بیشتر که دقت کردم دیدم به به!!!! نخیر مثل اینکه آقا در امر کپی و paste فوق لیسانس داره! تازه می خواد دکتراشم بگیره!! کلی برام جالب بود. خوشحال شدم که مقالاتم حداقل برای یکی این ارزش رو داشته که بخواد ازشون کپی برداری کنه (نمی گم کش رفتن) خلاصه ما که بخیل نیستیم قصد ما استفاده دوستانه حالا چه اینجا چه اونجا!  اینم لینکش:http://www.roboedukia.blogsky.com/. راستی چون بهم لینک نداده بود منم بهش نلینکیدم!!!

بازم معذرت می خوام که دیر دیر میام.. اگر مقالات خودم بود مثل قبل ۲   ۳ روز در میون می نوشتم اما چه کنم که کارم لنگ خلق الله ست... پس یکم منتظر باشید تا با تصاویر اورجینال برگردم! راستی از یکی که میدونم الان داره خودشم این پست رو می خونه خواهش کردم تا عکس رباتش رو که به عنوان کوچکترین ربات (5/3×2/3×2/2) حلی کاپ هم ازش تقدیر شد، برامون بفرسته. شما هم تو کامنتها ازش بخواید تا یوقت یادش نره....... دوستون دارم یا حق.

این پست موقتی می باشد...

[+] نوشته شده توسط نیما در 23:28 | |

برنامه ای ساده برای کنترل ربات مسیریاب

دوستان خوبم، سلام به روی ماهتون .... شرمنده از اینکه یکم نه!!! بلکه خیلی دیر کردم. آخه این چند روز خیلی bussy بیدم :)) از صبح ساعت ۵ تا شب ساعت ۹ بعدشم لالا....... حالاشم اینترنتم قطعه و ندید، فقط بخاطر اینکه خیلی دلم براتون تنگ شده بود دارم مینویسم. اگر با نظراتتون ابراز لطف کردید که دمتون گرم! خستگیم دراومد اگر نه خیلی بدید .

امروز دیگه می خوام یجورایی این مباحث مقدماتی رو جمعش کنم و ایشالله اگر عمری بود از دفعات بعد بریم برا کارای حرفه ای تر. تو پست امروز می خوام کد کامل یک روبات ساده مسیر یاب رو تحلیل کنم که در واقع اشتراک چند مقاله قبلی مربوط به برنامه نویسی هستش. اول کد رو ببینید بعد توضیح میدم:

$crystal = 1000000
$regfile = "m32def.dat"

Config Portd = Output                                    'right motor
Config Portd = Output                                    'left motor
Config Pinc.0 = Input
Config Pinc.1 = Input

Dim Rm As Byte                                          'right motor
Dim Lm As Byte                                          'left motor
Dim Ls As Bit                                           'left sensor
Dim Rs As Bit                                           'right sensor

Rm = &B10001000
Lm = &B10001000

Declare Sub Left_step()
Declare Sub Right_step()
Declare Sub Turn_left()
Declare Sub Turn_right()
Declare Sub Forward()

Do
  Ls = Pinc.0
  Rs = Pinc.1

  If Ls = 1 Then                              'Left sensor trigered?
    Call Turn_left()
  End If
  If Rs = 1 Then                              'Right sensor trigered?
    Call Turn_right()
  End If

If Pinc.0 = 1 And pinc.1 = 1 Then 'Thanx 2 Rahim!
Call Forward()
End If
If Pinc.0 = 0 And Portc.1 =0 Then
Call Forward()
End If

  Waitms 10
Loop


Sub Forward()                                 'Goes forward 1 step
  Call Left_step()
  Call Right_step()
End Sub

Sub Turn_right()
  Call Left_step()
End Sub

Sub Turn_left()
  Call Right_step()
End Sub

Sub Left_step()                         'rotates left motor n step
    Rotate Lm , Right
    Portd = Lm
End Sub

Sub Right_step()                        'Rotates Right motor n steps
    Rotate Rm , Right
    Portb = Rm
End Sub

End

خوب همونطور که گفتم این کد درواقع اشتراکی هست از مقالات قبلی برای همین موضوع جدید و مهمی نداره بجز استفاده از روال ، زیربرنامه یا Sub. این ویژگی از زبان بیسیک کامپایلر Bascom به شما اجازه میده تا برنامتون رو به چند قسمت ساده تر تقسیم کنید و هر کدوم رو با بکار بردن نامش بعد از کلمه کلیدی CALL به دفعات دلخواه در برنامتون استفاده کنید. (فکر کنم دیگه همه قبلا برنامه نویسی کردن و با مفهوم روال و تابع آشنایی دارند برای همین توضیح اضافی نمیدم فقط کار هر روال این برنامه رو تیتر وار می نویسم:

  • Left_Step(): روالی برای چرخش موتور چپ به اندازه یک استپ
  • Right_Step(): برای چرخش موتور سمت راست به اندازه یک استپ
  • Turn_left(): برای چرخش روبات به سمت چپ (موتور راست ۱ استپ)
  • Turn_right(): برای چرخش ربات به سمت راست (موتور چپ ۱ استپ)
  • Forward(): برای حرکت ربات به سمت جلو (موتور چپ و راست هر کدام ۱ استپ)

راستی برای استفاده از توابع یا روالها باید ابتدا در بالای برنامه با فرمت Declare Sub subname() اونها رو تعریف کنیم تا بتونیم در قسمتها مختلف برنامه از اونها استفاده کنیم... شاید در اینجا استفاده از زیربرنامه ها حتی باعث طولانی تر شدن کد هم شده باشه اما در کل هم باعث خواناتر شدن و هم باعث آسانتر شدن امکان تغیرات در برنامه میشه، که البته در برنامه های حجیم تر باعث کوتاهتر شدن برنامه هم خواهد شد.

شرح کلی: طبق کد موتور سمت چپ رو باید بواسطه درایور به پورت D و موتور سمت راست رو به پورت B وصل کنید (قبلا توضیح داده شده چطور). دو سنسور چپ و راست رو هم به ترتیب به پین ۰ و ۱ از پورت C وصل کنید (اینم قبلا آموزش دادم). حالا طبق کد اگر سنسور سمت چپ خط سایه رو سنس کنه موتور سمت راست حرکت میکنه که باعث حرکت ربات به سمت چپ و اگر سنسور سمت راست خط سیاه رو سنس کنه موتور سمت چپ حرکت میکنه و ربات رو به سمت راست می راند. تا همواره ربات بین خطوط حرکت کنه...  در صورتی که دو سنسور همزمان سطح تیره یا روشن سنس کنند هردو موتور حرکت می کنند تا ربات مستقیم بره!

این بود یکی از ساده ترین کدها برای ربات مسیر یاب شما. ایشاالله از جلسات بعدی مباحث پیشرفته تری رو شروع می کنیم. البته بعد از پست بعدی که قراره تصاویری از مدارات و ربات خودم  بهمراه ربات دوستانم که در مسابقات حلی کاپ همین دوره هم شرکت کرده بودند تو وبلاگ بزارم. پس تا اونموقع یا حق......

[+] نوشته شده توسط نیما در 12:3 | |

تریبون آزاد

سلام بچه ها، ببخشید که یکم دیر میام! آخه کارم یه جورایی گیر کرده و اذیت می کنه! امروز هم فقط اومدم چندتا نکته مهم (سوتی های خودم) رو بگم و بعد هم به چندتا از سوالات دوستان که خیلی لطف داشتند جواب بدم و یه کتاب جدید به معرفی کتاب اضافه کنم و ....

از سوتی پست قبل شروع می کنیم که در اون بعد از شرطهای IF که صفر یا یک بودن پین صفر پورت سی رو چک میکرد  و بعد می خواستیم به تناسب اون پین ۱ همون پورت رو صفر یا یک کنیم، من این کار رو با کد Pinc.1=1/0  انجام داده بودم درصورتی که اینکار اشتباه هست و باید از Portc.1=1/0 استفاده کرد. از PinX.Y برای خواندن مقدار دریافتی از پین استفاده می کنیم. این خطا رو BASCOM با پیام "You can not write to pin register" نمایش میده... باز هم معذرت

دومین سوتی برمیگرده به چند پست قبل که مربوط بود به مدار سنسورها! در تصویر مدار من خروجی سنسور رو هم به ۵ولت وصل کرده بودم که دیگه انگار مدار ما هیچ خروجی برای وصل کردن به میکرو نداشت! پس تا زمانی که من تصویر رو تصحیح کنم مواظب باشید اشتباه نکنید... (دست فرزاد جان درد نکنه که این دوتا سوتی رو اونم گوشزد کرده بود! اما از این به بعد هرکی سوتی بگیره جایزه داره!!!! )

راستی در مدار رگولاتور می تونید بجای استفاده از دو خازن ۱میکروفارادی در قسمت ورودی و خروجی، از دوخازن ۱۰۰۰میکروفارادی و ۱۰۰نانوفارادی به صورت موازی فقط در خروجی استفاده کنید. اینکار نویزهای خروجی رگولاتور رو تا حد زیادی فیلتر میکنه! البته مدار قبلی کارمون رو راه میندازه اما در بعضی پروژه های حساس ممکنه باعث خلل بشه....

 

نقل از فرزاد:
وقتی برای برنامه End گذاشتی دیگه چرا حلقه هم استفاده کردی؟

گفتیم که END به معنای پایان برنامه هست و برای جلوگیری از حرکت اشاره گر برنامه به قسمتهای دیگر حافظه میکرو استفاده مشه. ما حلقه رو استفاده کردیم تا کد بین اون بینهایت بار تکرار بشه و دائما ورودی پین ۰ چک بشه و خروجی به پین ۱ فرستاده بشه. اگر حلقه نمی گزاشتیم که فقط یکبار این کار انجام میشد و نتیجه دلخواه رو نمی گرفتیم! اما اگر سوالت اینجوری بود "وقتی از حلقه استفاده کردی دیگه چرا END گزاشتی؟" قابل قبول بود چون اشاره گر برنامه هیچوقت از حلقه خارج نمی شد تا به قسمتهای دیگه حافظه بره! اما در اون صورت هم باید قواعد برنامه نویسی رو رعایت کنیم و END رو بزاریم! (حالا اگه شده برا قشنگی)

نقل از فرزاد:
سر آند رو باید به میکرو و سر کاتد رو به زمین وصل کنی. و گر نه دیود به جای اینکه خاموش شه کم نور میشه!

اینطور قرار داد شده که بهتره همیشه سر منفی مصرف کننده تون رو بواسطه مقاومت مناسب به پینهای میکرو نصب کنید تا با صفر شدن پین جریان در مدار ایجاد بشه.... کم نور شدن دیود بخاطر رعایت نشدن قوانین دیود در مدار شماست! (فکر می کنم اختلاف پتانسیل دو سر دوید باید حداقل ۲ولت باشه تا به طور عادی روشن بشه!) در اینباره با فرزاد بیشتر بحث میکنم :)

نقل از علی:
کمتر کتاب میکروکنترلرهای avr نوشته علی کاهه رو بخون

 علی آقا باید بگم منظور شما رو خوب فهمیدم! اما من هرجایی که به طور صریح از مطالب این کتاب استفاده کردم بدون شک منبعش رو هم ذکر کردم دقیقا یکی رو مورد رو الان تو خاطرم هست.. یه مدتی این کتاب یکه تازی میکرد و من هم خیلی از مطالبی رو که از AVR میدونم از این کتاب یادگرفتم اما قرار نیست کدهایی رو که خودم می نویسم رو هم به دلیل شباهت، به این کتاب رفرنس بدم!!! پس تمام مهندس ها هم باید هرکاری میکنن اسم استاداشون رو زیرش بنویسن ها؟

بقیه سوالات یا درخواستهای شخصی بوده یا اینکه به صورت خصوصی جواب داده شدند! منتظر نظرات و سوالات شما هستم. برام دعا کنید  تا منم زود إ زود برگردم........

[+] نوشته شده توسط نیما در 13:15 | |

آموزش ساخت ربات (برنامه نویسی 3)

دوستان خوبم سلام. یواش یواش داریم به شروع مسابقات رباتیک مختلف از جمله حلی کاپ، رباتهای شهری و مسابقات دانشجویی و دانش آموزی مشهد نزدیک میشیم و شوروحال عجیبی بین شرکت کننده ها و علاقمندان رباتیک راه افتاده!! بعضی از دوستان لطف کرده بودن و حتی سوالاتشون رو از من پرسیده بودند. من هم تصمیم گرفتم یه بخش معرفی کتاب تو وبلاگ راه بندازم و کتابهای مفید در این زمینه که حتی می تونه جوابگوی خیلی از سوالات من و شما باشه رو معرفی و لینک دانلودشون رو قرار بدم. اولیش رو که ملاحضه می کنید (یکم پایین تر سمت راست). منتظر کتابهایی در مورد مکانیک، الکترونیک و ... ربات هم باشید.

اما آموزش های خودمون رو پی میگیریم با یه بخش مقدماتی دیگه که مربوط میشه به گرفتن خروجی سنسورها و تصمیم گیری بر مبنای این خروجی. اینم کد کامل و توضیح بخش به بخش:

$crystal = 1000000
$regfile = "m32def.dat"

Config Pinc.0 = Input
Config Pinc.1 = Output

Dim Sensor As Byte

Do
   Sensor = Pinc.0
   If Sensor = 1 Then
      Pinc.1 = 1
   Else
      Pinc.1 = 0
   End If
Loop

End

کارکرد این کد:  همونطور که گفتم در این کد قصد داریم از پینهای میکرو به عنوان ورودی ۰ یا ۱ استفاده کنیم و بر اساس ۰ یا ۱ بودن اون نتیجه گیری کنیم. شما باید سر خروجی یکی از سنسورهاتون رو که مدارش رو در پست شماره 14 و 15 گذاشتم به واسطه یک مقاومت قرمز-قرمز-نارنجی، به پین ۰ از پورت C میکرو تون وصل کنید سپس سر کاتد یک LED ساده رو (پایه کوتاهه کاتد و بلنده آند هستش) بواسطه یک مقاومت نارنجی-نارنجی-نارنجی به پین ۱ از پورت C میکرو و سر آند اون رو مستقیما به ۵ ولت وصل کنید تا بتونیم به این طریق ورودی و خروجی های این برنامه رو شبیه سازی کنیم.

Config Pinc.0 = Input
Config Pinc.1 = Output

گفتیم که از Config PortX = Input/Output برای پیکربندی پورت به عنوان ورودی یا خروجی استفاده می کنیم. اما می توانیم هر کدام از پینهای یک پورت را هم به صورت جدا گانه به عنوان ورودی یا خروجی پیکربندی کنیم. فرمت کلی آن به صورت Config PinX.Y = Input/Output هستش و نمونه اون رو هم که در کد بالا ملاحضه می کنید. در اینجا پین ۰ از پورت C به عنوان ورودی و پین ۱ از همان پورت خروجی معرفی شده. ما سنسورمان را به پین ۰ که  ورودی است وصل کردیم و LED  رو هم به پین ۱ که خروجی است وصل نمودیم.

Dim Sensor as Bit
Do
 Sensor = Pinc.0
 ...
Loop

در پست قبل گفتم از کلمه Dim برای معرفی متغییر استفاده میشه در اینجا متغیر Sensor از نوع Bit معرفی شده (بیت فقط می تواند ۰ یا ۱ باشد). کاربرد حلقه Do...Loop رو هم در پست قبل گفتم. اما کد میانی در واقع مقدار گرفته شده از Pinc.0 که به سنسور متصل است را در متغیر Sensor قرار می دهد. اگر جسم سفیدی مقابل پک سنسورها قرار دهیم این مقدار ۰ و اگر جسم تیره استفاده کنیم این مقدار ۱ خواهد بود. درست مثل حالتی که خط سیاهی روی زمینه سفید داریم (یاد مسابقات رباتیک افتادم )

   If Sensor = 1 Then
      Pinc.1 = 1
   Else
      Pinc.1 = 0
   End If

در بیسیک با استفاده از IF (expression) Then عبارات شرطی درست می کنیم که Expression همان شرت ماست. در اینجا می گوییم اگر Sensor مساوی ۱ بود یعنی جسم سیاهی مقابل سنسورمان بود کد بعد از Then را که Pinc.1=1 است را اجرا کن! این کد در واقع مقدار ۱ را به پین ۱ از پورت C میکرو ارسال می کند. در واقع این کار باعث خاموش شدن LED متصل به این پین می شود. کلمه Else نیز از موارد اختیاری عبارت شرطی است بدین معنا که اگر شرط برقرار نبود کد بعد از Else را اجرا کن. در این شرط ۱ بودن متغییر سنسور بررسی می شد، اگر یک نبود (یعنی ۰ بود) کد Pinc.1=0 اجرا می شود. اینکار باعث روشن شدن LED ما خواهد شد.

امیدوارم میکروتون رو با این کد پروگرام کنید و از نتیجه حاصله هرچند پیش پا افتاده لذت ببرید! (من که  هنوزشم خیلی لذت می برم). نمی دونم چطور توضیح میدم! خوب یا بد؟ لطفا بهم بگید که اصلا متوجه میشید و استفاده می کنید یا نه؟ منتظر نظر شما هستم. پس تا پست بعد خدانگهدار

[+] نوشته شده توسط نیما در 14:36 | |

آموزش ساخت ربات (برنامه نویسی 2)

سلام. امروز (البته الان شبه ) می خوام ادامه کدی رو که تو پست قبل داشتیم رو تحلیل کنم:

Do
  'some code
Loop

حتی اگر مقدار کمی هم برنامه نویسی (حتی نه به زبان بیسیک) بلد باشید، در این قسمت هیچ احتیاجی به توضیح نخواهید داشت. اما برای دوستانی که آشنایی کافی ندارن حتما باید بگم که هر کدی که بین دو کلمه Do و  Loop قرار میگیره به صورت حلقه از بالا به پایین به صورت مکرر تکرار میشه. البته در استفاده از این دستور میشه شرایطی تعیین کرد که درصورت لزوم از حلقه بی پایان خارج شد ولی ما در اینجا به این حلقه بی پایان احتیاج داریم و دلیلش رو هم بعد از توضیح کد بین اون خواهید فهمید.
راستی یادتونه که در بیسیک هر متنی که بعد از علامت " ' " قرار میگیره به عنوان توضیحات محصوب میشه. شما میتونید در قسمتهای مختلف کدتون از توضیحات استفاده کنید تا اگر کدتون طولانی شد یا اون رو به بقیه دادید در فهمش دچار مشکل نشید.

Rotate A , Left

شاید ندونید که در بیسیک (وبعضی زبانهای دیگه) میشه از توابع و رویه ها بدون حضور پرانتز استفاده کرد! در این کد هم در واقع Rotate یک دستور یا رویه هستش که در اینجا ۲ مقدار ورودی A و Left رو به اون دادیم که بعد از توضیح کار این دستور دلیل استفاده ازا ین ۲ مقدار رو به عنوان ورودی خواهم گفت. از تابع برای چرخاندن تمام بیتهای یک متغیر به سمت راست یا چپ استفاده میشه...  خوب یادتون هست که A رو به عنوان یک متغیر از نوع بایت معرفی کردیم و اون رو برابر با مقدار دودویی B۱۰۰۰۱۰۰۰ (یا معادل دهدهی ۱۳۶) قرار دادیم. پارامتر اول این دستور نام متغیر برای چرخاندن بیتهاش هست و پارامتر دوم یک مقدار LEFT یا RIGHT هستش به معنی چرخش بیتها به سمت چپ یا راست، هستش. در اینجا دستور Rotate باعث چرخش بیتهای A به سمت چپ و تبدیل مقدار اون به B0010001 (معادل دهدهی ۶۸) میشه. اگر توجه کنید می بینید که با استفاده از این دستور هیچ بیتی از بین نمیره! بلکه همه بیتها به چپ یا راست می چرخن. دلیل این کار رو در توضیح کد پایین ملاحضه کنید.

Portb = A

یادتون هست که پورت b رو به عنوان خروجی معرفی کردیم در این مرحله مقدار خروجی اون رو مشخص می کنیم. دونستیم که هر پورت دارای ۸ پین هست که میشه با اونها مثل ۸ بیت یا در کل با یک پورت مثل یک بایت رفتار کرد. در اینجا هم پورت بی رو مساوی متغیر A که اون هم از نوع بایت هست قرار می دیم. چون متغیر A حاوی مقدار B00010001 بود بنابراین پینهای شماره ۱،2،۳،۵،۶ و ۷ پورت، صفر و پینهای شماره ۰ و ۴ ، یک خواهند شد. 
در دوخط بعد نیز اتفاقات بالا عینا برای متغیر B و پورت سی اتفاق میافتد. اما در خط بعد داریم:

Waitms 15

Waitms هم یک دستور یا رویه می باشد که به اندازه مقدار ورودی اش برحسب میلی ثانیه در اجرای برنامه وقفه ایجاد خواهد کرد. مقدار ۱۵ برای تاخیر ۱۵ میلی ثانیه ای در این کد است.

در خطهای بعد هم Loop که نماد پایان حلقه و End که قبلا گفتیم نماد پایان برنامه می باشد را داریم اما ببینیم کدهای داخل حلقه چه عملی را انجام می دهند و علت استفاده از انها چیست؟

طبق جدولهای پست شماره 19 دیدم که چه بیتهایی را باید پشت سر هم به سیمهای موتور القا کنیم با کمی تامل در کد بالا هم میبینیم که با چرخاندن بیتهای دو متغیر A و B در واقع مدل یک بیتی راه اندازی موتورهای پله ای را شبیه سازی کرده ایم. شما می توانید با وصل کردن ۴ پین اول پورت b و c به آیسی درایور همانند شکل پست شماره 20 باعث چرخش موتور متصل به پورت b در خلاف جهت ساعت و موتور متصل به پورت c در جهت ساعتگرد شوید.
همچنین با کم کردن مقدار تاخیر در دستور Waitms می توانید باعث افزایش سرعت چرخش شوید. البته توجه کنید این تاخیر را تا حدی معینی می توان کم کرد (۳ یا ۴ میلی ثانیه) و کم کردن بیش از حد آن به دلیل گشتاور مشخص موتور نتنها باعث افزایش سرعت نمی شود بلکه مانع از استارت موتور و در نتیجه چرخش آن خواهد شد.

نکات خیلی زیادی باقی موند که بخاطر محدودیت های متعدد حداقل تو این پست که موفق به ذکرشون نشدم. اما شما با امتحان کردن این کد و راه اندازی موتورتون مطمئنا این نکات رو به صورت عملی تجربه خواهید کرد.

موفق باشید

[+] نوشته شده توسط نیما در 0:40 | |

آموزش ساخت ربات (برنامه نویسی 1)

سلام دوستان. از امروز دیگه قرار شد برنامه کنترل کننده موتورها و.. رو تحت کامپایلر BASCOM آموزش بدم. البته فکر کنم با شیوه آموزشی من آشنا شده باشید! من کد رو یه جا کپی و پیست نمی کنم بعد هم بگم یا علی خودتون بفهمید چی شد! نخیر من کد رو به چند قسمت تقسیم می کنم و هر قسمت رو بعد از نوشتن، به صورت خط به خط تحلیل می کنم. حالا این از اولین نمونه:

امروز می خواهیم برنامه ای بنویسیم که بوسیله اون بشه استپر موتورهامون رو راه اندازی کنیم (عین همین روش رو باید در برنامه اصلی ربات استفاده کنیم) :

$crystal = 1000000
$regfile = "m32def.dat"

Config Portb = Output
Config Portc = Output

Dim A As Byte
Dim B As Byte

B = &B10001000
A = &B10001000

Do
  Rotate A , Left
  Portb = A

  Rotate B , Right
  Portc = B

  Waitms 15
Loop

End

خوب حالا خط به خط تحلیل می کنیم. البته خوب یادمه توضیحات کاملی رو در مورد کدهای استفاده شده در چهار خط اول در پست های "آموزش ساخت ربات (میکرو کنترلر 1 - 2 - 3 - 4) دادم. پس اگه یادتون رفته بهشون دوباره سر بزنید.

Dim A As Byte
Dim B As Byte

کلا در زبان های خانواده بیسیک که کامپایلر BASCOM هم از اون استفاده می کنه، از کلمات Dim و as به صورت Dim varname as type برای تعریف متغیر استفاده می شه، که varname نام متغیر و type نوع متغیر هستش. در اینجا دو متغیر به نامهای A و B با نوع Byte معرفی شدن (هر بایت از ۸ بیت تشکیل شده)

B = &B10001000
A = &B10001000

استفاده از " مقدار = نام متغیر " که برای همه قابل درکه (یعنی یک مقدار رو داخل متغیر بریزیم) اما در اینجا بجای مقدار از &B10001000 استفاده شده. برای قرار دادن مقادیر به صورت باینری در یک متغیر (در این زبان) باید مقدار باینری رو بعد از B& بنویسم. در اینجا، هم در A و هم در B مقدار باینری ۱۰۰۰۱۰۰۰ معادل دهدهی ۱۳۶ رو قرار دادیم. که دلیلش رو توضیح خواهم داد.

می خواستم کل این کد رو همین جلسه تحلیل کنم اما این چند خط باقی مونده خودش همینقدر جا میگیره. منم که خوب می دونم مطلب طولانی اصلا خریدار نداره . برای همین ادامه این پست در جلسه آینده. راستی منتظر نظرات سازنده شما هستم. فعلا بای

[+] نوشته شده توسط نیما در 12:46 | |

آموزش ساخت ربات (پروگرمر)

بچه ها سلام. اگر یکم تاخیر می کنم ببخشید! آخه دارم رو یه سیستم "معرفی کتاب جدید" برا وبلاگ کار می کنم، فکر کنم چیز قشنگی بشه و بزودی همین کنار ملاحضه اش خواهید کرد :).
اما از امروز می خوایم مباحث مربوط به میکرو کنترلر رو شروع کنیم. اگر از ابتدا با من همراه بودید یا اینکه مقالات قبل رو دنبال می کردید حتما یادتونه که چندتا پست اول مقدمات برنامه نویسی به زبان BASCOM برای میکروی AVR رو گفتم (اگر هم یادتون نیست لینکشون همین سمت راسته!). مدار ایجاد ولتاژ مناسب کار میکرو (۵ولت) با استفاده از رگولاتور رو هم که تو پست قبل به همراه لینک دانلود کامپایلر BASCOM-AVR گذاشتم (کرکش رو هم امروز آوردم ). بنابراین این جلسه می خوام نحوه ساخت پروگرمر برای میکروهای AVR رو آموزش بدم تا براحتی بتونید کدهایی که من میگم یا خودتون دارید رو روی میکرو بار کنید و بتونید به صورت کاملا عملی کار رو تجربه کنید...

ساخت پروگرمر STK200\300:
مدار این پروگرمر در چند نوع مختلف توسط آی سی بافر 74HC244 موجود هستش. اما مدلی رو که من الان میخوام آموزش بدم ساده ترین نوع موجود و بدون آی سی بافر هستش. برای ساخت این پروگرمر فقط به وسایل زیر احتیاج دارید:

  1. یک عدد سوکت ۲۵ پین، پورت Parallel یا موازی کامپوتر (از نوع نر)
  2. یک عدد قاب سوکت ذکر شده در صورت تمایل
  3. چند رشته سیم. البته پیشنهاد می کنم از سیم های فلت ۱۰ تایی استفاده کنید.
  4. یک عدد پایه محافظ میکرو ۴۰ پایه
  5. یک عدد میکروکنترلر AVR. پیشنهاد من از نوع ATmega32L/32 هستش.
  6. سایر موارد لازم مثل هویه، سیم قلع، فیبرمدار و....

شکل مقابل پین های سوکت پورت موازی رو با به صورت شماره گذاری از پین ۱ تا ۲۵ و نحوه اتصال پینهای اون به پایه های میکرو نشون میده. توضیح استفاده هرکدوم از این پینها خارج از بحث ماست فقط بدونید که پینهای ۱۸تا۲۵ باید به زمین وصل بشن و پین ۲-۹ هم مربوط به ۸ بیت موازی هستند.

تصویر پایه های میکروی AVR به همراه اسمشون رو قبلا در پست 13 گذاشتم، ببینیدش که در درک شکل بالا خیلی کمکتون می کنه.. با این حال به علت اهمیت بازم میگم:  پینهای شماره ۱۸الی۲۵ سوکت رو بهم و سپس به GND میکرو که پایه شماره ۱۱ اون هست وصل کنید و بعد پایه شماره ۱۱ میکرو رو هم به سر منفی منبع وصل کنید به همین ترتیب، پین شماره ۱۰ سوکت به MISO یا پایه ۷ میکرو، پین شماره ۹ سوکت به RESET یا پایه ۹ میکرو، پین شماره ۷ سوکت به MOSI یا پایه ۶ میکرو، پین شماره ۶ سوکت به SCK یا پایه ۸ میکرو وصل کنید و در آخر VCC یا پایه ۱۰ میکرو رو هم به سر مثبت منبع وصل کنید.   بخش سخت افزاری پروگرمر شما به همین سادگی آماده شد.

برای استفاده از این پروگرمر باید به روش زیر نوع پروگرمر خودتون رو به کامپایلر BASCOM معرفی کنید:

BASCOM-AVR > Options > Programmer >> Programmer = STK200\300 Programmer

بعد از انجام مراحل بالا و تکمیل پروگرمرتان برای اطمینان از صحت کار می توانید در محیط کامپایلر دگمه  را فشار دهید. در صورت ظاهر نشدن پیام مقابل  و نمایش صفحه ای جدید که در بالای آن مشخصات میکروی شما نوشته شده بدانید که پروگرمر شما به درستی کار می کند. در غیر این صورت تمام موارد از جملا ترتیب صحیح اتصال سیمها و وصل بودن ولتاژ مناسب و.. را چک کنید. این مرحله یکی از مراحلی است که امکان جواب ندادن در اون خیلی زیاده بنابراین در صورت جواب نگرفتن اصلا عصبانی نشید و بیاید تا با هم مشکل رو حل کنیم .

اینم لینک دانلود کرک های برنامه BASCOM-AVR که سری پیش گذاشته بودم:


[+] نوشته شده توسط نیما در 23:44 | |

آموزش ساخت ربات (رگولاتور)

دوستان خوبم سلام.
می خواستم از این پست آمزشهای نرم افزاری و کار با  میکروکنترلر رو شروع کنم اما یادم افتاد یه بخش الکتریکی نسبتا مهم رو جا انداختم که البته بهترین زمان رو کردنش همین الان بود:

شاید بدونید که ولتاژهای عملیاتی میکروکنترلر AVR نوع ATmega32 از ۴.۵ تا ۵.۵ ولت و نوع ATmega32L از ۲.۷ تا ۵.۵ هستش، اما ولتاژ کاری موتورهای پله ای موجود در بازار معمولا ۱۲ و همچنین ممکنه منبع تغذیه ای که در اختیار داریم یا در اختیار ما میگذارن (منظورم مسابقاته!) ممکنه اصلا تو این رنج نباشه! برای ایجاد رنج دلخواه خودمون از قطعه ای بنام رگولاتور استفاده می کنیم که فعلا یه توضیح کوچیک از اون داشته باشید:

IC های رگولاتور۱: به تازگی آی-سی هایی عرضه شده که جانشین یک مدار رگولاتور شده و دارای امتیازاتی می باشد، به عنوان نمونه در صورت اتصال کوتاه شدن خروجی یا بار بیش از اندازه آی-سی محافظت شده و همچنین اگر آی-سی بسیار داغ شود مدار حفاظتی داخل آی-سی آن را خاموش خواهد کرد و این قطع ولتاژ خروجی تا زمانی ادامه پیدا خواهد کرد که آی-سی دوباره خنک شود. حجم کم این آی-سی ها نیز از امتیازات آنها به شمار می رود. در واقع وقتی شما از این IC در مدار خود استفاده کنید به میزان زیادی در وقت و پول خود صرفه جویی کرده اید. یک نمونه از این IC ها سری 78xx می باشد که سه پایه داشته و بسیار شبیه به ترانزیستور می باشد. ولتاژهای خروجی آنها نیز ثابت می باشد. بجای XX هر شماره ای روی بدنه IC نوشته شده باشد ولتاژ خروجی آن خواهد بود. جریان خروجی این IC ها یک آمپر می باشد و لازم است در این جریان رادیاتور مناسبی به IC متصل شود. در شکل زیر یک مدار رگولاتور به همراه دو خازن برای از بین بردن نوسانات نشان داده شده است. (در حالت عادی می توان خازن ها را حذف کرد)

البته با توجه به آمپراژ خروجی رگولاتور توجه داشته باشید نباید استپ موتورمون رو به لگولاتور وصل کنیم بلکه باید ولتاژ استپر موتورمون رو به صورت مستقیم از ۱۲-ولت و تغذیه میکروکنترلر و مدار سنسورهامون رو (که قبلا نشون دادیم) از خروجی رگولاتور بگیریم.

راستی پاراگراف ۱ رو عینا از روی کتاب "۵۰ مدار علمی منبع تغذیه" تالیف ناصر بهنوا نوشتم. در این مقاله می خواستم با بستن مدار رگولاتور، از پست بعد که کار با میکرو رو شروع می کنم دیگه مشکل تغذیه میکرو رو نداشته باشید. که البته جلسه بعد دوباره در مورد پایه های میکرو بیشتر توضیح خواهم داد.

راستی این هم لینک کامپایلر BASCOM که قولش رو داده بودم! پس دیگه تمام مواد لازم برای آموزشهای میکروکنترلر کاملا محیاست:

BASCOM software page
BASCOM-AVR Download

[+] نوشته شده توسط نیما در 21:23 | |

آموزش ساخت ربات (درایور)

دوستان با محبت من سلام . اول از همه یه تشکر جانانه بکنم از تمام کسانی که تو این مدت نسبت به من لطف داشت (یا نداشتن) و با من همراه بودن. بالاخره ما وبلاگ نویسها هستیم و شما بچه های با مرام، فقط امیدوارم بتونم توری رضایت شمارو جلب کنم که این محبتها ادامه داشته باشه (ایشالله) حالا بریم سر بحث خودمون:

علت تعدد سیمهای استپر موتور رو فهمیدیم و دونستیم چطور باید این سیمها ۰ و ۱ بفرستیم تا باعث حرکت موتور بشیم. همچنین در قسمتهای اولیه آموزش ساخت ربات (میکروکنترلر) فهمیدیم که میکرو دارای تعدادی پورت هستش که هر کدوم از این پورتها از ۸ تا بیت تشکیل شده و میشه این بیتها رو تغییر داد (۰ و ۱ کرد). خوب حالا حتما فکر می کنید میشه چهارتا سیم موتور رو به چهارتا پین از یه پورت (دلخواه) میکرو وصل کنیم و با تغییر متناوب بیتها (۰۰۰۱ ، ۰۰۱۰ و...) می تونیم باعث چرخش موتورمون بشیم.
اما واقعیت اینه که کمتر مصرف کننده ای رو میشه به صورت مستقیم به پایه های میکرو وصل کرد. علتش هم اینه که شایه های میکرو نمی تونن بیشتر از ۲۰ میلی آمپر رو سینک کنند (عبور بدن).

برای مثال فرض کنید یک LED داریم با آمپراژ مصرفی 50mA ، اگر سر مثبت اون رو به ولتاژ وصل کنیم و سر منفی اون رو به یه پین از میکرو وصل کنیم و اون پین رو صفر کنیم (به معنی GND کردن اون) باعث سوختن حداقل همون پین میکرومون میشیم. این بخاطر جریان کشیدن بیش از توان میکرو هستش، برای همین باید بین پین و پایه منفی LED یا پایه LED و سر مثبت منبع یه مقاومت مناسب قرار بدم. همین اتفاق در مورد استپر موتور صادقه فقط با مقیاس بزرگتر که دیگه جای شبه ای باقی نمیزاره به سوسک شدن میکروتون .

 برای جلوگیری از این پدیده از آیسی های رابط مخصوصی استفاده می کنند که اصتلاحا درایور نام دارند. باوجود تنوع زیاد درایور ها من از مدل ULN2803 که فکر می کنم یکی از رایجترین نوع برای ساخت ربات مسیریاب هستش استفاده می کنم. این درایور دارای ۱۸ پایه هستش. همونطور که در شماتیک درونی IC مشاهده می کنید پایه ۹ سر gnd و پایه ۱۰ سر vcc هستش و پایه های ۱ تا ۸ ورودی (در اینجا از میکرو) و پایه های ۱۱ تا ۱۸ خروجی (در اینجا به موتور) این آی سی هستند. در شکل نحوه رابط قرار دادن این آی سی بین ۴ پایه میکرو و ۴ سیم موتور رو مشاهده می کنید. راستی در این IC، پایه ۱۸ خروجی پایه ۱، پایه ۱۷ خروجی ۲، ۱۶ خروجی ۳ و... می باشد.

البته همونطور که در قسمت کنترل استپ موتور اشاره کردم بیت های ارائه شده در جدولهای پست قبل باید به صورت نقیض به موتور ارسال بشن. مثلا ۰۰۰۱ که از میکرو میاد باید به صورت ۱۱۱۱۰ به موتور ارسال بشه، چون می خواهیم سیمهای استپر رو به ترتیب ۱ های جدول GND کنیم و صفر به معنی GND هست نه ۱ (قبلا کفته بودم) !!!   یکی از کارهای مهم این IC هم همین هستش و خروجی های میکروی مارو که طبق جدول های پست قبل هست نقیض (NOT) میکنه و به موتور میفرسته.در ضمن از اونجایی که این درایور ۸ تا ورودی و ۸ تا خروجی داره، ما میتونیم هر دوتا موتورمون رو (برا مسیریاب ۲ تا استپر موتور لازم داریم) فقط با یه درایور راه بندازیم. ۴ تا ورودی و ۴ تا خروجی برای ۱ موتور و یه جفت ۴ تایی باقی مونده هم برای موتور دوم. مثل شکل قبل.

راستی استقبال دوستان از دوره آموزشی شبيه سازی فوتبال و امداد ربوکاپ واقعا عالی بوده و فکر می کنم حتی از ظرفیت لازم هم یه چیزی فراتر. دوستانی که اعلام آمادگی کرده بودن تا چند روز آینده منتظر اخبار جدید در همین زمینه باشن (از طریق ایمیلتون). ایشالله از جلسات بعد با میکرو کار خواهیم کرد. پس فعلا بای

[+] نوشته شده توسط نیما در 12:0 | |

آموزش ساخت ربات (موتور پله ای 3)

سلام بچه ها . جلسه قبل مطالبی به عنوان پیش زمینه برای کنترل یا راه اندازی استپ موتور گفتم اما مطالبی که این جلسه میگم، کاملا عملی در مراحل مختلف از جمله نوشتن برنامه راه اندازی موتور پله ای، در میکرو کاربرد داره:

اگر چهار پله d, c ,b ,a رو که هر کدوم به صورت چهار بیت در جدول نشون داده ش
سیم۱ سیم۲ سیم ۳ سیم ۴ شماره پله
0 0 0 1 1
0 0 1 0 2
0 1 0 0 3
1 0 0 0 4
دن رو به صورت مداوم به یک استپ موتور القا کنیم  (شبیه کیشدن GND به سرعت روی چهار سیم موتور) باعث حرکت منظم موتور در یک جهت خواهیم شد. این نوع القا بیتها،حرکت یک بیتی نام داره. یعنی در هر پله فقط ۱ بیت روشن یا ۱ هستش. در ضمن القا بیت ها طبق این جدول و جداول بعدی مرحله جدایی هست که باید با توسط میکرو انجام بگیره (بعدا توضیح میدم چطور).

نو دیگری از القا پله به موتور وجود داره که حرکت دوبیتی نام داره. هم
سیم۱ سیم۲ سیم ۳ سیم ۴ شماره پله
1 0 0 1 1
0 0 1 1 2
0 1 1 0 3
1 1 0 0 4
ونطور که در جدول می بینید در این نوع حرکت در یک پله همزمان دوبیت ۱ هستند (انگار همزمان دو سیم رو به زمین اتصال بدیم). اگر این مدل رو مثل بالایی به صورت مداوم تکرار کنیم باز هم باعث چرخش موتور خواهیم شد اما در این حالت گشتاور و جریان مصورفی موتور نزدیک ۲ برابر خواهد شد. افزایش گشتاور به معنی افزایش قدرت چرخانندگی (نه سرعت چرخش) هستش.

نوع دیگری از القا پله به استپ موتور وجود داره بنام
سیم۱ سیم۲ سیم ۳ سیم ۴ شماره پله
0 0 0 1 1
0 0 1 1 2
0 0 1 0 3
0 1 1 0 4
0 1 0 0 5
1 1 0 0 6
1 0 0 0 7
1 0 0 1 8
حرکت نیم پله. همونطور که از اسمش پیداست این مدل باعث چرخش موتور به اندازه نیم پله خواهد شد. مثلا اگر زاویه موتوری ۱.۸ درجه هست هر پله از این مدل باعث چرخش موتور به اندازه ۰.۹ درجه خواهد شد. از ویژگی های این روش افزایش حساسیت استپر موتور ما هستش.

لازم به ذکره که اگر بیت های این سه جدول رو از بالا به پایین القا کنیم موتور در جهت ساعتگرد و اگر از پایین به بالا اجرا کینم در جهت پادساعتگرد خواهد چرخید. نحوه اعمال این بیتها به موتور توسط میکروپروسسور رو در پستهای بعدی شرح خواهم داد.

نظر پیشنهاد و انتقاد (که نمی پذیریم ) یادتون نره! فعلا یا حق.

[+] نوشته شده توسط نیما در 16:22 | |

آموزش ساخت ربات (موتور پله ای 2)

سلام. کجا بودم؟ آها :

در مورد استپ های ۵ سیمه و ۶ سیمه صحبت می کردم! در مدل ۵ تایی فقط یک سیم مشترک (COM) وجود داره ولی در مدل ۶ تایی ۲ سیم مشترک وجود داره که باید به ولتاز وصل بشن (سیم یا سیمهای مشترک معمولا قرمز هستند ولی بازم از فروشنده بپرسید) یعنی در هر دو در آخر فقط ۴ تا سیم باقی میمونه که کاربردشون رو خواهم گفت. ۱ تفاوت عمده دارن که اون رو به موقعش توضیح میدم.

نحوه تست سالم بودن موتور پله ای: برای اینکار در مرحله اول باید مطمئن بشیم هیچکدوم از سیمها به هم اتصال ندارن (بهم نچسبیدن :)) حالا با دست شفت رو بچرخونید، می بینید که راحت و روان می چرخه! حالا تمام سیم ها رو به هم اتصال بدید و سعی کنید دوباره شفت رو با دست بچرخونید، اگر یه مقاومت یا سفتی نسبت به حالت قبل احساس کردید بدونید حتما استپتون سالمه! (بدون نیاز به هیچ منبع تغذیه)

یافتن ترتیب صحیح سیمها:  پیدا کردن این ترتیب خیلی مهمه و اگر رعایت نشه موتور ما درست نخواهد چرخید و مارو به اشتباه می اندازه. برای اینکار ابتدا سیم (یا سیمهای) مشترک رو به ولتاژ مورد نیاز موتور (روی بدنه موتور می نویسن ولی معمولا ۱۲ ولت) وصل می کنیم. بعد از میون ۴ تا سیم باقیمونده یکی رو انتخاب می کنیم و سر منفی یا زمین منبع رو به اون اتصال می دیم. اینکار باعث یه چرخش کوچیک میشه. یه کاغذ گرد یا یه تیکه چوب به شفت ببندین تا چرخش های ریز معلوم بشه.  این چرخش کوچیک در واقع همون یک پله موتور به اندازه زاویه موتور هستش. حالا سر منفی (از این به بعد میگم GND، یا گراند کردن) رو به یکی از ۳ تا سیم دیگه اتصال بدید. اگر از این ۳ تا سیم، سیم صحیح رو انتخاب کرده باشید یه گردش کوچیک (به اندازه قبلی) در ادامه حرکت قبلی می بینید ولی اگر خطا باشه گردش معکوس یا بیش از حد (۲ یا ۳ پله) خواهید داشت. اگر سیم خطا بود دوباره زمین رو به سیم اول اتصال بدید و همون کار رو با ۲ سیم دیگه تکرار کیند تا زمانی که سیم صحیح پیدا بشه. وقتی سیم صحیح پیدا شد سیم اول رو کنار میگزارید و مراحل رو از اول برای سه سیم باقیمونده انجام میدید تا ترتیب ۴ تا سیم رو پشت سر هم پیدا کنید.

نحوه کنترل موتور پله ای: یادتونه که برای یافتن ترتیب سیمها چکار می کردیم؟ بله سیم (سیمهای) مشترک رو به سر مثبت منبع وصل می کردیم و با اتصال دادن هر سیم به GND باعث چرخش یک پله ای موتور می شدیم. حالا اگر این چهارتا سیم رو به ترتیب صحیح کنار هم قرار بدیم و سر منفی منبع رو به ترتیب هی روی اونها بکشیم، می بینیم که موتور -هرچند دست و پا شکسته- شروع به چرخش می کنه! (البته باید ترتیب سیمها کاملا صحیح باشه)
حالا فرض کنی چهار تا سیم رو به صورت چهار بیت -بیت فقط میتونه ۰ یا ۱ باشه- در نظر بگیریم و ۱ شدن هر کدوم به معنی اتصال اون به GND باشه (البته اینجا شما فقط برای درک بهتر این رو فرض کنید  چون در واقعیت برعکسه یعنی ۰ به معنی گراند شدن هستش). مثلا ۰۰۰۱ یعنی سیم اول  گراند شده و ۰۱۰۰ یعنی سیم سوم گراند شده.

این قسمت فقط پیش زمینه ای بود برای درک نحوه کنترل استپ. پس از دوستان حرفه ای که این مطالب به دردشون نخورد معذرت می خوام(بگو کدومش به درد میخوره !) جلسه بعد نحوه کنترل استپ به چند روش مختلف رو آموزش میدم که یکی از دوست داشتنی ترین مباحثه! 
راستی دارم حس می کنم استقبال کم شده . اگه نظر ندین قهر میشما! . فعلا یا حق.

[+] نوشته شده توسط نیما در 1:35 | |

آموزش ساخت ربات (موتور پله ای 1)

دوستان گرام سلام . اول از همه بگم فراخوان پست قبل (حتما بخونیدش) هنوز ادامه داره و با حساب ۲X۲ تا ۴ تایی که کردم تا حالا، با خودم ۱۳ - ۱۴ نفری اعلام آمادگی کردن. خواهشی که از شما دارم اینه که هر چه زودتر این خبر رو به دوستان علاقمند خودتون هم نشون بدید تا ایشاالله بتونیم هرچه سریعتر گروه رو تشکیل بدیم و از این کلاسها استفاده کنیم.

دوم اینکه همونطور که می بینید ۲ نفر دیگه (آقا مغداد و آقا دانیال) به جمع نویسندگان وبلاگ اضافه شدن، که امیدوارم باعث هرچه پربارتر مطالب شدن وبلاگ بشن. به هرحال به هردوشون خوش آمد میگیم. البته با اینکه آقایون از دوستان فاضل خان هستند و به سفارش خودشم add اشون کردم ولی امیدوارم مثل خودش کم کاری نکنن که اون موقع وضع یه جورایی فرق خواهد کرد .

سوم اینکه امروز می خوام راجع به موتورهای پله ای (Stepper Motor) که بخش مکانیکی و نیروی محرکه ربوت مارو تشکیل خواهد داد، بنویسم. البته مقالات خیلی زیادی تو نت راجع به نحوه عملکرد استپ موتور (تریپ مغناطیس و...) و یا ساختار درونی اون (سیم پیچ و آهنربا و...) وجود داره اما چیزی که من الان می خوام بگم یه توضیح مختصر به زبان عامیانه ست:

استپ موتور هم برگرفته از اسمش یه نوع موتوره مثل موتورهای DC (همون آمرمیچر خودمون) که تولید حرکت دورانی می کنه. با این تفاوت که استپ موتورها دارای حرکت دقیق و حساب شده تری هستند. این موتورها به صورت درجه ای دوران می کنند و با درجه های مختلف در بازار موجود هستند.

در واقع واژه پله به معنی چرخش به اندازه درجه تعریف شده موتور هستش. مثلا استپ موتوری با درجه ۱.۸ باید ۲۰۰ پله انجام بده تا ۳۶۰ درجه یا یک دور کامل بچرخه (۱.۸X۲۰۰ = ۳۶۰) و یک استپ با درجه ۱۵ فقط باید ۲۴ پله برای یک دور کامل انجام بده (۲۴X۱۵=۳۶۰ ). این ویژگی فوائد بسیار زیادی داره از جمله امکان کنترل سرعت.
زاويه پله پله در دور
0.72 500
1.8 200
2.0 180
2.5 144
5.0 72
7.5 48
15 24

اما موتور DC چطور؟ وقتی بهش ولتاژ میدیم از یه سرعت آروم شروع می کنه و شتاب می گیره و با قطع کردن ولتاژ تازه می خواد شتاب منفی بگیره و معلوم نیست چند ثانیه بعد از قطع ولتاژ از چرخش بایسته. با این تفاسیر فکر می کنید تو هارددیسک یا دیسکت درایوها ویا ویدئو ها از کدوم موتور استفاده می کنند؟ در رباتیک بسته به نوع شرائط از هر دو نوع موتور استفاده میشه که شرایط ما فعلا با ستپ جوره!

موتورهای پله ای موجود در بازار معمولا دونوع ۵ یا ۶ سیمه دارند که علت تعدد سیمها و نحوه کنترل و راه اندازی این موتور می مونه برای جلسه بعد. راستی بگم این استپ موتورها قیمت بالایی هم دارن اما من یه جفت کوچیک آزمایشگاهیشو که انگار کارخونه ساخته بودشون برا من، پیدا کردم (فقط به قیمت جفتی ۲ تومن!). اگر شما هم خواستسد در خدمتم باهام تماس بگیرید.

[+] نوشته شده توسط نیما در 14:47 | |

ارائه دوره آموزشی شبيه سازی فوتبال و امداد ربوکاپ

سلام. تعجب کردید اینقدر زود اومدم ! نه ایندفه یه چیز مهم دارم برای خوره های روباتیک:

چند روز پیش ایمیلی از طرف سایت iranianrobot.com به دستم رسید و وقتی به سایت سر زدم و فهمیدم "حلی کاپ" ئی درمیون بوده و من (حداقل برای تماشا هم که شده) از دستش دادم خیلی ناراحت شدم اما بعد یه خبر کوچیک نظرمو جلب کرد:
"ارائه دوره آموزشی شبيه سازی فوتبال و امداد ربوکاپ برای مدارس و گروه ها: گروهی از مربيان مجرب در زمينه شبيه سازی فوتبال ربوکاپ، با پشتوانه چندين حضورموفقيت آميز در مسابقات ربوکاپ آماده انتقال تجربيات خود به شما ميباشند...."

پیگیر شدم و متوجه شدم این دوستان دوره هایی برگزار می کنن با محتوای آموزشی زیر:

  • 20 ساعت آموزش لينوکس
  • 60 ساعت آموزش برنامه نويسی ++C
  • 10 ساعت آشنايی مقدماتی با Server مسابقات ربوکاپ (2D Soccer، 3D Soccer و يا Rescue) و آماده سازی اوليه يک تيم

این دوره باید به صورت گروهی (۲۰ نفره) برگزار بشه مثلا گروه با هماهنگی مدرسه یا دانشگاه. اما برای خیلی از ما این یا اصلا شدنی نیست یا هماهنگیش خیلی وقت میبره! برا همین یه فراخوان گزاشتم تا از شما دوستان نظرخواهی کنم ببینم اصلا چقدر آدم پایه پیدا میشه!

راستی طی پرس وجوی ایمیلی با مسئولین این دوره متوجه شدم هزینه این دوره برای هر نفر فقط ۴۵ هزارتومن ناقابل تموم میشه! باور کنید باوجود اینکه بنظر پول کمی نیست اما هیچ جای دیگه حتی ۲۰ ساعت آموزش لینوکسش رو هم با این قیمت ندارن! (می تونید بپرسید) همچنین محدودیتی برای دختر یا پسر بودن شما وجود نداره و مشکلی از لحاظ مختلط بودن کلاسها نیست. این دوره ۹۰ ساعته در قالب ۴۵ جلسه ۲ ساعته ارائه خواهد شد که با توافق طرفین می تونیم تعداد روز در هفته و ساعتشو تغییر بدیم. فقط یه مشکلی هست و اون مکان آموزشه! شما از هرجایی معرفی میشید (مثلا دانشگاه) مکانشم باید همونجا تامین و... ولی گفتن خودشمون هم میتونن یجایی پیدا کنن اما اونطوری که تو ایمیل گفتن مثل اینکه خرج داره! با این حال فکر نیم کنم نهایتا بیشتر از نفری ۵۰ هزار تومن بشه( بازم می ارزه!) شما دوستان هم اگه سوال دیگه ای دارید می تونید مثل من با ایمیل info@iranianrobot.com تماس بگیرید. دوستان بسیار با محبتی به سرعت به شما جواب میدن، فقط اگه سوالتون به درد بقیه هم میخورد تو نظرات بنویسید که بقیه هم با خبر بشن .

باخودم می گفتم: اگر قراره سطحی و محض اطلاع بیایم سراغ روباتیک که هیچی اما اگه خیلی علاقه داریم و دوست داریم در آخر به یه جایی حادقل کوچیکی برسیم، فکر کنم الان بهترین موقعیته! برای کار رباتیک حتما باید تیمی عمل کرد چه بهتر که با مفاهیم ایجاد تیم آشنا بشیم و شاید بچهای تیم مون رو هم از تو همین گروه پیدا کنیم. خلاصه هرجور فکر می کنم می بینم از همه لحاظ می ارزه و قابل بی خیال شدن نیست نظر شما چیه؟

اگر مايل به همراهمي ما براي تشكيل اين گروه 20 نفره هستيد لطفا ميزان علاقه خودتون رو با شركت در اين نظرسنجي اعلام كنيد. بعد از شرکت در نظر سنجی لطفا نام و ایمیل خودتون رو از طریق فرم زیر برام بفرستید تا درصورت لزوم با شما تماس بگیرم.





Powered by WebGozar

از وب گذر متشکرم!

[+] نوشته شده توسط نیما در 15:55 | |

آموزش ساخت ربات (مدار سنسورها 2)

سلام. همه خوبید؟ خداروشکر. راستی از لطفتون به پست قبلی ممنونم . خوب جلسه پیش مدار سنسورها رو نشون دادم اما توضیحات تکمیلی موندش که حالا میگم.
ببینید کلا هرچقدر تعداد و تنوع سنسورها در یه ربات بیشتر باشه بالطبع عملکرد اون خیلی بهتر و عاقلانه تر (هوشمندانه تر) بنظر خواهد رسید. البته کنترل و ایجاد ارتباط میان این سنسورها در مغز ربات (میکروکنترلر) بسیار مهم هستش و بدون یک برنامه بهینه هیچوقت این ادعا درست نخواهد بود! با این وجود همونطور که در مدل ها و مدارهای مختلف در سایت ها و وبلاگهای متعددی دیدید هرکدوم از هرچندتا سنسور که دوست داشتن استفاده کردن! از حالت مینیمم که دوسنسوره باشه گرفته تا چهارتایی و بیشتر... اما همونطور که گفتم هر چقدر تعداد این سنسورها بیشتر باشه برای بهینه تر کردن کارایی اونها در میکروکنترلر باید برنامه پیچیده تری رو نوشت. این پیچیدگی در کد یجورایی بصورت تصاعدی افزایش پیدا میکنه، ولی خوب تا سه یا چهار سنسور این تصاعد زیاد صعودی نیست و بعد از اون (۵ ۶ ۷ وو...) بیشتر خودشو نشون میده! که البته این به نحوه قرار گرفتن سنسورها هم خیلی ربط داره... با این حال من بخاطر اینکه این مقالات رو از ابتدایی ترین سطح شروع کردم سعی کردم از همون مدل ۲ سنسوره که حالت قرارگیری اون رو هم در شکل نشون دادم، استفاده کنم. بزرگترین مزیت این مدل (۲ سنسوره) این هست که کد میکروی بسیار ساده و کوتاهی داره و آموزش و فهم اون خیلی راحته و بزرگترین عیبش هم اینه که روبوت یه جورایی زیگزالی حرکت میکنه! (البته هرچقدر استانداردها به سمت ایده آل میل کنه این خطا هم کمتر میشه) که البته برای شروع عیب بزرگی نیست! در چیدمان سنسورهاتون اگر از مدل ما (۲ تایی) استفاده می کنید مثل شکل، حتما فاصله بین فرستنده و گیرنده، که معمولا ۲.۵ میلیمتر در نظر گرفته میشه (اما هرچقدر کمتر باشه حساسیت بیشتر میشه) و فاصله بین دو گیرنده (۲ نقطه سیاه) که بستگی به ضخامت خط سیاهتون داره (۱.۵ الی ۲ سانت بیشتر)، را در نظر بگیرید تا از ایجاد نقص های ذکر شده جلوگیری کنید. همچنین فاصله پک سنسورها (مجموعه فرستنده و گیرنده) از زمین نباید زیاد باشه و معمولا اون رو ۱.۵ تا ۳ سانت اختیار میکنن تا حساسیت کم نشه!

 راستی یادتون باشه برای خرید میکروی AVR Atmega32 حتما مدل L اون رو بخرید چون با وجود یکسان بودن قیمت، مل ال اون پروگرمر ساده ای داره درواقع اصلا پروگرمر نیست فقط باید چندتا پایش رو مستیم به پورت موازی وصل کنید (که بعدا شکلشو نشون میدم). پس یادتون باشه مثل من اشتباه نکیند. در مورد کامپایلر Bascom هم که چند وقت پیش برا دانلود گذاشته بودم معذرت می خوام چون متوجه شدم اصلا بدرد نمی خوره!!!. یه نسخه عالی دارم که بوقتش آپلودش می کنم.

در آخر این پست پیشنهاد می کنم اگر علاقه به ساخت ربات دارید (که اگه اینجایید حتما دارید) فقط به خواندن مطالب، پرینت و جمع آوریشون بسنده نکنید چون اصلا کافی نیست و فکر نمی کنم حتی ۱۰٪ کار عملی بازده داشته باشه... تا پست بعدی موفق باشید

[+] نوشته شده توسط نیما در 21:22 | |

آموزش ساخت ربات (مدار سنسورها)

سلام. قرار شد دیگه از سخت افزار رو شروع کینم برا همین امروز قصد دارم مدار سنسورها رو نشون بدم و کمی در موردش توضیح بدم. البته این مدار بقدری ساده هست که دیگه احتیاجی به توضیح نداره برای همین برای تکمیل مطلب کمی درمورد نکات مهم در استفاده اون در ربات و چندتا نکته در مورد انواع سنسورها بسنده می کنم. من خودم مدار پیچیده تری داشتم که در اون میشد حساسیت سنسورها رو با پتانسیومتر تنظیم کرد اما به سفارش فاضل از مدار پیشنهادی اون که خیلی هم ساده و قابل فهم هست استفاده کردیم! شکل روبرو مدار سنسورها و درواقع تنها مدار موجود در ساخت ربات ماست!

سنسورها: سنسورهای استفاده شده در این مدل رباتها سنسورهای نوری هستن که از یک فرستنده و یک گیرنده نوری تشکیل شده اند. همونطوری که در فیزیک خوندیم سطح سیاه (کلا تیره) نور رو بیشتر جذب می کنه ولی سطح سفید (روشن) نور بیشتری منعکس می کنه! اساس کار این سنسورها هم بر همین مبناست! نور (نامرئی یا مرئی) توسط فرستنده تابونده میشه و اگر سطح زیر اون تیره باشه همه نور رو جذب میکنه و گیرنده چیزی دریافت نمی کنه و اگر روشن باشه به همون صورت گیرنده بازخورد خودشو به نحوی که توضیح خواهم داد در مدار نشون میده!

گیرنده ها دو مدل هستند ترانزیستوری و مقاومتی! گیرنده های ترانزیستوری درست مثل ترانزیستور عمل می کنن و در واقع پایه بیس (B) اونها میزان نور دریافتی هستش و هرچقدر نور بگیرن جریان عبور میدن (اگه نمیدونید ترانزیستور چیه یه نگاه به کار دخترا بندازید). ولی مقاومتی ها برعکس هستند، هرچقدر نور بگیرن مقاومتشون بیشتر میشه و جریان کمتری عبور میدن. چون در ایران به علت پاک بودن قلبها سطح سفید بیشتر از سطح سیاه پیدا میشه ! من از نوع مقاومتی استفاده کردم تا، زمانی که سنسورها روی خط سیاه نرفتن مقاومت زیاد بشه و خروجی صفر به میکرو ارسال بشه.
شما میتونید با قرار دادن یه LED بجای خروجی (مانند شکل) صحت مدار و سنسورهای خودتون رو چک کنید. در حالت عادی LED روشن هست اما وقتی یه کاغد سفید جلو سنسورها بگیرین LED خواموش خواهد شد انگار به میکرو ۰ یا ۱ فرستاده میشه. این خروجی بواسطه یه مقاومت ۲۲۰ به یه پین از (مثلا) پورت B میکرو وصل میشه و محاصبات و عملیات لازم اونجا رویش صورت می گیره. البته باید توجه کنید کنار هم قرار داشتن فرستنده و گیرنده و زاویشون اهمیت داره و گرنه باعث اختلال میشه که با کمی توجه حل شدنیه!  راستی یادم باشه بهتون بگم عوامل متعددی ممکنه در کار این سنسورها اختلال ایجاد کنه مثلا لامپ های رشته ای(همین لامپ رو سقف!) یا نور زیاد خورشید! بخاطر اینکه این نورها دارای فرکانسهای مختلفی هستند که ممکنه با فرکانس سنسورهای شما یکی باشه و.... اگه یکمی پولتون زیاده پیشنهاد می کنم از نوع CNY70 بخرین(دونه ۱۰۰۰ تومن). چون گیرنده و فرستنده به صورت یه پک کوچیک هستند و حساسیت و دقت رو بینهایت افزایش میده و فکر نکنم از این بدبختیا داشته باشه اما اگه مثل من .... هیتید از مدل جفتی ۲۰۰ بخرین و کلی حال کنید......

خوب دیگه این پست خیلی طولانی شد. فعلا قطعات رو بخرین و مدار رو  روی بردبورد ببندید و امتحان کنید تا بعد.... راستی لازمه در مورد این مدار بیشتر توضیح بدم؟ (مثلا دلیل وجود ترانزیستور و....) یا همه به آنالوگ تسلط کامل دارن برعکس من! اگه لازمه خجالت نکشید و بگید، من توضیح میدم. در هر صورت نظر یادتون نره چون بدون نظر از پست بعد خبری نیست .

فعلا بای بای.

[+] نوشته شده توسط نیما در 20:14 | |

آموزش ساخت ربات (میکروکنترلر 4)

سلام. دوستان با عرض معذرت از غیبت موقت اما همونطور که قول داده بودم راْس ۲۷ام برگشتم. خوشبختانه این ترم هم مثل اینکه به خوبی و خوشی تموم شد ... اما بریم سر کار خودمون:
خوب مقدمات ایجاد یه برنامه در Bascom رو گفتم و امروز میخوام دیگه مبحث برنامه نویسی میکرو رو تموم کنم و بقیه توضیحات رو بزارم روی برنامه اصلی کنترل رباتمون (رو خود برنامه توضیح خواهم داد) و از جلسه بعد بریم تو کار سخت افزار، و اما:

پیکربندی پورتها: همونطور که در شکل مقابل می بینید میکروی AVR (مدل ATMEGA32) داری ۴۰ پایه هستش که ۳۲ تا از پایه های اون می تونه برای چهارتا پورت موجود در اون استفاده میشه. این ۴ پورت مانند شکل به صورت PA, PB, PC, PD نامگزاری شده اند که البته هر کدام از این پورتها دارای ۸ پین (۸X۴=۳۲) هستند. که درواقع هر پورت رو باید به صورت یک بایت در نظر گرفت و هر پین رو به صورت یک بیت (حتما می دونید هر بایت، ۸ بیت هستش!) فرض کرد و هر کدوم از این ۳۲ پایه میکرو مربوط به پین خاصی از یک پورت است. در Bascom نماد پورتها به صورت portx که X يکی از حروف A..D هست بکار ميره و نماد پين های هر پورت هم به صورت portx.y که در اينجا X مثل بالا هستش و y شماره پين از ۰ تا ۷ ميباشه (۰تا۷ ميشه ۸تا ). مثال:

 PortB = 10         'set portb to 10
 PortC.0 = 0        'Set pin 0 of portC to 0
 PortC.4 = 1        'Set pin 4 of PortC to 1

نکته دیگه که باید دقت کنید اینه که پورت ها یک بایتی هستند یعنی نهایت عددی که میشه در اونا قرار داد ۲(۱۱۱۱۱۱۱۱) درمبنای باینری یا ۲۵۵ در مبنای دهدهی خودمون هست. وقتی عدد ۲(۱۱۱۱۱۱۱۱) یا ۲۵۶ رو مثلا در پورت سی قرار بدیم تمام پین های این پورت ۱ میشن و اگر باز عدد ۱۷ معادل ۲(۰۰۰۱۰۰۰۱) رو در اون قرار بدیم (PortC=17) انگاه پینهای ۰ و ۴ این پورت یک خواهند شد. فکر کنم فهمیده باشید قضیه از چه قراره :) فقط باید یکم تبدیل باینری به دهدهی و برعکس رو بلد باشید... اما اگر هنوز کار میکروکنترلر رو درک نکردید و اصلا نمیدونید حالا یک شدن هر پین به چه درد می خوره اصلا نگران نباشید چون به موقع توضیح خواهم داد.

این جلسه می خواستم نحوه پیکربندی پرتها در Bascom رو توضیح بدم (مثلا کدوم پورت ورودی باشه کدوم خروجی و...) اما پیش خودم فکر کردم اصلا ممکنه بعضیها ندونن پورت چیه! پین کیه! بایت چیه! بیت  کیه!  برا همین یه توضیح مختصر دادم و از این بیشتر دیگه در مجال و توان و فضا و... ما نمی گنجه. پس پیکربندی هم میمونه برای بعد از آماده شده کد اصلی کنترل ربات که همون موقع کاربردشو در کد به صورت مثال نشون خواهم داد. اینجوری هم قابل فهم تره هم شیرین تر. تا جلسه بعد و شروع آموزش سخت افزار ربات خداحافظ دوستان.

[+] نوشته شده توسط نیما در 22:13 | |

آموزش ساخت ربات (میکروکنترلر 3)

سلام.. بچه ها خیلی عقبیم٬ تازه باید ۱ جلسه جبرانی هم بزاریم گفته باشم . پس بی مقدمه بریم سر درسمون که شروع برنامه نویسی AVR با کامپایلر Bascom بود:

بدنه یک برنامه در محیط Bascom:
(منظور از بدنه حداقل کد یک برنامه هستش بدون هیچ فرمانی)  بدنه یک برنامه در محیط Bascom شامل تعیین نوع میکرو مورد استفاده٬ کریستال٬ پایان و گزینه های اختیاری دیگری است که در زیر معرفی میشن.

معرفی میکرو:
برای شروع یک برنامه در محیط Bascom ابتدا بایستی میکروی مورد نظر تعریف گردد. چون توصیه من در استفاده از مدل ATMEGA16|32|128 بود٬ بنابراین فعلا به علت زیق در همه چی  فقط به تعریف همین ۳ مدل بسنده می کنم:

$REGFILE = VAR       'فرم کلی تعریف٫ "وار" یه رشته معرف مدل خاص میکروی مورد نظر هستش
$REGFILE =  "M16def.dat"       'MEGA 16 MCU این برا مدل
$REGFILE =  "M32def.dat"       'MEGA 32 MCU این برا مدل
$REGFILE =  "M128def.dat"     
'MEGA 128 MCU این برا مدل

کریستال:این یه نمونه کریستاله
برای مشخص کردن فرکانس کریستال (میکرو ها باید به یه قطعه خارجی بنام کریستال وصل بشن) استفاده شده برحسب هرتز از دستور CRYSTAL = X$ استفاده می نماییم X فرکانس کریستال استفاده شده بر حسب هرتز است. خوشبختانه AVR دارای یک کریستال 1MHZ داخلی هستش که واقعا یک نعمته! اما حتی برای استفاده از اون هم باید این دستور رو بکار ببریم. مثال:

$CRYSTAL = 100000        '1MHz internal
$CRYSTAL = 140000        '14MHz external

یاداشت(اختیاری): گاهی نیاز است یاداشتهایی برای اطلاعات بیشتر در برنامه اضافه کنید٬ در Bascom هم مثل بیسیک می تونید با علامت " ' " یا REM اینکارو انجام بدید. درست مثل یادداشت های اضافی که من در مثالهای قسمتهای قبل استفاده کردم! مثال:

Print "Hello World"      'این دستور بعدا معرفی میشه  
REM این هم یه مدل دیگه از یادداشت اختیاریه

همچنین در پایان هر برنامه باید از کلمه END استفاده کنید که مثل یک حلقه بی پایان عمل می کنه (مثلا در سی باید همیشه یه حلقه درست کنی. یه کار تکراری) و دلیل استفادش چه در این کامپایر و برای این میکرو و چه در سایر کامپایلرها و برای میکروهای دیگه٬ اینه که سیستم برنامه میکرو با کامپیوتر فرق فوکوله  و اگه از END یا حلقه بی پایان استفاده نکنیم برنامه همینطور میره پایین و سایر آدرس های حافظه میکرو رو به خیال ادامه برنامه میخونه که این باعث Error میشه دیگه! پس End یادتون نره!

خوب دیگه از گزینه های اجباری بدنه تغریبا چیزی نموند و برای اینجلسه هم کافیه! جلسه بعد آموزش نحوه تعریف شرط و حلقه و ... در Bascom رو داریم پس حتما مطلب رو دنبال کنید. راستی تا یادم نرفته بگم بعضی از مطالب بالا رو از رو کتاب AVR مهندس "علی کاهه" کپ زدم! همین که مرجع رو گفتم خیلی هم دلش بخواد :)). خسته نباشید.

[+] نوشته شده توسط نیما در 1:13 | |

آموزش ساخت ربات (میکروکنترلر 2)

سلام. جلسه قبل کمی در مورد میکرو و میکروی مناسب کار خودمون صحبت کردیم. این جلسه می خوام به طور کلی تر راجع به قابلیت های میکروی AVR بخصوص مدل Atmega32 صحبت کنم. بزارین بعضی از قابلیت های مهم مربوط به کار خودمون رو بصورت لیست بنویسم:

  • کارایی بالا و توان مصرف کم
  • سرعت بسیار بالا نسبت به سایر میکروها
  • 32K حافظه فلش داخلی قابل برنامه ریزی
  • پایداری حافظه فلش: قابلیت 10000 بار نوشتن و پاک کردن
  • 2K حافظه داخلی SRAM
  • 2 تایمر-کانتر 8 بیتی و یک تایمر-کانتر 16 بیتی
  • .....

برنامه نویسی Atmega32:
همونطور که گفته بودم برای برنامه نویسی این میکرو از Basic و کامپایلر معروف Bascom استفاده می کنم (لینک دانلود این کامپایر رو آخر پست گذاشتم). چون من می خوام خیلی گزرا به چند تکنیک وتابع این زبان اون که در برنامه نویسی رباتمون استفاده میشه اشاره کنم اصلا وقت نمیشه درباره یکی یکی ابزارهای محیط این کامپایلر توضیح بدم. اما در آینده با آموزش پروپه های دیگه حتما اونا رو هم پوشش خواهم داد.

همونطور می بینید فقط 7 تا منو از قرار File, Edit, Program, Options, Tools, Window, Help داره. منوی File, Edit, Window, Help تمام برنامه های ویندوز که با هم مو نمی زنه پس اینا هیچ :). منوی Options هم که از اسمش پیداست برای تنضیمات کامپایلر و معرفی نوع و مدل میکرو و.. هست که البته هنگام پروگرام کردن میکرومون سراغش میایم و توضیحات کافی رو میدم. می مونه منوی Program که درواقع گزینه هایی برای کامپایل کد, Syntax Check و شبیه سازی داره که به مجرد شروع برنامه نویسی باهمینا باید سروکله بزنیم.

حتما Bascom رو دانلود کنید و یکم وارسیش کنید چون پس فردا که برگشتم دیگه تفره نمی رم و دیگه آموزش کد نویسی رو خواهیم داشت که اون هم یکی دو جلسه بیشتر طول نمی کشه و بعد میریم سر مباحث الکترونیکی رباتمون. اما باور کنبد لذت برنامه نویسی و سروکله زدن با میکرو اونم AVR چیزی کم از ساخت ربوت نداره! تا پس فردا یا حق.

bascomavr.zip ( Version 2.16i ) ( 2.7MB )

[+] نوشته شده توسط نیما در 14:22 | |

آموزش ساخت ربات (میکروکنترلر)

سلام ـ قرار شد برای ساخت ربات تفعلی بزنیمبه میکروکنترلر٬پس بی مقدمه بریم سر اصل مطلب:

میکروکنترلر چیست: میکروکنترلر رو درواقع می توان یه کامپیوتر کوچولو در قالب یه چیپ برای کنترل وسایل الکترونیکی (در اینجا ربات) تلقی کرد. تفاوت میکروکنترلر با میکروپروسسور در اینه که میکروکنترلر دارای یک CPU ٫مقدار محدودی RAM ٬ ROM ٬ پورت های I/O و تایمر در درون خود می باشد در صورتی که میکروپروسسور فقط یه CPU هست و شما باید RAM, ROM ,... رو به صورت اجزای جانبی به اون متصل کنید (درست مثل CPU کامپیوتر). برای همین میکروکنترلرها تک منظوره ولی میکروپروسسورها همه منظوره هستند. با این تفاسیر میکروکنترلرها دارای کارایی های خاص خودشون مثلا در ماشین لباسشویی٬ ماکروویو٬ تلفن و البته ربات هاو... هستند یعنی جایی که استفاده از میکروپروسسور نه از نظر کارایی و نه از نظر اقتصادی عقلانیه! تازه فهمیدیم میکرو یعنی چی :)

انتخاب میکرو(مناسب ربات ما): در انتخاب میکرو فاکتورهای زیادی دخیله: ۱-هزینه  ۲-سرعت  ۳-کارایی و قابلیت ها  ۴-راحتی کار با آن و... در حال حاضر در بازار ایران میکروهای متنوعی ازجمله ۸۰۵۱ از اینتل٬ PIC از میکروچیپ تکنولوژی و AVR از شرکت ATMEL هواخواهان زیادی دارن. همچنین آمارها نشون داده که در ساخت ربات اکثرا از PIC استفاده شده (در آمریکا :)) ولی من می خوام این پروژه رو با AVR انجام بدم چون تقریبا کم هزینه (۳۵۰۰) هستش٬ هم کارایی های مناسبی داره٬ هم برنامه نویسی برا اون آسونه (هم C داره هم Basic تازه کلی هم نرم افزار Emulator, Simulator ,... داره) و تازه پروگرمر ائن بسیار ساده و کم خرجه. با این حال فکر نمی کنم نوع میکرو تفاوتی در نقشه مدار و.. بزاره بجز کد و کامپایلر میکرو که سعی می کنم مال PIC یا حتی ۸۰۵۱ رو هم در کنار AVR زمیمه کنم. پس کسایی که با AVR کار نکردن اصلا نگران نباشن.

راستی یادم رفت بگم برا این ربات از AVR مدل Atmega32 استفاده خواهم کرد (مفت ۳۵۰۰ :)) و برای آموزش برنامه نویسی اون با وجود کامپایلرهای متنوعی چون Bascom (بیسیک) و CodeVision (سی) من Bascom رو انتخاب می کنم تا تازه کارهای برنامه نویسی هم مشکلی نداشته باشن (بیسیک که دیگه کاری نداره!). فکر نمی کنم چیزی ناگفته مونده باشه! پس از جلسه بعد آموزش ساخت پروگرمر و یکم آموزش برنامه نویسی AVR ٬البته فقط در حد کار خودمون -ربات- رو خواهیم داشت. (بگو ایشالا )

[+] نوشته شده توسط نیما در 12:32 | |

یه شروع جدید

سلام. ایندفه هیچ خبر جدیدی نیست!  آخه می دونید٬ فقط اوایل ترمه که اخبار داغ داره٬ بقیه ترم معمولا هیچی... تعطیلات بین ترم و تابستونم که دیگه قربونش برم همه گوله می کنن کنج خونه٬ ووو میگن اخبار کیلو چنده!!! وبلاگ ما که نمی تونه بخوابه؟ می تونه؟ برا همین تصمیم گرفتم همونطور که قول داده بودم آموزش ها رو شروع کنم. خیلی دوست داشتم با آموزش ساخت روبات شروع کنم اما از اونجایی که من دوست ندارم مثل خیلی های دیگه ـــ(بلا نسبت) فقط شماتیک مدار و عکسشو همراه یه تیتر گنده بزارم تو وبلاگو دیگه کی دوست داره کی نداره٬ کی فهمید چی شد کی نفهمید٬ کی سوال داره کی نداره و.... به من ربط نداشته باشه ـــ باشم سعی می کنم از پایه شروع کنم و مثلا اول تمام قطعات مورد استفاده رو تشریح کنم و طرز کارشون رو شرح بدم و بعد بچسبونمشون بهمو بگم "خوب ببیید؟".

یکی از ساده ترین رباتها برای ساخت٬ ربات دنبال کننده خط هستش که من هم سعی می کنم با همین شروع کنم تا بعد با هم  Humanoid بسازیم (جدی نگیرید).

هر رباتی به طور کلی از دوقسمت مکانیکی و الکتریکی تشکیل شده که میشه گفت طراحی صحیح هر کدوم از این دو دقیقا به نسبت مساوی در عملکرد ربات تاثیر داره. اما از اونجایی که ما می خوایم بیشتر روی مبحث الکترونیک زوم کینم و دیگه اینکه پروژه ما هم همچی عظیم نیست مبحث مکانیکی رو آخرش یجوری سعی میکنم سرشو هم بیاریم. اما خود قسمت الکترونیکی هم به سه بخش ۱-سنس خط  ۲-قسمت حرکتی ربات  ۳-قسمت کنترلی ربات تقسیم میشه.مهم ترین قسمت از نظر من سومی یعنی قسمت کنترلی ربات هستش که درواقع خروجی سنسورها رو گرفته و با الگوریتم های مشخص فرامینی را به خروجی که اینجا همان موتورهاست می دهد. این قسمت می تونه یه میکروکنترلر٬ کامپیوتر٬... باشد.

خوب تمام اینا مقدمه چینی بود برای پست(های) بعدی که توضیح کاملیه درباره اینکه اصلا میکروکنترلر چیه؟؟ وبعد انتخاب صحیح یه میکروی مناسب برا کارما و بعد هم یکم آموزش برنامه نویسی برای اون و حتما طریقه پروگرم(انتقال برنامه به میکرو) کردن میکرومون. تمام اینا زیاد طول نمیکشه اما در عوض اگه شما علاقمند باشی حداقل یه چیزی یاد گرفتی و دیگه فقط زحمت لحیم کردن به عهده شما نیست بلکه می تونید خودتون رباتهای جدید با کاربردهای متفاوت ایجاد کنید. منم قول میدم زود زود بنویسم به شرط اینکه شما هم نظرتون رو بگید! تا پست بعدی یا حق.

[+] نوشته شده توسط نیما در 20:0 | |

کارگاه مطلب

سلام. با عرض پوزش بخاطر تاخیر. شرمنده اخلاق ورزشی همتون هم هستم اما امتحاناته وووو.... .
یه کارگاه آموزشی مطلب قراره تشکیل بشه به شرح زیر:

Matlab Workshop (The Language of thecnichal computing)

  • Mathmatics
  • Programming tips
  • Graphics
  • symbolic math tools
  • Image proccessing toolbox
  • ....

Specially for Electrical Engneering and Computer Sience students

و دیگه اینکه که به مناسبت هفته پژوهش کلی سخنرانی برگزار شد که مهمترینش سخنرانی پروفسور سوادکوهی؟! بامحوریت مکاترونیک بود که خوشیختانه موفق شدم حداقل تو این یکی حاظر بشم! بگزریم از اینکه سعی تلاش بی وقفه ام بخاطر عکس گرفتن از جناب پروفسور باعث شد که هیچی از سخنرانیشون متوجه نشم! اما امیدوارم عکسایی رو که خودم گرفتم زودتر به دستم برسه تا بتونم تا خبر لوس نشده!!! بهمراه یک سری از سوابق جناب پروفسور و آثارشون و همچنین اتفاقات جالبی که طی (به قول خودشون) Talk اشون پیش اومد تو وبلاگ قرار بدم .

راستی قصد دارم بزودی یک سری آموزش (ایشاالله از مقدماتی) ساخت روبات٬ برنامه نویسی میکرو و... رو تو وبلاگ داشته باشم (البته با پشتیبانی شما) چطوره ها؟؟ منتظر نظرات شما هستم . فعلا بای

[+] نوشته شده توسط نیما در 0:9 | |

هفته پژوهش و کلی هیاهو

سلام. (مهندس روز دانشجوت مبارک )
باید بگم سمینارها و کلاسها و اخبار فراوونی از اول ترم تا حالا تو دانشکده مون داشتمیم اما از اونجایی که درج اخبار و رویدادهای سوخته و یا نوشتن فقط به صرف کل کل با بقیه دانشگاه ها و پز دادن و... جزو خط مشی این وبلاگ نیست ترجیح می دم به همین خبر زیر بسنده کنم :

براساس یک سنت مانوس تقویم نگار همه ساله هفته واپسین آذر ماه به پاس داشت امر پژوهش اختصاص می یابد و در این جریان همایش ها, نمایشگاه ها, سخن رانی ها و تقدیر وستایش ها یی مرتبط با این هفته , در دانشگاه آزاد قزوین شکل می گیره که یقینا استفاده از اون برای عموم آزاده. لیستی از برنامه های هفته پژوهش در قالب خبرنامه ای تو دانشگاه پخش شده بود که با وجود مباحث متنوعی که توسط شرکتهای بنامی چون ایران خودرو, پاژنگ خودرو, نیرومحرکه, مهرام, تولی پرس و... ارائه می شد فقط به چند کیس خواص که به موضوع کار ما مربوط می شه بسنده می کنم:

ردیف  نام شرکت عنوان طرحهای R&D شرکتهای صنعتی و سازمانها
1  دانشگاه بین المللی امام خمینی اختراعات و پروژه های تحقیقاتی 
2 گروه مکاترونیک دانشگاه آزاد اسلامی قزوین*   رباتهای middle size و small size و رباتهای امدادگر و نمونه های شبیه سازی شده
3 گروه بتن دانشگاه آزاد اسلامی قزوین*  تجهیزات آزمایشگاهی بتنی شرکت داده شده در مسابقات بین المللی 
4  ناتل صنعت  ارائه مقالات در زمینه مهندسی نرم افزار
ارائه جامع ترین منبع آموزشی RUP
ارادئه مشاوره در زمینه مدیریت و راهبری پروژه
ارایه CD های آموزشی
کارگاه آموزش در زمینه MSC.RUP
5 جهاد دانشگاهی  پروژه های تحقیقاتی پژوهشکده تکنولوژی
6  انجمن تحقیق و توسعه  اختراعات و پروژه های تحقیقاتی
شرکتها و سازمانهای شرکت کننده در نمایشگاه فن بازار هفته پژوهش (۱۹ لغایت ۲۴ آذرماه ۸۴)

سعی می کنم اگر چیزی باقی مونده باشه بعدا ضمیمه کنم. راستی اون دوتا دوستم هم که گفتم کارشون رو شروع کردن و من براشون یوزر جدید ساختم ایشالا خودشون یواش یواش میان و معرفی می کنن خودشونو (فاضل از دانشگاه امام حسین که کلی چیز داره براگفتن! می گفت تو همین اول کار رباتیک رو ترکونده! و حنیف از دانشگاه سمنان که جفتشون هم برق می خونن). سعی می کنیم از امیر کبیر و سایر دانشگاه ها هم نمایندگی فعال جذب کنیم . شما هم اگه خودتون تو کارید یا کسی رو سراغ دارین حتما خبرم کنید تا براتون یوزر(User) بسازم و کارتون رو شروع کنید.
خب دیگه این پست خیلی طولانی شده پس تا بعد یا حق.

[+] نوشته شده توسط نیما در 11:54 | |

کی گفته؟

سلام. بعضی از دوستان که پست پایین رو خونده بودن و هدف اصلی من از ایجاد این وبلاگ رو فهمیدن میومدن و می پرسیدن خوب حالا مثلا ما فهمیدیم تو دانشگاه سمنان (مثلا) فلان همایش کامپیوتر برپاست و یا فلان کلاسها (مثلا Matlab , C++ ,..) دایر شده و یا دانشگاه امام حسین مثلا بجای آدامز و توماس کتابای نیکوکار رو تدریس می کنه! خوب حالا چه کاری از دست ما برمیاد یا کلا به ما چه!

واقعا یکم روش فکر کنید... هنوز هم نفهمیدین این کار چه مزیت بزرگی برا همه ما داره؟؟ در جواب این دوستان باید بگم:

  1. مساله اخبار همایش ها و سمینارها و چیزهایی از این دست که کاملا مشخصه! شاید ما نتونیم در اونا شرکت کنیم ولی خیلیای دیگه یا خودشون علاقمندند و یا حتی از طرف دانشگاهشون ساپورت می شن و در این فعالیت ها شرکت می کنن و یا حداقا از دوستانشون می خوان که مثلا کتابچه همایش و ... رو برای اونا هم تهیه کنن . (این که هچس!)
     
  2. در مورد کلاسهای جنبی هم اگر دانشگاه ارائه دهنده نزدیک به شما باشه و بتونی از اونا استفاده کنید که دیگه حرفی نیست! اما اگر نتونین حداقل می فهمید دوستان همرشته ای شما مثلا در کرمانشاه همه از کلاسای Matlab , C++ استقبال کردن و... خوب این اولا شما رو وا میداره که برای عقب نموندن از این عرصه رقابت بریدو خودتونم که شده Matlab و سی رو یاد بگیرید! (این فقط یه مثاله) جنبه دیگش اینکه حداقل می فهمید شما هم می تونید  با کمک انجمنتون از این فعالیتها بکنیدو یه پولی هم به جیب بزنید!
     
  3. در مورد موضوعات و نحوه تدریس دروس در دانشگاهای مختلف هم که اگه نگم بهتره! باور نمی کنید تو همین ترمای اول چند نفرو دیدم که از الان به فکر ارشدن!!! و میرن برای یه درس سر کلاس 3 تا استاد مختلف می شینن! حالا خوب نیست این دوستان بتونن منابعشون رو به هم معرفی کنن یا اصلا از ارشد هم که بگزیم خوب نیست یه نفر بدونه بابا این 8051 که دارن تو دانشگاشون تدریس می کنن مال احده بوقه و الان حتی دانشگاه گوز باغ تپه هم بجای 8051 دیگه AVR تدریس می کنه! یا مثلا وقتی بفهمی فلان دانشگاه دروس اختصاصیش رو به زبان اینگلیسی تدریس می کنه (تعریف از خود نباشه ;)) خودتونو ملزم به یادگرفتن یا حداقل تقویت زبان نمی دونی؟ 
     
  4. من فکر نمی کنم لازم باشه بیشتر از این از ضرورت یه همچین طرحی تعریف کنم ولی اگه بازم سوالی باشه من درخدمتم! 

[+] نوشته شده توسط نیما در 0:25 | |

هم اکنون نیازمند یاری سبزتان هستیم

سلام. من نیما هستم از بچه های برق دانشگاه آزاد قزوین. (;
حتما شنیدید که می گن آدم برای حرفه ای شدن تو رشته اش حتما نباید شاگرد اول باشه و مهمتر از اون داشتن اطلاعات و توانایی های جنبی فراوونه و از این حرفا! راستش هدف اصلی من هم از راه اندازی این وبلاگ معرفی و خبررسانی بعضی از قابلیت های دانشکده برق و رایانه و IT دانشگاهمون, یا اخبار مربوط به سمینارها و کلاسهای فوق برنامه و .... است که توی خیلیهاشون دانشجوهای دانشگاهای دیگه و یا حتی افراد متفرقه علاقمند هم می تونن شرکت کنند.

با پیشرفت کار وبلاگ و همکاری سایر بچه های فنی از دانشگاه قزوین و سایر دانشگاه های کشور حتما اخباری از این دست رو که در دانشگاهای دیگه هم ممکنه اتفاق بیفته همینجا می نویسیم تا شاید مثلا اگر سمینار یا کلاس فوق برنامه ای تو یه دانشگاه تشکیل میشه بقیه هم ازش با خبر شن و در صورت امکان بتونن ازش استفاده کنن (همچنین خودم ((;.

من خودم 2 تا رفیق فاب (یکی از بچهای برق دانشگاه دولتی سمنان و یکی دیگه هم دوباره برق دانشگاه امام حسین تهران) دارم که اول از همه از اونا می خوام تا باهام همکاری کنن و اتفاقات مهم دانشگاهشون رو برا ما هم بفرستن (همینجا می نویسم). از شما هم که دیگه انتظار بیش از این میره

راستی با وجود اخبار داغی که همین اواخر تو دانشگاهمون داشتیم مجبورم از حرافی خودداری کنم حداقل تا زمانی که این وبلاگ رو به بقیه معرفی کنیم و دست کم بتونم با یکی دو نماینده از دانشگاهای دیگه همکاری کنم. خوب دیگه برا سری اول زیادم شد پس تا بازگشتی دوباره یا حق...

نظر یادتون نره! (کامنت زور بده.....:))

[+] نوشته شده توسط نیما در 0:19 | |

مطالب پيشين