Мазмуну:

Май роботу: Экзистенциалдык кризис менен Arduino роботу: 6 кадам (Сүрөттөр менен)
Май роботу: Экзистенциалдык кризис менен Arduino роботу: 6 кадам (Сүрөттөр менен)

Video: Май роботу: Экзистенциалдык кризис менен Arduino роботу: 6 кадам (Сүрөттөр менен)

Video: Май роботу: Экзистенциалдык кризис менен Arduino роботу: 6 кадам (Сүрөттөр менен)
Video: Хочется РЫДАТЬ. Сара Вагенкнехт: это КОНЕЦ, а Шольцу и Хабэку плевать! Новости Германии. 2024, Ноябрь
Anonim
Image
Image

Бул долбоор "Рик жана Морти" анимациялык сериясына негизделген. Эпизоддордун биринде Рик робот жасайт, анын бирден бир максаты - сары май алып келүү. Брюфейстин (Брюссель инженердик факультети) студенттери катары бизде мехатроника долбооруна тапшырма бар, ал сунушталган темага негизделген роботту куруу. Бул долбоордун тапшырмасы: Бир гана майга кызмат кылган робот жасаңыз. Бул экзистенциалдык кризиске алып келиши мүмкүн. Албетте, Рик жана Морти эпизодундагы робот абдан татаал робот жана кээ бир жөнөкөйлөштүрүү керек:

Жалгыз максаты сары май алып келүү болгондуктан, башка альтернативалар бар. Роботту майды кармоонун ордуна, аны керектүү адамга жеткирүүдөн мурун, робот майды дайыма көтөрүп жүрө алат. Негизги идея - майды керектүү жерге ташыган арабаны жасоо.

Майды ташуудан тышкары, робот майды кайда алып келиш керек экенин билиши керек. Эпизоддо Рик өзүнүн үнүн колдонуп, роботко чалып буйрук берет. Бул кымбат үн таануу системасын талап кылат жана татаал болмок. Анын ордуна, үстөлдө отургандардын баары бир баскычты алышат: бул баскыч иштетилгенден кийин, робот бул баскычтын ордун таап, аны көздөй жыла алат.

Эскерте кетсек, робот төмөнкү талаптарга жооп бериши керек:

  • Ал коопсуз болушу керек: тоскоолдуктардан качып, столдун кулашына жол бербеши керек;
  • Робот кичинекей болушу керек: столдогу орун чектелүү жана эч ким майды кызмат кылган, бирок столдун өзүнөн жарым чоң роботту каалабайт;
  • Роботтун иштеши столдун чоңдугуна же формасына көз каранды эмес, ошондуктан аны ар кандай столдордо колдонсо болот;
  • Бул столду туура адамга сары май алып келиши керек.

1 -кадам: Негизги түшүнүк

Жогоруда айтылган талаптар ар кандай ыкмаларды колдонуу менен аткарылышы мүмкүн. Кабыл алынган негизги дизайн жөнүндө чечимдер бул кадамда түшүндүрүлөт. Бул идеялар кандайча ишке ашаары тууралуу чоо -жайын кийинки кадамдардан тапса болот.

Өз милдетин аткаруу үчүн робот белгиленген жерге жеткенге чейин жылышы керек. Роботтун колдонулушун эске алганда, "басуу" кыймылынын ордуна дөңгөлөктөрдү колдонуу, аны кыймылга келтирүү жакшыраак. Стол тегиз жана робот өтө ылдамдыкка жетпегендиктен, эки кыймылга келтирилген дөңгөлөк жана бир тоголок топ - башкаруунун эң жөнөкөй жана оңой жолу. Кыймылдуу дөңгөлөктөр эки мотор менен иштеши керек. Моторлор чоң моментке ээ болушу керек, бирок жогорку ылдамдыкка жетүүнүн кажети жок, ошондуктан үзгүлтүксүз серво кыймылдаткычтары колдонулат. Серво кыймылдаткычтарынын дагы бир артыкчылыгы - Arduino менен колдонуунун жөнөкөйлүгү.

