Найти в Дзене
В Дзене применяются
рекомендательные технологии
Лампа Электрика

Сервоприводы и ардуино: как подключить и как управлять

Оглавление

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

Общие сведения о сервоприводах

По определению: сервопривод — это двигатель, управляемый отрицательной обратной связью. Если сказать простым языком, то это двигатель, способный находиться в заданном положении, и при воздействии на вал, его принудительном отклонении, привод удерживает его положение.

Большинство сервоприводов подключаются по трём проводам, их назначение такое:

1. Плюс питания.

2. Минус питания.

3. Управляющий сигнал.

Сам же сервопривод состоит из: Двигателя постоянного тока (или двигателя другого типа), платы управления и датчика положения. Если вал сервопривода способен поворачиваться на 360 градусов, то в качестве датчика положения используется энкодер, а у приводов, вал которых поворачивается лишь на 180° используется потенциометр. Кроме этого, двигатель и вал сервопривода соединяются через понижающий редуктор, который понижая скорость вращения вала двигателя, повышает момент на валу сервы.

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

Перечислим основные характеристики сервоприводов:

  • Скорость поворота (время поворота на угол 60°);
  • Крутящий момент (кг/см), эта величина говорит о том, какой вес в килограммах выдерживает двигатель, при длине рычага в 1 см от вала);
  • Напряжение питания и потребляемый ток;

Сервоприводы различают по способу управления — цифровые и аналоговые. Цифровые срабатывают быстрее и работают стабильнее.

В большинстве серводвигателей используются одинаковые сигналы управления, а именно период сигнала — 20 мс, а длительность управляющего импульса зависит от угла, на который нужно повернуть вал, например, 544 мкс – 0°, 2400 мкс – 180°.

Диаграмма управляющих сигналов
Диаграмма управляющих сигналов

Реже может быть и другая длина сигналов для разных углов, например, 760 и 1520 мкс для 0° и 180° соответственно. Поэтому при использовании не знакомых вам сервоприводов уточняйте длину управляющих сигналов в технической документации.

Перейдём к практике

В наборе, который мы с вами распаковывали ранее мне достался сервопривод Tower Pro SG90 — это одна из популярнейших моделей для хобби, поэтому китайцы кладут их во все подобные наборы. Отдельно он стоит 3-4 доллара.

Севропривод SG90
Севропривод SG90

При всей своей миниатюрности, SG90 достаточно «сильный» и момент на валу аж 1.8 кг/см.

В комплекте с ним есть набор креплений для соединения с механизмами: четырёхсторонний (в виде +), двухсторонний (в виде —) один односторонний, что вы можете наблюдать на фото выше. Кроме них в комплект всегда кладут крепежные винтики. На валу есть шлицы для крепления оснастки, чтобы она не проворачивалась.

Сегодня нам понадобится:

  • Сервопривод SG90 — 1 штука;
  • Плата Arduino, любая, у меня есть UNO — 1 штука;
  • Перемычки или провода для содинения — 5-10 штук;
  • Потенциометр, например, на 10К (на самом деле его сопротивление не слишком важно) — 1 штука.

Если вы будете питать серву напрямую от платы, то подключайте её к пинам 5V красным проводом, GND – коричневым (черным) проводом, а жёлтый провод — это сигнал, его можно к любому пину, хоть цифровому, хоть аналоговому, хоть с ШИМ, хоть без него.

-3

Я же заблаговременно собрал схему на макетной плате и подключил к ней потенциометр, которым мы далее будем задавать положение вала. Средний вывод потенциометра я подключил к аналоговому пину A0 ардуино, а сигнальный провод сервопривода – к 9 пину. Схему приведу ниже.

Проверяем работоспособность сервопривода, для этого заходим в Arduino IDE, открываем пример из стандартного набора под названием «Servo→Sweep»

-4

По умолчанию в этом примере выставлено, что сигнальный провод подключается к 9-му пину, если вы подключили к другому – исправьте вот это значение в коде:

-5

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

#include <Servo.h> // подключаем библиотеку для работы с сервоприводами Servo.h
Servo myservo; // создаём объект «Servo» по имени «myservo» — имя может быть любым

// Можно создать до 12 таких объектов и подключить столько же приводов

int pos = 0; // Переменная для хранения значения положения вала
void setup() {
myservo.attach(9); // указываем, что сигнальный провод сервопривода

//для объекта myservo подключен к 9 пину

}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // циклом проходим углы от 0 до 180, по 1 градусу за шаг
myservo.write(pos); // в цикле передаём объекту myservo значение переменной pos

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

delay(15); // задержка 15 мс до следующего шага
}
for (pos = 180; pos >= 0; pos -= 1) { // то же самое от 180 до 0 градусов
myservo.write(pos);
delay(15);
}
}

В результате сервопривод вращается от одного крайнего положения до другого. Скорость перемещения можно изменять либо путем изменения задержки между шагами (delay), либо путем изменения шага, а именно правкой последнего значения в аргументах цикла — for (pos = 180; pos >= 0; pos -= 1). На видео я показал примеры с разными значениями задержки.

Дальше мы откроем другой из стандартных примеров — knob. Здесь-то нам и понадобится потенциометр. Ниже приведена схема подключения для этого примера.

Схема подключения сервопривода и потенциометра к Ардуино
Схема подключения сервопривода и потенциометра к Ардуино

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

#include <Servo.h>
Servo myservo;
int potpin = 0; // в этой переменной храница номер пина

// к которому подключено потенциометр (пин А0)

int val; // в этой будет сохраняться значение, полученное с потенциометра
void setup() {
myservo.attach(9);
}
void loop() {
val = analogRead(potpin); // читаем значение потенциометра, получаем значение от 0 до 1023

// подробнее мы рассматривали этот вопрос в этой статье — https://zen.yandex.ru/media/lampexpert/urok-2-dlia-chego-nujny-analogovye-vhody-na-arduino-i-kak-ih-ispolzovat-5ddfa0d2df944400b13fbd66

val = map(val, 0, 1023, 0, 180); // масштабируем значение от 0 до 1023

// до необходимых нам градусов — от 0 до 180

myservo.write(val); // указываем угол поворота уже масштабированными

// значениями, полученными с аналогового входа

delay(15); // задержка перед следующим считыванием (опционально)
}

Библиотека Servo.h по умолчанию встроена в Arduino IDE, разберем основные её команды:

Servo myservo – вместо «myservo» может быть любое слово, это название вашего сервопривода.

attach() — привязать переменную, объявленную предыдущей командой к пину. Пример использования ИмяПривода.attach(9) – расшифровывается так: "сервопривод с названием «ИмяПривода» подключен к пину 9”.

Если у вашего привода длины управляющих импульсов отличаются от стандартных 544 и 2400 мкс, то их можно задать через запятую после номера пина, вот так servo.attach(pin, min, max), где servo – имя привода (имя переменной типа Servo), min – длина сигнала для минимального угла поворота (0°) в микросекундах, max – ширина импульса управляющего сигнала для максимального угла поворота (180°) в микросекундах.

write() — передаём приводу угол поворота в градусах (пример: ИмяПривода.write(180))

writeMicroseconds() — тоже самое, только указывает на длину сигнала в микросекундах.

read() — определяет текущее положение вала;

attached() — Проверяет подключена ли переменная типа Servo к пину с сервоприводом. Синтаксис — Servo.attached().

detach() — отмена команды attach, то есть отсоединяет определенный переменной типа Servo сервопривод от выхода.

Заключение

Таким образом, мы можем вручную задавать положение вала сервопривода. Но на этом сфера его применения не заканчивается. Сервоприводы используются повсеместно, например, для привода дроссельной заслонки в автомобилях, в системах отопления, которые управляются автоматически, в различной бытовой технике и на производстве. Как отмечалось в начале статьи, они используются наряду с шаговыми двигателями https://zen.yandex.ru/media/lampexpert/kak-upravliat-shagovym-dvigatelem-cherez-arduino-shema-podkliucheniia-5e0a2247c05c7100ad66a959 и могут применяться в ЧПУ-станках и 3D-принтерах. Считается, что шаговые двигатели обеспечивают более точное позиционирование, но на практике всё зависит от конкрентных шагового двигателя и сервопривода которые сравнивают, а также от системы, которая ими управляет. Как и обещал прикладываю видео, на котором показано всё что было описано в этой статье.

Источник: https://lampaexpert.ru/obzory/master-klassy/kak-podklyuchit-servoprivod-k-arduino

Что-то пошло не так, и нам не удалось загрузить комментарии. Попробуйте ещё раз
Рекомендуем почитать
Китайские ноутбуки - это хлам. Рассказываю, почему
Доброго времени, господа. Все мы знаем, что любое устройство на поверку оказывается Made in China. Впрочем, сделать что-то по готовым чертежам - это одно, а разработать собственный продукт, который будет конкурентным - совсем другое. Сегодня немного расскажу про "топ за свои деньги", и почему это не такой уж и "топ". Я сейчас вас удивлю, однако некоторые НОВЫЕ игровые ноутбуки выглядят как-то странно. Чаще всего, странности находились у серии Hasee T9, которые, будучи "совсем новыми" по заверениям продавца, приходили с помятой крышкой...
Собрал бестопливный генератор. Бесплатно отапливаю и освещаю дом
Современная физика и наука говорят, что устройств, которые работают с КПД более 100%, т.е. выдают энергии больше, чем потребляют – существовать не может. Вернее, они есть, но если система разомкнутая и к устройству поступает энергия. К таким работающим устройствам с эффективность (коэффициентом преобразования), равным 3, 4 и даже 5 в разомкнутых системах относится тепловой насос. Простейший холодильник перекачивает тепла больше, чем потребляет электроэнергии. Многие граждане убеждены, что возможны...
Дефицит микросхем в СССР, параллельный импорт Икеи и «нехватка всего» в Бундесвере
1. Навевающий ностальгию пост от инженера-электронщика, блогера trump-donald. Здесь прекрасно всё: и 80% свободного времени у инженера космического НИИ, и дефицит элементарнейших микросхем, и современные контрабандные процессоры, которые можно было свободно купить за рубли… (ссылка): Когда я был маленьким и работал инженером электротехником в одном космическом НИИ, я собирал компьютеры Синклер. В свободное от работы время, благо оно было на 80 % свободное. Разумеется микросхемы мы заказывали тут...
Следующая статья
Документы, вакансии и контакты