- Необходими материали:
- Концепция за робот, избягващ препятствия:
- Електрическа схема и обяснение:
- Програмиране на вашия PIC микроконтролер:
- Препятствие Avoider Робот в действие:
Препятствието Avoider Robot е друг известен робот, който подправя вградени проекти. За тези, които са новият робот за избягване на препятствия, това е просто нормален колесен робот, който може да се движи по пътя си, без да удря по никакви препятствия. Има много начини за изграждане на робот за избягване на препятствия в проекта, ще използваме един ултразвуков сензор (отпред) и два IR сензора (отляво / отдясно), така че нашият робот да има очи и в трите посоки. По този начин можете да го направите много по-умен и по-бърз, като откривате предмети от трите страни и маневрирате по съответния начин. Тук съдим микроконтролера PIC16F877A за този робот, който избягва препятствия.
Работата на робот, избягващ препятствия, може да се наблюдава от продукт в реално време, наречен Роботи за почистване на дома. Въпреки че технологията и сензорите, използвани в тях, са много сложни, концепцията остава същата. Нека видим колко много можем да постигнем, използвайки нашите нормални сензори и PIC микроконтролери.
Проверете и другите ни роботи за избягване на препятствия:
- Робот за избягване на препятствия на Raspberry Pi
- Направи си сам интелигентен прахосмукачен робот, използващ Arduino
Необходими материали:
- PIC16F877A
- IR сензор (2Nos)
- Ултразвуков сензор (1Nos)
- Двигател с постоянен ток (2Nos)
- L293D Двигател на двигателя
- Шезлонги (Можете също така да създадете свои собствени, като използвате картони)
- Банка за захранване (всеки наличен източник на захранване)
Концепция за робот, избягващ препятствия:
Концепцията за робот за избягване на препятствия е много проста. Използваме сензори, за да открием присъствието на обекти около робота и използваме тези данни, за да не се сблъскаме с робота над тези обекти. За да открием обект, можем да използваме сензори за използване като IR сензор и ултразвуков сензор.
В нашия робот сме използвали американския сензор като преден сензор и два IR сензора съответно отляво и отдясно. Роботът ще се придвижи напред, когато пред него няма обект. Така роботът ще се движи напред, докато ултразвуковият (САЩ) сензор не открие някакъв обект.
Когато обект бъде открит от американския сензор, е време да промените посоката на робота. Можем да се обърнем наляво или надясно, за да решим посоката на завиване, използваме помощта на IR сензор, за да проверим дали има някакъв обект близо до лявата или дясната страна на робота.
Ако има възражение, открито от предната и дясната страна на робота, тогава роботът ще се върне и ще се обърне наляво. Ние караме робота да тича назад за определено разстояние, така че да не се сблъска с обекта, докато прави завоя.
Ако има възражение, открито от предната и лявата страна на робота, тогава роботът ще се върне и ще се обърне надясно.
Ако роботът стигне до ъгъла на стаята, той ще усети обект, присъстващ и във всичките четири. В този случай трябва да върнем робота назад, докато някоя от страните се освободи.
Друг възможен случай е , че отпред ще има обект, но може да няма никакъв обект нито от лявата, нито от дясната страна, в този случай трябва да извъртим произволно в която и да е посока.
Надявам се, че това би дало груба представа за това как работи избягващият препятствия, сега нека пристъпим към схемата на веригата, за да изградим този бот и да му се насладим в действие.
Електрическа схема и обяснение:
Пълната схема на схемата на този робот за избягване на препятствия, базиран на PIC, е показана на горната снимка. Както можете да видите, ние използвахме два IR сензора за откриване на обекти съответно отляво и отдясно на робота и ултразвуков сензор за измерване на разстоянието на обекта, който се намира пред робота. Също така използвахме модул L293D Motor Driver за задвижване на двата двигателя, присъстващи в този проект. Това са обикновени мотори с постоянен ток за колела и следователно могат да бъдат получени много лесно. Следващата таблица ще ви помогне при свързването.
S.No |
Свързан от |
Свързан с |
1 |
IR сензор Ляв външен щифт |
RD2 (щифт 21) |
2 |
IR сензор Десен външен щифт |
RD3 (щифт 22) |
4 |
Двигател 1 Канал A щифт |
RC4 (щифт 23) |
5 |
Двигател 1 Канал B щифт |
RC5 (щифт 25) |
6 |
Двигател 2 Канал A щифт |
RC6 (щифт 26) |
7 |
Двигател 2 Канал B щифт |
RC7 (щифт 27) |
8 |
Щанга за задействане на САЩ |
RB1 (щифт 34) |
9 |
US Echo Pin |
RB2 (щифт 35) |
Модул за задвижване на двигателя като L293D е задължителен, тъй като количеството ток, необходимо за задвижване на мотора на постояннотоковия редуктор, не може да бъде получено от I / O щифта на микроконтролера PIC. Сензорите и модулът се захранват от + 5V захранване, което се регулира от 7805. Модулът на драйвера на двигателя може да се захранва дори с + 12V, но за този проект току-що се придържам към наличните + 5V.
Пълният робот се захранва от Power bank в моя случай. Можете също така да използвате всяка обикновена банка за захранване и да преминете секцията на регулатора или да използвате горната схема и да използвате която и да е 9V или 12V батерия за робота, както е показано на схемата по-горе. След като свържете връзките си, това ще изглежда по следния начин
Програмиране на вашия PIC микроконтролер:
Програмирането на вашия PIC да работи за избягване на препятствия е наистина лесно. Просто трябва да прочетем стойността на тези три сензора и да задвижваме двигателите съответно. В този проект използваме ултразвуков сензор. Вече научихме как да свързваме ултразвук с PIC микроконтролер, ако сте нов тук, любезно се върнете към този урок, за да разберете как щатският сензор работи с PIC, тъй като тук ще пропусна подробностите за него, за да избегна повторение.
В пълна програма или този робот се дава в края на тази страница, аз обясни още важните парчета от програмата по-долу.
Както знаем, всички програми започват с декларациите за входни и изходни щифтове. Тук четирите щифта на модула на моторния драйвер и щифтовете за задействане са изходните щифтове, докато Echo щифтът и два IR изхода ще бъдат въведени. Трябва да инициализираме модула Timer 1, за да го използваме с ултразвуковия сензор.
TRISD = 0x00; // PORTD деклариран като изход за свързване на LCD TRISB1 = 0; // Задействащият щифт на американския сензор се изпраща като изходен щифт TRISB2 = 1; // Ехо пинът на US сензора е зададен като входен пин TRISB3 = 0; // RB3 е изходен щифт за LED TRISD2 = 1; TRISD3 = 1; // И двата щифта на IR сензора се декларират като вход TRISC4 = 0; TRISC5 = 0; // пинове на мотор 1, декларирани като изход TRISC6 = 0; TRISC7 = 0; // Мотор 2 щифта, декларирани като изход T1CON = 0x20;
В тази програма ще трябва доста често да проверяваме за разстоянието между сензора и обекта, така че сме създали функция, наречена calcu_distance (), вътре в която ще измерим разстоянието по метода, обсъден в урока за взаимодействие със сензора в САЩ. Кодът е показан по-долу
void calcu_distance () // функция за изчисляване на разстояние от US {TMR1H = 0; TMR1L = 0; // изчистване на битовете на таймера Trigger = 1; __забавяне_us (10); Задействане = 0; докато (Ехо == 0); TMR1ON = 1; докато (Ехо == 1); TMR1ON = 0; time_taken = (TMR1L - (TMR1H << 8)); разстояние = (0,0272 * време_заето) / 2; }
Следващата стъпка ще бъде да се сравнят стойностите на ултразвуковия сензор и IR сензора и съответно да се премести роботът. Тук В тази програма използвах стойност cm като критичното разстояние, под което роботът трябва да започне да прави промени в посоката. Можете да използвате предпочитаните от вас стойности. Ако няма обект, роботът просто се придвижва напред
ако (разстояние> 5) {RC4 = 0; RC5 = 1; // Двигател 1 напред RC6 = 1; RC7 = 0; // Двигател 2 напред}
Ако бъде открит обект, разстоянието ще падне под cm. В този случай разглеждаме стойностите на левия и десния ултразвуков сензор. Въз основа на тази стойност решаваме или да завием наляво, или да завием надясно. Използва се закъснение от ms, така че промяната да е видима посоката.
ако (RD2 == 0 && RD3 == 1 && разстояние <= 5) // Лявият сензор е блокиран {back_off (); RC4 = 1; RC5 = 1; // Двигател 1 стоп RC6 = 1; RC7 = 0; // Двигател 2 напред __delay_ms (500); } изчисли_дистанция (); ако (RD2 == 1 && RD3 == 0 && разстояние <= 5) // Десният сензор е блокиран {back_off (); RC4 = 0; RC5 = 1; // Двигател 1 напред RC6 = 1; RC7 = 1; // Двигател 2 спиране __delay_ms (500); }
Понякога ултразвуковият сензор би открил обект, но нямаше обект, открит от IR сензорите. В този случай роботът по подразбиране завива наляво. Можете също така да го накарате да се обърне надясно или в произволна посока въз основа на вашите предпочитания. Ако има обекти от двете страни, ние го караме да се върне назад. Кодът за извършване на същото е показан по-долу.
изчисли_разстояние (); if (RD2 == 0 && RD3 == 0 && distance <= 5) // И двата сензора са отворени {back_off (); RC4 = 0; RC5 = 1; // Двигател 1 напред RC6 = 1; RC7 = 1; // Двигател 2 спиране __delay_ms (500); } изчисли_дистанция (); ако (RD2 == 1 && RD3 == 1 && разстояние <= 5) // И двата сензора са блокирани {back_off (); RC4 = 1; RC5 = 0; // Двигател 1 заден RC6 = 1; RC7 = 1; // Двигател 2 спира __delay_ms (1000); }
Препятствие Avoider Робот в действие:
Работата по проекта е много интересна и забавна за гледане. След като приключите с вашата схема и код, просто включете вашия бот и го оставете на земята. То трябва да може да идентифицира препятствията и да ги избягва умно. Но тук идва забавната част. Можете да модифицирате кода и да го накарате да прави повече неща, като да го накарате да избягва стълба, да го прави по-умен, като съхранява ценни завои и какво ли още не?
Този робот ще ви помогне да разберете основите на програмирането и да научите как действителният хардуер ще реагира на вашия код. Винаги е забавно да програмирате този робот и да наблюдавате как се държи за кода в реалния свят.
Тук използвахме същата PIC перфектна платка, която направихме за мигащ светодиод с помощта на PIC микроконтролер и използвахме тази платка в други проекти на PIC Tutorial Series.
Вашият робот трябва да изглежда подобно на този, показан на снимката по-горе. Цялостната работа на този проект е показана във видеото по-долу.
Надявам се, че сте разбрали проекта и ви е било приятно да го изградите. Ако имате някакви съмнения или сте останали, можете да използвате раздела за коментари, за да публикувате вашите въпроси и аз ще се опитам да отговоря на тях.