فهرست مطالب:

FaceBot: 8 مرحله
FaceBot: 8 مرحله

تصویری: FaceBot: 8 مرحله

تصویری: FaceBot: 8 مرحله
تصویری: Escape City - Level 8 2024, نوامبر
Anonim
FaceBot
FaceBot

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

چندین ربات کوچک ارزان قیمت با قیمت کمتر از 25 دلار موجود است که به شما امکان می دهد اصول علوم کامپیوتر را آموزش دهید. یکی از مشکلات این ربات ها این است که آنها شفافیت خود را در مورد آنچه در داخل ربات در حال ساخت است ارائه نمی دهند. در سال 2018 همه چیز با در دسترس بودن صفحه نمایش های OLED ارزان قیمت و با کیفیت بالا تغییر کرد. این نمایشگرها مزایای زیر را دارند:

  • آنها بسیار روشن هستند و کنتراست بالایی دارند. حتی در یک اتاق روشن ، خواندن آنها از زوایای مختلف آسان است.
  • وضوح خوبی دارند. مواردی که من استفاده می کنم 168x64 پیکسل هستند. این تقریباً 4 برابر نمایشگرهای قبلی است که استفاده کرده ایم.
  • آنها کم مصرف هستند و حتی زمانی که قدرت ربات شما در حال افت است ، به طور مداوم کار می کنند.
  • آنها نسبتاً کم هزینه هستند (هر کدام حدود 16 دلار) و قیمت ها در حال کاهش است.

در گذشته ، برنامه نویسی آنها دشوار بود و از حافظه زیادی برای استفاده با آردوینو نانو ارزان قیمت استفاده می کردند. نانو فقط دارای 2K RAM یا RAM پویا است. این راهنما به شما نشان می دهد که چگونه با این مشکلات کار کنید و رباتی بسازید که بچه ها دوست دارند برنامه نویسی کنند.

مرحله 1: مرحله 1: ربات پایه خود را بسازید

مرحله 1: ربات پایه خود را بسازید
مرحله 1: ربات پایه خود را بسازید

برای ساخت FaceBot معمولاً از ربات پایه استفاده می کنیم. یک مثال ، ربات CoderDojo 25 دلاری است که در اینجا توضیح داده شده است. این ربات از کم هزینه و محبوب Arduino Nano ، یک کنترل کننده ساده موتور ، 2 موتور DC و 4 یا 6 باتری AA استفاده می کند. اکثر دانش آموزان با استفاده از سنسور پینگ یک ربات اجتناب از برخورد را ساخته اند. از آنجا که یک سیستم قدرت 5V ارائه می دهد ، برای FaceBot مناسب است. برای پایین نگه داشتن هزینه ها ، معمولاً از دانش آموزانم می خواهم قطعات را به صورت آنلاین از e-Bay سفارش دهند. قطعات اغلب 2-3 هفته طول می کشد تا به آنها برسد و نیاز به لحیم جزئی برای موتورها و کلید قدرت دارد. بقیه اتصالات با استفاده از یک تخته نان 400 تایی ایجاد می شود. دانش آموزان اغلب سیم ها را به صورت داغ چسب می زنند تا از لغزش خارج شوند.

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

پس از برنامه ریزی اجتناب از برخورد ، خوانده می شوید که چهره اضافه کنید!

مرحله 2: مرحله 2: صفحه OLED خود را پیدا کرده و سفارش دهید

مرحله 2: صفحه OLED خود را پیدا کرده و سفارش دهید
مرحله 2: صفحه OLED خود را پیدا کرده و سفارش دهید

