- Необхідні матеріали:
- Концепція робота, який уникає перешкод:
- Електрична схема та пояснення:
- Програмування мікроконтролера PIC:
- Робот Avoider з перешкодами в дії:
Перешкода Avoider Robot - ще один відомий робот, який підсилює вбудовані проекти. Для тих, хто є новим роботом, який уникає перешкод, це просто звичайний колісний робот, який може рухатися своїм шляхом, не наносячи жодної перешкоди. У проекті є багато способів побудувати робота, який уникає перешкод, і ми збираємось використовувати один ультразвуковий датчик (спереду) та два ІЧ-датчики (ліворуч / праворуч), щоб наш робот мав очі у всіх трьох напрямках. Таким чином ви можете зробити його набагато розумнішим і швидшим, виявляючи предмети з усіх трьох боків і відповідно маневруючи. Тут ми судимося з мікроконтролером PIC16F877A за цього робота, який уникає перешкод.
Роботу робота, який уникає перешкод, можна спостерігати з продукту в реальному часі, який називається роботами для прибирання дому. Хоча технологія та датчики, що використовуються в них, набагато складніші, концепція залишається незмінною. Давайте подивимося, скільки ми можемо досягти за допомогою наших звичайних датчиків та мікроконтролерів PIC.
Також перевірте інші наші роботи, які уникають роботів:
- Робот, який уникає перешкод на основі Raspberry Pi
- Зроби сам розумний пилосос-робот за допомогою Arduino
Необхідні матеріали:
- PIC16F877A
- ІЧ-датчик (2 Ні)
- Ультразвуковий датчик (1Ні)
- Двигун постійного струму постійного струму (2 Ні)
- L293D Драйвер двигуна
- Шезлонги (Ви також можете побудувати власні, використовуючи картон)
- Банк живлення (будь-яке доступне джерело живлення)
Концепція робота, який уникає перешкод:
Концепція робота, що уникає перешкод, дуже проста. Ми використовуємо датчики для виявлення присутності предметів навколо робота і використовуємо ці дані, щоб не зіткнутися з роботом над цими об’єктами. Для виявлення Об’єкта ми можемо використовувати будь-які датчики використання, такі як ІЧ-датчик та Ультразвуковий датчик.
У нашому роботі ми використовували американський датчик як передній датчик та два ІЧ-датчики для лівого та правого відповідно. Робот рухатиметься вперед, коли перед ним немає об’єкта. Отже, робот рухатиметься вперед, поки ультразвуковий датчик (США) не виявить будь-який предмет.
Коли американський датчик виявляє об’єкт, настав час змінити напрямок робота. Ми можемо повернути ліворуч або праворуч, щоб визначити напрямок повороту, ми використовуємо за допомогою ІЧ-датчика, щоб перевірити, чи є поблизу лівої або правої сторони робота предмет.
Якщо заперечення виявлено на передній і правій стороні Робота, тоді робот повернеться і поверне ліворуч. Ми змушуємо робота бігти назад на певну відстань, щоб він не зіткнувся з об’єктом під час повороту.
Якщо заперечення виявлено на передній та лівій стороні Робота, тоді робот повернеться і поверне праворуч.
Якщо робот дійде до кута кімнати, він відчує предмет, присутній у всіх чотирьох. У цьому випадку нам доведеться вести робота назад, доки будь-яка сторона не стане вільною.
Інший можливий випадок - це те, що попереду буде об’єкт, але об’єкта може не бути ні в лівій, ні в правій частині, в цьому випадку нам доведеться випадковим чином повертати в будь-якому напрямку.
Сподіваємось, це мало б приблизне уявлення про те, як працює перешкода, тепер давайте перейдемо до схеми, щоб побудувати цього бота і насолоджуватися ним у дії.
Електрична схема та пояснення:
Повна принципова схема цього робота на основі PIC, який уникає робота, що уникає перешкод, показана на малюнку вище. Як бачите, ми використовували два ІЧ-датчики для виявлення об’єктів ліворуч і праворуч від робота, а також ультразвуковий датчик для вимірювання відстані об’єкта, який знаходиться перед роботом. Ми також використовували модуль драйвера двигуна L293D для керування двома двигунами, присутніми в цьому проекті. Це просто звичайні редукторні двигуни постійного струму для коліс, і тому їх можна отримати дуже просто. Наступна таблиця допоможе вам у підключенні.
С.Ні |
Підключено від |
Пов'язаний з |
1 |
ІЧ-датчик Залишений штифт |
RD2 (контакт 21) |
2 |
ІЧ-датчик Правий зовнішній штифт |
RD3 (контакт 22) |
4 |
Двигун 1 канал А штифт |
RC4 (контакт 23) |
5 |
Двигун 1 Канал B штифт |
RC5 (контакт 25) |
6 |
Двигун 2-канальний штифт A |
RC6 (контакт 26) |
7 |
Двигун 2-канальний B контакт |
RC7 (контакт 27) |
8 |
Американський тригерний штифт |
RB1 (контакт 34) |
9 |
Ехо-шпилька США |
RB2 (контакт 35) |
Модуль драйвера двигуна, такий як L293D, є обов’язковим, оскільки величина струму, необхідна для роботи двигуна постійного струму постійного струму, не може отримуватися штифтом вводу-виводу мікроконтролера PIC. Датчики та модуль живляться від джерела живлення + 5 В, яке регулюється 7805. Модуль двигуна двигуна може живитись навіть за допомогою напруги + 12 В, але для цього проекту я просто дотримувався наявних + 5 В.
Повний Робот живиться від Power Bank в моєму випадку. Ви також можете використовувати будь-який звичайний банк живлення, а також пропустити секцію регулятора або використовувати вищезазначену схему і використовувати будь-яку батарею 9В або 12В для робота, як показано на схемі вище. Як тільки ваші зв’язки будуть зроблені, це буде виглядати приблизно так нижче
Програмування мікроконтролера PIC:
Програмувати ваш ПІК на роботу для уникнення перешкод дуже просто. Нам просто потрібно прочитати значення цих трьох датчиків і відповідно керувати ними. У цьому проекті ми використовуємо ультразвуковий датчик. Ми вже дізналися, як взаємодіяти ультразвук з мікроконтролером PIC, якщо ви тут новачок, будь ласка, поверніться до цього посібника, щоб зрозуміти, як американський датчик працює з PIC, оскільки я пропускатиму деталі про нього тут, щоб уникнути повторення.
Повна програма або цей робот приводиться в кінці цієї сторінки, я також пояснив, важливі шматки програми нижче.
Як ми знаємо, усі програми починаються з декларацій вводу та виводу. Тут чотири висновки модуля двигуна двигуна та виводи тригера є вихідними висновками, тоді як вхідний штифт Ехо та два вихідні виводи ІК-сигналу. Нам слід ініціалізувати модуль Таймер 1, щоб використовувати його з ультразвуковим датчиком.
TRISD = 0x00; // PORTD оголошено як вихід для взаємодії РК-дисплея TRISB1 = 0; // Тригерний штифт датчика США надсилається як вихідний штифт TRISB2 = 1; // Ехо-штир американського датчика встановлений як вхідний штифт TRISB3 = 0; // RB3 - вихідний штифт для світлодіода TRISD2 = 1; TRISD3 = 1; // Обидва висновки ІЧ-датчика оголошені як вхідні TRISC4 = 0; TRISC5 = 0; // Шпильки двигуна 1 оголошені як вихідні TRISC6 = 0; TRISC7 = 0; // 2 шпильки двигуна, оголошені як вихід T1CON = 0x20;
У цій програмі нам довелося б часто перевіряти відстань між датчиком і об’єктом, тому ми створили функцію з назвою izračunaти_відстань (), всередині якої ми будемо вимірювати відстань методом, обговореним у підручнику з взаємодії датчиків із США. Код показаний нижче
void izračunaти_відстань () // функція для обчислення відстані США {TMR1H = 0; TMR1L = 0; // очищення бітів таймера Trigger = 1; __delay_us (10); Тригер = 0; while (Відлуння == 0); TMR1ON = 1; в той час як (Відлуння == 1); TMR1ON = 0; прийняте часом = (TMR1L - (TMR1H << 8)); відстань = (0,0272 * час_зайнятий) / 2; }
Наступним кроком буде порівняння значень ультразвукового датчика та ІЧ-датчика та переміщення робота відповідно. Тут у цій програмі я використав значення см як критичну відстань, нижче якої робот повинен почати вносити зміни до напрямку. Ви можете використовувати бажані значення. Якщо об'єкта немає, робот просто рухається вперед
якщо (відстань> 5) {RC4 = 0; RC5 = 1; // Двигун 1 вперед RC6 = 1; RC7 = 0; // Двигун 2 вперед}
Якщо об'єкт виявлено, то відстань буде нижче см. У цьому випадку ми враховуємо значення лівого та правого ультразвукового датчика. Виходячи з цього значення, ми вирішуємо або повернути ліворуч, або праворуч. Використовується затримка мс, щоб видно було зміну напрямку.
якщо (RD2 == 0 && RD3 == 1 && відстань <= 5) // Лівий датчик заблокований {back_off (); RC4 = 1; RC5 = 1; // Двигун 1 зупинка RC6 = 1; RC7 = 0; // Двигун 2 вперед __delay_ms (500); } обчислити_відстань (); if (RD2 == 1 && RD3 == 0 && distance <= 5) // Правий датчик заблокований {back_off (); RC4 = 0; RC5 = 1; // Двигун 1 вперед RC6 = 1; RC7 = 1; // Двигун 2 зупинки __delay_ms (500); }
Іноді ультразвуковий датчик виявляв об'єкт, але об'єкт, який виявляли ІЧ-датчики, не міг. У цьому випадку робот за замовчуванням повертає вліво. Ви також можете змусити його повернути праворуч або у випадковому напрямку, залежно від ваших уподобань. Якщо по обидві сторони є предмети, ми робимо це назад. Код для того, щоб зробити те саме, показано нижче.
обчислити_відстань (); if (RD2 == 0 && RD3 == 0 && distance <= 5) // Обидва датчика відкрито {back_off (); RC4 = 0; RC5 = 1; // Двигун 1 вперед RC6 = 1; RC7 = 1; // Двигун 2 зупинки __delay_ms (500); } обчислити_відстань (); if (RD2 == 1 && RD3 == 1 && distance <= 5) // Обидва датчика заблоковано {back_off (); RC4 = 1; RC5 = 0; // Двигун 1 реверсу RC6 = 1; RC7 = 1; // Двигун 2 зупинки __delay_ms (1000); }
Робот Avoider з перешкодами в дії:
За роботою проекту дуже цікаво та цікаво спостерігати. Закінчивши роботу зі схемою та кодом, просто увімкніть ваш бот і залиште його на землі. Він повинен вміти виявляти перешкоди та розумно їх уникати. Але, ось приходить найцікавіша частина. Ви можете модифікувати код і змусити його робити більше, наприклад, уникати сходів, робити його розумнішим, зберігаючи дорогоцінні повороти, а що ні?
Цей робот допоможе вам зрозуміти основи програмування та дізнатись, як справжнє обладнання реагуватиме на ваш код. Завжди цікаво програмувати цього робота і спостерігати, як він поводиться для коду в реальному світі.
Тут ми використовували ту саму плату перфокарт PIC, яку ми виготовили для блимання світлодіодів за допомогою мікроконтролера PIC, і використовували цю плату в інших проектах PIC Tutorial Series.
Ваш робот повинен виглядати приблизно так, як показано на малюнку вище. Повна робота цього проекту показана у відео нижче.
Сподіваюся, ви зрозуміли проект і сподобалося його будувати. Якщо у вас є якісь сумніви або ви застрягли, ви можете використати розділ коментарів, щоб опублікувати свої запитання, і я постараюся відповісти на них.