Урок №08. Сервоприводы. Сборка манипулятора.

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

### Что такое сервопривод?

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

1. Сервопривод получает на вход значение управляющего параметр, например, угол поворота.
2. Блок управления сравнивает это значение со значением на своём датчике.
3. На основе результата сравнения привод производит некоторое действие, например: поворот, ускорение или замедление так, чтобы значение с внутреннего датчика стало как можно ближе к значению внешнего управляющего параметра

Наиболее распространены сервоприводы, которые удерживают заданный угол и сервоприводы, поддерживающие заданную скорость вращения.

### Распиновка

 Красный
 Оранжевый/Желтый

Схема подключения сервопривода к Arduino обычно следующая: черный провод присоединяем к GND, красный провод присоединяем к 5V, желтый провод к цифровому пину. Управление сервоприводом на Arduino достаточно просто, но по углам поворота сервомоторы бывают на 180° и 360°, что следует учитывать при выборе привода.

### Управление сервоприводом

#### *Краткая справка о библиотеках*

Библиотеки добавляют дополнительную функциональность скетчам, например, при работе с аппаратной частью или при обработке данных. Существует огромное количество библиотек для различного рода датчиков, сенсоров и прочих устройств. Обычно библиотека содержит в себе набор дополнительных команд для работы с ними, что упрощает написание программ.  Для использования библиотеки необходимо выбрать меню **Скетч > Подключить библиотеку**. Одна или несколько директив #include будут размещены в начале кода скетча с последующей компиляцией библиотек и вместе со скетчем. Загрузка библиотек требует дополнительного места в памяти Arduino. Неиспользуемые библиотеки можно удалить из скетча убрав директиву #include.
Пример:

```

 #include <Servo.h> //подключение библиотеки для работы с сервоприводами
 #include <Stepper.h> //подключение библиотеки для работы с шаговыми двигателями
 #include <EEPROM.h> //подключение библиотеки для работы с энергонезависимой памятью

```

Чтобы управлять сервоприводом существует библиотека Servo.h, которая обладает набором команд для работы с сервоприводами. Чтобы работать с этой библиотекой, прежде всего нужно создать переменную, а точнее объект, типа Servo, обладающую уникальным именем. Все последующие команды будут в формате Имя.команда(). Таким образом к одной Arduino можно подключить несколько сервоприводов и управлять ими одновременно. Основные команды приведены в таблице:

 ИмяСерво.attach(номер пина);
 ИмяСерво.write(угол);
 ИмяСерво.read();

Ниже представлен пример кода:

```

 #include <Servo.h> //используем библиотеку для работы с сервоприводом
 Servo myservo; //объявляем переменную myservo типа Servo
 void setup() //процедура setup
 {
 myservo.attach(10); //привязываем привод к порту 10
 }
  void loop() //процедура loop
 {
  myservo.write(0); //ставим вал под 0
 delay(2000); //ждем 2 секунды
 myservo.write(180); //ставим вал под 180
  delay(2000); //ждем 2 секунды
 }

```

## Сборка манипулятора

### Задание:

1. Собрать схему состоящую из сервопривода и двух кнопок подключенных к Arduino.
2. Запрограммировать кнопки таким образом, чтобы сервопривод поворачивался на 3 градуса по часовой стрелке при нажатии первой кнопки и на три градуса против часовой стрелки при нажатии второй кнопки.
3. Добавить на сервопривод детали манипулятора.

### Подсказки:

Ограничивать значение переменной поворота сервоприводом можно двумя путями:

1. Использовать условия, чтобы ограничить градус.
2. Использовать специальную функцию для ограничения значений.

Вспомнить, как подключать кнопки можно, посмотрев Урок №06.