- Потребни материјали:
- Концепт робота који избегава препреке:
- Шема и објашњење:
- Програмирање вашег ПИЦ микроконтролера:
- Препрека Авоидер Робот у акцији:
Препрека Авоидер Робот је још један познати робот који зачињава уграђене пројекте. За оне који су нови робот који избегава препреке, то је само нормалан робот на точковима који може да се креће без ударања по препрекама. Постоји много начина за изградњу робота за избегавање препрека у пројекту који ћемо користити један ултразвучни сензор (предњи) и два ИР сензора (леви / десни), тако да наш робот има очи у сва три правца. На овај начин можете га учинити много паметнијим и бржим откривањем предмета на све три стране и маневрисањем у складу с тим. Овде тужимо ПИЦ микроконтролер ПИЦ16Ф877А за овог робота који избегава препреке.
Рад робота који избегава препреке може се посматрати из производа у стварном времену који се назива Роботи за чишћење куће. Иако су технологија и сензори који се користе у њима веома сложени, концепт остаје исти. Погледајмо колико можемо постићи користећи наше нормалне сензоре и ПИЦ микроконтролере.
Такође погледајте наше друге роботе који избегавају препреке:
- Робот за избегавање препрека заснован на Распберри Пи-у
- Уради сам паметни робот за усисавање помоћу Ардуина
Потребни материјали:
- ПИЦ16Ф877А
- ИР сензор (2Нос)
- Ултразвучни сензор (1Нос)
- Мотор са једносмерном зупчаницом (2Нос)
- Л293Д Мотор Дривер
- Лежаљке (Можете и сами да направите свој картон)
- Повер банк (било који доступан извор напајања)
Концепт робота који избегава препреке:
Концепт робота који избегава препреке врло је једноставан. Помоћу сензора откривамо присуство предмета око робота и користимо ове податке да не налетимо на робота над тим објектима. За откривање објекта можемо користити било које сензоре попут ИР сензора и ултразвучног сензора.
У нашем роботу смо користили амерички сензор као предњи сензор, а два ИР сензора лево и десно. Робот ће се кретати напред када пре њега нема предмета. Дакле, робот ће се кретати напред док ултразвучни (УС) сензор не открије било који предмет.
Када амерички сензор открије објекат, време је да промените правац робота. Можемо скренути лево или десно, да бисмо одлучили смер скретања, помоћу ИЦ сензора проверавамо да ли постоји неки предмет у близини леве или десне стране робота.
Ако је на предњој и десној страни Робота откривен приговор, тада ће се робот вратити и окренути лево. Натерамо робота да трчи уназад на одређено растојање како се не би сударио о предмет током извођења завоја.
Ако је на предњој и левој страни робота откривен приговор, тада ће се робот вратити и скренути десно.
Ако робот стигне до угла собе, осетиће предмет присутан у све четири. У овом случају морамо робота да возимо уназад док се ниједна бочна страна не ослободи.
Други могући случај је да ће испред бити предмет, али можда неће бити предмета ни на левој ни на десној страни, у овом случају морамо насумично да се окренемо у било ком смеру.
Надам се да би ово дало грубу идеју о томе како избегавач препрека функционише, сада ћемо наставити са дијаграмом кругова да бисмо изградили овог бота и уживали у њему на делу.
Шема и објашњење:
Комплетни дијаграм кола овог робота који избегава препреке заснован на ПИЦ-у приказан је на горњој слици. Као што видите, користили смо два ИР сензора за откривање објеката лево и десно од робота, а ултразвучни сензор за мерење удаљености објекта који је присутан испред робота. Такође смо користили модул Л293Д Мотор Дривер за погон два мотора присутна у овом пројекту. То су обични мотори са једносмерном зупчаником за точкове и отуда се могу врло лако извести. Следећа табела ће вам помоћи у повезивању.
С.Но |
Повезано са |
Повезан |
1 |
ИЦ сензор Леви спољашњи клин |
РД2 (пин 21) |
2 |
ИЦ сензор Десни излазни клин |
РД3 (пин 22) |
4 |
Мотор 1 Канал А пин |
РЦ4 (пин 23) |
5 |
Мотор 1 Канал Б пин |
РЦ5 (пин 25) |
6 |
Пин 2 канала А мотора |
РЦ6 (пин 26) |
7 |
Мотор 2 Канал Б пин |
РЦ7 (пин 27) |
8 |
Амерички окидач |
РБ1 (пин 34) |
9 |
УС Ецхо Пин |
РБ2 (пин 35) |
Модул покретачког програма мотора попут Л293Д је обавезан, јер количина струје потребна за покретање једносмерног мотора зупчаника не може се добити из И / О пина ПИЦ микроконтролера. Сензори и модул се напајају од + 5В напајања које регулише 7805. Модул покретачког мотора мотора може се напајати чак и помоћу + 12В, али за овај пројекат сам се држао доступних + 5В.
Комплетног Робота у мом случају напаја Повер банка. Такође можете користити било коју уобичајену банку напајања и проћи одељак регулатора или користити горњи круг и користити било коју батерију од 9 В или 12 В за робота, као што је приказано на горњој шеми кола. Једном када се ваше везе заврше, изгледаће отприлике овако у наставку
Програмирање вашег ПИЦ микроконтролера:
Програмирање вашег ПИЦ-а да ради на избегавању препрека је заиста лако. Морамо само прочитати вредност ова три сензора и у складу с тим покретати моторе. У овом пројекту користимо ултразвучни сензор. Већ смо научили како повезати ултразвук са ПИЦ микроконтролером, ако сте нови овде, вратите се на то упутство да бисте разумели како амерички сензор ради са ПИЦ-ом, јер ћу овде прескочити детаље о њему како бих избегао понављање.
Комплетан програм или је ово робот је дат на крају ове странице, ја сам додатно објаснио важне делове програма испод.
Као што знамо, сви програми почињу са улазним и излазним декларацијама пин-а. Овде су четири пина модула покретачког програма мотора и пинови окидача излазне пинове, док ће се унос увући Ецхо и два излазна пина. Требали бисмо иницијализовати модул Тимер 1 да бисмо га користили са ултразвучним сензором.
ТРИСД = 0к00; // ПОРТД декларисан као излаз за повезивање ЛЦД ТРИСБ1 = 0; // Окидачки пин америчког сензора шаље се као излазни пин ТРИСБ2 = 1; // Ецхо пин америчког сензора постављен је као улазни пин ТРИСБ3 = 0; // РБ3 је излазни пин за ЛЕД ТРИСД2 = 1; ТРИСД3 = 1; // Оба пина ИР сензора декларисана су као улаз ТРИСЦ4 = 0; ТРИСЦ5 = 0; // пинови мотора 1 декларисани као излаз ТРИСЦ6 = 0; ТРИСЦ7 = 0; // Мотор 2 пина декларисани као излаз Т1ЦОН = 0к20;
У овом програму морали бисмо прилично често проверавати растојање између сензора и објекта, па смо креирали функцију звану израчунај_даљину () унутар које ћемо мерити удаљеност методом која је разматрана у водичу за повезивање америчких сензора. Шифра је приказана испод
воид цонверт_дистанце () // функција за израчунавање удаљености од САД-а {ТМР1Х = 0; ТМР1Л = 0; // обришите битове тајмера Триггер = 1; __делаи_ус (10); Окидач = 0; док је (Ецхо == 0); ТМР1ОН = 1; вхиле (Ецхо == 1); ТМР1ОН = 0; тиме_такен = (ТМР1Л - (ТМР1Х << 8)); растојање = (0,0272 * заузето време) / 2; }
Следећи корак био би упоређивање вредности ултразвучног сензора и ИР сензора и померање робота у складу с тим. Овде сам у овом програму користио вредност цм као критичну удаљеност испод које би робот требало да почне да мења смер. Можете користити жељене вредности. Ако нема предмета, робот се само креће напред
ако (удаљеност> 5) {РЦ4 = 0; РЦ5 = 1; // Мотор 1 напред РЦ6 = 1; РЦ7 = 0; // мотор 2 напред}
Ако се открије неки објекат, растојање ће пасти испод цм. У овом случају разматрамо вредности левог и десног ултразвучног сензора. На основу ове вредности одлучујемо или да скренемо лево или десно. Користи се кашњење од мс тако да је промена смера видљива.
иф (РД2 == 0 && РД3 == 1 && дистанце <= 5) // Леви сензор је блокиран {бацк_офф (); РЦ4 = 1; РЦ5 = 1; // мотор 1 заустављање РЦ6 = 1; РЦ7 = 0; // Мотор 2 напред __делаи_мс (500); } израчунај_даљину (); иф (РД2 == 1 && РД3 == 0 && дистанце <= 5) // Десни сензор је блокиран {бацк_офф (); РЦ4 = 0; РЦ5 = 1; // Мотор 1 напред РЦ6 = 1; РЦ7 = 1; // мотор 2 заустављање __делаи_мс (500); }
Понекад би ултразвучни сензор детектовао објекат, али не би било предмета који би детектовали ИЦ сензори. У овом случају робот подразумевано скреће лево. Можете и да окренете десно или у случајном смеру на основу ваших жеља. Ако су објекти са обе стране, онда ћемо се вратити уназад. Код за исто је приказан испод.
израчунај_даљину (); иф (РД2 == 0 && РД3 == 0 && дистанце <= 5) // Оба сензора су отворена {бацк_офф (); РЦ4 = 0; РЦ5 = 1; // Мотор 1 напред РЦ6 = 1; РЦ7 = 1; // мотор 2 заустављање __делаи_мс (500); } израчунај_даљину (); иф (РД2 == 1 && РД3 == 1 && дистанце <= 5) // Оба сензора су блокирана {бацк_офф (); РЦ4 = 1; РЦ5 = 0; // Мотор 1 уназад РЦ6 = 1; РЦ7 = 1; // Мотор 2 заустављање __делаи_мс (1000); }
Препрека Авоидер Робот у акцији:
Рад на пројекту је веома занимљив и забаван за посматрање. Када завршите са својим кругом и кодом, само укључите свог Бота и оставите га на земљи. Требало би да буде у стању да препозна препреке и паметно их избегне. Али, долази забавни део. Можете модификовати код и натерати га да ради више ствари, попут избегавања степеништа, чинећи га паметнијим чувањем драгоцених завоја, а шта не?
Овај робот ће вам помоћи да разумете основно програмирање и научите како ће стварни хардвер одговорити на ваш код. Увек је забавно програмирати овог робота и гледати како се понаша за код у стварном свету.
Овде смо користили исту ПИЦ перф плочу коју смо направили за трептање ЛЕД-а помоћу ПИЦ микроконтролера и користили ову плочу у другим пројектима ПИЦ Туториал Сериес.
Ваш робот треба да изгледа нешто слично оном приказаном на горњој слици. Комплетан рад овог пројекта приказан је у видео снимку испод.
Надам се да сте разумели пројекат и уживали сте у његовој изради. Ако сумњате или сте запели, можете да користите одељак за коментаре да бисте поставили своја питања, а ја ћу се потрудити да одговорим на њих.