Рубрики
Схемы на PIC

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

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

Принципы работы современных роботов-пылесосов во многом похожи на принцип работы рассматриваемого в нашей статье робота, хотя в них и используются значительно более дорогие датчики. Также ранее на нашем сайте мы рассматривали проекты роботов, объезжающих препятствия, на основе плат 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 представлена на следующем рисунке.

Для управления двигателями в схеме используется драйвер двигателей 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 из проекта мигания светодиодом.

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

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

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

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

Ваш адрес email не будет опубликован.