کال

تجربیات کامپیوتر، الکترونیک و لینوکس عبد

مقدمه‌ای بر Asymptote و آزمایش نهایی کنترلر CNC

۲۲ شهریور ۱۳۸۷ در دسته CNC٬ برنامه‌ کاربردی

حدود یک هفته پیش مدار‌هایی که برای کنترلر CNC درست کرده بودم را کمی مرتب کردم و روی یک تکه چوب نصب کردم. این مرتب سازی در واقع سیم‌کشی‌های منبع تغذیه و اتصال مدار‌های توان به مدار کنترلر است. برای تغذیه این مدار هم از دو پاور کامپیوتر که قبلا درست کرده بودم استفاده می‌کنم.

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

اکنون همه‌ چیز آماده است که سه استپر موتور را با کامپیوتر تست کنم. برای مشاهده‌ بهتر چرخیدن موتور‌های (و از سر بی‌کاری!) چند دایره سیاه‌ سفید پرینت کرده‌ام و روی موتور‌ها چسباندم که چرخش موتور‌ها بهتر به چشم بیاید:


ویدیو چرخش سه موتور را از اینجا دریافت کنید (حجم 453K).

برای کشیدن این دایره‌ها از چه ابزاری باید استفاده کرد؟

در اولین قدم ابزار‌های گرافیکی به نظر مناسب می‌رسند ولی خوب لینوکسی بودن شما را طرفدار ابزار‌های متنی می‌کند. یکی از این ابزار‌ها Asymptote است. این ابزار در واقع یک Vector Graphics Language یا زبان برداری گرافیکی (درست ترجمه کردم؟) است. به این معنی که شما اشکال مورد نظرتان را را با یک زبان اسکریپتی رسم می‌کنید. ویژگی خیلی مهم asy این است که فرمت اسکریپت ‌آن مانند زبان C است.

دایره‌های من یک مثال مناسب و البته خیلی ساده برای معرفی asy است. فرض کنید که من می‌خواهم دوایر زیر را رسم کنم:

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

1 size(700);
2 void drawcir(pair base,int parts) {
3 draw(circle(base,1),linewidth(0.5mm));
4 for(int i=0;i<parts;i=i+2) {
5 filldraw(base–arc(base,1,(360/parts)*i,(360/parts)*(i+1))–cycle,black);
6 }
7 }
8 drawcir((1,1),8);
9 drawcir((1,3.2),16);
10 drawcir((1,5.4),32);

خط ۱:اولین دستور (size) ابعاد تصویر را مشخص می‌کنه به این معنی که اندازه هر واحد از تصویر بعد از این دستور ۷۰۰ پیکسل خواهد بود.

خط ۲:چون شکل تصویر کاملا منظم است (دقت کنید که این ابزار مناسب رسم اشکالی است که تا حدی منظم باشند)، کشیدن هر دایره را به صورت یک تابع (drawcir) در نظر گرفته شده است. این تابع دو پارامتر دارد، base که نقطه مرکزی دایره را نشان می‌دهد و parts که تعداد قسمت‌های سیاه سفید را مشخص می‌کند.

خط ۳:در داخل تابع اولین دستور draw برای کشیدن مسیر‌ها استفاده می‌شود. مسیر ما در این حالت یک دایره (circle) است که مرکز آن base است و شعاع آن یک واحد است. دستور draw پارامتر‌های فراوانی دارد که یکی از آنها ضخامت خط است (linewidth).

خط ۴: حالا برای کشیدن قسمت‌های سیاه سفید نیاز به یک حلقه داریم. این حلقه در واقع رسم کننده قسمت‌های مشکی است که نصف تعداد parts هستند.

خط ۵: این قسمت قلب این کد است. filldraw مانند draw یک مسیر را رسم میکند ولی علاوه بر آن داخل آن را پر می‌کند (در اینجا به صورت ساده فقط با رنگ مشکی و به صورت یکنواخت پر می‌شود). مسیر ما (قطاع‌های مشکی) از base شروع می‌شوند و با یک خط صاف (–) به ابتدای کمان (arc) می‌رسند. پارامتر‌های کمان هم به ترتیب مرکز کمان، زاویه شروع و زاویه پایان است. در انتها نیز مسیر باید بسته شود و به جای ابتدایی باز گردد (cycle).

خط ۸-۱۰: فراخوانی تابع برای کشیدن سه دایره.

حالا باید فایل را با صدا زدن asy کامپایل کنید. دقت کنید که فرمت خروجی پیشفرض eps است. شما می‌توانید با سوئیچ f- فرمت خروجی مورد نظر خودتون را مشخص کنید:

asy circles.asy -f gif

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

این هم یک مثال زیبا از گالری به نام درخت پیتاگوراس (البته من تغییرش داده‌ام و کمی احتمالات به آن اضافه کرده‌ام) بر پایه روابط بازگشتی و فرکتال‌ها.

* دوستان لینوکس کار می‌توانند این برنامه را به سادگی از مخازن نصب کنند. دوستان ویندوزی هم نگران نباشند نسخه ویندوز نیز وجود دارد.

۵ نظر به “مقدمه‌ای بر Asymptote و آزمایش نهایی کنترلر CNC”

  • mohsen++
    ۲۲ شهریور ۱۳۸۷ at ۱۰:۴۸ ب.ظ

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

  • nima
    ۲۴ دی ۱۳۸۷ at ۵:۱۵ ب.ظ

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

  • Anderarizzo
    ۳۱ خرداد ۱۳۸۸ at ۷:۲۹ ب.ظ

    hi

  • هویک
    ۳ شهریور ۱۳۸۸ at ۴:۵۹ ق.ظ

    جدا” خسته نباشی

  • feal
    ۳ مهر ۱۳۸۸ at ۷:۰۶ ب.ظ

    سلام
    پیرم در اومد از بس که مدار ساختم وجواب نگرفتم
    لطفا کمکم کنید یه مداری میخام که بتونه 6 یا لااقل 5 تااستپ موتور رو کنترل کنه ..لطفا اگه میتونید کمکی کنید درغ نکنید از من
    خدا خیرت بده

نوشتن نظر