وقتی نمایشگرهای OLED ظاهر شدند ، نمایشگرهای ارزان قیمت برای ساعت یا مانیتور تناسب اندام طراحی شده بودند. در نتیجه آنها کوچک بودند ، معمولاً عرض آنها حدود 1 اینچ بود. خبر خوب این است که آنها کم هزینه بودند ، حدود 3 دلار. ما چند ربات با این نمایشگرها ساختیم ، اما چون اندازه نمایشگرها محدود بود ، آنچه را که می توانستیم روی صفحه انجام دهیم ، محدود بود. سپس در سال 2018 شاهد کاهش قیمت صفحه نمایش OLED بزرگتر 2.42 اینچی بودیم. در ژانویه 2019 قیمتها به حدود 16 دلار کاهش می یابد. سرانجام ما یک نمایشگر عالی داشتیم که می توانستیم از آن برای چهره ربات خود استفاده کنیم.

در اینجا مشخصات این نمایشگرها آمده است:

  1. 2.42 اینچ (اندازه مورب)
  2. عرض 128 پیکسل (ابعاد x)
  3. ارتفاع 64 پیکسل (در اندازه y)
  4. قدرت کم (معمولاً 10ma)
  5. تک رنگ (رنگهای زرد ، سبز ، آبی و سفید)
  6. رابط پیش فرض SPI اگرچه می توانید آن را به I2C تغییر دهید
  7. درایور SSD1309 (درایور صفحه نمایش بسیار رایج)

رابط SPI دارای هفت سیم است. در اینجا برچسب های معمولی روی رابط وجود دارد:

  1. CS - انتخاب تراشه
  2. DC - داده/فرمان
  3. RES - بازنشانی
  4. SDA - Data - این باید به پین 11 Arduino Nano متصل شود
  5. SCL - Clock - این باید به پین 13 Arduino Nano متصل شود
  6. VCC - +5 ولت
  7. GND - زمین

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

مرحله 3: مرحله 3: OLED را به آردوینو نانو وصل کنید

مرحله 3: OLED را به Arduino Nano وصل کنید
مرحله 3: OLED را به Arduino Nano وصل کنید
مرحله 3: OLED را به Arduino Nano وصل کنید
مرحله 3: OLED را به Arduino Nano وصل کنید

اکنون شما آماده آزمایش OLED خود هستید. من از آردوینو نانو دیگری فقط برای آزمایش اینکه هر صفحه نمایش کار می کند استفاده می کنم. پس از انجام آزمایشات ، آن را به ربات متصل می کنم. نمودار سیم کشی تستر در شکل بالا نشان داده شده است. توجه داشته باشید که می توانید اتصالات OLED را به پین های دیگر که از خروجی های دیجیتال پشتیبانی می کنند منتقل کنید ، اما اگر مطمئن شوید که SCL (ساعت) روی Arduino Nano pin 13 و SDA (data) روی Arduino Nano pin 11 است ، می توانید از تنظیمات پیش فرض در نرم افزار. این کد شما را کمی ساده تر می کند.

مرحله 4: مرحله 4: صفحه نمایش خود را آزمایش کنید

مرحله 4: صفحه نمایش خود را آزمایش کنید
مرحله 4: صفحه نمایش خود را آزمایش کنید

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

می توانید این کتابخانه را با جستجوی عبارت "u8g2" در منوی "مدیریت کتابخانه ها" به Arduino IED خود اضافه کنید. همچنین می توانید کد را مستقیماً از gethub بارگیری کنید.

github.com/olikraus/u8g2

کد آزمایشی که من استفاده می کنم در اینجا آمده است:

github.com/dmccreary/coderdojo-robots/blob…

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

// ما از SSD1306 ، 128x64 ، تک صفحه ، بدون نام ، 4 سیم ، سخت افزار ، SPI بدون چرخش استفاده می کنیم که فقط از 27٪ حافظه پویا استفاده می کند

ما از حالت تک صفحه ای استفاده می کنیم زیرا آن حالت از حداقل RAM استفاده می کند. ما از رابط سخت افزاری 4 سیم استفاده می کنیم و OLED به طور پیش فرض دارای SPI است.

مرحله 5: مرحله 5: OLED خود را به ربات اضافه کنید

مرحله 5: OLED خود را به ربات اضافه کنید
مرحله 5: OLED خود را به ربات اضافه کنید

اکنون که یک OLED فعال داریم و می دانیم چگونه کتابخانه های u8g2 را راه اندازی کنیم ، آماده ایم که OLED را با ربات اصلی خود ادغام کنیم. چند نکته را باید در نظر گرفت. در آزمایش OLED ما از پین هایی استفاده کردیم که همه در کنار هم بودند تا سیم کشی راحت تر شود. متأسفانه ، ما برای رانندگی ربات خود به پین 9 نیاز داریم زیرا یکی از پایه های PWM است که باید سیگنال آنالوگ را به راننده موتور ارسال کنیم. راه حل این است که سیم روی پین 9 را به یک پین رایگان دیگر منتقل کنید و سپس عبارت #define را به آن پین جدید تغییر دهید. برای نصب OLED در جلوی ربات ، من دو قطعه مثلثی از پلکسی گلاس را برش داده و به صورت داغ چسباندم. آنها را به شاسی می رسانند. من همیشه دوست دارم از کاغذ سنباده معمولی برای زبر کردن سطح پلکسی گلاس قبل از چسباندن قطعات به هم استفاده کنم تا خیلی راحت از هم جدا نشوند.

در مرحله بعد ، اجازه دهید اطلاعاتی در مورد OLED خود بدست آوریم و چند چهره روی ربات ترسیم کنیم!

مرحله 6: مرحله 6: نمایش پارامترهای ربات

مرحله 6: نمایش پارامترهای ربات
مرحله 6: نمایش پارامترهای ربات

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

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

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

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

github.com/dmccreary/coderdojo-robots/blob…

مرحله 7: مرحله 7: چند چهره ترسیم کنید

مرحله 7: چند چهره ترسیم کنید!
مرحله 7: چند چهره ترسیم کنید!

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

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

برای بدست آوردن اندازه صفحه نمایش می توانید از توابع display.height () و display.width () استفاده کنید. در کد زیر متغیرها را تنظیم می کنیم

half_width = display.width ()/2؛ half_height = display.height ()/2؛

اگر این محاسبات را بارها انجام دهید ، کد یکبار محاسبه می شود و در یک متغیر ذخیره می شود. در اینجا چند نمونه از نحوه ترسیم صورت خسته کننده مستقیم در بالا آورده شده است:

// ما این کار را در ابتدای هر حلقه انجام می دهیم

display.clearDisplay ()؛ // یک چهره روشن برای backgrounddisplay.fillCircle (نیم_ عرض ، نیم_ارتفاع ، 31 ، سفید) ؛ // صفحه تاریک چشم راست.fillCircle (half_width - 10 ، display.height ()/3 ، 4 ، BLACK) ؛ // چشم چپ darkdisplay.fillCircle (half_width + 10، display.height ()/3، 4، BLACK)؛ // یک خط مستقیم برای نمایش دهان بکشید. drawrawline (half_width - 10، display.height ()/3 * 2 ، half_width + 10، display.height ()/3 * 2 ، BLACK) ؛ // این خط چهره جدید ما را به صفحه نمایش OLED می فرستد. display.display ()؛

مرحله 8: مرحله 8: سفارشی سازی کنید

مرحله 8: سفارشی سازی
مرحله 8: سفارشی سازی

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

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

  1. راست فوروارد
  2. معکوس راست
  3. چپ به جلو
  4. چپ معکوس

برای هر حالت ، صفحه نمایش با یک صفحه نمایش جدید به روز می شود تا نشان دهد که کدام چرخ باید در چه جهت بچرخد.

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

github.com/dmccreary/coderdojo-robots/blob…

مثالهای اضافی و جزئیات برنامه نویسی زیادی در صفحه FaceBot CoderDojo Robots GitHub وجود دارد.

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

لطفاً به ما اطلاع دهید که شما و دانش آموزان شما با چه چهره جدیدی مواجه می شوید!

کد نویسی مبارک!

توصیه شده: