среда, 29 мая 2019 г.

Колесный робот - часть 1

О соревнованиях RoboRace я впервые узнал из доклада на MLUG (Minsk Linux User Group). Было интересно послушать о проблемах, которые нужно решить чтобы робот не только смог проехать по трассе, но и сделать это быстро. С тех пор прошло несколько лет, но относительно недавно на глаза попалось видео с их YouTube канала и остаток вечера ушел на просмотр записей соревнований вместе с детьми.

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

Для начала заказал на AliExpress полноприводное колесное шасси и шилд для управления моторами. В качестве контроллера предполагалось использовать плату Freeduino 2009, которую я покупал еще 10 лет назад и она до сих пор работает без нареканий.

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


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

В первом варианте у робота не было никаких датчиков и ему было нужно управление. У меня в загашнике есть bluetooth uart модуль и можно было приделать управление со смартфона, либо установить инфракрасный приемник и управлять через пульт от игрушечного вертолета.


Вариант с пультом казался более удобным в плане управления, но предстояло приделать распознавание команд. В интернете нашлось описание протокола управления вертолетом (Syma 107) и библиотека для Arduino. В блоге автора есть несколько статей, посвященных реверс-инжинирингу Syma 107.

Тестовый пример сразу не заработал, поскольку я подключил инфракрасный приемних по первой попавшейся схеме и почти поджарил его. Поняв что он греется не спроста я начал искать альтернативные распиновки и со второго раза мне повезло больше. Самый первый вариант робота работал от 4 пальчиковых батареек и через несколько минут робот переставал слушаться команд или выполнял их неверно. Чем больше садились батарейки, тем быстрее начиналось это неповиновение. Прицепив вольтметр на питание инфракрасного приемника стало ясно что при активном движении нагряжение падает ниже 4.5В и датчик перестает нормально работать. Попробовал подключить батарейку 6F22 (крона) чтобы повысить нагряжение. Стало немного лучше, но окончательно проблему не решило.

Тогда я раздербанил старый аккумулятор от ноутбука и из двух его банок формата 18650 собрал батарею, которая дает достаточно мощности для надежного питания робота. Когда дети наигрались с управленим заказал ультразвуковой датчик расстояния (HCR-04), контроллер заряда литиевого аккумулятора на базе TP4056 и плату защиты от чрезмерного разряда.

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

Сейчас робот выглядит так и код текущей прошивки выложен на GitHub.


В планах на ближайшее время:
  • замена Freeduino 2009 (аналог Arduino Duemilanove) на Arduino Mega 2560;
  • установка оптических датчиков для движения по нарисованной линии на полу;
  • установка магнитного компаса для отслеживания угла поворота и текущего курса;
С компасом работать пока не приходилось и есть ощущение что придется устанавливать его на штанге чтобы его показания не искажались работающими моторами.

Ссылки:

Комментариев нет:

Отправить комментарий