Хаки сервомашинок. Переделка в серву постоянного вращения


После долгих и многократных обещаний себе и всем окружающим, я наконец расскажу как модернизировать сервомашинку и превратить её в убермоторчик.
Достоинства очевидны — мотор редуктор, который можно подключать напрямую к МК без всяких драйверов это круто!
А если серва с подшипниками, да ещё и шестерни металлические, это ваащеее=)

Отмазки
Некоторые действия по переделке серв необратимы и иначе как вандализмом их назвать нельзя.
Всё что далее описывается вы можете повторять, но на свой страх и риск. Если в результате ваших действий безвозвратно погибнет ваша топовая футаба-брендовая, титан-карботовая, суперинтеллектуальная, безынерционная, ручной работы серва за стопицот денег — мы тут совершенно не причём 😉
Так же обратите внимание — шестерни сервы довольно густо обмазаны смазкой — не стоит разбирать их в белоснежной сорочке и на бархатном диване.

Так, запугали, теперь, для успокоения, немного теории=)
Серва, как мы помним, управляется импульсами переменной ширины — они задают угол на который должен повернутся выходной вал (скажем, самые узкие — до упора влево, самые широкие — до упора вправо). Текущее положение вала считывается мозгами сервы с потенциометра, который своим движком связан с выходным валом.
Причём, чем больше разница текущего и заданного углов, тем с большей скоростью вал рванёт в нужную сторону.
Вот именно в этом месте и зарыто многообразие возможных вариантов переделки.
Если мы «введём серву в заблуждение»=) — рассоеденим потенциометр и вал, и заставим считать, что движок потенциометра находится в средней точке, то сможем управлять скоростью и направлением вращения. И всего по одному сигнальному проводу!
Теперь импульсы соответствующие среднему положению выходного вала — это нулевая скорость, чем шире (от «нулевой» ширины) тем быстрее вращение вправо, чем уже (от «нулевой» ширины) тем быстрее вращение влево.

Отсюда следует одно важное свойство серв постоянного вращения — они
не могут поворачиваться на опредёлённый угол, вертется строго определённое количество оборотов и т.п.(мы ведь сами убрали обратную связь) — это в общем-то и не серва уже, а мотор редуктор со встроенным драйвером.

Методов «рассоединения» и «введения в заблуждение» несколько — рассмотрим их на практике.
Простейшую переделку покажу на примере двух серв — MG995 и SG5010(Внутренности их более подробно можете разглядеть тут и тут)
Итак, прежде всего придётся машинку разобрать
раскручиваем, аккуратно снимаем верхнюю крышку


И снимаем выходную шестерню


вот и он — вал потенциометра обратной связи (жёлтенькая прямоугольная пипка), соединяющийся через вот эту прозрачную (чёрную) «муфту» с выходной шестернёй.


самая первая мысль, которая приходит в голову — убрать гибкий элемент(муфту) оставив вал резистора в среднем положении. Попробуем.
Для этого накатаем «калибровочный» скетч (ставящий качалку «обычной» сервы в среднее положение)

#include <Servo.h>

Servo myservo;  // создаём объект servo
void setup()
{
  myservo.attach(9);  // серву на 9 ногу
  myservo.write(90);  // и повернуть в среднее положение
}

void loop()
{
//тупим в  вечной петле
} 

и подключим к ардуине нашу вскрытую машинку.
Так как резистор у нас не в среднем положении — серва начинает весело крутиться (иногда разбрасывая смазку=).

Вращаем резистор и добиваемся не просто остановки, но полной тишины (чтоб не жужжало и не гудело нечего внутри) Кстати, сделать это не слишком просто — довольно тонкая настройка. Отсюда и первый очевидный минус этого решения — ударили/встряхнули подогрели/остудили уже собранную серву — нулевая точка вполне может уползти. Конечно, можно зафиксировать вал клеем…

Обратите внимание на подключение мощных серв (типа MG995) — чтобы избежать перегрузок (и резета) при старте, рекомендую плату питать от внешнего источника (не USB) и повесить прям на разъём электролитический конденсатор ~100мкф:

Далее вытаскиваем гибкий элемент вместе с нижним подшипником


В случае с MG995, чуть сложнее, сидит там всё плотно — приходится выбивать через сквозное отверстие в выходном валу — замечательно подходит винт от корпуса. Гибкий элемент довольно твёрд=) и при такой операции не страдает.


муфту в сторону, подшипник на место


Теперь время вандализма! Необходимо удалить стопор, который упирается в приливы внутри корпуса и не даёт шестерне проворачиваться.


С MG995 не такой уж это и вандализм — если поднатужится то стопорный штифт можно просто вынуть, а потом соответственно безболезненно вставить его на место — полностью восстановив первоначальный функционал сервы.


собираем всё на место, заливаем в дуину стандартный пример knob, крутим смотрим, радуемся.

Тут зарыт второй недостаток такой мягкой переделки — если нулевая точка несмотря на приклеенный резистор всё же уползла, или её приспичит сместить — придётся всё разбирать=(
Поэтому более грамотный метод — замена потенциометра подстроечником.
Можно, выкрутив винт и отогнув защёлки, вынуть потенциометр

а вместо него впаять подстрочный резистор на те же 5Ком

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

Вроде и так не плохо вышло=)
Выламываем защёлку потенциометра — в неё упирался подстроечник и сверлим корпус сервы для доступа к его движку

