Мотор «от Xiaomi»
Как известно, движение — жизнь. А пошаговое движение — надёжный путь к любой цели (даже если эта цель в простом движении по кругу). Вот и я, лениво передвигаясь по бесконечной ленте товаров китайского маркетплейса наткнулся на необычный гаджет. Называется это чудо китайской инженерии «Xiaomi Cyber Gear», и мимо трёх этих слов нельзя пройти спокойно, если проживаешь в 2024-м году.
В сущности, это и не гаджет даже, а компонент для Xiaomi Cyber Dog. Эта робо‑псина не так популярна в Ютубе и в России, как изделия от Unitree, но видимо достаточно популярна, чтобы продавать к ней запчасти. Впрочем, любителям DIY, к коим я себя причисляю, данный моторчик тоже может быть интересен.
Сразу оговорюсь, цена за одну штуку около ста долларов и это не то, что можно хотеть в качестве дополнения к мигающему светодиоду. Кажется, что робо‑руки, робо‑ноги и прочие дорогие и мощные устройства будут более подходящими проектами для применения этого чуда техники.
Встречают в коробке, а провожают в ящике… В общем, встречает нас красивая картонная коробка, как от смартфона, не какой‑то антистатический пакетик. Внутри коробки китайская агитация, qr‑код на WiChat с кошка‑жена, радикально чёрный демпферный пенопласт и сам мотор. Тоже чёрный.
Первое впечатление от него, в самом деле, как от любого гаджета Xiaomi, это впечатление очень дорогой, почти премиальной вещи (на фото я уже залапал эту вещь, извините, не смог удержаться).
Самое главное, что можно рассказать про этот двигатель: это шаговый двигатель со встроенным энкодером и контроллером, взаимодействие с которым происходит по CAN-шине на скорости 1Мбит. Питается мотор от 24-х вольт, максимальное чисто оборотов — около трёхсот в минуту, минимальное — очень медленно. Детали можно прочитать в справочном буклете из коробки.
Xie xie!
У мотора есть своё приложение-компаньон для Windows, из него можно подавать тестовые команды мотору, смотреть за показателями датчиков. Из него же мотору можно… обновить прошивку. Но я с приложением не стал связываться, так как оно на китайском целиком и полностью.
Ещё один интересный факт. Драйвер для мотора на основе socketcan я нашёл в GitHub, он был написан, внезапно, на Swift, в этот момент я узнал, что Swift для сервера существует и вполне себе жив. После недолгого этапа вкатывания мне даже понравилось. Есть в нём определённая лёгкость. Впрочем, мы не об этом сегодня собрались.
Питание и CAN-шина
Драйвер взаимодействует с двигателем по CAN‑шине, позволяет управлять скоростью в режиме двигателя «speed», углом поворота и скоростью в режиме позиционирования «location», также позволяет управлять током в режиме «current», но я не пробовал, наверное, это для робо‑собаки и имитации работы мышц, а у меня был другой тип нагрузки.
Двигатель очень мощный, на мой взгляд, руками его не остановить. Энкодер точный, но не сильно точный, с ним приходится играть в «доведи меня до нужной кондиции» в несколько приёмов на разной скорости. Чем‑то напоминает…, а впрочем не будем об этом.
Управлял двигателем из RPi 4 + СAN hat (но работает и с обычным MCP2515 и со встроенным в ESP32 can‑драйвером). Там же, внутри RPi писал код через VSCode Remote + Swift, как я и сказал, всё получилось довольно легко и удобно, двигатель уже описан высокоуровневыми классами и методами, думать о байтах не пришлось вовсе. Выглядит код примерно так:
let motorA = CyberGear.Motor(canID: 017, bus: canBusA)
try! motorA.runMode(.speed)
try! motorA.enable()
На видео демонстрация плавного набора скорости (в цикле и через Task.sleep (), простите, люди добрые)
По звуку он больше всего напоминает троллейбус или электросамокат, видимо, так и должно быть.
В целом очень приятный DIY-компонент, современный и удобный. Это как раз тот компонент в проекте (о котором я никогда не расскажу) с которым не возникло никаких проблем. Подключил и забыл. Рекомендую.