فهرست مطالب:

ربات کره: ربات آردوینو با بحران وجودی: 6 مرحله (همراه با تصاویر)
ربات کره: ربات آردوینو با بحران وجودی: 6 مرحله (همراه با تصاویر)

تصویری: ربات کره: ربات آردوینو با بحران وجودی: 6 مرحله (همراه با تصاویر)

تصویری: ربات کره: ربات آردوینو با بحران وجودی: 6 مرحله (همراه با تصاویر)
تصویری: کنترل در ورودی با اینترنت اشیاء IOT ربات تلگرام آردوینو IOT Door Lock 2024, دسامبر
Anonim
Image
Image

این پروژه بر اساس مجموعه انیمیشن "ریک و مورتی" ساخته شده است. در یکی از قسمت ها ، ریک روباتی می سازد که تنها هدفش آوردن کره است. ما به عنوان دانشجوی Bruface (دانشکده فنی مهندسی بروکسل) برای پروژه مکاترونیک وظیفه داریم که یک ربات را بر اساس یک موضوع پیشنهادی بسازد. وظیفه این پروژه این است: یک ربات بسازید که فقط کره را سرو می کند. این می تواند یک بحران وجودی داشته باشد. البته روبات در قسمت Rick and Morty یک ربات بسیار پیچیده است و باید برخی ساده سازی ها را انجام داد:

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

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

به طور خلاصه ، ربات باید شرایط زیر را برآورده کند:

  • باید ایمن باشد: باید از موانع جلوگیری کند و از سقوط خود روی میز جلوگیری کند.
  • این روبات باید کوچک باشد: فضای روی میز محدود است و هیچ کس روباتی را که کره را سرو کند اما اندازه آن نصف میز باشد ، نمی خواهد.
  • کار روبات نمی تواند به اندازه یا شکل میز بستگی داشته باشد ، به این ترتیب می توان از آن در جداول مختلف استفاده کرد.
  • باید کره را به شخص مناسب روی میز بیاورد.

مرحله 1: مفهوم اصلی

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

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

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

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

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

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

مشکلات اصلی پروژه به کد نویسی بستگی دارد ، زیرا قسمت مکانیکی بسیار ساده است. بسیاری از موارد را باید در نظر گرفت تا از گیر افتادن یا انجام کار ناخواسته ربات جلوگیری شود. مشکلات اصلی که ما باید حل کنیم از دست دادن سیگنال IR به دلیل وجود یک مانع و متوقف شدن آن هنگام رسیدن به دکمه است!

مرحله 2: مواد

قطعات مکانیکی

  • چاپگر سه بعدی و دستگاه برش لیزری

    • از PLA برای چاپ سه بعدی استفاده می شود اما می توانید از ABS نیز استفاده کنید
    • صفحه ای از تخته سه لا توس 3 میلی متری برای برش لیزری مورد استفاده قرار می گیرد زیرا امکان اصلاح بعدا را به راحتی می دهد ، پلکسی گلاس نیز می تواند مورد استفاده قرار گیرد اما اصلاح آن پس از برش لیزری بدون از بین بردن آن دشوارتر است.
  • پیچ ، مهره ، واشر

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

  • فاصله دهنده های PCB ، 25 میلی متر و 15 میلی متر
  • 2 موتور سروو با چرخ های سازگار
  • مقداری سیم فلزی ضخیم با قطر 1-2 میلی متر

قطعات الکترونیکی

  • میکروکنترلر

    1 برد arduino UNO

  • سرو موتورها

    • 2 سروو موتور بزرگ: 6 کیلوگرم پیوسته 360 درجه را فعال کنید
    • 2 موتور سروو میکرو: Feetech FS90
  • سنسورها

    • 1 سنسور اولتراسونیک
    • 2 سنسور مجاورت IR
    • 2 فوتودیود IR
  • باتری ها

    • 1 نگهدارنده باتری 9 ولت + باتری
    • 1 نگهدارنده باتری 4AA + باتری
    • 1 جعبه باتری 9 ولت + باتری
  • اجزای اضافی

    • برخی از سیم های پرشی ، سیم ها و صفحات لحیم کاری
    • برخی از مقاومت ها
    • 1 LED IR
    • 3 سوئیچ
    • 1 زنگ
    • 1 دکمه
    • 1 عدد اتصال باتری آردوینو به 9 ولت

مرحله 3: آزمایش الکترونیک

آزمایش الکترونیک
آزمایش الکترونیک
آزمایش الکترونیک
آزمایش الکترونیک

ایجاد دکمه:

این دکمه به سادگی توسط یک سوئیچ ، یک LED مادون قرمز و یک مقاومت 220 اهم به صورت سری ساخته می شود که از باتری 9 ولت تغذیه می کند. این دستگاه برای یک طراحی جمع و جور و تمیز در یک باتری 9 ولت قرار داده شده است.

ایجاد ماژول های گیرنده مادون قرمز:

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

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

  • سرو موتورهای پیوسته ؛
  • سنسور اولتراسونیک ؛
  • سروو موتورهای پیوسته ؛
  • زنگ؛
  • تشخیص جهت دکمه IR ؛
  • تشخیص لبه توسط سنسورهای مجاورت ؛

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

مرحله 4: طراحی قطعات چاپ سه بعدی و برش لیزری

طراحی قطعات چاپ سه بعدی و برش لیزری
طراحی قطعات چاپ سه بعدی و برش لیزری
طراحی قطعات چاپ سه بعدی و برش لیزری
طراحی قطعات چاپ سه بعدی و برش لیزری
طراحی قطعات چاپ سه بعدی و برش لیزری
طراحی قطعات چاپ سه بعدی و برش لیزری

قطعات برش لیزری

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

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

قطعات کوچکتر به ابعاد سرووی بزرگ بریده می شوند تا به مجموعه ثابت شوند.

قطعات چاپ سه بعدی

علاوه بر برش لیزری ، برخی قطعات نیاز به چاپ سه بعدی دارند:

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

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

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

همه فایلهای SOLIDWORKS را می توان در پوشه فشرده یافت.

مرحله 5: مونتاژ و سیم کشی

Image
Image
مونتاژ و سیم کشی
مونتاژ و سیم کشی
مونتاژ و سیم کشی
مونتاژ و سیم کشی
مونتاژ و سیم کشی
مونتاژ و سیم کشی

مونتاژ ترکیبی از سیم کشی و پیچاندن اجزاء با هم است که از پایین به بالا شروع می شود.

صفحه پایین

صفحه پایینی با بسته باتری 4AA ، موتورهای سروو ، قسمت چاپ شده (متصل به کاستور زیر صفحه) ، دو سنسور لبه و 6 فاصله زن و مرد مونتاژ شده است.

صفحه وسط

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

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

صفحه بالا

در این قسمت از مونتاژ ، سوئیچ ها ثابت نیستند ، اما ربات می تواند همه کارها را انجام دهد ، مگر اینکه به درپوش نیاز داشته باشد ، بنابراین به ما امکان می دهد آزمایشی را برای تصحیح آستانه ، تطبیق کد حرکت و انجام آسان انجام دهیم. دسترسی به پورت های آردوینو

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

آخرین چیزی که باید آزمایش و تصحیح شود ، زاویه سرو برای بازکردن درست درب است.

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

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

مرحله 6: کدگذاری: همه چیز را کنار هم قرار دهید

تمام کد لازم برای کارکردن ربات در فایل زیپ شده قابل بارگیری است. مهمترین آن کد "اصلی" است که شامل حلقه راه اندازی و عملکرد ربات است. اکثر توابع دیگر در فایل های فرعی (همچنین در پوشه زیپ شده) نوشته می شوند. این فایل های فرعی باید قبل از بارگذاری در Arduino در همان پوشه (که "اصلی" نامیده می شود) به عنوان اسکریپت اصلی ذخیره شود.

ابتدا سرعت کلی ربات به همراه متغیر "یادآوری" تعریف می شود. این "یادآوری" مقداری است که به خاطر می آورد که روبات به کدام سمت می چرخید. اگر "یادآوری = 1" ، ربات در حال چرخش به چپ بود ، اگر "یادآوری = 2" ، ربات در حال چرخش به راست بود/است.

سرعت int = 9 ؛ // سرعت عمومی روبات

int یادآوری = 1؛ // جهت اولیه