Тоскоолдуктарды аныктоо аралыкты өлчөгөн УЗИ сенсорунун жардамы менен жүргүзүлүшү мүмкүн, өлчөө багытын тандоо үчүн серво моторуна тиркелет. Четтери LDR сенсорлору аркылуу аныкталышы мүмкүн. LDR сенсорлорун колдонуу үчүн жарык жана LDR сенсорун камтыган түзмөктүн курулушу талап кылынат. LDR сенсору чагылган жарыкты өлчөйт жана кандайдыр бир аралык сенсору катары каралышы мүмкүн. Ушул эле принцип инфракызыл нур менен да бар. Санариптик чыгууга ээ болгон инфракызыл жакындык сенсорлору бар: жакын же жакын эмес. Дал ушул нерсе роботтун четтерин аныктоо үчүн керек. Эки курт -кумурска антеннасы жана бир иштетилген УЗИ сенсоруна окшош жайгаштырылган 2 четки сенсорлорду бириктирүү менен робот тоскоолдуктардан жана четтерден оолак болушу керек.

Баскычты аныктоо IR сенсорлорун жана LEDлерди колдонуу менен да аткарылышы мүмкүн. IRдин артыкчылыгы - бул көрүнбөгөндүктөн, аны колдонууну столдогу адамдар үчүн тынчсыздандырбайт. Лазерди да колдонсо болот, бирок анда кимдир бирөө лазерди башка бирөөнүн көзүнө каратканда жарык көрүнүп, коркунучтуу болмок. Ошондой эле, колдонуучу роботтун сенсорлорун жука лазер нуру менен бутага алышы керек, бул абдан тажатма болмок. Роботту эки IR сенсорлору менен жабдуу жана ИК жетеги менен баскычты куруу менен, робот ИК-жарыгынын интенсивдүүлүгүнө баш ийүү менен кайсы багытка баруу керек экенин билет. Кнопка жок болгондо робот леддердин бири баскычтардын биринен сигналды алганга чейин бурула алат.

Май роботтун үстүңкү бөлүгүнө салынат. Бул бөлүк кутучаны жана кутуну ачуу үчүн иштетилген капкактан турушу мүмкүн. Капкакты ачуу жана УЗИ сенсорун жылдыруу үчүн сканерлөө жана тоскоолдуктарды аныктоо үчүн бизге эки мотор керек жана бул үчүн үзгүлтүксүз эмес серво кыймылдаткычтары көбүрөөк ыңгайлаштырылган, анткени моторлор белгилүү бир абалга барып, ошол позицияны сактап калышы керек.

Долбоордун кошумча өзгөчөлүгү робот үнү менен тышкы чөйрө менен өз ара аракеттенүү болгон. Зумер жөнөкөй жана ушул максатка ылайыкташтырылган, бирок аны каалаган убакта колдонууга болбойт, анткени кызыккан тартуу чоң.

Долбоордун негизги кыйынчылыктары коддоого таянат, анткени механикалык бөлүгү абдан жөнөкөй. Роботтун тыгылып калуусунан же керексиз нерселерди жасабаш үчүн көп учурларды эске алуу керек. Биз чечишибиз керек болгон негизги көйгөйлөр - IR сигналын бир тоскоолдуктан улам жоготуу жана ал баскычка келгенде токтойт!

2 -кадам: материалдар

Механикалык бөлүктөр

  • 3D принтер жана лазер кесүүчү машина

    • PLA 3D басып чыгаруу үчүн колдонулат, бирок сиз ABSти колдоно аласыз
    • Лазердик кесүүдө 3 мм кайың фанерасы тарелка колдонулат, анткени кийинчерээк оңой өзгөртүү киргизүүгө мүмкүндүк берет, плексигласын да колдонсо болот, бирок аны жок кылбай лазер менен кесип алгандан кийин аны өзгөртүү кыйыныраак.
  • Болттар, гайкалар, шайбалар

    Көпчүлүк компоненттер M3 баскычтуу болтторду, шайбаларды жана гайкаларды колдонуу менен чогуу кармалышат, бирок алардын кээ бирлери M2 же M4 болттор топтомун талап кылат. Болттун узундугу 8-12 мм диапазондо

  • ПХБ аралыгы, 25 мм жана 15 мм
  • 2 Келишимдүү дөңгөлөктөрү бар Servo моторлору
  • Диаметри 1-2 мм тегерегиндеги калың металл зым

Электрондук тетиктер

  • Микроконтроллер

    1 arduino UNO тактасы

  • Серво моторлору

    • 2 чоң servo мотор: Feetech үзгүлтүксүз 6Kg 360 градус
    • 2 микро серво мотору: Feetech FS90
  • Сенсорлор

    • 1 УЗИ сенсор
    • 2 IR жакындык сенсорлору
    • 2 IR фотодиоддор
  • Батарейкалар

    • 1 9В батарейка кармагычы + батарея
    • 1 4АА батарея кармагыч + батареялар
    • 1 9В батарейка кутусу + батарея
  • Кошумча компоненттер

    • Кээ бир секирүүчү зымдар, зымдар жана ширетүүчү плиталар
    • Кээ бир резисторлор
    • 1 IR LED
    • 3 өчүргүч
    • 1 сигнал
    • 1 баскыч
    • 1 Arduino 9V батарея туташтыргычы

3 -кадам: Электрониканы сыноо

Электрониканы сыноо
Электрониканы сыноо
Электрониканы сыноо
Электрониканы сыноо

Баскычты түзүү:

Кнопка жөн эле которгуч, инфракызыл диод жана 9 Ом батарейкасы менен иштөөчү 220 Ом резистору менен жасалган. Бул компакт жана таза дизайн үчүн 9V батарея пакетине салынган.

Инфракызыл алуучу модулдарды түзүү:

Бул модулдар тешиктен жасалган ширетүүчү такталар аркылуу жасалат, алар кийин роботко бурамалар менен бекитилет. Бул модулдардын схемалары жалпы схемада сүрөттөлгөн. Принцип - инфракызыл нурдун интенсивдүүлүгүн өлчөө. Өлчөмдөрдү жакшыртуу үчүн, коллиматорлорду (кичирейтүүчү түтүктөр менен жасалган) белгилүү бир кызыкчылыкка багыттоо үчүн колдонсо болот.

Долбоордун ар кандай талаптары электрондук түзүлүштөрдү колдонуу менен аткарылышы керек. Салыштырмалуу төмөн татаалдыкты сактоо үчүн түзмөктөрдүн саны чектелиши керек. Бул кадам бардык бөлүктөрдү өзүнчө текшерүү үчүн зымдардын схемаларын жана ар бир кодду камтыйт:

  • Үзгүлтүксүз Servo моторлору;
  • УЗИ сенсор;
  • Үзгүлтүксүз Servo моторлору;
  • Коңгуроо;
  • IR баскычынын багытын аныктоо;
  • Жакындык сенсорлору менен кырды аныктоо;

Бул коддор компоненттерди башында түшүнүүгө жардам берет, бирок кийинки этаптарда мүчүлүштүктөрдү оңдоо үчүн да абдан пайдалуу. Белгилүү бир көйгөй келип чыкса, бардык компоненттерди өзүнчө текшерүү аркылуу мүчүлүштүктү оңой эле табууга болот.

4 -кадам: 3D басылган жана лазердик кесимдердин дизайны

3D басылган жана лазердик кесимдердин дизайны
3D басылган жана лазердик кесимдердин дизайны
3D басылган жана лазердик кесимдердин дизайны
3D басылган жана лазердик кесимдердин дизайны
3D басылган жана лазердик кесимдердин дизайны
3D басылган жана лазердик кесимдердин дизайны

Лазердик кесимдер

Жыйнак зарыл болгон учурда электроникага оңой жетүүнү камсыз кылган ачык дизайнды алуу үчүн ПХБ аралыгы менен бириктирилген үч негизги горизонталдык плиталардан жасалган.

Бул плиталардын бөлүктөрүн жана акыркы жыйын үчүн башка компоненттерди буроо үчүн керектүү тешиктери болушу керек. Негизинен, үч плитанын тең бөлүктөрү үчүн тешиктери бар жана ар бир табакка тиешелүү түрдө электроника үчүн атайын тешиктер орнотулган. Ортоңку плитанын ортосунда зымдарды өткөрүү үчүн тешиги бар экенин байкаңыз.

Кичине бөлүктөр чоң сервонун өлчөмдөрүнө чейин кесилет, аларды жыйынга бекитүү үчүн.

3D басып чыгарылган бөлүктөр

Лазердик кесүүдөн тышкары, кээ бир бөлүктөрдү 3D басып чыгаруу керек болот:

  • УЗИ сенсорун колдоо, аны бир микро servo мотор колуна байланыштырат
  • Кастор дөңгөлөгүн жана эки IR четиндеги сенсорлорду колдоо. IR сенсорлору үчүн бөлүкчөнүн формасынын өзгөчө конструкциясы IR сигналын чыгаруучу баскыч менен IR сенсорлорунун ортосундагы тоскоолдуктарды болтурбоо үчүн экран катары иштейт, алар жерде эмне болуп жатканына гана көңүл бурушу керек.
  • Капкакты ачуучу микро серво моторун колдоо
  • Акыры, капкакты ачуучу микро сервво мотору менен кагылышууну болтурбай, чоңураак иштөө бурчуна ээ болуу үчүн эки бөлүктөн жасалган капкактын өзү:

    • Үстүнкү табакка бекитиле турган түбү
    • Ал эми ылдый жагында шарнир менен байланышкан жана жоон металл зымдын жардамы менен серво менен иштетилет. Биз роботко баш берүү менен бир аз инсандыкты кошууну чечтик.

Бардык бөлүктөр иштелип чыккандан кийин жана файлдар колдонулган машиналар үчүн туура форматта экспорттолгондон кийин, бөлүктөр иш жүзүндө жасалышы мүмкүн. 3D басып чыгаруу, өзгөчө капкактын үстүңкү бөлүгүнүн өлчөмдөрү менен, көп убакытты талап кыларын билиңиз. Бардык бөлүктөрдү басып чыгаруу үчүн сизге бир же эки күн керек болушу мүмкүн. Лазердик кесүү бир нече мүнөттүн ичинде гана болот.

Бардык SOLIDWORKS файлдары сыдырылган папкадан табылат.

5 -кадам: Кураштыруу жана өткөргүчтөр

Image
Image
Орнотуу жана электр өткөргүчтөрү
Орнотуу жана электр өткөргүчтөрү
Орнотуу жана электр өткөргүчтөрү
Орнотуу жана электр өткөргүчтөрү
Орнотуу жана электр өткөргүчтөрү
Орнотуу жана электр өткөргүчтөрү

Жыйнак төмөндөн жогору карай баштап, компоненттерди бириктирүүчү зымдардын аралашмасынан турат.

Төмөнкү табак

Төмөнкү табак 4АА батареянын пакети, серво моторлору, басылган бөлүгү (шарикти пластинанын астына бекитүү), эки четки сенсорлор жана 6 эркек-ургаачы аралыгы менен чогулган.

Ортоңку табак

Андан кийин, орто табакты эки плитанын ортосундагы servo моторлорун кысып орнотсо болот. Бул плитаны андан кийин анын үстүнө бөлгүчтөрдүн башка топтомун коюу менен оңдоого болот. Кээ бир кабелдер борбордук тешиктен өтүшү мүмкүн.

УЗИ модулу Arduino, 9V батарея пакети (arduino менен иштөөчү) жана роботтун маңдайындагы эки инфракызыл алуучу модулу менен ортоңку табакка бекитилген, үзгүлтүксүз сервого тиркелиши мүмкүн. Бул модулдар тешиктен жасалган ширетүүчү такталар аркылуу жасалып, пластинкага бурамалар менен бекитилет. Бул модулдардын схемалары жалпы схемада сүрөттөлгөн.

Top plate

Жыйындын бул бөлүгүндө өчүргүчтөр оңдолбойт, бирок робот капкакты талап кылган аракеттерден башкасынын бардыгын жасай алат, андыктан трестти оңдоого, кыймылдын кодун ыңгайлаштырууга жана оңой кылууга бир нече сыноолорду жүргүзүүгө мүмкүндүк берет. arduino портторуна кирүү.

Мунун баарына жетишилгенде, үстүңкү плитаны бөлгүчтөр менен бекитсе болот. Акыркы эки компонент, баскыч, серво, ызылдак жана капкак системасы, акыры, жыйынды бүтүрүү үчүн үстүнкү табакка бекитилиши мүмкүн.

Сыноо жана тууралоо үчүн акыркы нерсе - капкакты туура ачуу үчүн сервонун бурчу.

Чет сенсорлордун босогосу столдун ар кандай беттери үчүн камтылган потенциометр менен (жалпак отвертка менен) ылайыкташтырылышы керек. Ак столдун күрөң үстөлгө караганда төмөнкү босогосу болушу керек. Ошондой эле сенсорлордун бийиктиги керектүү чекке таасир этет.

Бул кадамдын аягында, монтаж бүтөт жана акыркы калган бөлүгү жок болгон коддор.

6 -кадам: Коддоо: Бардыгын бириктирүү

Роботтун иштеши үчүн керектүү бардык коддор жүктөлүп алынуучу сыдырылган файлда. Эң негизгиси - роботтун орнотулушун жана функционалдык циклди камтыган "негизги" код. Башка функциялардын көбү субфайлдарда жазылган (ошондой эле сыдырылган папкада). Бул субфайлдар Arduinoго жүктөөдөн мурун негизги скрипт катары ошол папкада ("негизги" деп аталат) сакталууга тийиш.

Биринчиден, роботтун жалпы ылдамдыгы "еске салуу" өзгөрмөсү менен бирге аныкталат. Бул "эстетүү" - бул робот кайсы багытта бурулганын эстеп турган баалуулук. "Эскертүү = 1" болсо, робот солго/бурулуп бараткан, эгер "эстетүү = 2" болсо, робот оңго/бурулган.

int ылдамдыгы = 9; // Роботтун жалпы ылдамдыгы

int rem = 1; // Баштапкы багыт

Роботту орнотууда программанын ар кандай суб-файлдары башталат. Бул көмөкчү файлдарда моторлорду, сенсорлорду,… башкаруу боюнча негизги функциялар жазылган. Орнотууда аларды инициализациялоо менен, бул файлдардын ар биринде сүрөттөлгөн функциялар негизги циклда колдонулушу мүмкүн. R2D2 () функциясын активдештирүү менен робот Star Wars кино франшизасынан R2D2 роботуна окшоп ызы -чуу чыгарат. ал башталат. Бул жерде r2D2 () функциясы сигналдын өтө көп токту тартпаш үчүн өчүрүлгөн.

// Орнотуу @ кайра коюу // ----------------

