На что ещё способны шаговые моторы? — Забивать голы в настольном хоккее

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

Механика робота для настольного хоккея

Примерно половину знаний я «нагуглил» или подсмотрел на Youtube, а вторую половину получил на практике, методом проб и ошибок в многочисленных экспериментах.

Расскажу про 4 момента, на мой взгляд заслуживающих особого внимания:

  1. Разгон шагового мотора до максимальных оборотов.
  2. Одновременная работа массива из шаговых моторов через один контроллер.
  3. Охлаждение шаговых моторов и драйверов.
  4. Как избавиться от писка шаговых моторов.

В настольном хоккее Stiga Play-Off с каждой стороны по 6 игроков (вратарь и 5 на поле). У моего робота для настольного хоккея, в соответствии с количеством игроков — 6 роборук, по одной руке для каждого игрока, и каждую руку приводят в движение 2 мотора. Первый мотор перемещает игрока вперёд и назад, а второй мотор вращает клюшку. Итого задействовано 12 шаговых моторов.

Почему именно шаговые моторы? Мне понадобилась точность и аккуратность, а шаговый мотор как раз и обладает способностью вращать вал строго на заданное количество градусов/шагов. Но, кроме точности, понадобилась скорость, и тут начались проблемы и поиск решения.

1. Разгон шагового мотора до максимальных оборотов


При поиске в интернет можно найти много информации про ЗD принтеры, ЧПУ, роборуки с 6 степенями свободы и тому подобным устройствам. Но, мне нужно передвинуть игрока на ~40 см за доли секунды или ударить клюшкой по шайбе так, чтобы она полетела в ворота через всё игровое поле. И что делать? — ставить опыты и выжимать из моторов все соки!

Вал шагового мотора вращается импульсами и моторы, которые я использовал для робота (типоразмер Nema 17) делают 1 полный оборот за 200 шагов, по 1.8 градуса за 1 шаг.
Как новичок, я приобрёл самые обычные драйверы для шаговых двигателей A4988, купил контроллер Ардуино Мега с самым большим количеством входов/выходов, CNC Shield v3 для удобного размещения сразу 4-х драйверов, блок питания на 12 вольт, всё соединил проводами по инструкциям с многочисленных сайтов. Разобрался как написать скетч-программу для Ардуино и запустил.

Моторы стали вращаться, но мне была нужна скорость. Если подать с контроллера на драйвер мотора 1000 импульсов в секунду, мотор будет вращаться со скоростью 5 оборотов в секунду. Замечательно, но этого было мало. Увеличил количество импульсов и мотор перестал трогаться – пищит и не крутится, не хватает сил тронуться сразу на таких оборотах. Это как на машине с механикой сразу включить 5-ю передачу. Пришлось дорабатывать скетч контроллера для плавного, но по возможности, быстрого старта. Есть, конечно, готовые классы AccelStepper, но как-то я с недоверием его воспринял, будут ограничения как всегда, подумал и сделал свой собственный класс для плавного старта, в котором использовал формулу кубической параболы с некоторыми вспомогательными коэффициентами.

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

При таком разгоне обязательно присутствуют пропуски шагов, но потеря нескольких шагов для тех целей, которые я преследовал, не важны, это не 3D печать.
Подвожу итог – для максимального RPM нужно обеспечить плавный разгон.

2. Одновременная работа массива из шаговых моторов через один контроллер


Как уже озвучено выше, в роботе используется 12 шаговых моторов. Этот массив моторов управляется через 1 контроллер Ардуино Мега, который был выбран из-за наличия большого количества пинов (входов/выходов).



Чтобы управлять 12 моторами мне понадобилось:

  • 12 пинов контроллера для передачи шагов на драйверы моторов
  • 12 пинов для установки направления вращения
  • 12 пинов для управления включением/отключение драйверов моторов (необязательно, но желательно, т.к. оказалось важным для охлаждения)

Дополнительно задействовал ещё 24 пина:

  • 12 пинов для получения данных от оптических концевых выключателей (нужны для безопасности механики, ограничивая зону перемещения приводов игроков, разве можно полностью доверять программе? Датчики по одному установлены в начале и конце каждого привода и ещё есть пружины для мягкой остановки, разве можно полностью доверять датчикам?)
  • 12 пинов для RGB-светодиодов индикации режимов работы (зелёный горит при подаче питания, синий добавляется при движении вперёд/назад и красный добавляется при вращении клюшки, в общем, зелёный для пользы, а синий и красный цвета для красоты)

Мозг робота сейчас «пребывает» в настольном компьютере, как временное решение, пока в микрокомпьютер Rasperry Pi 4 на борт робота не переедет. Компьютер передаёт управляющие команды через USB порт в контроллер Ардуино и тут нужна возможность одновременной работы всех 12 моторов. На практике, в процессе игры я не видел, чтобы все 12 моторов работали одновременно, может 4, но технически это предусмотрено.

В скетче для Ардуино создал класс Player для управления 2-мя моторами (перемещение и вращение клюшки) и при запуске создаётся 6 экземпляров этого класса. При инициализации классов передаются номера пинов, к которым будет привязан каждый из «игроков», т.о. каждый из 6-ти игроков привязан к своим драйверам/моторам, датчикам и светодиодам.

В цикле loop скетча проверяется порт USB на наличие команды от компьютера и по очереди вызываются методы Move и Rotate у 6-ти объектов игроков для выполнения движений или остановок.

Подведу итог — контроллер Ардуино Мега оснащён очень большим количеством входов/выходов >70. Если потребуется решить некую задачу, можно подключить десятки шаговых моторов.

3. Охлаждение шаговых моторов и драйверов


Если на драйвер шагового мотора на пин VMOT подать питание и драйвер будет включен (по умолчанию ENABLE=0 — включен), мотор, возможно, начнёт немного пищать (зависит от драйвера), а обмотки мотора и драйвер начнут греться. Можно потрогать радиатор драйвера и убедится в этом. Я начал использовать питание мотора 12V и нагрев быстро почувствовал, а при 36V мне очень не понравился этот эффект.

Дожидаться, пока сгорят обмотки мотора или драйвер я не стал и начал разбираться, что не так. Всё решить помог пин ENABLE. В случае, если вращение мотора не требуется, следует выключить драйвер ENABLE=1, а когда понадобится вращение, нужно просто включить драйвер ENABLE=0. Поскольку в роботе используются 12 моторов, и они не очень часто вращаются одновременно, значит им можно давать остыть, когда не нужны.

Я взял под контроль пин Enable каждого драйвера мотора через Ардуино. Понадобилось дополнительно задействовать 12 пинов контроллера, но драйверы стали холодными и моторы больше не шумят, хотя используется напряжение 36V.

4. Как избавиться от писка шаговых моторов


Сначала я приобрёл драйверы для шаговых моторов A4988, понадобилось 12 штук. Они популярные, надёжные, простые и понятные, а также очень дешёвые, для новичков самое то. Всё работало почти хорошо, с шагами всё понятно, 1 импульс – 1 шаг, 200 импульсов при 1.8 градуса на 1 шаг – 1 оборот мотора.

Но, было 2 неприятных момента. На малых оборотах, особенно, когда нужно медленно повернуть клюшку игрока, у моторов наступал тремор. И ещё, этот писк! При работе 12 моторов было ощущение, что со мной разговаривает R2D2.

Стал искать решение проблемы и узнал о тихих драйверах с немецкими чипами Trinamic TMC 2100, 2130, 2208 и прочих сериях. Стоят они в несколько раз дороже, но, если Вам нужна тишина и плавность хода, они того стоят.

В TMC есть режим StelthChop с интерполяцией 4 или 16 входных импульсов в 256 микрошагов. После тестирования, выбрал режим 4->256 микрошагов.

StelthChop TMC2100

Скетч для Ардуино потребовалось немного дописать, т.к. теперь для полного оборота мотора требовалось не 200 шагов, а в 4 раза больше (800 на 1 полный оборот) из-за используемого режима StelthChop 4->256. Больше шагов – плавнее и тише ход. Вращение сейчас плавное, тихое и никакого писка.

Видео, что в итоге получилось:


Надеюсь, мой опыт поможет кому-нибудь в других проектах.
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 84

    +6
    Шикарно!
      0
      как минимум оригинально :) Жаль, не могу «плюсануть» статью!

      я шаговые пощупал, когда делал самодельный расстановщик SMD-компонентов на плату. ДА. проще заказать сборку плат в Китае (или местных монтажников), но чУдное слово — ХОТЕЛОСЬ самому такой сделать и всё пощупать :)
      флуд
      Станок заработал, что даже удивило. Медленно, ошибаясь иногда на миллиметр(!), но заработало.
      Да, использовал в работе, окупил себя первой партией собранных плат.
      Сейчас простаивает: 1. Вирус и заказы пропали. 2. Мне он уже не нравится, хочется быстрее, точнее, с питателями (фидерами), а их надо отпечатать на 3d-принтере. Он куплен, но так до конца и не доделан.
        0
        Можно попробовать применить для квест-комнат и как игровой аппарат в развлекательных центрах.
      +4
      Вратарей на мыло! Или на переобучение. R2D2, играющий в хоккей это плюс.
      Отличный проект в плане форсирования шаговиков и управляющей электроники.

      Усё
        0
        Стал искать решение проблемы и узнал о тихих драйверах с немецкими чипами Trinamic TMC 2100, 2130, 2208 и прочих сериях

        подскажите, а у вас были «белые» или «черные» платы у драйверов?

        До сих пор по Сети ходят байки, что платы у них по разному разведены, поэтому черные надёжнее, но надо радиатор получше приклеить, а белые не такие горячие при работе, но критичнее к просадке питания (и на них нельзя больше 38в подавать)
          0
          В роботе сейчас установлены TMC2100 — 2 черных v1 и 10 белых v1.3 (заказывал по-очереди для пробы). Они разные, но у обоих пришлось пины ms припаивать. У v1 (черные) вручную ms припаять очень сложно, даже под стеклом, слишком мелко 1мм. Для v1.3 (белые) паять ms гораздо удобнее, т.к. на плате они крупнее. Питание использую 36 вольт, а вот на счёт нагрева не подскажу, у меня всё холодное, т.к. через пин Enable сразу отключаю драйвер, если не нужен.
            0
            понял, спасибо!
            У меня отключать не получится — мне надо удержание вакуумного захвата, а, если я верно понимаю, при отключении ключей снимается и ток с катушек.
              0
              Что собирали, OpenCNC?
                0
                Можно и так сказать
                  0
                  не понял, ко мне вопрос или автору статьи? )
                  Если мне, то «нет, самописное»
                  0
                  Да, при отключении драйвера, вал мотора не удерживается. В моём случае это не нужно, вот и воспользовался для охлаждения моторов.
                    0

                    А что если через червячный привод?

                      0
                      Думал об этом в начале, перебирал варианты, как сделать привод. Для червячного привода нужно больше оборотов, на счёт шума самого привода не знаю, какой звук он бы издавал на большой скорости. Выбрал ремень.
                    0
                    для чего пришлось пины ms припаивать?
                      0
                      На платах драйверов TMC2100 в Китае не соединили ножки чипа Trinamic с пинами на плате драйвера. Сначала тестировал драйвер, переключал режимы шагов с помощью пинов ms, а результат всегда один. Где-то в интернет нашёл информацию и фотки, что нужно соединить/припаять. Припаял — заработали режимы.
                  +2
                  Очень колоритный проект, понравилась идея.

                  С током проблем не было (нема может от 2А сжёвывать. Итого 25А. Нет?)?

                  А продолжение будет?
                  — Распознавание положения игроков (движок при разгоне пропускает шаги, так?) и клюшек (также пропуск шагов).
                  — Логика по игре: кого как двинуть и т.д.

                    0
                    Не думаю, что стратегия игры подразумевает одновременную работу большого количество моторов
                      +1
                      Спасибо!
                      У меня набралось 3 разных типа моторов 1.7А, 2A, т.к. брал по-очереди для тестирования, остановился на 2А. Они бьют сильнее, шайба часто летит по воздуху, если надо.
                      Сейчас нашёл на Ali моторы на 2.5А, попробую позже.

                      Продолжение будет, есть много идей, как улучшить/упростить/облегчить механику, с софтом можно улучшать бесконечно. Сейчас переношу «мозги» с десктопа на Raspbery Pi 4.

                      Движок на больших скоростях шаги пропускает, по этому подсчёт шагов не использую, местоположение игроков и клюшки беру только с распознавания через нейросеть.
                        0
                        Движок на больших скоростях шаги пропускает, по этому подсчёт шагов не использую, местоположение игроков и клюшки беру только с распознавания через нейросеть.

                        Если подсчет шагов не осуществляется, то проще использовать DC моторы через Н мост.
                          +1
                          Сколько нужно выполнить шагов (передвинуть вперёд/назад или поворот клюшки) передаётся в команде с компьютера на Ардуино, а сколько реально выполнено шагов мотором не учитываю. Обратная связь с реальностью только через камеру.
                          0
                          У TMC2100 максимальный рабочий ток довольно низкий же, один ампер, если я правильно помню. Как получается что высокоамперные моторы лучше работают, если сам драйвер максимум один ампер выдаёт?
                            0
                            Посмотрел сейчас, 1.2A рабочий ток, 2.5А пиковый. Интересно, у вас на сколько ампер настроено?
                              +1
                              Использую почти максимум, в зависимости от мотора 1.7А или 2А, т.к. в целом моторы используются кратковременно.
                              У меня 3 разных типа моторов, брал по-очереди на Ali, тестировал, чтобы найти оптимальный по весу и мощности. Где-то среди продавцов позже нашёл 2.5A, если не врут, тоже Nema17 4401, надо будет их попробовать.
                                0
                                Т.е. драйверы на пиковых режимах работают. Интересно.
                                2.5A не редкие мотры, так что не врут, у меня в принтере такие стоят (42BYGHW811) с драйверами 8825 настроенными на 2А.
                              +1
                              У более высокотоковых моторов скорей всего индуктивность ниже (меньше витков в обмотке). Скорость нарастания тока в обмотках будет выше, динамика разгона и максимальная скорость выше.
                                0
                                Вот это интересное объяснение. Логично.
                              0
                              Движок на больших скоростях шаги пропускает, по этому подсчёт шагов не использую, местоположение игроков и клюшки беру только с распознавания через нейросеть.

                              Слушайте, я вот заметил, что в принтерах вместо шаговых сейчас не редко юзают обычные с оптическим датчиком на другой стороне оси.
                              С учетом ваших слов, не проще было бы и вам так же использовать?
                                0
                                Оптические датчики, я так понимаю, в таком случае считают количество пройденных «шагов» обычными моторами. В случае шаговых моторов изначально посылаю команду сколько шагов нужно пройти до нужной точки.
                                Тоже конечно вариант, но цены и размеры примерно, как и у шаговых моторов.
                                В комментариях поступают идеи использовать соленоиды и даже пневмо для удешевления и упрощения механики. Это заманчиво, механику можно на порядок удешевить, но придётся поломать голову, как это всё сделать.
                                  0
                                  Оптические датчики, я так понимаю, в таком случае считают количество пройденных «шагов» обычными моторами.
                                  Ну да, там диски с насечками разных размеров для большей градации, видимо. Цены явно дешевле, раз на такие схемы переходят в принтерах, как мне кажется. В старых ксероксах ещё шаговые были, в более современных больших лекмарках — сплошь схема с оптическими датчиками.
                                    0
                                    Если вы про rotary encoder? Такие же датчики на колёсике мыши стоят. А вот если дифракционные подешевели, то эт интересно.
                                      0
                                      Ну, я их не закупаю, у меня просто много техники на выброс проходит, вот и разбираю понемножку, не сильно вдаваясь в нюансы)
                                      Хотя ещё заметил что в небольших ставят и бесколлекторные движки с габаритными платами управления оными, но, думаю, такие сложнее вторично использовать…
                                    0
                                    Пневмо одновременно точная, дешёвая и необслуживаемая не бывает :(
                                      0
                                      Пневмо одновременно точная, дешёвая и необслуживаемая не бывает :(

                                      Тут частный случай.
                                      Пневмо это могут быть и шприцы с массовым производством.
                                      И если еще разного диаметра?
                                      У Камаз кузов красиво поднимается.

                                      И еще есть обратная связь через камеру, можно подкорректировать.
                                      Камера нужна для определения положения шайбы, заодно и положение игроков и клюшки успевает определить.

                                        0
                                        Пневмо это могут быть и шприцы с массовым производством.
                                        Шприц не особо многоразовый (который резина-пластик) и быстро начинает подтравливать. Который стекло-металл или стекло-стекло долговечнее, но гораздо туже идёт и больше стоит. Учитывая, что скорость перемещения фигурок большая, т.е. нужен удар по поршню, пневматика далеко не лучший выбор.
                              0

                              Интересно про программную часть тоже, видно, что компьютер делает не очевидные голы, например, с отскоком от стены.

                                +5
                                Про распознавание и программную часть расскажу в последующих видео/статьях, выкладываю по-очереди, как всё было исторически — механика, распознавание объектов, алгоритм игры.

                                Элемент случайности специально добавлен (30% случаев), с ним игра проходит интереснее. Некоторые голы просто нереальные.
                                  +1
                                  Элемент случайности специально добавлен (30% случаев), с ним игра проходит интереснее.

                                  Кстати, как оно играется против шестирукого противника? Без элемента случайности, по идее, должен быть полный швах?
                                    +1
                                    Если убрать случайность, игрок-человек будет постоянно держать левую руку на вратаре и ожидать удара — так будет не интересно играть
                                    0
                                    Очень интересно, играю сам в нх, теперь так и тянет собрать такое для тренировки, хотя стиль конечно от человеческого отличается значительно
                                      0
                                      Всё зависит от программы, что напишешь в коде — так и будет работать. Сила у моторов конечно больше, чем у человека и реакции можно добиться большей. Есть планы заменить мой алгоритм игры на нейросеть RL, но нужно время.
                                      0
                                      Элемент случайности в играх и непредсказуемость — очень интересная штука. В очень давние годы экспериментировали с пвп-системой в мморпг игре. Была мысль, что если сделать систему максимально предсказуемой (без всяких критов и «физлов» спеллов) — будет интереснее и всё будет зависеть исключительно от прямоты рук. Оказалось — скучно и как ни парадоксально, исход боя от от прямоты рук стал зависеть меньше.

                                      Т.к элементы случайности хороший игрок успевает использовать в свою пользу, а плохой — теряется. Для плохого игрока рандом не в его пользу так же часто может оказаться фатальным, а хороший игрок сможет из ситуации выбраться.
                                      Рандом в бою становится дополнительным элементом, на который необходимо реагировать. Но тут тоже важен баланс, конечно.
                                        0
                                        Согласен, я сейчас применяю случайность в 30% случаев и не всегда, не у каждого игрока.
                                        0
                                        Распознавание можно проще, т.к. есть возможность управлять движением каждого.
                                        Сохранил кадр, немного подвинул, взял разность — все намного виднее.
                                        Вернул на исходное.

                                        Так получалось и стрелку на тестере отследить.

                                        Преобразование Хафа хорошо линии ищет.
                                          0
                                          Если брать разность между кадров (такое тоже пробовал), в процессе игры бывает много шума на изображении, т.к. толкают хоккей, камера вибрирует.
                                          Но, главное для меня было пройти самому путь именно в распознавании с помощью нейросети — создать датасет, всё настроить, обучить, получить результат. Одно дело читать про это, видеть, как другие настраивают и обучают, но всё сделать самому — это знания на будущее для следующих проектов.
                                      +2
                                      А если на вторую сторону такого же робота посадить?
                                      А если неиспользуемым хоккеистам добавить idle-анимации?
                                        +7
                                        Это уже получится почти как в фильме Живая сталь
                                          +4
                                          И будет охрененно )
                                        +5
                                        А музыка специально, чтобы работу моторов не было слышно?
                                        На микрошаге драйверы греются значительно сильнее, чем без деления.
                                        Если хотите опытом поделиться выложите код с обработкой ускорений.
                                          +4
                                          Шум моторов в процессе игры
                                          www.youtube.com/watch?v=6oS7r0hbwhk&t=830

                                          Быстрое передвижение вперёд и назад, код для Ардуино для драйверов TMC2100 4->256
                                          int m_iMLineStepPin = STEP_PIN;
                                          unsigned long i = 0;
                                          unsigned long iDelayStep1 = 0;
                                          unsigned long m_iMLineStepCount = 1000;

                                          while (m_iMLineStepCount > 0) {
                                          iDelayStep1 = (200000000/(i*i*i+100000)+4)/4;
                                          digitalWrite(m_iMLineStepPin, HIGH);
                                          digitalWrite(m_iMLineStepPin, LOW);
                                          delayMicroseconds(iDelayStep1);

                                          if (m_iMLineStepCount%4==0) i++;
                                          m_iMLineStepCount--;
                                          }
                                            0
                                            То есть торможения нет просто остановка. Удара при остановке после большой скорости не наблюдается?
                                            И в каждый момент возможно только одно движение — поступательное или вращательное только на одном «игроке»
                                            А как управляется всё в целом? Как ищется шайба? Камера и распознавание картинки, нейросеть… расскажете?
                                              +1
                                              Торможение заложено быстрое, но плавное. Иногда торможение не нужно — при тычке по шайбе.
                                              Параллельная работа возможна, это заложено, можно сразу передвигать всех игроков и вращать клюшкой. Правда при ударе по шайбе в программе я это не использую, подъехал, ударил. Усложнять алгоритм можно бесконечно.

                                              Я начал делать серию видео-выпусков о том, как собирал робота, пока 2 серии: Идея & старт и Шаговые моторы (видео-версия этой статьи). В следующих выпусках буду рассказывать, как проводил распознавание и обучение.
                                          +4
                                          Очень здорово! Жду следущей статьи с описанием, как вы обучили его играть
                                            0
                                            Ух! Впечатляет! В детстве развлекались таким хоккеем.
                                            Очень интересно про логику.
                                            А что за музыка в видео?
                                            0
                                            нужно передвинуть игрока на ~40 см за доли секунды

                                            А вариант поставить на ремень шестерню с бОльшим диаметром не рассматривался?
                                            Самый простой способ увеличить скорость перемещения игрока.
                                              0
                                              С этого и начал, поставил сначала шестерню на 60 зубов, шума было много с драйвером мотора A4988 (этот момент будет в следующем видео в серии выпусков, как собирал робота). С шестернёй на 20 зубов шума стало меньше — превратился в писк. Тогда это было приемлемо.
                                              Сдвинуть привод с места на малой шестерне мотору легче, да и компактнее стало.
                                              0

                                              Лопаты, буллиты бьёт?

                                                0
                                                Да, это заложено в 4-го игрока, который напротив ворот противника. Если человек зазевался и не контролирует вратаря — тычок и гол.
                                                  0

                                                  Буллит — это не тычок. Это более хитрое действие.

                                                    0
                                                    Из Федерации настольного хоккея России пригласили поучаствовать робота в качестве обычного участника, как начнутся игры. Со временем разберусь в терминах.
                                                      0
                                                      А где игры будут? В каком городе?
                                                      Если в Питере, то ради игры с роботом может сходить разок на кубок… (задумался)
                                                        0
                                                        Пока не знаю, сказали по времени с середины июля начнут.
                                                        Т.к. я живу в Подмосковье, с прототипом робота смогу сейчас поучаствовать только в Москве.
                                                          0
                                                          А-а… жаль.
                                                          Ну держите в курсе, видео показывайте!
                                                        0
                                                        В ФНК играют без пластиковых шторок на воротах.
                                                        Ну это так… в порядке информирования. Мало ли где-то в алгоритме они учитываются.
                                                  0
                                                  Последний раз, когда интересовался Trinamic, было дорого, выбрал для своих задач интеллектуальный (управляется командами по SPI) драйвер L6470 от ST.
                                                    0
                                                    Да… вот до чего доводить отсутствие партнёра в настоьных играх. Но проект класный. Можно поставить против человека и тестировать самообучающие AI software.
                                                      0
                                                      Замена программы игры на reinforcement learning нейросеть ещё впереди
                                                        0
                                                        вот до чего доводить отсутствие партнёра в настоьных играх.

                                                        Угу, как-то даже начал пилить компьютерную версию настольного варгейма, чтобы хоть с ИИ поиграть…
                                                        +1
                                                        Очень замечательный проект! А, если не секрет, можно узнать BOM (bill of materials) хардварной части проекта?

                                                        А будет ли все выложено в опенсорс?
                                                          0
                                                          Пока не планировал опенсорс для этого проекта, возможно в будущем
                                                          0

                                                          Интересно будет провести турнир онлайн: сделать бота и с другой стороны и позволить другим людям сделать свою прошивку для бота. Разве что не представляю как сделать тестовую среду для разработки...

                                                            +1

                                                            Круто!
                                                            Один момент — с enable=1 на обмотки прикладывается ток удержания и мотор уже не так просто провернуть. Чему он равен — смотрите в даташите, у многих драйверов можно поставить делители 2 или 4 чтобы меньше грелся мотор. Возможно это поможет с вратарем, на видео видно что он пропускает голы когда достаточно было "keep your stick on the ice". Да и нагрев шаговиков явление нормальное, для многих 70 это рабочая температура, по своему ЧПК фрезеру знаю.

                                                              0
                                                              для клюшек я бы взял модельные сервоприводы :)
                                                                +1
                                                                Они очень медленные. Удара не получится, только поворот.
                                                                0
                                                                классный проект)) а с настольным футболом такое можно… а то фифы всякие надоели уже)
                                                                  0
                                                                  Решал сходную проблему, только движков 3, а не 12. Несколько ремарок:
                                                                  1. AccelStepper вполне нормальная библиотека, там унутре классический код для трапецевидного профиля скорости, а остальное биндинги для разных типов шаговиков и драйверов.
                                                                  2. Для движения можно взять не шаговкики, а на каждую ось поставить по несколько соленоидов в качестве злой замены линейного двигателя, этакий шаговый гауссган.
                                                                  3. Поскольку изменение ENA обычно не срочное, а ног всегда не хватает, можно взять сдвиговый регистр. Возможно, так же можно поступить с DIR
                                                                  4. А вот концевики лучше через логическое или завести на ENA, чтобы как ткнулись в ограничитель — мотор останавливался
                                                                  5. Диоды тоже можно полностью отвязать от МК с помощью рассыпной логики.
                                                                  6. Не знаю, как у вас в коде, я генерировал профиль на стороне ПК, а потом через прерывание с низким приоритетом забирал на стороне МК. Правда, у меня скорость была на пределе быстродействия драйвера, а ноги дрыгались из разных прерываний, и профили могли быть разные.
                                                                  7. Лучше взять простенький осциллограф (на хабре описывался любительский на ардуино) и посмотреть, как счётный профиль совпадает с дрыганьем ноги. Учитывая перегруженность ардуиниского кода, максимальная скорость может банально не достигаться: PORTB ^= _BV(PB3); занимает 1-2 цикла, digitalWrite примерно 14-20. Родные ардуиновские прерывания тоже кратно тормознее avr`овских ISR
                                                                  8. Обратная сторона: можно дрыгать ногой слишком быстро для драйвера, в итоге потеря шагов.
                                                                  9. От механики зависит, но при отключении шаговика возможно проскальзывание (backlash).

                                                                  Кстати, как у вас с лагом «команда-движение»? Теоретически со всеми задержками от программы до шины USB может пройти 50 миллисекунд, хотя обычно там единицы.
                                                                    0
                                                                    Задержку «команда-движение» не замерял, но она зрительно пока значительно меньше, чем «картинка с камеры — команда» ~750 миллисекунд из-за слабого процессора на десктопе с 2-х ядерным Pentium G3460. Это критично для реакции вратаря робота. Сейчас переношу «мозг» с десктопа на Raspberry Pi 4, установленный на борту робота. Камера будет другая, без рыбьего глаза, а не как сейчас (устранение тоже неплохо «ест» ресурсы), подключение будет через разъём Camera Raspberry Pi. Алгоритм распознавания объектов после нейросети немного переделаю, сделаю «умнее» и на порядок быстрее, есть идеи. В итоге задержка будет ~100-150 миллисекунд.
                                                                    Если задаться целью, можно со временем совсем избавиться от Ардуино.
                                                                      0
                                                                      А решение хоббийное или с идеей коммерциализировать, чтобы можно было при желании одному играть?
                                                                        0
                                                                        Сначала всё начиналось и развивалось, как хобби. Ближе к завершению, когда стало видно, что получается интересный «продукт», уже стали поступать от самых разных людей различные советы, как коммерциализировать продукт.
                                                                          0
                                                                          Тогда механику придётся перепиливать кардинально, например, на подпружиненные соленоиды, иначе просто дорого, тяжело и просторно.
                                                                            0
                                                                            Да, сейчас собранная механика слишком дорога и занимает много места. Для перехода на соленоиды или что-то другое нужно будет потратить немало времени и средств, но при желании всё возможно.
                                                                              0
                                                                              Тогда в софте надо предусмотреть, чтобы дёргало функции с сигнатурами типа moveRelMm(fig_id, dist_mm) и rotRelDeg(fig_id, ang), иначе DeviceAdapter, ответственный за общение с исполнительной частью, заменить сложно будет.
                                                                    0
                                                                    После того, как двигая руками экструдер принтера, я сжёг наведённой ЭДС дорогой драйвер TMC, стал ставить драйверы через защитные диоды. Особенно в обесточенном виде драйверы могут пострадать от воодушевлённых зрителей, желающих «помочь» роботу и подвигать за него приводы.

                                                                    У китайских товарищей есть готовые решения по полтора-два доллара за штуку, ищутся по «Silent Step Stick Protector».
                                                                      +1
                                                                      Согласен, дети любят приводы потаскать вперёд и назад, но пока вроде не сожгли.
                                                                      Видел такие на Ali для защиты, нужно будет добавить. Спасибо!

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

                                                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                    Самое читаемое