در راه اندازی ربات ، فایل های فرعی مختلف برنامه مقداردهی می شود. در این فایلهای فرعی ، عملکردهای اساسی در کنترل موتورها ، سنسورها ، … نوشته شده است. با راه اندازی اولیه آنها در تنظیمات ، توابع توصیف شده در هر یک از این فایل ها را می توان در حلقه اصلی استفاده کرد. با فعال کردن تابع r2D2 () ، ربات مانند ربات R2D2 از حق امتیاز فیلم Star Wars هنگامی که شروع می شود در اینجا عملکرد r2D2 () غیرفعال شده است تا مانع از کشیدن صدای زیاد زنگ شود.

// راه اندازی @ تنظیم مجدد // ----------------

void setup () {initialize_IR_sensors ()؛ initialize_obstacles_and_edges ()؛ initialize_movement ()؛ initialize_lid ()؛ initialize_buzzer ()؛ // r2D2 ()؛ int یادآوری = 1؛ // جهت اولیه راه انداز (یادآوری) ؛ }

ابتدا تابع Starter (یادآوری) در هنگام راه اندازی فراخوانی می شود. این عملکرد باعث می شود که ربات بچرخد و به دنبال سیگنال IR یکی از دکمه ها باشد. هنگامی که دکمه را پیدا کرد ، برنامه با تغییر متغیر 'cond' به false از عملکرد Starter خارج می شود. در حین چرخش ربات باید از محیط آن آگاه بود: باید لبه ها و موانع را تشخیص دهد. این مورد هر بار قبل از چرخش ادامه می یابد. هنگامی که ربات یک مانع یا لبه را تشخیص داد ، پروتکل اجتناب از این موانع یا لبه ها اجرا می شود. این پروتکل ها بعداً در این مرحله توضیح داده می شود. تابع Starter دارای یک متغیر است که متغیر یادآوری است که قبلاً مورد بحث قرار گرفت. با دادن مقدار یادآوری به عملکرد Starter ، ربات می داند که برای جستجوی دکمه به کدام جهت باید بچرخد.

// حلقه شروع کننده: بچرخید و دکمه را جستجو کنید // ------------------------------------ ----------------

void Starter (int یادآوری) {if (isedgeleft () || isedgeright ()) {// تشخیص لبه های لبه تشخیص داده شده (یادآوری) ؛ } else {bool cond = true؛ while (cond == true) {if (buttonleft () == false && buttonright () == false && isButtonDetected () == true) {cond = false؛ } else {if (یادآوری == 1) {// ما در حال گردش به چپ بودیم اگر (isobstacleleft ()) {stoppeed ()؛ جلوگیری از مانع (یادآوری) ؛ } else if (isedgeleft () || isedgeright ()) {// تشخیص لبه های edgeDetected (یادآوری) ؛ } else {turnleft (سرعت)؛ }} else if (یادآوری == 2) {if (isobstacleright ()) {stoppeed ()؛ جلوگیری از مانع (یادآوری) ؛ } else if (isedgeleft () || isedgeright ()) {// تشخیص لبه های edgeDetected (یادآوری) ؛ } else {گردش راست (سرعت)؛ }}}}}}

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

  • تفاوت بین نور IR تشخیص داده شده توسط سنسور چپ و راست بیشتر از یک آستانه مشخص است و یک دکمه وجود دارد.
  • تفاوت نور IR کوچکتر از آستانه است و یک دکمه در جلوی ربات وجود دارد.
  • تفاوت نور IR کوچکتر از آستانه است و دکمه NO در جلوی ربات وجود ندارد.

نحوه عملکرد روال آهنگ به شرح زیر است: هنگامی که دکمه شناسایی می شود ، ربات با چرخاندن در همان جهت که می چرخید (با استفاده از متغیر یادآوری) به سمت دکمه حرکت می کند و در همان زمان کمی جلو می رود. اگر روبات بیش از حد بچرخد ، دکمه دوباره گم می شود و در این مرحله ربات به یاد می آورد که باید به جهت دیگر بچرخد. این نیز در حالی که کمی به جلو حرکت می کنید انجام می شود. با انجام این کار ، ربات دائماً به چپ و راست می چرخد ، اما در این فاصله هنوز به سمت دکمه پیش می رود. هر بار که ربات دکمه را پیدا می کند ، فقط به چرخش خود ادامه می دهد تا زمانی که آن را از دست داده باشد ، در این صورت شروع به حرکت در جهت دیگر می کند. به تفاوت توابعی که در حلقه Starter و حلقه اصلی استفاده می شود توجه کنید: حلقه Starter از "turnleft ()" یا "turnright ()" ، در حالی که حلقه اصلی از "moveleft ()" و "moveright ()" استفاده می کند. عملکردهای چپ/راست نه تنها باعث می شود که ربات بچرخد بلکه همزمان او را به جلو حرکت می دهد.

/ * حلقه عملکردی ---------------------------- در اینجا ، فقط روال آهنگ وجود دارد */

int از دست رفته = 0؛ // اگر گم شود = 0 دکمه پیدا می شود ، اگر گم شود = 1 دکمه گم می شود void loop () {if (isedgeleft () || isedgeright ()) {

if (! isobstacle ()) {

حرکت رو به جلو (سرعت) ؛ تأخیر (5) ؛ } else {prej_obstacle (یادآوری) ؛ } else {if (یادآوری == 1 && lost == 1) {// ما در حال چرخش به سمت چپ توقف () بودیم؛ if (! isobstacleright ()) {moveright (سرعت)؛ // برای یافتن دکمه} دیگری {turn_obstacle (یادآوری) بچرخید ؛ } یادآوری = 2؛ } else if (یادآوری == 2 && lost == 1) {stoppeed ()؛ if (! isobstacleleft ()) {moveleft (سرعت)؛ // ما در حال گردش به راست بود} else {else_obstacle (یادآوری)؛ } یادآوری = 1؛ } else if (lost == 0) {if (remember == 1) {// ما به سمت چپ می چرخیم if (! isobstacleleft ()) {moveleft (speed)؛ // ما به راست می چرخیدیم} else {stoppeed ()؛ جلوگیری از مانع (یادآوری) ؛ } //} else if (یادآوری == 2) {if (! isobstacleright ()) {moveright (speed)؛ // برای یافتن دکمه} بچرخید} else {stoppeed ()؛ جلوگیری از مانع (یادآوری) ؛ }}} تأخیر (10)؛ از دست داده = 0 ؛ }} //}}

در حال حاضر ، توضیح کوچکی از دو روال پیچیده ارائه شده است:

از لبه ها خودداری کنید

پروتکل اجتناب از لبه ها در تابعی به نام "edgeDetection ()" تعریف شده است که در فایل فرعی "حرکت" نوشته شده است. این پروتکل بر این واقعیت متکی است که ربات فقط زمانی باید به لبه برخورد کند که به مقصد برسد: دکمه. هنگامی که ربات یک لبه را تشخیص می دهد ، اولین کاری که انجام می دهد این است که کمی به عقب حرکت کند تا در یک فاصله امن از لبه قرار گیرد. پس از انجام این کار ، ربات 2 ثانیه منتظر می ماند. اگر فردی در آن دو ثانیه دکمه جلوی روبات را فشار دهد ، ربات می داند که به کسی که کره می خواهد رسیده است و محفظه کره را باز کرده و کره را ارائه می دهد.در این مرحله ، کسی می تواند کره را از روبات بگیرد. پس از چند ثانیه ، ربات از انتظار خسته می شود و فقط درب کره را می بندد. پس از بسته شدن درب ، ربات حلقه Starter را اجرا می کند تا به دنبال دکمه دیگری باشد. اگر اتفاق بیفتد که ربات قبل از رسیدن به مقصد با لبه ای برخورد کند و دکمه جلوی ربات فشار داده نشود ، روبات درب کره را باز نمی کند و بلافاصله حلقه استارت را اجرا می کند.

از موانع دوری کنید

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

اکنون که کاملاً کد را درک کرده اید ، می توانید از آن استفاده کنید!

مطمئن شوید که آستانه ها را با محیط خود تطبیق دهید (بازتاب IR در جداول سفید برای مثال بیشتر است) و پارامترهای مختلف را با نیازهای خود تطبیق دهید. همچنین ، باید به قدرت بخشیدن به ماژول های مختلف توجه زیادی شود. مهم این است که سرو موتورها از پورت آردوینو 5 ولت تغذیه نمی کنند ، زیرا جریان زیادی را می گیرند (این می تواند به میکروکنترلر آسیب برساند). اگر از منبع تغذیه مشابه برای سنسورها برای تغذیه سرووها استفاده شود ، ممکن است با برخی مشکلات اندازه گیری مواجه شوید.

توصیه شده: