نوعی از کامپیوترها وجود دارند که برخلاف سیستمهای رایج، تنها از یک برد الکترونیکی تشکیل شدهاند. این سیستمها که به کامپیوترهای تکبُرد نیز معروف هستند مؤلفههای گوناگون یک سیستم کامپیوتری نظیر ریزپردازنده، حافظه، امکانات ورودی و خروجی و غیره را روی یک برد بهنسبت کوچک جای دادهاند و عملکردی مانند یک کامپیوتر دارند. این بردها توسط برندهای گوناگونی عرضه شدهاند که یکی از معروفترین آنها، مجموعه بردهای «رزبری پای» است. یکی از کاربردهای جالب رزبری پای، رباتیک و انجام پروژههای اینچنینی است و برای این منظور، میتواند به مؤلفههای گوناگونی که در این گونه پروژهها وجود دارند، یعنی سنسورها، موتورها و غیره متصل شده و آنها را کنترل کند. در این مطلب از مجله فرادرس، قصد داریم تا به زبانی ساده به شما بگوییم که نحوه ساخت ربات با رزبری پای چگونه است و برای طراحی و ساخت ربات با رزبری پای چه مراحلی را میبایست طی کنید.
اگر به دنبال خرید بردهای رزپری پای باشید، با گزینههای زیادی رو به رو خواهید شد که در قابلیتهایی مانند پشتیبانی از وایفای، بلوتوث، پورت اترنت و USB، ظرفیت RAM، توان پردازشی، مصرف انرژی و غیره با هم فرق دارند. از مدلهای رایج رزپری پای میتوان به مواری همچون رزبری پای Zero، رزبری پای ۱، رزبری پای ۲ مدل B، رزبری پای ۳، رزبری پای ۴ مدل B و رزبری پای ۴۰۰ اشاره کرد. این مدلها علاوه بر خصوصیات گفته شده، در قیمت نیز متفاوت هستند که بسته به شرایط پروژه خود میتوانید گزینه مناسب را تهیه کنید.. انرژی مورد نیاز برای روشن شدن و عملکرد مینیکامپیوترهای Raspberry Pi، از طریق یک کانکتور نظیر میکرو یواسبی ۵ ولت تأمین میشود. همچنین میزان انرژی مصرفی کلی نیز به تعداد نوع پروژه و ماژولهای متصل به برد بستگی دارد.
ساخت ربات با رزبری پای چگونه است؟
همانطور که اشاره شد، رزبری پای یک مینیکامپیوتر تکبُرد کوچک و سبکوزن است که کاربردهای متعددی دارد. بهطور مثال، در ترکیب با ماژولها و سایر قطعات الکترونیکی، میتوانید از آن را برای ساخت ربات با رزبری پای استفاده کنید.
بردهای Raspberry که در حال حاضر محبوبیت و طرفداران بسیاری زیادی دارند، در ابتدا برای اهداف آموزشی توسعه یافتند. اما اکنون به وسیلهای تبدیل شدهاند که توسط بسیاری از افراد تشنه فناوری، که بهدنبال ابزاری برای سر و کله زدن با آن هستند، مورد استفاده قرار میگیرد تا از این طریق، کنجکاویهای خود را ارضا کنند. این محبوبیت و استفادههای متعدد باعث شده تا بتوان از رزبری پای در موارد گوناگونی بهره برد که در ادامه به برخی اشاره کردهایم.
- تبدیل رزبری پای به یک کامپیوتر شخصی
- رزبری پای به عنوان مدیا پلیر
- کنترل رباتهای اینترنت اشیا یا IoT
- رزبری پای بهعنوان سرور چاپگر
- وب سرور
- رزبری پای بهعنوان کنسول بازی
- اتصال به دوربینهای نظارتی
- تست نفوذ به شبکه
در این میان، ساخت ربات با رزبری پای نیز یکی از کاربردهای جذاب این نوع بردها محسوب میشود که در این نوشتار به توضیح آن پرداختهایم. ضمن اینکه باید بگوییم، این کامپیوترهای کوچک در موارد گوناگونی همچون یادگیری برنامهنویسی، اتوماسیون منازل، پیادهسازی وب سرور، اجرای پروژههای الکترونیکی، بهعنوان کنسول بازی و غیره نیز استفاده میشوند.
یادگیری رزبری پای با فرادرس چگونه است؟
اگر بخواهید مهارت جدیدی مانند استفاده از بردهای رزبری پای برای یادگیری کدنویسی، برنامهنویسی الکترونیک و پیادهسازی پروژههایی نظیر اتوماسیون منازل را یاد بگیرید، روشهای گوناگون و متنوعی برای این کار پیشِ روی شما قرار دارد. بهطور مثال، میتوانید در کلاسهای حضوری شرکت کنید، دورههای آنلاین در پلتفرمهای آموزشی خارجی را ببینید، وبسایتها و منابع آنلاین و کاغذی خودآموز را بهکار ببرید، یا حتی دورههای آموزشی در پلتفرمهایی نظیر یوتیوب را تماشا کنید. هر کدام از این منابع، مزایا و معایب خود را دارند و برخی شیوهها نظیر مطالعه کتب آموزشی در دنیای دیجیتالی کنونی تا حدی گذاشته شدهاند. در این میان، تماشای فیلمهای آموزشی یکی از شیوههای مدرن و مؤثر در یادگیری مهارتهایی مانند رزبری پای بهشمار میروند و فارغ از اینکه مکان جغرافیایی شما کجاست، چه ساعاتی میخواهید از آموزشها استفاده کنید و سایر شرایطی که دارید، این آموزشها شما را در مسیر یادگیری مهارت مورد نظرتان تنها نمیگذارند. ضمن اینکه در زمان و هزینه شما نیز صرفهجویی میشود.
فرادرس بهعنوان یکی از محبوبترین پلتفرمهای آموزشی کشور، فیلمهای آموزشی گوناگونی را برای مهارتهای مختلف از جمله نحوه استفاده از بردهای رزبری پای، منتشر کرده است. در ادامه، مجموعه فیلمهای آموزش رزبری پای، مقدماتی تا پیشرفته از فرادرس را آوردهایم. این فیلمهای آموزشی، مباحث گوناگون و پروژهمحوری از بردهای رزبری پای را شامل میشوند که بسته به اهداف خود میتوانید مورد دلخواه را تهیه و مشاهده کنید.
در ادامه، عناوین برخی از این فیلمهای آموزش را آوردهایم.
ساخت ربات Buggy با رزبری پای
در بخش نخست این نوشتار میخواهیم نحوه ساخت ربات چرخدار که به ربات Buggy نیز معروف است را با هم مرور کنیم. سپس، با استفاده از دستورات پایتون، این ربات را به نحوی برنامهنویسی میکنیم که قابلیت حرکت به جهات مختلف را داشته باشد.
تصویری که در ادامه آورده شده، نحوه کار این ربات را نشان میدهد.
مواردی که در این بخش یاد می گیرید
مباحثی که در این قسمت از مطلب ساخت ربات با رزبری پای یاد خواهید گرفت را در زیر، فهرست کردهایم.
- یاد میگیرید که چگونه درایور موتور را برای ۲ موتور DC راهاندازی کنید.
- چگونه حرکت موتورها را بهوسیله زبان برنامهنویسی پایتون کنترل کنید.
- همچنین یاد میگیرید که چگونه شاسی این ربات را بسازید و ربات را به اصطلاح، اسمبل کنید.
وسایل موردنیاز برای ساخت ربات با رزبری پای
برای اینکه بتوانید ساخت پروژه ربات Buggy را پیش ببرید به برخی وسایل که در ادامه اشاره کردهایم نیاز پیدا خواهید کرد.
- برد رزبری پای ۳
- برد درایور موتور L298N
- ۲ عدد موتور DC با ولتاژ ۳ تا ۶ ولت
- ۲ عدد چرخ ربات
- یک عدد جای باتری AA که ظرفیت ۴ باتری قلمی را دارد.
- یک عدد چرخ هرزگرد
- سیم یا جامپر
- پیچ گوشتی
- هویه و سیم لحیم
- چسب نواری و یک جعبه کوچک که میتواند پلاستیکی یا حتی مقوایی باشد.
- سیمچین
برخی وسایل اضافی و اختیاری
در زیر، به وسایلی اشاره کردهایم که تهیه آنها برای توسعه بیشتر پروژه لازم است.
- بردبورد
- سنسور فاصلهسنج ToF مدل VL53L0X یا سنسور اولتراسونیک
- ۲ عدد سنسور تعقیب خط
- باتری 18650، نگهدارنده باتری 18650، برد مخصوص شارژ USB یا پاوربانک
- یک عدد جعبه باتری USB
تمامی این قطعات را میتوانید بهراحتی از فروشگاههای لوازم رباتیک و الکترونیک و همچنین فروشگاههای آنلاین مرتبط، خریداری کنید.
نرم افزار مورد نیاز برای ساخت ربات با رزبری پای
به آخرین نسخه از سیستم عامل «رزبیَن» (Raspbian) نیاز دارید.
سر هم کردن موتورها و ماژول درایور موتور
پس از آمادهسازی وسایل ضروری، وقت آن رسیده تا قطعات مربوط به موتورها را مونتاژ کرده و به شکلی صحیح به هم متصل کنیم. پس با اتصال درایور موتور به برد رزبری پای، جعبه باتری و موتورها شروع میکنیم تا مطمئن شویم که به درستی کار میکنند. ما در این پروژه از ماژول درایور موتور L298N Dual H Bridge DC Stepper Motor استفاده میکنیم. در صورتیکه ماژول دیگری را بهکار میبرید لازم است تا به راهنمای رسمی آن مراجعه کنید. هرچند که روش گفته شده بهطور معمول برای بیشتر درایورهای موتور، مشابه است.
لحیم کردن سیم ها به موتور ها
برای استفاده از موتور DC، لازم است که ۲ عدد سیم به آن متصل باشد و هنگامیکه این موتورها را میخرید بهطور معمول فاقد سیم هستند. بنابراین لازم است تا ۲ قطعه سیم را با استفاده هویه روی موتور لحیم کنید. برای این کار، طبق مراحل زیر پیش میرویم.
- با استفاده از سیمچین یا سیملختکن، پوسته ۲ سر سیم را همانطور که در تصویر زیر مشخص است، بهاندازه حدود یک سانتیمتر جدا میکنیم تا مفتول فلزی داخل آن قابل مشاهده باشد. این کار را برای ۴ قطعه سیم میبایست تکرار کنید.
- اکنون به سراغ یکی از موتورها میرویم. این نوع از موتورها گیربکس دارند و دارای یک کاور پلاستیکی برای ثابت نگهداشتن موتور DC هستند. برای اینکه این قطعه پلاستیکی مزاحمتی به هنگام لحیمکاری ایجاد نکند میتوانید آن را بهکمک ابزاری نظیر پیچگوشتی بهطور موقت جدا کنید.
- سپس، ۲ قطعه سیم را به کمک هویه به ۲ قسمت فلزی روی موتور لحیم میکنیم. پس از آن میتوانید کاور پلاستی روی موتور را مجدد وصل کنید.
- نکتهای که میبایست به آن توجه کنید این است که پس از انجام لحیمکاری، انتهای سیمها در جایی که به موتور لحیم شدهاند نباید به بدنه فلزی موتور متصل باشند. بنابراین اگر انتهای سیم بلند است لازم است تا با سیمچین مقداری اضافی را برش دهید. همچنین برای محکمکاری بیشتر میتوانید محل لحیمکاری شده را با نوارچسب یا وارنیش حرارتی بپوشانید. این مراحل را برای هر ۲ موتور انجام دهید.
اتصال موتور به درایور موتور
اکنون ۲ موتور دارید که به هر یک، ۲ سیم لحیم کردهاید. در این قسمت میخواهیم موتورها را برد درایور موتور متصل کنیم. برای این منظور به ابزاری مانند یک پیچگوشتی ریز نیاز پیدا میکنید.
روی برد درایور ۲ ترمینال پیچی – بهطور معمول آبیرنگ – مشاهده میشود که در کنار هر یک، برچسبی با عنوان OUT
و یک عدد درج شده است. لازم است تا پیچ مربوط به هر یک از این ترمینالها را کمی باز کنید تا سر سیم به راحتی وارد آن شود.
- ۲ سیم یکی از موتورها را به OUT1
و OUT2
متصل کنید.
- ترمینالهای OUT3
و OUT4
نیز برای اتصال سیمهای موتور دیگر مورد استفاده قرار میگیرند.
این اتصالات در تصویر زیر بهخوبی مشخص است.
فراموش نکنید که پس از وارد کردن سیمها به ترمینال، لازم است تا پیچ آن را کمی سفت کنید تا اتصالات به اندازه کافی محکم شوند.
تغذیه موتورها
اکنون که اتصالات موتورها به درایور را انجام دادیم، زمان آن رسیده تا انرژی لازم برای کار کردن موتورها را نیز فراهم کنیم. برای تأمین برق مورد نیاز موتورها از منبع تغذیه جداگانه یا همان ۴ باتری قلمی که پیشتر اشاره شد، استفاده کردهایم. اگر دقت کنید، جای باتری دارای ۲ سیم قرمزرنگ و مشکیرنگ است. شما میبایست سر این سیمها را بهترتیب بهترمینالهای آبیرنگ با برچسبهای VCC
و GND
روی درایور موتور متصل کنید.
ترتیب این اتصال بسیار مهم است.
اتصال درایور موتور به رزبری پای
بسته به نوع برد درایوری که برای موتورها استفاده میکنید روشهای مختلفی برای به اتصال آن به رزبری پای وجود دارد. بهطور مثال، در این پروژه، برد درایور ما از طریق اتصال سیمی پینهای مشخص شده با فلش زردرنگ، به رزبری پای وصل میشود. برخی از بردها نیز میتوانند بهصورت یک برد یا ماژول توسعه روی پینهای GPIO رزبری پای قرار گیرند. برای دانستن روش اتصال درایور به رزبری میبایست به داکیومنتهای برد خود مراجعه کنید.
تصویر زیر را در نظر بگیرید.
در ماژول درایور موتور ما، همانطور که با فلش زردرنگ مشخص شده، پینهای ورودی با برچسب IN1
، IN2
، IN3
و IN4
و ۲ پین GND
وجود دارد. برای اتصال درایور به رزبری پای از همین پینها استفاده میکنیم. در این پروژه ساخت ربات با رزبری پای، برای اتصال درایور به رزبری پای از پینهای GPIO شماره 7
، 8
، 9
و 10
استفاده شده است.
جدول زیر نحوه اتصال پینهای GPIO از رزبری پای به پینهای ورودی روی ماژول درایور موتور را نشان میدهد.
پین GPIO رزبری پای | پین روی ماژول درایور موتور |
7 | IN1 |
8 | IN2 |
9 | IN3 |
10 | In4 |
GND | GND |
برای انجام این اتصالات، کافی است تا از ۵ کابل جامپر دو سر مادگی استفاده کنید. ممکن است درایور شما پین GND را نداشته باشد. در این صورت، کافی سر آن سیم را به ترمینال GND رو برد درایور متصل کنید. تصویر زیر، اتصالات انجام شده در این قسمت را بهخوبی نشان میدهد.
- در یکی از مطلب پیشین از مجله فرادرس، گفتیم که رزبری پای چیست و انواع آن را نیز معرفی کردیم که مطالعه آن به دانش شما در مورد بردهای Raspberry Pi میافزاید.
حرکت موتورها
تا اینجا، اتصالات موتور به درایور انجام شد. اکنون لازم است تا کارهایی که در ادامه گفته میشود را انجام دهید.
- نخست آنکه میبایست موتور سمت چپ ربات و همچنین موتور سمت راست را از هم تفکیک کنید. ما برای این منظور با ماژیک روی موتور سمت راست حرف R و روی موتور سمت چپ، حرف L را نوشتهایم.
- سپس باید بفهمید که هر یک از موتورها برای حرکت رو به جلو یا حرکت رو به عقب به چه سمتی میچرخند.
تصویر زیر را در نظر بگیرید.
فلشهایی که روی موتورها کشیدهایم به این معنی است که آن موتور برای حرکت به سمت جلو میبایست به آن جهت بچرخد.
اکنون لازم است تا برنامه Mu را باز کنیم. ادیتور Mu، برنامهای است که میتوانید کدهای پایتون را درون آن نوشته و اجرا کنید. یعنی نوعی IDE بسیار ساده برای افراد تازهکار بهشمار میرود. برای دسترسی به این برنامه همانطور که در تصویر زیر نشان داده شده است از منوی رزبری پای، ابتدا به Programming رفته و سپس روی برنامه Mu کلیک کنید.
اکنون دستورات آورده شده در زیر را در Mu مینویسیم.
1from gpiozero import Robot
2robby = Robot(left=(7,8), right=(9,10))
در این قطعه کد، ابتدا کلاس Robot
را از کتابخانه gpiozero
به برنامه خود وارد یا به اصطلاح import
کردیم. سپس یک شی بهنام robby
از آن ساختیم. پارامترهای این شی، همان پینهایی هستند که برای موتورهای راست وچپ خود در نظر گرفتهایم. بنابراین باتوجه به این کدها، موتور سمت چپ ما به پینهای شماره ۷ و ۸ از GPIO متصل است و موتور سمت راست با پینهای شماره ۹ و ۱۰ کنترل میشود.
حال میتوانید فایل کدهای خود را با نامی دلخواه مانند robby.py
ذخیره کنید. همچنین، برای اجرای این فایل تنهای کافی است تا روی دکمه Run کلیک کنید.
در این مرحله لازم است تا از طریق ترمینال که آیکن آن در نوار وظیفه موجود است، شِل پایتون را با دستور python
اجرا کنید. سپس دستور زیر را در آن مینویسیم.
robby.forward()
با اجرای این کد، موتورها شروع به حرکت میکنند و جهت چرخش آن برای شما مشخص میشود. برای توقف کافی است تا robot.stop()
را اجرا کنید.
حالا میتوانید دستورات زیر را اجرا کنید.
robby.forward(0.4) robby.right(0.4)
با اجرای دستور دوم باید دقت کنید که جهت چرخش کدام موتور عوض میشود. پارامتر 0.4
نیز سرعت چرخش موتورها را کاهش میدهد تا جهت چرخش آنها را بهتر تشخیص دهید.
در واقع، موتوری که R برچسبگذاری شده میبایست با اجرای این دستور جهت چرخش خود را تغییر دهد. اگر خلاف این موضوع اتفاق افتاد یعنی موتور راست بهشکل صحیح تعریف نشده است و باید در شی ساخته شده پینهای راست و چپ را با هم تعویض کنید.
این مورد را در دستورات زیر نشان دادهایم.
1## e.g. change
2robby = Robot(left=(7,8), right=(9,10))
3## to
4robby = Robot(left=(9,10), right=(7,8))
و سطر آخر این کدها، حالت جدید را نشان میدهد.
تا این قسمت از ساخت پروژه با رزبری پای توانستید جهت راست و چپ واقعی موتورها را امتحان کنید. اکنون میخواهیم عمل «حرکت رو به جلو»
( forward
) و «حرکت به سمت عقب» ( backward
) را نیز تست کنیم. برای این منظور، دستور زیر را اجرا میکنیم.
robby.forward(0.4)
با این دستور موتورها باید به سمت جلو حرکت کنند. تصویر زیر این موضوع را بهتر نشان میدهد.
در صورتیکه حرکت موتورهای شما مطابق با فلش موجود در این تصویر نباشند میبایست جهت چرخش محور موتور را با تعویض شماره پینها تغییر دهید. بهطور مثال، اگر موتور سمت راست شما برخلاف جهت فلش میچرخد میبایست کدهای آن را بهشکل زیر تغییر دهید.
1## e.g. change
2robby = Robot(left=(9,10), right=(7,8))
3## to
4robby = Robot(left=(9,10), right=(8,7))
در خط آخر این کد، پینهای right
تعویض شدهاند که مشکل موجود را برطرف میکند. اکنون میدانید که اگر مشکل از موتور سمت چپ باشد میتوانید با تغییر پینهای آن، جهت چرخش محور موتور را اطلاح کنید.
سر هم کردن ربات
در این قسمت از ساخت ربات با رزبری پای میخواهیم تمامی قطعات ربات خود را مونتاژ کنیم و برای این منظور به یک شاسی احتیاج داریم.
شاسیهای گوناگونی در بازار موجود هستند. بهطور مثال میتوانید از تختههای پلکسی استفاده کنید و برای محکم کردن قطعات روی آن از بستهای کمربندی یا انواع چسبها استفاده کنید. نمونهای از این نوع شاسی را در ادامه آوردهایم.
ممکن است شما بخواهید از موارد دیگری مانند تخته سهلایه یا غیره بهعنوان شاسی ربات خود استفاده کنید. در هر حال، لازم است تا نکاتی را در انتخاب شاسی در نظر داشته باشید. در ادامه این موارد را فهرست کردهایم.
- شاسی انتخابی باید جای کافی برای نگهداری از قطعات ربات ما از جمله برد رزبری پای، درایور موتور و باتریها و غیره داشته باشد.
- با توجه به نوع پروژه که یک ربات Buggy است، میبایست امکان نصب چرخها روی شاسی وجود داشته باشد.
- پروژه ما قابلیت گسترش دارد. یعنی شما در آینده میتوانید قابلیتهای بیشتری مانند استفاده از سنسورهای فاصلهسنج، تعقیب خط، رادار لیزری و غیره را به آن اضافه کنید. پس بهتر است شاسی شما توانایی نگهداری از اینگونه قطعات را داشته باشد و محدودیتی در این رابطه ایجاد نکند.
با این تفاصیل، ما در ادامه یک جعبه مقوایی مانند یک جعبه کفش را بهعنوان شاسی ربات خود استفاده میکنیم. پس از آن بهتر می توانید در مورد شاسی دائمی ربات تصمیم بگیرید.
بهعنوان اولین گام در مونتاژ قطعات ربات میتوانید موتورها را درون جعبه یا همان شاسی فعلی قرار دهید.
قرار است که موتورها درون جعبه قرار بگیرند و چرخها بیرون از جعبه به آنها متصل باشند. پس، ابتدا مکان موتورها را مشخص کنید. سپس با یه ماژیک، محل محور یا شفت موتورها را علامت بزنید.
اکنون میتوانید محل مشخص شده روی دیواره جعبه را با شیئی نوکتیز مانند یک مداد سوراخ کنید.
همانطور که در تصویر زیر هم مشخص است، محور موتورها می بایست به راحتی در محل سوراخ شده قرار گیرند.
کار بعدی که میبایست انجام دهید محکم کردن موتورها روی شاسی است. برای این منظور میتوانید از چسبهای ۲-طرفه، نوار چسب، چسب حرارتی یا غیره استفاده کنید.
اکنون زمان آن رسیده تا هر دو چرخ را به شفت موتورها متصل کنید.
برای قسمت جلوی شاسی هم از یک چرخ هرزگرد استفاده میکنیم.
این چرخها بهراحتی و بهطور معمول با ۲ پیچ به شاسی متصل میشوند. در تصویر زیر، ظاهر این نوع چرخ را مشاهده میکنید.
مراحل مونتاژ ربات در همینجا به پایان رسیده و شما میتوانید رزبری پای خود را با پاوربانک، روشن کنید.
برنامه نویسی ربات
تا این قسمت، پروژه ساخت ربات با رزبری پای را به لحاظ سختافزاری آماده کردیم. اکنون میخواهیم کمی روی برنامهنویسی ربات متمرکز شویم.
با برنامهنویسی ربات Buggy میتوانیم آن را به گونهای برنامهریزی کنیم که عملیات مورد نظر ما را با توجه به قابلیتهای خود، انجام دهد. به زبان ساده، با این کار ربات Buggy را کنترل میکنیم.
مثال برای کنترل ربات
کدهایی که در ادامه آوردهایم، ربات ما را در یک مسیر مربعی شکل هدایت میکند.
1from gpiozero import Robot
2from time import sleep
3robot = Robot(left = (7, 8), right = (9, 10))
4while True:
5 robot.forward()
6 sleep(3)
7 robot.stop()
8 robot.right()
9 sleep(1)
10 robot.stop()
عملکرد ربات ما پس از اجرای این کدها بهصورتی خواهد بود که در ادامه آوردهایم.
- بهمدت ۳ ثانیه، مسیری را به صورت مستقیم به سمت جلو حرکت میکند.
- بهمدت ۱ ثانیه به سمت راست میچرخد.
- دوباره به مرحله اول باز میگردد.
شما میتوانید با کم یا زیاد کردن مقدار تابع sleep
به حرکت مناسبی از ربات، در مسیری مربعی، دست پیدا کنید.
چالش برنامه نویسی ربات
بهعنوان تمرین، شما میتوانید کدهایی بنویسید که ربات را برای حرکت در مسیرهایی به شکلهای دیگر کنترل میکند. برخی از این موارد را در ادامه آوردهایم.
- برنامهای بنویسید که ربات Buggy را در مسیری دایرهای هدایت کند.
- ربات خود را بهشکلی برنامهنویسی کنید ک مسیری را بهصورت زیگزاگ حرکت کند.
- یک مسیر ساده با تعدادی موانع بسازید و سپس، ربات را بهگونهای برنامهنویسی کنید که با موفقیت از میان موانع حرکت کند.
برای برنامهنویسی و هدایت ربات Buggy، لازم است بهخاطر داشته باشید که ربات ما تنها کارهای زیر را میتواند انجام دهد.
- حرکت ربات به سمت جلو با دستور robot.forward()
انجام میشود.
- برای حرکت به سمت عقب از دستور robot.backward()
استفاده میکنیم.
- دستور robot.right()
باعث پیچیدن ربات به سمت راست میشود.
- با دستور robot.left()
ربات Buggy به سمت چپ میپیچد.
- برای توقف ربات از حرکت نیز میتوانید دستور robot.stop()
را بهکار ببرید.
ساخت ریموت کنترل برای ربات Buggy
این بخش از مطلب را میتوان مکمل بخش پیشین دانست. شما تا این لحظه یاد گرفتید که چگونه میتوان یک ربات Buggy ساخت که قابلیت حرکت به سمت عقب، جلو و طرفین را داشته باشد و با رزبری پای کنترل شود.
اکنون و در این بخش میخواهیم برای ربات خود یک ریموتکنترل طراحی کنیم. برای این کار، رویکردهای مختلفی وجود دارد که ۳ مورد را در ادامه نام بردهایم.
- کنترل ربات Buggy با موبایل یا تبلت اندرویدی
- ریموتکنترل دستساز با قطعات الکترونیکی معمولی
- کیت صوتی AIY گوگل
که ۲ مورد اول را در این مطلب آموزش دادهایم.
مواردی که در این بخش یاد می گیرید
مباحثی را که در این بخش قرار است به آن بپردازیم را در ادامه آوردهایم.
- اینکه به چه صورت، دستور ورودی را از دستگاه اندرویدی – که نقش ریموتکنترل دارد – دریافت کرده تا بتوانیم آن را در رزبری پای پردازش کنیم.
- چگونه از راه دور و با استفاده از پینهای GPIO موجود روی رزبری پای، ربات خود را کنترل کنیم.
ملزومات ساخت ریموت کنترل برای کنترل ربات
همانطور که اشاره شد، در این بخش قرار است تا نحوه ساخت ۲ نوع ریموتکنترل را به شما یاد بدهیم. بنابراین ملزومات نرمافزاری و سختافزاری این پروژه بسته به روش انتخابی میتواند متفاوت باشد. اما در هر حال، به یک ربات Buggy نیاز دارید که در بخش نخست این نوشتار نحوه ساخت آن را بیان کردهایم. ملزومات هر کدام از روشهای ساخت ریموتکنترل را نیز در بخش مربوطه بیان میکنیم.
ریموت کنترل اندرویدی
در این قسمت، نحوه ساخت سیستم کنترل از راه دور اندرویدی را به شما یاد میدهیم تا بتوانید با یک دستگاه اندرویدی مانند گوشی موبایل، ربات خود را کنترل کنید. بنابراین داشتن دستگاه اندرویدی از ملزومات این پروژه محسوب میشود.
راهنمای ساخت ریموت کنترل اندرویدی
شما میبایست اپلیکیشن «Blue Dot» را روی دستگاه اندرویدی خود دانلود و نصب کنید. این اپلیکیشن میتواند بهعنوان یک ریموتکنترل عمل کرده و به کمک آن ربات Buggy را هدایت کنید.
- لینک دانلود اپلیکیشن Blue Dot از پلیاستور: «+»
برای ادامه کار، لازم است تا یکسری تنظیمات را انجام دهیم. بنابراین، ترمینال رزبری پای خود باز کنید و ۲ ماژول پایتون dbus
و bluedot
را نصب کنید. برای این منظور میتوانید از دستور زیر کمک بگیرید.
sudo pip3 install bluedot
نحوه ارتباط اندروید با رزبری پای از طریق اپلیکیشن Blue Dot
در اینجا، نکاتی که برای استفاده از اپلیکیشن Blue Dot لازم است بدانید را آوردهایم.
- ابتدا لازم است تا موبایل یا دستگاه اندرویدی خود را با برد رزبری پای، جفت یا به اصطلاح Pair کنید. پس، بلوتوث گوشی اندرویدی خود را روشن کنید تا توسط سایر وسیلهها قابل مشاهده باشد.
- در رزبری پای، روی آیکن بلوتوث موجود در نوار وظیفه کلیک کنید.
- پس از اطمینان از روشن بودن بلوتوث (فلش آبیرنگ)، اینبار روی گزینه Make Discoverable (فلش قرمزرنگ) کلیک کنید تا قابل مشاهده باشد. اکنون لازم است تا گزینه Add Device (فلش سبزرنگ) را انتخاب کنید. با این کار، پنجرهای باز میشود که میبایست نام بلوتوث موبایل اندرویدی خود را در آن پیدا کرده و سپس روی دکمه Pair کلیک کنید.
پس از کلیک روی Pair پیغامی به شما نشان داده میشود که میبایست آن را تأیید کنید. گاهی اوقات نیز از شما میخواهد یا یک پینکد را وارد کنید. همزمان، روی دستگاه اندرویدی هم چنین پیغامی برای تأیید ظاهر میشود. در نهایت دستگاه شما میبایست با برد رزبری پای Pair شده باشد.
دریافت سیگنال ورودی با پایتون
ماژول bluedot
که پیش از این نصب کردهایم را اکنون میتوانیم برای دریافت داده از اپلیکیشن اندرویدی بهکار ببریم. کدهای زیر در برنامه Mu رزبری پای را نظر بگیرید.
1from bluedot import BlueDot
2bd = BlueDot()
3bd.wait_for_press()
4print("You pressed the blue dot!")
با اجرای این برنامه ساده قرار است از کلید فشرده شده روی دستگاه اندرویدی خود مطلع شویم. پس به اپلیکیشن Blue Dot بروید. فهرستی از وسایل موجود نشان داده میشود که میبایست برد رزبری پای خود را انتخاب کنید.
با برقراری ارتباط، محیط برنامه شامل پیغام Connected to raspberrypi
و همچنین یک دایره آبیرنگ بزرگ به شما نشان داده میشود. به شل پایتون باز میگردیم. در اینجا هم پیغامی با مضمون اتصال به کلاینت به شما نشان داده میشود.
اکنون اگر در موبایل خود، دایره آبیرنگ را لمس کنیم، پیغام You pressed the blue dot!
در شل پایتون نشان داده میشود.
سایر متدها
شما میتوانید کدهایی که در ادامه آورده شده را نیز اضافه کنید.
1bd.when_pressed = foo
2bd.when_release = bar
3bd.when_moved = baz
اینها در واقع متدهایی هستند که دادههای بیشتری از تعامل ما با اپلیکیشن و دایره آبیرنگ دریافت میکنند.
- با توجه به خط اول این کدها، هنگامیکه دایره آبیرنگ فشرده شود، تابع foo
را صدا میزند.
- در خط دوم، میگوید که اگر دایره آبیرنگ از حالت لمس رها شد، آنگاه تابع bar
را فراخوانی کند.
- خط آخر نیز بیانگر این است که با حرکت دادن انگشت روی دایره آبیرنگ، تابع baz
اجرا میشود.
بهطور مثال، کدهای زیر را میتوان برای تابع foo
نوشت.
1def foo(pos):
2 print(pos.x)
3 print(pos.y)
همانطور که مشخص است، هنگام لمس دایره آبیرنگ، یعنی زمانیکه تابع foo صدا زده میشود، موقعیت انگشت ما که آرگومان ورودی این تابع است، چاپ میشود. مختصات x و y در اینجا، اعدادی بین -1
و 1
هستند و به محل لمس انگشت روی دایره آبیرنگ اشاره دارند. علاوه بر این، موارد زیر را نیز داریم.
- pos.top
: اگر انگشت ناحیهای نزدیک به بالای دایره آبیرنگ را لمس کند، مقدار True
را بر میگرداند.
- pos.bottom
: در صورتی True
بر میگرداند که انگشت شما ناحیه پایین دایره آبیرنگ را لمس کند.
- pos.right
: مقدار True
در این مورد یعنی ناحیه سمت را دایره آبیرنگ را لمس کردهاید.
- pos.left
: این مورد نیز مقدار True
را بر میگرداند، اگر که ناحیه لمس شده نزدیک به سمت چپ دایره آبیرنگ باشد.
اکنون که با نحوه ارتباط اندروید با رزبری پای بهوسیله اپلیکیشن Blue Dot آشنا شدید، آموزش ساخت ریموتکنترل برای هدایت ربات Buggy خود را ادامه میدهیم.
برنامه Mu را از منوی Programming رزبری پای باز کرده و کدهای زیر را درون آن مینویسیم.
1from bluedot import BlueDot
2from gpiozero import Robot
3
4bd = BlueDot()
5robot = Robot(left=(7, 8), right=(9, 10)) ##this may be different depending on your wiring
توضیحات این کدها را در ادامه آوردهایم.
- خطوط شماره ۱ و ۲: در این خطوط، ماژولهای gpiozero
و bluedot
را وارد یا به اصطلاح import
کردهایم.
- خط شماره ۴: در این خط، شیئی بهنام bd
از کلاس BlueDot
ساختهایم.
- خط شماره ۵: در این خط، شی robot
را از کلاس Robot
ایجاد کردهایم.
سپس، تابعی بهنام move
تعریف میکنیم که پارامتری بهنام pos دارد.
در این تابع بررسی میکنیم که اگر ناحیه بالای دایره آبیرنگ لمس شده بود ( یعنی pos.top == True
)، ربات به سمت جلو حرکت کند ( robot.forward()
). کدهای تابع move
، تابع stop
و نحوه فراخوانی آنها را در ادامه آوردهایم.
1def move(pos):
2 if pos.top:
3 robot.forward()
4 elif pos.bottom:
5 robot.backward()
6 elif pos.right:
7 robot.right()
8 elif pos.left:
9 robot.left()
10
11def stop():
12 robot.stop()
13
14bd.when_pressed = move
15bd.when_moved = move
16bd.when_released = stop
ریموت کنترل دست ساز
در این قسمت میخواهیم نحوه ساخت سیستم کنترل از راه دور دستساز، با سرهم کردن یکسری قطعات الکترونیکی را با هم مرور کنیم تا بهکمک آن بتوانیم ربات Buggy خود را کنترل کنیم. بنابراین، تهیه مجموعهای از قطعات الکترونیکی افزون بر ربات ،Buggy جزو ملزومات این پروژه محسوب میشود.
ملزومات ساخت ربات دست ساز
در ادامه، فهرستی از ابزارهای مورد نیاز برای ساخت ریموتکنترل را آوردهایم.
- یک عدد برد رزبری پای اضافی
- بردبورد
- ۴ عدد دکمه فشاری
- سیم جامپر نری به مادگی به تعداد مورد نیاز
- سیم جامپر نری به نری به تعداد مورد نیاز
با توجه به اینکه در این قسمت ۲ برد رزبری پای داریم، برد متصل به ربات را «رزبری پای» و برد اضافی برای ریموتکنترل را «رزبری پای اضافی» مینامیم.
راهنمای ساخت ریموت کنترل دست ساز
برای این کار لازم است تا اتصال سیمی بین دکمههای فشاری را با برد رزبری پای اضافی، برقرار کنیم. این دکمهها را روی بردبورد قرار میدهیم و از سیمهای جامپر برای برقراری ارتباط استفاده میکنیم.
تصویری که در ادامه آوردهایم این موضوع را بهخوبی نشان میدهد.
با توجه به ساختار و اتصالات داخلی بردبورد، سوراخهایی که در راستای فلش قرمزرنگ وجود دارند از داخل به هم وصل هستند. با توجه به همین خصوصیت، برای اینکه تعداد سیمکشیها کمتر شود از GND مشترک، بین دکمه و برد رزبری پای اضافی استفاده کردهایم. باقی اتصالات به پینهای GPIO نیز طبق تصویر کاملاً واضح هستند.
حالا به سراغ برد رزبری پای اصلی میرویم. در اینجا لازم است تا با دستور زیر، دیمن pigpio را راهاندازی کنیم. برای انجام این کار، دستور زیر را در ترمینال مینویسیم.
sudo pigpiod
همچنین، با دستور زیر، دیمن pigpio بهصورت خودکار هنگام بوت رزبری پای راهاندازی میشود.
sudo systemctl enable pigpiod
اکنون میخواهیم تا آدرس IP ربات یا همان برد رزبری پای اصلی را پیدا کنیم. برای این منظور دستور زیر را اجرا میکنیم.
hostname -I
اجرای این دستور، نتیجه مشابه با تصویر زیر را برایمان تولید خواهد کرد. کادر قرمزرنگ آدرس IP مورد نظر ما را نشان میدهد.
این آدرس را در جایی نگه میداریم. کمی جلوتر با استفاده از همین آدرس، به ربات متصل میشویم.
راهنمای اجرای توابع با دکمه فشاری
در این قسمت، نحوه کار با دکمهها فشاری را بیان کردهایم. در صورتی که با این مبحث آشنا هستید میتوانید از آن رد شوید.
به تصویر بردبورد و رزبری پای که در ادامه آورده شده، توجه کنید.
در این تصویر، دکمه فشاری روی بردبورد را با سیم جامپر به پین شماره ۱۷ متصل کردهایم. قصد داریم تا با فشردن این کلید یک تابع اجرا شود. پس طبق مراحل زیر پیش میرویم.
- دکمه مورد نظر را با کدهای زیر تعریف میکنیم.
1from gpiozero import Button
2btn = Button(17)
در این کدها، نخست، ماژول gpiozero
را وارد برنامه کرده و سپس با ایجاد نمونهای از کلاس Button، گفتهایم که دکمه را به پین شماره ۱۷ رزبری پای وصل کردهایم.
- تابعی بهنام hello
– با هدف آزمایش – تعریف میکنیم. دقت داشته باشید که این تابع هیچ آرگومانی ندارد.
1def hello():
2 print('Hello')
این تابع، عبارت Hello را در خروجی چاپ میکند.
- اکنون یک تریگر برای فراخوانی تابع hello
مینویسیم.
1btn.when_pressed = hello
با این کار و طبق این تریگر، هنگامیکه دکمه فشرده شود، تابع نیز اجرا شده و عبارت Hello در خروجی چاپ میشود.
راهنمای استفاده از پین های GPIO روی رزبری پای اضافی
برای اینکه بتوانیم عملکرد پینهای GPIO رزبری پای را از کامپیوتری دیگر یعنی بهصورت ریموت، دستکاری کنیم میبایست از ماژولی بهنام gpiozero
کمک بگیریم. اگر با این مباحث آشنایی دارید، میتوانید به قسمت بعدی بروید. قبل از بهکارگیری ماژول gpiozero
لازم است تا طبق مراحل زیر پیش برویم.
- تنظیمات رزبری پای یا Raspberry Pi Configuration را از منوی اصلی رزبری پای و گزینه Preferences باز کرده و گزینه Remote GPIO موجود در زبانه Interfaces را روی Enabled تنظیم میکنیم. این کار به ما اجازه میدهد تا بتوانیم بهصورت ریموت یا از راه دور به این رزبری پای دسترسی داشته باشیم.
- سپس به سراغ رزبری پای اضافی میرویم و دستورات زیر را در ترمینال آن اجرا میکنیم.
sudo pigpiod
- این دستور، دیمن pigpio را اجرا میکند. همچنین میتوان دستوری که در ادامه آورده شده را اجرا کرد تا این قابلیت، هنگام بوت رزبری پای اجرا شود.
sudo pigpiod sudo systemctl enable pigpiod
- حال اگر روی کامپیوتری gpiozero نصب باشد، میتوان از آن کامپیوتر، پینهای GPIO این رزبری پای را بهصورت ریموت دستکاری کرد.
- به سراغ کامپیوتری میرویم که قرار است از آن با پینهای رزبری پای ربات کار کنیم. لازم است ابتدا ۲ کتابخانه زیر را در برنامه وارد کنید.
1from gpiozero import LED
2from gpiozero.pins.pigpio import PiGPIOFactory
توجه داشته باشید که خط اول، دستگاهی است که قرار است کنترل شود و در این مثال یک LED است.
در مراحل قبل یک آدرس IP از رزبری پای ربات بهدست آورده بودیم. آن آدرس را بهصورت زیر وارد کنیم.
1rem_pi = PiGPIOFactory(host="192.168.1.100")
توجه داشته باشید که 192.168.1.100
جایگزین آدرس IP رزبری پای ربات میشود.
حالا میتوانیم کدهای زیر را بنویسیم و پس از ایجاد قطعه الکترونیکی که قرار است با آن کار کنیم، شماره پین آن را نیز مشخص کنیم.
1led = LED(17, pin_factory=rem_pi)
2led.blink()
ادامه کدنویسی پروژه
اکنون که با این مباحث پیشنیاز آشنا شدید، به پروژه خود بر میگردیم و برنامهنویسی برد رزبری پای اضافی را شروع میکنیم.
برای این منظور کافی است تا برنامه Mu را باز کرده و کدهای زیر را در آن بنویسیم.
1from gpiozero import Robot, Button
2from gpiozero.pins.pigpio import PiGPIOFactory
3
4robot_pins = PiGPIOFactory(host="192.168.1.79")
5robot = Robot(left=(7,8), right=(9,10), pin_factory=robot_pins)
6forward = Button(4)
7backward = Button(17)
8right = Button(13)
9left = Button(21)
10
11forward.when_pressed = robot.forward
12forward.when_released = robot.stop
13
14backward.when_pressed = robot.backward
15backward.when_released = robot.stop
16
17right.when_pressed = robot.right
18right.when_released = robot.stop
19
20left.when_pressed = robot.left
21left.when_released = robot.stop
با توجه به این کدها، نخست، ماژولهای مورد نیاز را وارد کردهایم. سپس، تنظیماتی را در مورد پینها انجام میدهیم.
ریموتکنترل ما ۴ دکمه دارد و قصد داریم با فشار هریک، ربات Buggy در جهت خاصی حرکت کند. بهطور مثال، با فشردن یک دکمه، ربات شروع به حرکت به سمت جلو کرده، با فشردن دکمهای دیگر، به سمت عقب حرکت کند و غیره.
ادامه یادگیری با فرادرس
اکنون که ساخت ربات با رزبری پای را یاد گرفتید، میتوانید برای تقویت مهارتهای خود در رزبری پای از فیلمهای آموزشی فرادرس که لینک آنها در ادامه آورده شده استفاده کنید.
جمعبندی
در این مطلب از مجله فرادرس مراحل ساخت ربات با رزبری پای را با هم بررسی کردیم. توضیح دادیم که این مینیکامپیوترها بسته به مدلی که دارند، امکانات و قابلیتهای متنوعی را به لحاظ توان پردازشی و غیره ارائه میدهند. به زبان ساده، رزبری پای را میتوان یک کامپیوتر دانست که انتظارات رایجی نظیر قابلیت اتصال بیسیم به اینترنت، پورتهای HDMI برای اتصال به مانیتور، پورتهای USB و غیره را بر آورده میسازد.
این سیستمهای کوچک و سبکوزن که اندازه آنها شاید از یک کارت اعتباری خیلی بزرگتر نباشد، میتوانند بههمراه ماوس، کیبرد، مانیتور تبدیل به یک سیستم کامپیوتری کامل شوند و در موارد متعددی نیازهای ما را رفع کنند. ضمن اینکه مدلهای معمولی آن با قیمتهای بسیار مناسبی قابل تهیه هستند. یکی از کاربردهای رایج بردهای رزبری، ساخت ربات با آنها است. ما در این نوشتار، نحوه ساخت یک ربات چرخدار، معروف به Buggy را توضیح دادیم و از یک جعبه مقوایی بهعنوان شاسی آن استفاده کردیم. ابتدا وسایل لازم برای ساخت این ربات را نام بردیم و سپس، اتصالهای لازم بین موتورها، ماژول درایور موتور و برد رزبری پای را انجام دادیم. در نهایت برد را برنامهنویسی کردیم و ربات Buggy را به حرکت در آوردیم.
در بخش بعد نیز، نحوه ساخت ریموتکنترل را توضیح دادیم و برای این منظور از ۲ روش رایج و ساده استفاده کردیم. بهطوریکه اکنون میتوانید ربات Buggy خود را هم با دستگاههای اندرویدی خود و هم با یک ریموتکنترل دستساز کنترل کنید.
بردهای رزبری پای نیز مانند بردهای آردوینو، طرفداران زیاد و خاص خود را دارند و طیف گستردهای از افراد همچون دانش آموزان و سایر افراد مشتاق به فناوری را در بر میگیرند. شما میتوانید مؤلفههای گوناگونی نظیر ماژولهای فاصلهسنج، سنسورهای دما و رطوبت، حرکت، ماژول دوربین، رلهها، موتورهای گوناگون و غیره را به رزبری پای متصل کرده و انواع گوناگونی از پروژهها را پیادهسازی کنید.
source