Теперь осталось настроить нулевую точку калибровочным скетчем, и можно пользоваться=)
Если не хочется ничего подстраивать, приклеивать и дырявить корпус можно потенциометр заменить двумя постоянными резисторами по 2-2.2Ком — они будут изображать из себя левое и правое «плечо» потенциометра.

если можете найти/припаять SMD — вообще красиво будет:

Но тогда в точку покоя вы можете и не попасть(из-за разброса значений сопротивлений резисторов плечи выйдут не равными)- у меня на калибровочном скетче с выводными жужжала, с SMD потихоньку вертелась — подстройка в ноль только программно и индивидуально.
Тем не менее именно такой способ наиболее применим для мелких серв.
Продемонстрируем на примере MG90s:
Разбираем

Стягиваем выходную шестерню — она туго сидит на латунном валу потенциометра

Снимаем остальные шестерни, чтоб добраться до потенциометра

Хорошо видно, что выходная шестерня сидит на валу потенциометра за счёт чёрной пластмассовой втулки, её же выступ является стопором.
Тут возможны два варианта: либо ломать потенциометр — убирать ограничители(и бегунок) так, чтобы его вал свободно вращался по кругу, либо нужно обточить(надфилем, шкуркой)его вал так, чтобы выходная шестерня свободно вращалась на нём.
Второй вариант выглядит более привлекательным — ломать не надо, серву при желании можно восстановить зафиксировав шестерню на валу клеем (или просто облудив с наплывом вал потенциометра). Однако точить пришлось долго — пластиковая втулка очень плотно обжимает вал — если не доточить — цепляется, повизгивает и
и неравномерно вращается — чуть переточишь — начинает болтаться и опять же шуметь. Можно конечно рассверлить втулку… В любом случае для такой переделки точность и аккуратность нужны повышенные да и повторяемость низкая, короче не понравилось. Фоток данного варианта не делал, ИМХО тут и так всё понятно.
Будем ломать.
Сначала подцепить отвёрткой уши ограничителя и бегунок

Потом кусачками откусить/загнуть чтобы не мешались — вот тут действительно вандализм=)

Должно получиться, например, так:

Срезаем стопор с пластиковой втулки

Тут есть один момент — втулка заходит на зубья и при вращении зубья ведущей шестерни будут упираться — можно подрезать впадины лезвием — так по веселее приработается=)

Редуктор теперь можно собрать, займёмся электроникой.
Снимаем нижнюю крышку, вытаскиваем плату:

Наблюдаем провода к потенциометру — он у нас уже уничтожен, провода ему больше не нужны, отпаиваем/откусываем

А вместо них к плате паяем пару резисторов на 2.2Ком вот таким манером

куском изоленты прикроем микросхему во избежании

И запихнём всё на место

Закручиваем, запускаем, радуемся

Все эти переделки имеют пару недостатков:
Во-первых — сложность установки нулевой точки — требуется тонкая настройка
Во-вторых очень узкий диапазон регулировки — довольно малое изменение ширины импульса вызывает довольно большое изменение скорости(см видео).
Диапазон можно расширить программно — просто надо иметь ввиду, что диапазон регулировки ширины импульсов (от полного хода по часовой до полного хода против часовой стрелки) переделанной сервы соответствует 80-140 градусам (в AduinoIDE, библиотека Servo).
например в скетче knob достаточно поменять строчку:

val = map(val, 0, 1023, 0, 179);

на

val = map(val, 0, 1023, 80, 140);

и всё становится значительно веселее=)
А про загрубление средней точки и другие паятельные переделки я расскажу в следующий раз.

По теме
Сервы
Servo library – библиотека для работы с сервомашинками
Сервы 2. Взгляд под корпус


0 комментариев на «“Хаки сервомашинок. Переделка в серву постоянного вращения”»

  1. Спасибо. Вот совсем не собираюсь никаких сервомашинок переделывать, а статью проглотил.
    Очень здорово сделано: и работа — вы даже не поленились альтернативы показать — и статья.

    • Согласен, хорошая статья. Но сервы тоже не хочется вандалить.

  2. Спасибо за статью!
    Скажите, где такой подстроечник купить или откуда вырвать?
    От перепада температур постоянно сбивается положение покоя сервы, а мне нужна точность… И как «загрубить» чувствительность потенциометра — увеличить номинал резисторов?

    • Скажите, где такой подстроечник купить или откуда вырвать?

      Да хть бы и прямо тут=)

      И как «загрубить» чувствительность потенциометра — увеличить номинал резисторов?

      Изменяя сопротивление потенциометра(заменяющих его резюков) — не выйдет=(
      Некоторые микросхемы применяемые в сервах позволяют «настраивать чувствительность» — надо курить датащит — смотреть какая обвязка за это отвечает.

    • Понятно, спс 🙂

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

      Я так понял эта статья так и не родилась?)

    • пока не родилась.
      Родится, обязательно, но когда — никто не знает=(

    • тогда ждем, удачи! 🙂
      пока взял между постоянными резисторами на 1.1 кОм впаял подстроечный на 200 Ом, нашел старый, советский… Впринципе довольно точно подстраивается средняя точка, так сказать «по погоде» на месте 🙂

Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение