Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Калибровка моих сервоприводов

Компоненты и расходные материалы

Arduino UNO
× 1
Adafruit PWM Servo Driver Shield
× 1
Болт M3
× 8
шайба M3
× 8
LM2596 DC-DC понижающий преобразователь напряжения
× 1
Красный PLA
× 1
Белый PLA
× 1
Математический транспортир с четкостью 180 градусов
× 1
Поворотный потенциометр (общий)
× 1
серводвигатель 9g
× 1

Необходимые инструменты и машины

3D-принтер (общий)

Приложения и онлайн-сервисы

IDE Arduino
Autodesk Fusion 360

Об этом проекте

В предыдущем посте на Hackster я писал о том, как я создал установку, чтобы сравнить, как вращаются разные сервоприводы из одной партии, и показал, что отправка одних и тех же сигналов PWM на разные сервоприводы приводит к некоторым значительным различиям - на картинке ниже показаны сервоприводы. все они начинались в крайнем левом положении против часовой стрелки и получали один и тот же ШИМ-сигнал - все они немного различались по поведению.

Почему бы не использовать существующие сервобиблиотеки для Arduino?

Я использую сервопривод Adafruit PWM для управления множеством сервоприводов, и это позволяет мне отправлять разные сигналы PWM на каждый сервопривод. Я мог бы использовать библиотеку Servo, которая встроена в мою установку Arduino, но у меня есть несколько причин не делать этого:

  • С помощью сервопривода Adafruit PWM я могу управлять своими сервоприводами, используя всего два контакта через I2C, вместо того, чтобы выделять контакт на моем Arduino для каждого сервопривода.
  • С библиотекой сервоприводов Arduino я иногда обнаруживал, что когда я подключаюсь к сервоприводу и отправляю ему сигнал для поворота в положение нулевого градуса, он поворачивается до предела хода и измельчает шестерни внутри сервопривода.
  • / li>

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

Как я могу более точно управлять сервоприводами для хобби?

Подтверждение того, что все мои сервоприводы ведут себя немного по-разному, побудило меня создать устройство, которое позволило бы мне откалибровать сервопривод - какие значения ШИМ мне нужны, чтобы отправить сервопривод для перемещения в положение 0 градусов? Или центральная точка 90 градусов? Как мне избежать отправки значения ШИМ, которое приводит сервопривод в крайнее положение с большим хрустом и шлифованием шестерен?

Я решил объединить пару простых концепций.

  • Выровняйте сервопривод с центром простого транспортира, чтобы по мере вращения дворника сервопривода я мог измерить его положение.
  • Подключите потенциометр к аналоговому входу Arduino, чтобы я мог контролировать положение дворника сервопривода, регулируя значение PWM, когда я регулирую положение вала потенциометра.

Для этой версии я был счастлив использовать Serial Monitor в моей Arduino IDE, чтобы сообщить мне значение сигнала PWM, которое я могу записать вручную.

Я использовал Autodesk 123D для разработки простой установки, которая могла бы содержать потенциометр, транспортир, один сервопривод, мою Arduino и сервопривод Adafruit PWM вместе с источником питания.

Я хочу продолжать использовать сервопривод Adafruit PWM для моей калибровки, поскольку это то, что я, вероятно, буду использовать в своем последнем проекте. Если бы я собирался управлять сервоприводом непосредственно с штифта на Arduino, я бы скопировал это в устройстве и откалибровал сервопривод по ШИМ от Arduino.

Сборка устройства

Я распечатал каждую из частей и соединил их с помощью болтов M3 и шайб.

Монтажные отверстия в конструкции моего устройства подогнаны под мои компоненты - разные компоненты могут иметь разные диаметры и положения отверстий.

Что касается электроники, я подключил центральный штырь потенциометра к контакту A0 Arduino, а другие контакты - к 0 В и 5 В на Arduino. Я подключил драйвер серводвигателя PWM к Arduino, а затем подключил понижающий преобразователь постоянного тока в постоянный (я настроил преобразование входа источника питания 9 В в выход 5 В). Я подключил сервопривод 9g к первому слоту на щите драйвера сервомотора, а затем загрузил свой эскиз в Arduino.

Конечный результат показан на фотографиях ниже. Поворачивая ручку в верхнем левом углу устройства, я могу контролировать положение сервопривода, а с помощью последовательного монитора в Arduino IDE я могу считывать сигнал ШИМ, отправляемый на серводвигатель для любого заданного угла.

Так что же мне сообщает устройство?

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

Я подключил питание к устройству, а затем повернул ручку потенциометра до тех пор, пока стрелка сервопривода не совместилась с отметкой 0 градусов на транспортире, и отметил значение ШИМ, записанное на последовательный выход моей Arduino IDE. Затем я повернул потенциометр до тех пор, пока игла сервопривода не указала на 10 градусов, и снова записал значение ШИМ. Я продолжал этот процесс каждые 10 градусов, пока не достиг 180 градусов, и представил результаты в таблице ниже.

