Как подключить сервопривод к ардуино

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

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

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

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

  1.       Плюс питания.
  2.       Минус питания.
  3.       Управляющий сигнал.

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

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

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

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

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

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

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

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

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

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

Как подключить сервопривод к ардуино
Севропривод SG90

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

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

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

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

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

Как подключить сервопривод к ардуино

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

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

Как подключить сервопривод к ардуино

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

Как подключить сервопривод к ардуино

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

#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

// подробнее мы рассматривали этот вопрос в этой статье

  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 сервопривод от выхода.

Заключение

Таким образом, мы можем вручную задавать положение вала сервопривода. Но на этом сфера его применения не заканчивается. Сервоприводы используются повсеместно, например, для привода дроссельной заслонки в автомобилях, в системах отопления, которые управляются автоматически, в различной бытовой технике и на производстве. Как отмечалось в начале статьи, они используются наряду с шаговыми двигателями и могут применяться в ЧПУ-станках и 3D-принтерах. Считается, что шаговые двигатели обеспечивают более точное позиционирование, но на практике всё зависит от конкрентных шагового двигателя и сервопривода которые сравнивают, а также от системы, которая ими управляет. Как и обещал прикладываю видео, на котором показано всё что было описано в этой статье.

Предыдущая
ArduinoКак управлять шаговым двигателем через Arduino
Понравилась статья? Поделиться с друзьями:
Очень плохоПлохоНормальноХорошоОчень хорошо! (1 оценок, среднее: 5,00 из 5)
Загрузка...
Лампа Эксперт
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: