Робот на Raspberry Pi объезжающий препятствия

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

Внешний вид робота на Raspberry Pi, объезжающего препятствия

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

  1. Плата Raspberry Pi (купить на AliExpress).
  2. Ультразвуковой датчик HC-SR04 (купить на AliExpress).
  3. Шасси робота с колесами.
  4. Электродвигатели постоянного тока.
  5. Микросхема драйвера двигателей L293D (купить на AliExpress).
  6. Резистор 1 кОм (купить на AliExpress).
  7. Конденсатор 100 нФ (купить на AliExpress).
  8. Источник питания.
  9. Макетная плата.
  10. Соединительные провода.

Принцип работы ультразвукового датчика 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

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

Фрагмент кода программы для Raspberry Pi, который будет рассчитывать измеренное расстояние до препятствия (в см), выглядит следующим образом:

Переменная pulse_duration в этой программе обозначает время между передачей и приемом ультразвукового сигнала.

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

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

Схема робота на Raspberry Pi, объезжающего препятствия

Модуль ультразвукового датчика в этой схеме подключен к контактам GPIO 17 и 27 платы Raspberry Pi. Микросхема драйвера мотора L293D используется для управления двигателями в нашем проекте, ее входные контакты 2, 7, 10 и 15 подключены к контактам GPIO 12, 16, 20 и 21 платы Raspberry Pi. Приводят в движение нашего робота электродвигатели, один из которых подключен к выходным контактам 3 и 6 микросхемы L293D, а другой – к контактам 11 и 14 микросхемы.

Принцип работы робота

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

Структурная схема работы проекта приведена на следующем рисунке.

Структурная схема работы проекта

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

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

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

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

Первым делом в программе нам необходимо подключить используемые библиотеки, инициализировать необходимые переменные и контакты.

После этого мы запрограммируем ряд функций def forward(), def back(), def left(), def right() для движения робота вперед, назад, влево и вправо соответственно. Функция def stop() будет использоваться для остановки робота.

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

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

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

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

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

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

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