Я создал график результатов (показан ниже), и, как и следовало ожидать, очевидно, что существует строго линейная зависимость между ШИМ и углом сервопривода.

Теперь у меня есть некоторые значения ШИМ и угла, характерные для этого конкретного сервопривода - другие сервоприводы могут иметь аналогичные характеристики, но они не будут идентичными.

Теперь у меня есть несколько вариантов для более точной работы сервопривода:

  • Запишите эти пары значений и сохраните их в массиве в моем эскизе Arduino, и когда я хочу переместить сервоочиститель на 90 градусов (например), просто посмотрите, какое значение PWM относится к этому углу, и отправьте это значение PWM к сервоприводу. У этого есть недостаток, заключающийся в том, что я могу поворачивать только на углы, кратные 10.
  • Или, если мне нужен полный контроль над углом, на который я отправляю, я могу использовать линейную регрессию для набора данных, чтобы определить, какая формула связывает угол и значение ШИМ (для этого сервопривода ШИМ =2,35 * Угол + 159,4). Таким образом, я могу передать угол, на который хочу повернуться, в качестве параметра и программно вычислить ШИМ, необходимый для поворота этого конкретного сервопривода в это положение.

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

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

Улучшения в следующей версии

После калибровки нескольких сервоприводов я подумал о некоторых улучшениях, которые внесу в следующую версию.

  • Сервопривод должен иметь механизм быстрого отсоединения - возможно, закрепить сервопривод на месте с помощью зажима с неодимовыми магнитами, вместо того, чтобы закреплять его болтами M3.
  • Я хочу сделать это меньше - возможно, я смогу переориентировать Arduino и блок питания, чтобы добиться этого.
  • Мне нужен выключатель питания между батареей 9 В и понижающим преобразователем, поэтому мне не нужно полностью отключать аккумулятор каждый раз, когда я хочу выключить машину.
  • Я хотел бы иметь возможность печатать буровую установку меньшим количеством частей.
  • Вместо того, чтобы вручную считывать значения с транспортира, было бы лучше, если бы датчик мог определять, когда сервопривод находится в определенных угловых положениях, и передавать их обратно в Arduino - это могло бы устранить некоторую ошибку параллакса.
  • Наконец, очень поможет ЖК-дисплей для отображения любых результатов, поскольку мне не нужно будет подключать компьютер к устройству.

Заключение

Вот и все - мои сервоприводы для хобби дешевы и не рассчитаны на точность - и для многих приложений они идеально подходят. Тем не менее, я хотел бы получить от меня немного большей точности и повторяемости, и установка, описанная в этом посте, помогает мне в этом.

Код

  • Эскиз сервокалибратора.
Эскиз сервокалибратора C / C ++
 #include  #define analogIn A0Adafruit_PWMServoDriver pwm =Adafruit_PWMServoDriver (); int inputValue =0; int tmpPwmValue =0; void setup () {Serial.begin (9600); pwm.begin (); pwm.setPWMFreq (60);} void loop () {inputValue =analogRead (аналогВ); // inputValue будет между 0 и 1024 // По наблюдениям, минимальные и максимальные значения ШИМ сервопривода обычно находятся между 100 и 612 // Формула ниже позволяет нам просто преобразовать аналоговый вход в ШИМ int pwmValue =(int) (100 + ( inputValue / 2)); pwm.setPWM (0, 0, pwmValue); // Проверяем, не отображаем ли мы ненужные повторяющиеся данные if (pwmValue! =TmpPwmValue) {Serial.print ("Potentiometer Input ="); Serial.print (inputValue); Serial.print (", ШИМ ="); Serial.println (pwmValue); } tmpPwmValue =pwmValue; задержка (15);} 

Изготовленные на заказ детали и корпуса

Репозиторий деталей сервокалибратора
https://github.com/jeremylindsayni/ServoCalibrator

Производственный процесс

  1. 3D-печать PLA:все, что вам нужно знать
  2. Отслеживание лица при панорамировании / наклоне с помощью raspberry pi
  3. PLA против ABS против нейлона
  4. Валби, двуногий ходячий
  5. Роботизированная рука Arduino IoT
  6. 3D-печать из PLA и ABS:в чем разница?
  7. Приводы постоянного тока в качестве замены сервоприводов переменного тока
  8. Является ли PLA перерабатываемым или даже биоразлагаемым?
  9. Растворяется ли PLA в воде и разлагается ли он?
  10. Является ли нить PLA проводящей (проводят ли какие-либо нити)?