Вторник, 15 Март 2016 20:53

Программируем робота - машинку на Arduino. Часть 3. Объезжаем препятствия.

Автор
Оцените материал
(4 голосов)

Пришла пора научить моего машиноподобного робота объезжать препятствия. Для этого я пошел по простейшему пути – использовал ультразвуковой датчик расстояния HC-SR04.Угол распространения ультразвукового пучка у этого датчика довольно узкий (по моим оценкам, около 20о), а препятствия нужно обнаруживать со всех сторон от робота. Поэтому датчик был закреплен на маленьком сервомоторе 9g servo.

 

ультразвуковой датчик расстояния HC SR04сервомотор 9g servo на роботе

Подключить ультразвуковой дальномер к Arduino совершенно несложно. У него всего 4 вывода: 2 на питание, триггер(Trig) и эхо (Echo).Последние два вывода соединяются с цифровыми выводами Arduino. Когда нужно измерить расстояние до предмета, находящегося перед датчиком, нужно подать импульс на триггер. После этого датчик выдаст короткий импульс ультразвука. А когда ультразвук, отразившийся от предмета, опять попадет на датчик – на выводе «эхо» появится логическая единица. Посчитав время между двумя импульсами и зная скорость звука, несложно подсчитать расстояние до препятствия.

Но это если глубоко копать – а так-то для ультразвуковых дальномеров давно есть библиотеки для Arduino. Я использовал библиотеку от ITead studio (вложу её в архив со скетчем). А библиотека для серводвигателя изначально есть в Arduino IDE.

Принцип такой: через определенные промежутки пройденного пути робот останавливается, серводвигатель перемещается от 0 до 180 градусов с шагом 10 о . На каждом шаге датчик расстояния получает расстояние до препятствий. Если оно меньше допустимого – то в соответствую переменную записывается «true». После этого при наличия препятствия по пути следования робота – задаём ему новую точку следования справа или слева от предыдущей. Ну, детальнее я рассмотрел этот алгоритм в видео, там же можно увидеть как робот справляется с уклонением от препятствий.

Стоит заметить, что на препятствия робот реагирует далеко не всегда. Например, если плоская поверхность повернута под углом к ультразвуковому датчику  расстояния – ультразвуковой импульс отразится в сторону и не будет зафиксирован датчиком. Или если поверхность препятствия плохо отражает ультразвук – так, диван мой робот не видит в упор. Ну, это уже издержки метода. Когда-нибудь закажу оптические дальномеры – будет интересно поэкспериментировать с ними.

Скачать архив со скетчем для Arduino и библиотекой можно по ссылке, файл LazyCarBot_06.zip

Прочитано 4057 раз Последнее изменение Среда, 16 Март 2016 19:57

1 Комментарий

Авторизуйтесь, чтобы получить возможность оставлять комментарии