به نام خدا
پروژه ی ساخت ربات دنبال کننده ی توپ با استفاده از رزبری پای
رباتیک یکی از جذاب ترین زمینه های علم امروزه است. رباتیک و پردازش تصویر دو موضوع جدا نشدنی از یکدیگرند. با استفاده از پردازش تصویر به راحتی می توان برخی کار های دشوار را برای ربات تعریف کرد. در این پروژه با استفاده از رزبری پای رباتی می سازیم که توپی را دنبال می کند ، درست همانند ربات های فوتبالیست.
نرم افزار اپن سی وی یک نرم افزار معروف و اوپن سورس است که در قسمت پردازش تصویر استفاده می شود. اما در این پروژه برای ساده سازی از نرم افزار Processing استفاده کرده ایم. از آنجایی که نرم افزار Prossecing کتابخانه ی GPIO را نیز تعریف کرده است پس نیازی برای ایجاد ارتباط بین پایتون و نرم افزار Processing نخواهیم داشت.
قطعات مورد نیاز برای پروژه ی ساخت ربات دنبال کننده ی توپ با استفاده از رزبری پای:
رزبری پای
ماژول دوربین با کابل ribbon
شاسی ربات
چرخدنده با چرخ
L293D
پاور بانک و یا هر منبع تغذیه ی قابل حمل
موارد مورد نیاز برای برنامه نویسی:
مانیتور برای رزبری پای
کیبورد یا موس برای رزبری پای
نرم افزار Processing ARM
در حین برنامه نویسی نیاز است تا نمایشگر به وسیله سیم به رزبری پای متصل باشد.
آماده سازی Processing بر روی رزبری پای :
همانطور که گفته شد از نرم افزار Processing برای برنامه ریزی رزبری پای به جای پایتون استفاده می کنیم. مراحل را به ترتیب زیر انجام می دهیم:
گام اول: رزبری پای خود را به مانیتور ، موس و کیبورد خود متصل کنید.
گام دوم: از اتصال رزبری پای به اینترنت اطمینان حاصل کنید. زیرا باید چند فایل را دانلود کنیم.
گام سوم: بر روی Processing ARM کلیک کنید تا این نرم افزار را برای رزبری پای دانلود کنید که یک فایل زیپ می باشد.
گام چهارم: بعد از اتمام دانلود فایل زیپ را در محل مورد نظر اکسترکت کنید.
گام پنجم: پس از اکسترکت ، بر روی فایلی با نام Processing کلیک کنید. باید تصویری مطابق شکل زیر مشاهده کنید.
گام ششم: این محل برنامه نویسی ماست. برای کسانی که قبلا آردوینو کار کرده اند ، محیط به صورت شگفت آوری همانند آردوینو می باشد.
گام هفتم: اکنون به دو کتابخانه برای دنبال کردن توپ نیاز داریم. سپس بر روی Sketch -> Import Library -> Add Library کلیک کرده. صفحه ای مانند زیر باز خواهد شد.
گام هشتم: در قسمت سرچ برای رزبری پای جستجو کنید و نتیجه ای مانند زیر خواهید دید.
گام نهم : به دنبال کتابخانه های “GL Video” و “Hardware I/O” بگردید و آن ها را نصب کنید. مطمعن شوید که هر دوی آن ها را نصب کرده اید.
گام دهم: پس از انجام مراحل بالا اکنون نرم افزار آمده است.
شماتیک مدار:
همانطور که مشاهده می کنید شماتیک مدار دنبال کننده به صورت زیر است.
برای راه اندازی موتور ها به چهار پین (A,B,A,B) نیاز داریم. این چهار پین به ۱۴ ، ۴ ، ۱۷ و ۱۸ GPIO متصل هستند. سیم های نارنجی و سفید باهم اتصال یک موتور را شکل می دهند. پس ما دو نمونه موتور جفت شده داریم.
موتور ها به L293D متصل هستند که خود آن به یک پاور بانک متصل است. از اتصال زمین رزبری پای به زمین پاور بانک اطمینان حاصل کنید. تنها در این صورت کار میکند.
دانلود کد پروژه ربات دنبال کننده :
دانلود فایلimport processing.io.*; import gohai.glvideo.*; GLCapture video; color trackColor; void setup() { size(320, 240, P2D); video = new GLCapture(this); video.start(); trackColor = color(255, 0, 0); GPIO.pinMode(4, GPIO.OUTPUT); GPIO.pinMode(14, GPIO.OUTPUT); GPIO.pinMode(17, GPIO.OUTPUT); GPIO.pinMode(18, GPIO.OUTPUT); } void draw() { background(0); if (video.available()) { video.read(); } video.loadPixels(); image(video, 0, 0); float worldRecord = 500; int closestX = 0; int closestY = 0; // Begin loop to walk through every pixel for (int x = 0; x < video.width; x ++ ) { for (int y = 0; y < video.height; y ++ ) { int loc = x + y*video.width; // What is current color color currentColor = video.pixels[loc]; float r1 = red(currentColor); float g1 = green(currentColor); float b1 = blue(currentColor); float r2 = red(trackColor); float g2 = green(trackColor); float b2 = blue(trackColor); // Using euclidean distance to compare colors float d = dist(r1, g1, b1, r2, g2, b2); // We are using the dist( ) function to compare the current color with the color we are tracking. // If current color is more similar to tracked color than // closest color, save current location and current difference if (d < worldRecord) { worldRecord = d; closestX = x; closestY = y; } } } if (worldRecord < 10) { // Draw a circle at the tracked pixel fill(trackColor); strokeWeight(4.0); stroke(0); ellipse(closestX, closestY, 16, 16); println(closestX,closestY); if (closestX<140) { GPIO.digitalWrite(4, GPIO.HIGH); GPIO.digitalWrite(14, GPIO.HIGH); GPIO.digitalWrite(17, GPIO.HIGH); GPIO.digitalWrite(18, GPIO.LOW); delay(10); GPIO.digitalWrite(4, GPIO.HIGH); GPIO.digitalWrite(14, GPIO.HIGH); GPIO.digitalWrite(17, GPIO.HIGH); GPIO.digitalWrite(18, GPIO.HIGH); println("Turn Right"); } else if (closestX>200) { GPIO.digitalWrite(4, GPIO.HIGH); GPIO.digitalWrite(14, GPIO.LOW); GPIO.digitalWrite(17, GPIO.HIGH); GPIO.digitalWrite(18, GPIO.HIGH); delay(10); GPIO.digitalWrite(4, GPIO.HIGH); GPIO.digitalWrite(14, GPIO.HIGH); GPIO.digitalWrite(17, GPIO.HIGH); GPIO.digitalWrite(18, GPIO.HIGH); println("Turn Left"); } else if (closestY<170) { GPIO.digitalWrite(4, GPIO.HIGH); GPIO.digitalWrite(14, GPIO.LOW); GPIO.digitalWrite(17, GPIO.HIGH); GPIO.digitalWrite(18, GPIO.LOW); delay(10); GPIO.digitalWrite(4, GPIO.HIGH); GPIO.digitalWrite(14, GPIO.HIGH); GPIO.digitalWrite(17, GPIO.HIGH); GPIO.digitalWrite(18, GPIO.HIGH); println("Go Frwd"); } else { GPIO.digitalWrite(4, GPIO.HIGH); GPIO.digitalWrite(14, GPIO.HIGH); GPIO.digitalWrite(17, GPIO.HIGH); GPIO.digitalWrite(18, GPIO.HIGH); } } else { GPIO.digitalWrite(4, GPIO.HIGH); GPIO.digitalWrite(14, GPIO.HIGH); GPIO.digitalWrite(17, GPIO.HIGH); GPIO.digitalWrite(18, GPIO.HIGH); } } void mousePressed() { // Save color where the mouse is clicked in trackColor variable int loc = mouseX + mouseY*video.width; trackColor = video.pixels[loc]; }
دیدگاهها (0)