دوستان عزیزم سلام.

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

انگار همین دیروز بود که تو رشته برق مشغول به تحصیل شدم  و چه ذوق و شوقی که بیا و ببین :((!! این وبلاگ رو سال 84 راه انداختم و به گمونم تا سال 87 هم می نوشتم! یادش بخیر top rank آموزش ساخت ربات تو گوگل همین وبلاگ بود و چه دورانی داشتیم. الان از اون سالا 5، 6 سال میگذره و شاید برای شما دوستان جالب باشه بدونید من دیگه تو این زمینه فعالیتی ندارم. در حال حاضر (به مدت 2 یا 3 سال) در زمینه برنامه نویسی و طراحی اپلیکیشن های تحت وب مشغول هستم و اگر خدا قسمت کنه تا چند ماه دیگه عازم زیر پرچم هستیم (فکر کردید می خوام بگم خارج هااا؟؟ :)) ما ازاین شانسا نداریم. برام دعا کنید). امروز که این آمار رو دیدم دلم نیومد یه دستی به سرو گوش این وبلاگ بکشم  و حداقل دوستانی که به اینجا میان و وقت می زارن رو در جریان نگذارم! از همه دوستانی که لطف داشتن و کامنت گذاشتن اما بی جواب مونده واقعا معذرت می خوام (آخرین پست حدود 100 تا کامنت تایید نشده داشت!).

و در آخر به عنوان یه راهنمایی دوستانه: یادمه ترمای آخر دانشگاه زمان ما میکروکنترلر های ARM خیلی داشت مد میشد این درحالی بود که AVR هنوز خیلی طرفدار داشت و 8051 هنوز تو دانشگاه درس داره میشد. اما تا جایی که یادم میاد این ARM عروسکی بود برای خودش (همونطور که میدونید امروزه دیگه تو تمام موبایل ها و تبلت ها و.... سعی می کنن این پردازنده رو جایگذین کنن). پیشنهاد می کنم هرجای کار که هستید اگر تابحال سراغ این پردازنده نرفتید نظرتون رو عوض کنید و یه سرکی بهش بکشید. از اونجاکه خیلی وقته ننوشتم و از این صنف خیلی وقته دور بودم نمی دونم چجوری باید منظورمو بفهمونم ولی خودتون بگیرید دیگه ;)

از همه شما دوستان ممنونم.
دوستون دارم. یاحق.......

+ نوشته شده توسط نیما در جمعه ششم اسفند 1389 و ساعت 13:24 |

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

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 در آن می شود. پس همزمان می توانید تصویر اصلی و اصلاح شده آن را مشاهده نمایید. که خروجی چیزی شبیه شکل زیر خواهد شده.

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

+ نوشته شده توسط نیما در شنبه سوم آذر 1386 و ساعت 19:56 |
دوستان خوبم سلام ....

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

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

>> 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);


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

فعلا یاحق ...

+ نوشته شده توسط نیما در جمعه هجدهم آبان 1386 و ساعت 12:3 |

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

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

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

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

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

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

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

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

+ نوشته شده توسط نیما در جمعه یازدهم آبان 1386 و ساعت 0:28 |

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

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

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

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

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

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

+ نوشته شده توسط نیما در دوشنبه هشتم آبان 1385 و ساعت 16:42 |

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

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

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

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

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

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

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

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

+ نوشته شده توسط نیما در چهارشنبه بیست و نهم شهریور 1385 و ساعت 20:10 |

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

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

اما این یکی یکم متفاوت تر٫ سخت تر و بدردبخورتر هستش. اصل مطلب اینکه می خواستم یه ربات 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 کانکتور وصل کنید. فقط توجه کنید که جهت مثبت و منفی منبع تغذیه شما اشتباه نشود.

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

+ نوشته شده توسط نیما در چهارشنبه بیست و دوم شهریور 1385 و ساعت 2:7 |

دوستان رباتیکی و الکترونیکی و مکانیکی و ...کی و ...کی و ... با محبتم سلام . بابا ما یه وبلاگ رباتیکی افتتاح کردیدم!! نمی دونستیم اینقدر مافیا پشت اینکار خابیده!!! یکی مطلب این یکی رو کش میره یکی برا اونیکی فحش میفرسته یکی زیراب اونیکی رو پیش این یکی میزنه و اوووووووووه. ولی گفته باشم من خودم 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 احتیاج داشته باشید٬ شما رو با این نرم افزار آشنا کنم. امیدوارم مورد پسندتون واقع شده باشه.

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

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

در مقاله قبلی درباره فوت پرینتها توضیح دادم و فوت پرینت تمام قطعات پروژمون رو هم به مقدار مناسبشون تغییر دادیم. اما برای تهیه 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 پنجره نمایش داده شده در تصویر٬ کلیک کنید.

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

+ نوشته شده توسط نیما در یکشنبه بیست و دوم مرداد 1385 و ساعت 11:21 |
سلام٬ دیدید برگشتم....... هااااااااااااااااااااااااااااااااااا

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

تعریف 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 قرار بدهید.

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

+ نوشته شده توسط نیما در شنبه چهاردهم مرداد 1385 و ساعت 19:29 |