Привет, Хабр!
Перед наступающими новогодними праздниками мне стукнуло в голову сделать что-то праздничное. Замысел был такой – сделать механизированную лошадку с кинематикой ходьбы и санки с управляющей электроникой. Как обычно, с минимальными магазинными затратами.
Кинематика
Сразу было решено использовать только один мотор-редуктор для привода всех четырёх ног лошади. Распространённые кинематические схемы Чебышева и Клана мне не подходили, так их движения не похожи на реальные движения ног животных. В роботах, таких как «робособаки», сгибание в бедре и в колене конечно выполняют отдельные моторы. Но если проанализировать ходьбу и упростить, то видно, что временные периодические зависимости угла сгиба бедра и колена сдвинуты на 90°. Сдвиг фаз на 90° можно получить схемой 1.

Но можно упростить ещё, сделав по схеме 2.
Моделировал в SolidWorks, за несколько десятков подгонов выбрал оптимальные длины ног и рычагов.
оптимальные длины ног и рычагов.
Для задних ног было посложнее, так как ось вращения ведущего коленвала выше, чем ось бедра (а должна быть на уровне 45°) и сдвиг фаз не был 90°. Но в целом вышло приемлемо для первого раза. Если кому интересна кинематика – поделюсь файлами сборки.
Весь механизм приводится одним мотор-редуктором JGA25-370 6В 200 об/мин. Скорость регулируется широтно-импульсной модуляцией (ШИМ) и составляет от 0 до 2 шагов в секунду.

Устойчивость такой простой лошадки отсутствует, потому что это не робот с динамическим поддержанием равновесия. Чтобы предотвратить её падение, я использовал санки в качестве дополнительной опоры и фиксации корпуса. Оглобли (палки до саней) выполнены с жёстким креплением к корпусу саней. За противоположные концы крепится кольцо хомута, а хомут жёстко надет на лошадь так, чтобы он не проворачивался, здесь отошёл от реализма. Вся конструкция блокирует кренящий момент от ходьбы и удерживает лошадь более-менее ровно.
Поворот
Возможность поворота всей повозки в движении должна быть. Но как реализовать? Проще было бы сделать руль на санках, например дополнительную поворотную лыжу. Решил погнаться за естественностью и лошадью ходить поворачивать самим конём. Между оглоблями достаточно зазора, чтобы заднюю часть коня сдвигать влево и вправо.
В санках установлена сервомашинка SG-90, со шкивом. На нём намотана прочная нить, которая выходит через 4 петли, до корпуса лошади. Там концы нитей крючками зацеплены под брюхом. Посредством поворота вала сервомашинки происходит перемещение задней части лошади, то есть меняется направление вектора движения до 12 градусов, что достаточно для поворота. Общий натяг ниток ещё и дополнительно удерживает корпус лошади по вертикали.

Санки
Санки изготовлены из фанеры, 3D-печати и вспененного ПВХ на полозьях. Внутри находятся аккумуляторы, плата с приёмником и контроллером. Начинка закрыта сверху шерстяным покрывалом. Из украшений — светодиоды.
Управляющая электроника
Основа – микроконтроллер APM32F030K6 (клон STM32F), потому что дёшев и удобно паять. На плате к выводам МК подключены силовые ключи для ШИМ двигателей и для света. По UART подключен модуль Bluetooth JDY-34. Также, один из GPIO используется как программный UART для управления аудиомодулем JR6001. Питается всё от двух 18650, с DCDC 5В для сервомашинки, Bluetooth и аудиомодуля.
Схема

Радиосвязь через модуль Bluetooth JDY-34. описание здесь. Модуль применяю уже несколько раз, удобен в использовании и поддерживает режим прозрачного радио-UART, и если надо, поддерживает Мастер. Здесь реализован простой режим прозрачного радио-UART, поэтому никаких подготовительных действий от МК не требуется. (* расширить настройки)
Подключившись к JDY-34 по UART, с терминала достаточно подать команды (каждая заканчивается #10#13)
Установить скорость обмена 9600 бит/с. AT+BAUD4
В прозрачном режиме надо отключить эхо. AT+ENLOG0
По желанию – указать имя модуля. AT+NAMEZIMAKONY
Установить режим №1. AT+BTMODE1
Аудиомодуль я взял вот такой MP3-модуль JR6001 – описание здесь. Для питания модуля JR6001 необходимо напряжение 5 В. Динамик 34мм 8 Ом подключен к выводам SPK+ и SPK-. Громкости хватает 3 метра.
Почему использовал не модуль с micro-SD ? – они дольше ищут мелодию и требуют карточки. Здесь в 4 Мб я впихал 10 новогодних мелодий и звуков (64 кб/с). Файлы скопированы простым подключением модуля по USB. Имена файлов должны быть как номер «00001.mp3» и так далее. Управление идёт по программному UART, так как второго порта в МК нет (реализовать несложно, там только передача). Из важного в этом модуле – настройки режима и громкости энергонезависимы, поэтому один раз их настроил с компьютера, а МК только даёт команду на воспроизведение конкретной мелодии. Осуществляется командой A7 с указанием номера «A7:00005» - будет играть «00005.mp3».
Программная часть
Главный таймер в МК на частоте 20 Гц обрабатывает команды от Bluetooth, устанавливая скорость, поворот, свет и проигрывание мелодии. Ещё измеряется напряжение аккумулятора, но телеметрия отключена. Отдельный таймер с ШИМ для мотора и задания длительности импульса 0,5 - 2,5 мкс для сервомашинки . Отдельный таймер 9,6 кГц для программного UART.
Управление игрушкой
Передатчик на БТ делать просто не хватило времени, взял готовую программу Bluetooth robot control для смартфона. Там протокол слегка куцый, но хватило. Кнопки движения и поворота есть, свет есть, а на слайдер повесил воспроизведение мелодий (от 1 до 10), плюс ржание и фырканье.

Фото процесса







И босстали машины из бепла...
Видео теста на ковре https://rutube.ru/video/private/ca3001c2ead001ae03ba4170b0e95679/?p=wKEsQiMSdKN6nkxoAVCbBw и вид из санок https://rutube.ru/shorts/c6ecca83e9c70c8f2c870fc5af5932a4/
Видео в снегах https://rutube.ru/video/private/8662024b4b725c3caebdaf7ded818ff5/?p=gYMmaUmcY7mAYL6b4ps_5g и ещё https://rutube.ru/video/private/d55e0e13460859bb95ff88e8e8a805d8/?p=06baJKeTfD1Y3ZpG7SsKdA
Итоги
Как хотел - получилось. Даже местами красивее, чем ожидал. Идёт, поворачивает, поёт. В закупке 2300 р. без аккумуляторов. В движении загребает задними ногами потому что там больше массы и оглобли чуть выше чем надо, а их уже не передвинуть. Полная скорость намного быстрее, чем на видео. Не доделана сбруя, нет коромысла. Сложно разобрать, если сломается механизм.