void setup () {initialize_IR_sensors (); initialize_obtacles_and_edges (); initialize_movement (); initialize_lid (); initialize_buzzer (); // r2D2 (); int rem = 1; // баштапкы багыт Стартер (эскертүү); }

Стартер (эскертүү) функциясы алгач орнотууда чакырылат. Бул функция роботту артка буруп, баскычтардын биринин IR сигналын издейт. Кнопканы тапкандан кийин, программа "cond" өзгөрмөсүн false деп өзгөртүп, Стартер функциясынан чыгат. Роботтун айлануусу учурунда анын чөйрөсүн билиши керек: ал четтерди жана тоскоолдуктарды табышы керек. Бул айланууну улантуудан мурун ар бир жолу текшерилет. Робот бир тоскоолдукту же четин тапкандан кийин, бул тоскоолдуктарды же четтерди болтурбоо үчүн протокол аткарылат. Бул протоколдор бул этапта кийинчерээк түшүндүрүлөт. Стартер функциясы бир өзгөрмөгө ээ, бул мурда талкууланган эскертүүчү өзгөрмө. Стартер функциясына эскертүү маанисин берүү менен робот баскычты издөө үчүн кайсы жакка бурулушу керек экенин билет.

// Баштоочу цикл: Бурулуп, баскычын издеңиз // ------------------------------------ ----------------

жараксыз баштоочу (int remin) {if (isedgeleft () || isedgeright ()) {// Edge edgesDetected (еске салуу); } else {bool cond = true; while (cond == true) {if (buttonleft () == false && buttonright () == false && isButtonDetected () == true) {cond = false; } else {if (еске салуу == 1) {// Биз солго бурулуп жатканбыз, эгерде (isobstacleleft ()) {stopspeed (); тоскоолдуктан алыс болуу (эскертүү); } else if (isedgeleft () || isedgeright ()) {// Edet edge ofDetected (еске сал); } else {turnleft (speed); }} else if (еске сал == 2) {if (isobstacleright ()) {stopspeed (); тоскоолдуктан алыс болуу (эскертүү); } else if (isedgeleft () || isedgeright ()) {// Edet edge ofDetected (еске сал); } else {оңго (ылдамдык); }}}}}}

Эгерде робот баскычты тапса, анда биринчи Стартердик цикл чыгып, роботтун негизги, функционалдык цикли башталат. Бул негизги цикл абдан татаал, анткени ар бир убакта робот анын алдында тоскоолдуктун же четтин бар -жогун аныктап алышы керек. Негизги идея - робот бул баскычты таап, аны ар дайым жоготуп алуу. Эки IR сенсорун колдонуу менен биз үч жагдайды айырмалай алабыз:

  • сол жана оң сенсор тарабынан аныкталган IR нурунун ортосундагы айырмачылык белгилүү бир босогодон чоңураак жана баскычы бар.
  • IR жарыктын айырмасы босогодон кичине жана роботтун алдында бир баскыч бар.
  • IR жарыктын айырмасы босогодон кичине жана роботтун алдында NO баскычы жок.

Трасстын иштөө тартиби төмөнкүчө: баскыч табылганда, робот бурулган багытка бурулуп (эскертүү өзгөрмөсүн колдонуп) жана ошол эле учурда бир аз алдыга жылат. Эгерде робот өтө алыска бурулса, баскыч кайра жоголот жана бул учурда робот башка жакка бурулушу керек экенин эстейт. Бул дагы бир аз алдыга жылганда жасалат. Муну менен робот тынымсыз солго жана оңго бурулат, бирок ортодо дагы эле баскычка карай илгерилөөдө. Робот баскычты тапкан сайын, ал жоголмойунча бурула берет, бул учурда ал башка жакка жыла баштайт. "turnleft ()" же "turnright ()", ал эми негизги циклде "moveleft ()" жана "moveright ()" колдонулат. Кыймылдын сол/оң функциялары роботту буруп гана койбостон, аны ошол эле учурда алдыга жылдырат.

/ * Функционалдык цикл ---------------------------- Бул жерде тректин тартиби гана бар */

int lost = 0; // Эгерде жоголгон = 0 баскыч табылса, жоголсо = 1 баскыч жоголот void loop () {if (isedgeleft () || isedgeright ()) {

if (! isobstacle ()) {

алга жылуу (ылдамдык); кечигүү (5); } else {avoid_obstacle (эскертүү); } else {if (еске сал == 1 && lost == 1) {// Биз солго токтогонбуз (); if (! isobstacleright ()) {moveright (speed); // Баскычын табуу үчүн артка буруңуз} else {качуу_ тоскоолдук (эскертүү); } эскертүү = 2; } else if (еске сал == 2 && lost == 1) {stopspeed (); if (! isobstacleleft ()) {moveleft (speed); // Биз оңго бурулуп жаттык} башка {качуу_ тоскоолдук (эскертүү); } эскертүү = 1; } else if (жоголгон == 0) {эгер (эскертүү == 1) {// Биз солго бурулуп жаткан болсок, эгерде (! isobstacleleft ()) {moveleft (speed); // Биз оңго бурулуп жаттык} башка {stopspeed (); тоскоолдуктан алыс болуу (эскертүү); } //} else if (еске сал == 2) {if (! isobstacleright ()) {moveright (speed); // Баскычын табуу үчүн артка буруңуз} else {stopspeed (); тоскоолдуктан алыс болуу (эскертүү); }}} кечиктирүү (10); жоголгон = 0; }} //}}

Эми, эң татаал эки тартиптин бир аз түшүндүрмөсү берилет:

Четтерден алыс болуңуз

Четтерди болтурбоо үчүн протокол "аракет" под-файлында жазылган "edgeDetection ()" функциясында аныкталган. Бул протокол робот көздөгөн жерине жеткенде гана чекеге туш болушу керек экендигине таянат: баскыч. Робот бир четин аныктагандан кийин, эң биринчи кылып, бир аз артка жылып, четинен коопсуз аралыкта болуу керек. Муну аткаргандан кийин робот 2 секунд күтөт. Эгерде кимдир бирөө ошол эки секунддун ичинде роботтун маңдайындагы баскычты басса, анда робот майды каалаган адамга жеткенин билет жана май бөлүмүн ачып, майды тартуулайт. Бул учурда кимдир бирөө роботтон сары май ала алат. Бир нече секунддан кийин робот күтүүдөн чарчайт жана майдын капкагын жабат. Капкак жабылгандан кийин робот башка кнопканы издөө үчүн Стартер циклин аткарат. Эгерде робот көздөгөн жерине жетпей бир четине туш келип калса жана роботтун маңдайындагы кнопка басылбаса, анда робот майдын капкагын ачпайт жана ошол замат Стартер циклин аткарат.

Тоскоолдуктардан алыс болуңуз

Avoid_obstacle () функциясы ошондой эле "кыймыл" суб-файлында жайгашкан. Тоскоолдуктарды болтурбоонун оор бөлүгү - роботтун абдан чоң сокур жери бар экендиги. УЗИ сенсору роботтун маңдайына жайгаштырылган, демек ал тоскоолдуктарды аныктай алат, бирок качан өткөнүн билбейт. Муну чечүү үчүн төмөнкү принцип колдонулат: Робот кандайдыр бир тоскоолдукка кабылганда, ал башка багытка бурулуу үчүн реминг өзгөрмөсүн колдонот. Мындай жол менен робот тоскоолдукту сүзүп кетпейт. Робот УЗИ сенсору тоскоолдукту таппай калганга чейин бурула берет. Робот бурулуп жатканда, тоскоолдук аныкталмайынча эсептегич көбөйтүлөт. Бул эсептегич тоскоолдуктун узундугун болжолдоп берет. Андан кийин алдыга жылуу жана ошол эле учурда эсептегичти азайтуу менен тоскоолдукту болтурбай коюуга болот. Эсептегич 0ге жеткенде, Стартер функциясын дагы баскычты жылдыруу үчүн колдонсо болот. Албетте, робот Стартер функциясын тоскоолдукка туш болгонго чейин баратканын эстеген тарапка буруп аткарат (кайра эстеткич өзгөрмөсүн колдонуп).

Эми кодду толук түшүнгөндөн кийин, аны колдоно баштасаңыз болот!

Босоголорду айланаңызга ылайыкташтырууну унутпаңыз (мисалы, ИР чагылышы ак столдордо жогору) жана ар кандай параметрлерди керектөөлөрүңүзгө ылайыкташтырыңыз. Ошондой эле, ар кандай модулдардын кубаттуулугуна чоң көңүл бурулушу керек. Серво моторлорунун Arduino 5V порту менен иштебеши эң чоң мааниге ээ, анткени алар көп ток алат (бул микроконтроллерди бузушу мүмкүн). Эгерде сенсорлорго серволорду иштетүү үчүн бирдей энергия булагы колдонулса, кээ бир өлчөө көйгөйлөрү пайда болушу мүмкүн.

Сунушталууда: