Здоровья и удачи вам, решившим потратить время на прочтение этого текста!
Данный робот создавался не с какой-то специальной целью, тем более в Интернете таких моделей немеряно, просто по мере освоения вселенной "Arduino" захотелось сделать что-то посложнее светодиодной мигалки.
В начале я пытался сделать робота на четырех ногах, но, не то чтобы не получилось, - результат мне не понравился. Хотя, этот инвалид от рождения вроде бы даже и ходил - ну не понравилось и все. Поэтому было принято решение сделать робота о шести ногах, как конструкцию более устойчивую и более легкую в плане получения приличного результата.
В далеком счастливом детстве попалась мне как-то книжка «Юный кибернетик». Книжка была большая, толстая, хорошо оформленная (имею слабость к хорошим изданиям), но, уже даже тогда, совершенно бестолковая по содержанию. Вот там описывалась самодвижущаяся тележка, которая, натыкаясь на препятствия, в случайном порядке выбирала направление следующего движения (все без всякой цифры, чисто электромеханически и немножко на МП42, кто помнит - поймет). Эта «руководящая идея об орехах» запала мне в душу и я периодически пытаюсь ее реализовать. Не обошла чаша сия и описываемого здесь робота. Короче, общая идея такова: автономно передвигающийся робот, который, натыкаясь на препятствие, отходит назад, выбирает в случайном порядке новое направление движения и топает себе дальше. Для обнаружения препятствий используется УЗ-дальномер на поворотной «голове». Ну, и, конечно же, в качестве жертвы идолищу тоталитарного волюнтаризма, предусмотрено прямое управление через ИдгуЕщщер, пардон, BlueTooth посредством смартфона.
Как прирожденному халявщику, придумывать дизайн конструкции с нуля мне было в лом, и, порывшись в Интернете, я взял за образец концепцию модульного конструктора роботов "Allbot", представленного вот здесь: https://www.thingiverse.com/thing:1434665.
Рис.1 Шестиногий робот «Allbot»
Естественно, этот концепт я самым бессовестным образом перелопатил уже в соответствии со своими представлениями о прекрасном. Получилось вот такое вот:
Рис. 2 Главный герой нашего повествования. Вид спереди
Рис.3 Вид сзади
Рис.4 И, пардон, снизу.
Все детали распечатаны на принтере «Tronxy D01», пластик PLA.
У робота 6 ног, на каждой ноге 3 сервопривода - итого 18 приводов + ещё один для поворотной «головы» УЗ-дальномера. Сразу скажу, не связывайтесь с сервами с пластмассовыми шестеренками, берите с металлическими (MG90S).
Для управления сервами применен шилд HW-378 с контроллером PWM PCA9685. Т.к. PCA9685 может управлять только 16-тью приводами, оставшиеся три управляются непосредственно контроллером Arduino через стандартные выходы с помощью библиотеки Servo.h .
Для управления контроллером PCA9685 используется библиотека Adafruit_PWMServoDriver.h . Кстати, ее пришлось «гвоздиком поковырять», т.к. в родной не работает чтение значений PWM из регистров PCA9685. Подправленная библиотека приложена в сопутствующих файлах.
Рис.5 Порядок нумерации сервоприводов.
Счет ног: передняя левая - Нога 0, передняя правая - Нога 1, средняя левая - Нога 2 и т.д.
Счет сервоприводов сквозной, начиная от корпусных (рис.5): передняя левая нога - 0, 1, 2; передняя правая нога - 3, 4, 5 и т.д.
Номер сервопривода УЗ-дальномера - 18.
Шилд был основательно перепахан:
Питание на схему подается с батарейного блока, минуя схему защиты от переполюсовки.
На входе по питанию установлен общий конденсатор 3300 мкФ.
Сервоприводы по питанию разделены на 2 группы. Для питания каждой группы установлен свой понижающий преобразователь и конденсатор 2200 мкФ.
На плате установлены дополнительно три разъема для сервоприводов, управляемых непосредственно от Arduino.
Питание Arduino осуществляется через пин Vin шилда.
Непосредственно в разъем шилда (пин 11 и Gnd) воткнута пищалка, пищалка с внутренним генератором (не пассивная).
Здесь перечислены основные моменты, подробности на схеме.
Диаграммы фаз положений ног для одного шага каждого вида движения робота:
- Черный кружок на конце ноги – нога опущена.
- Белый кружок – нога поднята.
Рис.7 Движение назад.
Рис.8 Разворот влево.
Рис.9 Разворот вправо.
Рис.10 Вперед с поворотом влево.
Рис.11 Вперед с поворотом вправо.
Рис.12 Назад с поворотом влево.
Рис.13 Назад с поворотом вправо.
В управлении сервоприводами реализовано плавное движение – привод поворачивается не сразу на весь указанный угол, а за каждую итерацию главного цикла программы на малую фиксированную часть (квант) угла, пока не достигнет указанного значения. Подробности в программе и в комментариях к ней.
Робот в режиме ручного управления стоит и ждет команды, в режиме «авто» движется прямо, вращая головой в пределах угла ≈120°. Когда дальномер обнаруживает препятствие, робот останавливается, делает «пик» и два шага назад (количество шагов задано в программе), затем поворачивает на случайный угол и движется дальше. Интересно наблюдать как, двигаясь в таком режиме, робот достаточно быстро находит выход из комнаты и, за довольно небольшой промежуток времени, уходит достаточно далеко от начальной точки.
Ручное управление, как я уже упоминал, осуществляется через BlueTooth через приложение на смартфоне. Я использовал «BlueTooth Electronics V1.3» от Keuwlsoft.
Ну и видео: Видео1.
Все необходимые файлы можно скачать здесь: HexapodRobot Files