Объезжающий препятствия робот на Arduino


Объезжающий препятствия робот является “умным” устройством, способным автоматически обнаруживать препятствия впереди себя и избегать столкновения с ними, поворачиваясь в противоположное направление от них. Это свойство позволяет роботу работать в незнакомой обстановке и является одним из ключевых требований при создании автономных роботов. Подобные работы находят широкое применение в вооруженных силах и чрезвычайных ситуациях, а также во многих других случаях, где желательно не подвергать опасности жизнь и здоровье людей.

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

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

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

  1. Плата Arduino Uno (купить на AliExpress) или Nano (купить на AliExpress).
  2. Ультразвуковой датчик HC-SR04 (купить на AliExpress).
  3. Модуль драйвера двигателя LM298N (купить на AliExpress).
  4. Электродвигатели постоянного тока, работающие от напряжения 5V.
  5. Литий-ионная батарея 7.4V (купить на AliExpress).
  6. Колеса.
  7. Шасси робота.
  8. Соединительные провода.

Принцип работы ультразвукового датчика HC-SR04

Ультразвуковой датчик HC-SR04 используется для измерения расстояний в диапазоне 2-400 см с точностью 3 мм. Датчик состоит из ультразвукового передатчика, ультразвукового приемника и схемы управления.

Внешний вид ультразвукового датчика HC-SR04

Ультразвуковой датчик HC-SR04 обеспечивает на своем выходе сигнал, пропорциональный дистанции до препятствия. Датчик генерирует звуковые колебания в ультразвуковом диапазоне (после получения управляющего импульса) и после этого ждет когда они вернутся к нему (эхо), отразившись от какого-нибудь препятствия. Затем, основываясь на скорости звука (340 м/с) и времени, необходимом для того чтобы эхо достигло источника (нашего датчика), датчик обеспечивает на своем выходе сигнал, пропорциональный расстоянию до препятствия.

Временные диаграммы работы ультразвукового датчика HC-SR04

Как показано на рисунке сначала нам нужно инициировать датчик для измерения расстояний, для этого на его триггерный контакт (trigger pin) необходимо подать логический сигнал высокого уровня длительностью не менее 10 мкс, после этого датчик генерирует серию звуковых колебаний и после получения отраженного сигнала (эхо) датчик обеспечивает на своем выходе сигнал, пропорциональный расстоянию между ним и препятствием.

Ультразвуковой сигнал отражается от поверхности, возвращается обратно и улавливается приемником ультразвукового сигнала датчика. После этого на контакте Echo датчика устанавливается напряжение высокого уровня (high) на время, пропорциональное расстоянию до препятствия.

Принцип определения расстояния с помощью ультразвукового датчика HC-SR04

После этого расстояние до препятствия можно рассчитать по следующей формуле:

Distance= (Time x Speed of Sound in Air (343 m/s))/2

Также на нашем сайте вы можете посмотреть другие проекты, в которых был использован ультразвуковой датчик.

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

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

Схема робота на Arduino, объезжающего препятствия, представлена на следующем рисунке. Как видите, в схеме мы использовали плату Arduino Nano, но эту же схему без изменений можно использовать и в случае использования платы Arduino Uno. Код программы в этом случае также останется без изменений.

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

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

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

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

Первым делом в программе необходимо инициализировать контакты, через которые происходит взаимодействие с ультразвуковым датчиком: trig pin датчика подключен к контакту 9 платы Arduino, а echo pin - к контакту 10 платы Arduino.

Далее инициализируем контакты для взаимодействия с модулем драйвера двигателей LM298N – 4 контакта.

Внешний вид модуля драйвера двигателей LM298N

Затем в функции setup() зададим режимы работы контактов. 4 контакта управления двигателями и Trig pin датчика – на вывод данных (OUTPUT), Echo Pin датчика – на ввод данных (Input).

Далее в функции loop() мы будем измерять расстояние до препятствий с помощью датчика HC-SR04 и на основании этого управлять вращением двигателей. Расстояние до препятствия будет определяться впереди робота. Для определения расстояния сначала будет передаваться серия ультразвуковых импульсов длительностью 10 мкс, а затем спустя 10 мкс мы будем принимать отраженный сигнал. Более подробно об измерении расстояний с помощью ультразвукового датчика и платы Arduino можно прочитать в данной статье.

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

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

Таким образом, робот получает возможность объезжать препятствия, встречающиеся у него на пути.

Исходный код программы (скетча)

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

Нашел на youtube еще один ролик (один из самых популярных в этой тематике), в котором рассматривается создание робота, объезжающего препятствия. Он более совершенен чем рассмотренный в данной статье благодаря вращающемуся с помощью сервомотора ультразвуковому датчику. К нему есть также исходный код программы (доступен по ссылке из описания ролика), но без объяснения. Но, надеюсь, объяснение программы рассмотренного в данной статье робота поможет вам понять код программы этого более "продвинутого" робота.

(2 голосов, оценка: 3,50 из 5)
Загрузка...
8 227 просмотров

Комментарии

Объезжающий препятствия робот на Arduino — 6 комментариев

  1. Кабель на 220 вольт нужен чтобы проложить его под газоном или на газоне чтобы газонокосилка не выезжала за кабель.

  2. Добрый день! Поможете пожалуйста со скотчем. Я хочу сделать робот газонокосилку. Использовать кабель на 220 вольт а на газонокосилке датчик скрытой проводки на каждом датчики есть светодиод или зуммер я нашёл конструктор для сборки скрытово искателя проводки, только там где зуммер или светодиод подключить реле и когда датчик скрытой проводки замечает кабель газонокосилка останавливается на полсекунды едет назад ждёт пол секунды и поворачивает на лево вот по такому алгоритму нужен скетч. Заранее Большое спасибо

    • Напрямую нельзя потому что она зависит от используемых двигателей на роботе, но косвенно увеличить/уменьшить скорость движения робота можно изменяя величины задержек в программе.
      Скорость можно будет менять если немного усложнить схему проекта и осуществлять регулировку скорости с помощью ШИМ сигнала

  3. Добрый день. При реализации этого проекта возникла трудность. Датчик расстояния не хотел работать. При попытке решить эту проблему выяснилось что на схеме выход "trig" подключён к 10 выводу, а вывод "echo" к 9 выводу, а в программе наоборот. При переключении выводов в соответствии с программой всё заработало нормально.

    • Добрый день. Спасибо что указали на опечатку (к сожалению, они иногда случаются), надеюсь, ваш комментарий поможет другим пользователям, которые будут пытаться повторить данный проект

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

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