Сервопривод
Сервопривод — это мотор, положением вала которого мы можем управлять. От обычного мотора он отличается тем, что ему можно точно в градусах задать положение, в которое встанет вал. Сервоприводы используются для моделирования различных механических движений роботов, в том числе сервоприводом может управляться "клешня-захват", с помощью которой робот будет захватывать кубики-грузы и перевозить их по указанным маршрутам.
Виды сервоприводов
Сервоприводы бывают аналоговые и цифровые. Различаются они лишь внутренней управляющей электроникой. Вместо специальной микросхемы аналогового сервопривода у цифрового на плате микропроцессор, который принимает импульсы, анализирует их и управляет мотором. Таким образом, отличие заключается только в способе обработки импульсов и управлении мотором.
Шестерни для сервоприводов бывают из разных материалов:
- Пластиковые шестерни очень лёгкие, не подвержены износу, более всего распространены в сервоприводах, но их недостаток - это то, что они не выдерживают больших нагрузок.
- Карбоновые шестерни более долговечны, практически не изнашиваются, в несколько раз прочнее пластиковых. Основной недостаток - дороговизна.
- Металлические шестерни являются самыми тяжёлыми, однако они выдерживают максимальные нагрузки. Недостаток - достаточно быстро изнашиваются.
Существует три типа моторов сервоприводов:
- Обычный мотор с сердечником обладает плотным железным ротором с проволочной обмоткой и магнитами вокруг него. Ротор имеет несколько секций, поэтому, когда мотор вращается, ротор вызывает небольшие колебания мотора при прохождении секций мимо магнитов, а в результате получается сервопривод, который вибрирует и является менее точным, чем сервопривод с мотором без сердечника.
- Мотор с полым ротором(без сердечника) обладает единым магнитным сердечником с обмоткой в форме цилиндра или колокола вокруг магнита. Конструкция без сердечника легче по весу и не имеет секций, что приводит к более быстрому отклику и ровной работе без вибраций. Такие моторы дороже, но они обеспечивают более высокий уровень контроля, вращающего момента и скорости по сравнения со стандартными.
- У бесколлекторных моторов нет щёток, а значит они не создают сопротивление вращению и не изнашиваются, скорость и момент выше при токопотреблении равном коллекторным моторам. Сервоприводы с бесколлекторным мотором — самые дорогие сервоприводы, однако при этом они обладают лучшими характеристиками по сравнению с сервоприводами с другими типами моторов.
Подключение к Arduino
Для сборки модели с сервоприводом нам потребуется:
- плата Arduino
- 3 провода “папа-папа”
- сервопривод
Многие сервоприводы могут быть подключены к Arduino непосредственно. Для этого от них идёт шлейф из трёх проводов:
- красный - питание; подключается к контакту 3.3/5V или напрямую к источнику питания
- коричневый или чёрный - земля (GND)
- жёлтый или белый - сигнал; подключается к цифровому выходу Arduino
Библиотека Servo
Можно генерировать управляющие импульсы самостоятельно, для этого существует стандартная библиотека Servo.
Библиотека Servo позволяет осуществлять программное управление сервоприводами. Управление осуществляется следующими функциями:
- attach() - присоединяет объект к конкретному выводу платы. Возможны два варианта синтаксиса для этой функции: servo.attach(pin) и servo.attach(pin, min, max). При этом pin - номер пина, к которому присоединяют сервопривод, min и max - длины импульсов в микросекундах, отвечающих за углы поворота 0° и 180°. По умолчанию выставляются равными 544 мкс и 2400 мкс соответственно. Возвращаемого значения нет.
- write() - отдаёт команду сервоприводу принять некоторое значение параметра. Синтаксис: servo.write(angle), где angle - угол, на который должен повернуться сервопривод.
- writeMicroseconds() - отдаёт команду послать на сервопривод импульс определённой длины, является низкоуровневым аналогом предыдущей команды. Синтаксис следующий: servo.writeMicroseconds(uS), где uS - длина импульса в микросекундах. Возвращаемого значения нет.
- read() - читает текущее значение угла, в котором находится сервопривод. Синтаксис: servo.read(), возвращается целое значение от 0° до 180°.
- attached() - проверка, была ли присоединён объект к конкретному пину. Синтаксис следующий: servo.attached(), возвращается логическая истина, если объект была присоединён к какому-либо пину, или ложь в обратном случае.
- detach() - производит действие, обратное действию attach(), то есть отсоединяет объект от пина, к которому был приписан. Синтаксис: servo.detach()
В библиотеке Servo для Arduino по умолчанию выставлены следующие значения длин импульса: 544 мкс - для 0° и 2400 мкс - для 180°.