Arduone kit
Урок №8 Серводвигатель
Серводвигатели идеально подходят для применения в электронике и автоматике
"Серво", сокращение от серводвигателя, это двигатель, который включает в себя электронную схему с обратной связью. Серводвигатели идеально подходят для применения в электронике и автоматике, потому что обладают высокими скоростными характеристиками и умеют очень точно устанавливаться в нужное положение, что не умеют обычные двигатели. Достаточно простое управление при помощи импульсов переменной длительности. Например импульс 1,5 мс установит сервопривод в положение 90 градусов. В этом опыте, вы узнаете, как использовать ШИМ (широтно импульсную модуляцию) для управления серводвигателем.
Схема подключения
Скетч
// Если бы нам понадобилось написать программу управления серво
// двигателем с нуля, понадобилось бы очень много времени. К
// счастью, другие люди уже сделали всю тяжелую работу за нас, и
// нам не придется "изобретать велосипед". Нам лишь остается только
// подключить готовую программу, к своей, и указать в некоторых
// местах функции, которые мы будем использовать для управления сервой.

// Библиотека - набор дополнительных функций, которые можно подключить
// к вашему скетчу (программе). Множество библиотек доступных для
// применений, можно найти на http://arduino.cc/en/Reference/Libraries,
// еще больше на Google. Когда вы придумываете что-то свое, скорее всего,
// кто-то уже пытался написать что-то подобное, так что воспользуйтесь
// для начала поиском, возможно вы найдете для себя что-то интересное.

#include <Servo.h>  // подключаем дополнительную библиотеку

// Как только вы "подключаете" библиотеку, так сразу получаете доступ
// к этим функциям. Вы можете найти список функций в библиотеке
// сервопривода в: http://arduino.cc/en/Reference/Servo. Большинство
// библиотек доступно из меню "Файл / примеры".

// Теперь мы создадим «объект» сервопривода, под названием servo1.
// Вы должны создать по одному для каждого сервопривода, которым
// собираетесь управлять. 
// Вы можете управлять максимум двенадцатью сервоприводами на плате
// Arduino Uno, использовав библиотеку "Servo.h". С помощью других
// библиотек можно управлять и большим количеством. Обратите внимание,
// что эта библиотека отключает ШИМ на пинах 9 и 10!

Servo servo1;  //объект управления сервоприводом


void setup()
{
  // Сейчас мы прикрепим (attach) объект servo1 к цифровому
  // пину 9 (pin 9). Если вы собираетесь управлять более чем одним
  // сервоприводом, Вы должны прикрепить каждый новый объект серво к
  // своему, отдельному порту, причем это порт должен быть цифровым.

  // Прикрепление указывает Arduino, что пора начинать отправлять
  // сигналы управления для данного сервопривода. Сервоприводы требуют
  // непрерывного потока сигналов управления, даже если в настоящий
  // момент сервопривод не осуществляет никаких перемещений. В то время
  // когда сервопривод "простаивает" ему все равно необходимо передавать
  // сигналы о текущей позиции. Если вы хотите навсегда освободить
  // сервопривод, придется это сделать вручную, для этого вы можете
  // передать команду servo1.detach().

  servo1.attach(9);
}


void loop()
{
  int position;
  
  // Для управления сервоприводом, вы указываете ему угол на который
  // он должен переместиться. Сервоприводы не могут повернуться на 360
  // градусов, но вы можете указать ему, чтобы он поворачивался в
  // определенную позицию от 0 до 180 градусов.

  // Изменение позиции на полной скорости:

  servo1.write(90);    // Говорим серве повернуться на позицию 90 градусов,
                       // т.е устанавливаем в среднее положение

  delay(1000);         // Не большая пауза, чтобы дать время повернуться

  servo1.write(180);   // Говорим серве повернуться на позицию 180 градусов,
                       // т.е устанавливаем в крайнее правое положение.

  delay(1000);         // Ждем еще немного

  servo1.write(0);     // Говорим серве повернуться на позицию 0 градусов,
                       // т.е устанавливаем в крайнее левое положение.

  delay(1000);         // Снова пауза
  
  // Изменение позиции на более низкой скорости:

  // Чтобы замедлить движение сервопривода, мы будем использовать
  // цикл for(), для того чтобы передать ему кучу промежуточных
  // позиций, с задержкой в 20 милли секунд между ними. Вы можете
  // изменить "размер шага", чтобы замедлить сервопривод или ускорить.
  // Обратите внимание, что сервопривод не сможет двигаться быстрее
  // своей полной скорости, так как импульсы управления передаваемые
  // на мотор с платы управления сервой передаются с частотой 50 Герц,
  // и еще модулю управления нужно время чтобы принять решение, - а в
  // той ли я нахожусь позиции, и стоит ли двигаться дальше, т.е.
  // минимальное время реакции не может быть быстрее 20 милли секунд,
  // да еще добавленная нами пауза.

  // "Говорим" сервоприводу повернуться на позицию 180 градусов,
  // с шагом в два градуса:
 
  for(position = 0; position < 180; position += 2)
  {
    servo1.write(position);  // Перемещаемся на следующую позицию
    delay(20);               // Короткая пауза
  }

  // "Говорим" сервоприводу повернуться на позицию 0 градусов,
  // с шагом в 1 градус:

  for(position = 180; position >= 0; position -= 1)
  {                                
    servo1.write(position);  // Переместиться на следующую позицию
    delay(20);               // Короткая пауза
  }
}

Что вы должны увидеть:
Вы должны увидеть как ваш серводвигатель переходит в различные позиции на разных скоростях. Если двигатель не двигается, проверить соединения и убедитесь, что код загружен в Arduino, или воспользуйтесь советами по устранению неполадок ниже.
Возможные трудности:
Servo не крутится
Даже с цветными проводами есть шанс подключить серво в обратном направлении.
Тем не менее не работает
Ошибка, которую мы сделали несколько раз - забыли подключить провода питания +5 вольт и землю.
Двигается рывками
Если серво начинает двигаться, рывками, и мигает светодиод на борту Arduino, это говорит о том что не хватает мощности питания. Воспользуйтесь сетевым адаптером вместо USB, это должно решить проблему.
Применение в жизни:
Роботизированные механические руки, которые используются на автомобильных заводах