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

Устройство сервопривода

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

Принцип действия сервопривода

Для управления сервоприводом нужен только один проводо по которому на управляющую плату поступает сигнал. Управляющий сигнал представляет собой прямоугольные импульсы на подобии ШИМ. Цикл сигланал занимает 20 мск. а большую часть времени сигнал находится в низком состоянии. Перед основым циклом сигнал находится в высоком состоянии на интервал от 1 до 2 мсек.

Принцип действия сервопривода. Управляющие сигналы

При 1 мсек. угол поворота равен 0 градусов, а при 2 миллисекундах — 180 градусов, а в промежутке значение от 0 до 180.

Подключение сервопривода к Arduino

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

  1. плата Arduino, подойдет абсолютно любая
  2. сервопривод, тут тоже особо не разницы какой.
  3. перемычки.

Схема подключение сервопривода к Arduino

Тут представлена простейшая схема подключения одного сервопривода, питание на него поступает с самой платы Arduino.

Схема подключение сервопривода к Arduino

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

Распиновка выводов сервопривода

Для того чтобы подключить сервопривод нужно знать его распиновку (назначение выводов), разъем имеет 3 вывода. Управляющие сигнал на вывод, цвет которого отличается в зависимости от проиpводителя. Распиновка выводов сервоприводов представлена ниже.
Распиновка выводов сервопривода

 

Скетч для сервопривода

Для работы с сервоприводами на понадобиться servo библиотека, скачать ее можно по ссылке в конце статьи. Библиотека Servo позволяет одновременно управлять 12-ю сервоприводами на большинстве плат Arduino и 48-ю на плате Arduino Mega.

Скаченную библиотеку нужно скопировать папку arduino-xxxx/hardware/liraries.

Стандартные методы серво-библиотеки

  • attach(int) — соединение пина и сервопривода. Вызывает pinMode. Возвращает 0 при ошибке
  • detach() — отсоединение пина от сервопривода
  • write(int) — установка угла сервопривода в градусах, от 0 до 180
  • read() — возвращает значение, установленное write(int)
  • attached() — возвращает 1, если серво в настоящее время подключен

Скетч сервопривода 1

Этот скетч заставит сервопривод повернутся в позицию 0 градусов, выждать интервал в 1 секунду, далее повернуться на 90 градусов, выждать еще одну секунду, после повернуться на 180 градусов и перейти в изначально положение.

#include <Servo.h> 

// Пин для сервопривода int servoPin = 3; 
// Создаем объект Servo Servo1; 
void setup() { 
// Нам нужно подключить сервопривод к используемому номеру пина 
Servo1.attach(servoPin); } 
void loop(){ 
// 0 градусов 
Servo1.write(0); 
delay(1000); 
// 90 градусов
 Servo1.write(90);
 delay(1000); 
// 180 градусов 
Servo1.write(180);
 delay(1000); 
} 

Сервопривод можно повесить и на другой вывод, для этого нужно просто указать нужный  servoPin  в программе

Подключаемые библиотеки Servo автоматически отключает функцию PWM для PWM-контактов 9 и 10 на Arduino UNO и аналогичных платах.

Скетч для сервопривода объявляет объект и затем инициализирует сервопривод при помощи функции servo.attach(). Мы не должны забывать подключать серво библиотеку. В цикле мы устанавливаем сервопривод на 0 градусов, ждем, а затем устанавливаем его на 90, а затем на 180 градусов.

Скетч сервопривода 2

Управление сервоприводом с помощью потенциометра. Сервопривод подключается к пину 2, потенциометр к пину 0

 #include <SoftwareServo.h> 

SoftwareServo myservo;  // create servo object to control a servo 

int potpin = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin 

void setup() 
{ 
  myservo.attach(2);  // attaches the servo on pin 2 to the servo object 
} 

void loop() 
{ 
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023) 
  val = map(val, 0, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180) 
  myservo.write(val);                  // sets the servo position according to the scaled value 
  delay(15);                           // waits for the servo to get there 

  SoftwareServo::refresh();
} 

Скетч сервопривода 3

Этот пример это поворот на выводе A0 с переменной скоростью.

#include <SoftwareServo.h> 

SoftwareServo myservo;  // create servo object to control a servo 

#define pinServo A0

int speed = 1;
int limits[2] = {30,150};	// set limitations (min/max: 0->180)
boolean refresh = false;	// toggle refresh on/off

void setup() 
{ 
Serial.begin(9600);

	// attaches the servo on pin to the servo object
	myservo.attach(pinServo);  

	// init angle of servo inbetween two limitations
	myservo.write((limits[1]-limits[0])/2); 
} 

void loop() 
{ 
	// refresh angle
	int angle = myservo.read();

	// change direction when limits
	if (angle >= limits[1] || angle <= limits[0])  speed = -speed;

	myservo.write(angle + speed);	

	// set refresh one time / 2
	refresh = refresh ? false : true;
	if (refresh) SoftwareServo::refresh();

	Serial.print("Angle: ");
	Serial.println(angle);
} 

Дополнительные возможности

Arduino имеет встроенную функцию servo.write(градус), которая упрощает процесс управления сервомотором Однако не все сервоприводы соблюдают одинаковые тайминги для всех позиций. Обычно 1 миллисекунда означает 0 градусов, 1,5 миллисекунды — 90 градусов, и, конечно, 2 миллисекунды означают 180 градусов. Некоторые сервоприводы имеют меньший или больший диапазон.

Но для более точного позиционирования лучше использовать функцию servo.writeMicroseconds(микросекунды), в которую нужно переделать количество микросекунд.

Подключение нескольких сервоприводов

Чтобы использовать более одного сервопривода в Ardiono нам нужно объявить несколько серво-объектов, прикрепить разные контакты к каждому из них и обратиться к каждому индивидуально. Итак, нам нужно объявить объекты — столько сколько нам нужно:

// Создаем объекты
Servo Servo1, Servo2, Servo3;

Затем нам нужно прикрепить каждый объект к сервомотору. Помните, что каждый сервопривод использует отдельный пин:

Servo1.attach(servoPin1)
Servo2.attach(servoPin2)
Servo3.attach(servoPin3)
В конце концов, мы должны обращаться к каждому объекту индивидуально:
Servo1.write(0); // Задать для Servo 1 позицию в 0 градусов
Servo2.write(90); // Задать для Servo 2 позицию в 90 градусов

Подключение. Земля сервоприводов идёт на GND Arduino, питание на 5В или VIN (в зависимости от входа). И, в конце концов, каждый привод должен быть подключен к отдельному цифровому выводу.

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

Похожие записи

Цифровые игральные кости на Arduino

На Arduino можно довольно интересный проект начального уровня - цифровые игральные кости. При помощи которых можно генерировать случайное число от 1 до 6. ...

Системы заземления TN-C, TN-S, TNC-S, TT, IT

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

Маркировки кабеля европейских производителей

В Европе для маркировки кабеля используются свои стандарты и нормативные документы. Чтобы расшифровать маркировку импортного кабеля, необходимо знать, что обозначает конкретная...

Подключение сервопривода к Arduino

Сервопривод (servo) - устройство с электрическим мотором, которому можно задать определенный угол поворота и зафиксировать в определенном положении. Подключение сервопривода к Arduino очень...

Схема полицейской мигалки на микроконтроллере

Представленная схема полицейской мигалки на микроконтроллере и светодиодах может работать в 16 различных режимах. Режим выбирается при помощи одной кнопки, и собрана на микроконтроллере...

Функция setup() вызывается первой когда запускается скетч. Эта функция необходима для инициализации переменных, настройки режимов работы портов (выводов), для старта каких либо функций...

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