Робот объезжающий препятствия на основе микроконтроллера PIC


Робот, объезжающий препятствия, является одним из самых популярных типов роботов, создаваемых энтузиастами-радиолюбителями. По сути, это обычный робот на колесах, который может двигаться в пространстве, не сталкиваясь ни с какими препятствиями. Существует много различных способов сконструировать подобного робота, но в нашем проекте мы будем использовать ультразвуковой датчик (front) и два инфракрасных датчика (Left/Right) – благодаря этому набору датчиков робот сможет анализировать обстановку сразу в трех направлениях, что позволит ему более эффективно передвигаться. Данного робота мы сконструируем на основе микроконтроллера PIC16F877A.

Внешний вид робота на микроконтроллере PIC объезжающего препятствия

Принципы работы современных роботов-пылесосов во многом похожи на принцип работы рассматриваемого в нашей статье робота, хотя в них и используются значительно более дорогие датчики. Также ранее на нашем сайте мы рассматривали проекты роботов, объезжающих препятствия, на основе плат Arduino и Raspberry Pi. Дополнительно вы можете посмотреть и проекты других похожих роботов:

Необходимые компоненты

  1. Микроконтроллер PIC16F877A (купить на AliExpress).
  2. Ультразвуковой датчик HC-SR04 (купить на AliExpress).
  3. Инфракрасный датчик – 2 шт. (купить на AliExpress).
  4. Электродвигатель постоянного тока – 2 шт.
  5. Драйвер двигателя L293D (купить на AliExpress - но его можно купить и в виде отдельной микросхемы).
  6. Держатель микросхем на 40 контактов (купить на AliExpress).
  7. Программатор PICkit 3 (купить на AliExpress).
  8. Кварцевый генератор 20 МГц (купить на AliExpress).
  9. Конденсаторы 22 пФ (2 шт.), 0,1 мкФ и 10 мкФ (купить на AliExpress).
  10. Регулятор напряжения 7805 (купить на AliExpress).
  11. Шасси робота (можно изготовить самостоятельно).
  12. Power bank.
  13. Перфорированная плата.
  14. Соединительные провода.

Принципы работы робота объезжающего препятствия

Принцип работы нашего робота достаточно прост. Мы используем датчики для обнаружения препятствий в пространстве вокруг робота и на основе этих данных инструктируем робота чтобы он не сталкивался с ними. В качестве датчиков мы используем ультразвуковой датчик (расположенный спереди робота) и инфракрасные датчики (расположенные по краям робота). Робот будет двигаться прямо если впереди себя он не будет обнаруживать никакого препятствия.

Внешний вид инфракрасного датчика Внешний вид ультразвукового датчика

Когда ультразвуковой датчик обнаружит впереди себя препятствие необходимо будет изменять направление движения робота. Мы можем повернуть вправо или влево. Принимать решение о том, в какую сторону (вправо или влево) поворачивать, мы будем на основе информации от инфракрасных датчиков – будут ли они обнаруживать препятствия справа и слева робота.

Движение робота прямо

Если препятствие будет спереди и справа робота, то робот будет немного отъезжать назад (чтобы не столкнуться с препятствием во время поворота) и затем поворачивать влево.

Алгоритм действий робота если препятствие будет спереди и справа робота

Аналогичным образом, если препятствие будет спереди и слева робота, то робот будет немного отъезжать назад и затем поворачивать вправо.

Алгоритм действий робота если препятствие будет спереди и слева робота

Если робот будет доезжать до угла комнаты, то в этом случае он будет окружен препятствиями со всех трех сторон, на которых у него есть датчики. В этом случае он должен будет отъезжать назад до тех, пока с одной стороны препятствие не исчезнет.

Алгоритм действий робота если он заезжает в угол

Еще один возможный случай, это когда впереди робота есть препятствие, а справа и слева от него препятствий нет, в этом случае мы случайным образом должны решить в какую сторону нам двигаться – вправо или влево.

Алгоритм действий робота если препятствие спереди

Схема проекта

Схема робота, объезжающего препятствия, на основе микроконтроллера PIC представлена на следующем рисунке.

Схема робота, объезжающего препятствия, на основе микроконтроллера PICДля управления двигателями в схеме используется драйвер двигателей L293D. Полная схема соединений проекта представлена в следующей таблице.

№ п/п Куда подключен в схеме Контакт микроконтроллера PIC
1 IR sensor Left out pin RD2 (pin 21)
2 IR sensor Right out pin RD3 (pin 22)
3 Motor 1 Channel A pin RC4 (pin 23)
4 Motor 1 Channel B pin RC5 (pin 25)
5 Motor 2 Channel A pin RC6 (pin 26)
6 Motor 2 Channel B pin RC7 (pin 27)
7 контакт Trigger ультразвукового датчика RB1 (pin 34)
8 контакт Echo ультразвукового датчика RB2 (pin 35)

Драйвер двигателей L293D (или подобный ему) является обязательным в нашей схеме поскольку тока, обеспечиваемого контактами ввода/вывода микроконтроллера PIC, не хватит для управления двигателями. Датчики и микроконтроллер в нашей схеме запитываются от напряжения +5V с выхода регулятора напряжения 7805. Драйвер двигателей L293D можно запитывать от +12V, однако в данной схеме мы запитали его от +5V.
В конечном итоге, все компоненты нашего робота запитываются от Power bank'а. Также можно использовать батарейки на 9V или 12V.

Внешний вид собранной конструкции робота показан на следующем рисунке.

Внешний вид собранной конструкции робота

Объяснение программы для микроконтроллера PIC

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

В начале программы мы объявим используемые контакты и зададим режимы их работы. Также инициализируем Timer 1 – он нам будет необходим для работы с ультразвуковым датчиком.

Затем запрограммируем функцию для определения расстояния до препятствия впереди робота с помощью ультразвукового датчика. Мы будем в программе выполнять эту операцию достаточно часто, поэтому вполне логично оформить ее в виде функции. Более подробно про работу микроконтроллера PIC с ультразвуковым датчиком HC-SR04 вы можете прочитать в этой статье.

На следующем шаге мы будем сравнивать значения с ультразвукового и инфракрасных датчиков с определенными в программе значениями и на основе результатов этого сравнения подавать команды на робот на его движение в соответствующем направлении. Все расстояния в нашей программе указаны в сантиметрах.

Если впереди робота нет препятствия он просто движется прямо.

Если впереди робота будет обнаружено препятствие мы будем анализировать информацию с инфракрасных датчиков и на основании этого принимать решение в каком направлении двигаться. Задержка в 500 мс используется для того чтобы сделать моменты изменения направления движения робота более заметными.

Если ультразвуковой датчик впереди себя будет обнаруживать препятствие, а справа или слева (по информации от инфракрасных датчиков) препятствия не будет, то робот по умолчанию будет поворачивать влево. Вы можете по своему усмотрению изменить его на поворот влево или на рандомный (случайный) поворот вправо или влево. Если расстояние обнаруживается со всех трех сторон робота (спереди, справа и слева), то робот будет двигаться назад.

Тестирование работы робота

После сборки схемы робота и загрузки программы в микроконтроллер PIC вы можете протестировать его работу, поместив его на ровную поверхность. После подачи питания робот начнет двигаться прямо и по мере обнаружения препятствий он будет изменять направление своего движения. По своему желанию вы можете изменить алгоритмы движения робота. Для сборки схемы робота мы использовали перфорированную плату с установленным на нее микроконтроллером PIC из проекта мигания светодиодом.

Тестирование работы робота объезжающего препятствия

Более подробно работу робота вы можете посмотреть на видео, приведенном в конце статьи.

Исходный код программы

Видео, демонстрирующее работу проекта

(Проголосуй первым!)
Загрузка...
451 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *