Проект 20: Серво

Описание

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

В этом проекте мы пишем код для Arduino, чтобы управлять сервоприводом с помощью платы разработки UNO R3 (ch340).

Аппаратное обеспечение

1. Плата разработки UNO R3 (ch340) x1

2. Серво x1

3. Провода DuPont

Принцип работы

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

IMG_256

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

Сервопривод управляется путем передачи серии импульсов через сигнальную линию. Частота управляющего сигнала должна быть 50 Гц, то есть импульс должен повторяться каждые 20 мс. Ширина импульса определяет угловое положение серво, и такие серво обычно могут поворачиваться на 180 градусов (имеют физические ограничения по углу поворота).

IMG_256

Обычно импульсы длительностью 1 мс соответствуют положению 0 градусов, 1,5 мс — 90 градусам, а 2 мс — 180 градусам. Однако минимальная и максимальная длительность импульсов может варьироваться у разных производителей и составлять, например, 0,5 мс для 0 градусов и 2,5 мс для 180 градусов.

Технические характеристики

T-pro Mini Servo Motor SG-90 9g Servo

Лучший выбор для радиоуправляемых моделей

Прилагаемые аксессуары

Соответствие стандарту ROHS

Размеры: 23x12.2x29 мм

Крутящий момент: 0.5 кг/см

Максимальный крутящий момент: 1.5 кг/см при 5В

Скорость работы: 0.3 с/60 градусов при 4.8В

Рабочее напряжение: 4.2-6В

Диапазон температур: 0-55 °C

Ширина мертвой зоны: 10 мкс

Материал шестерен: нейлон

Распиновка

GND Земля (коричневый провод) – это контакт земли.

VCC +5В (красный провод) – питание подается на сервопривод через этот контакт.

Control (оранжевый провод) – через этот провод принимаются управляющие сигналы позиционирования через ШИМ.

Схема подключения

1. Подключите красный провод (плюс) серво к пину 5V на плате

2. Подключите черный провод (минус) серво к GND на плате

3. Подключите оранжевый провод (сигнал) серво к цифровому пину D9 на плате

Img

Пример кода

/*

Electronics Learning Starter Kit for Arduino

Project 20

Servo

Edit By Keyes

*/

#include <Servo.h>

Servo myservo; // create a Servo object

void setup() {

myservo.attach(9); // connect servo to digital pin 9

}

void loop() {

myservo.write(0); // rotate servo to 0 degree

delay(1000); // delay 1s

myservo.write(90); // rotate servo to 90 degree

delay(1000); // delay 1s

myservo.write(180); // rotate servo to 180 degree

delay(1000); // delay 1s

}

Объяснение кода

Импорт библиотек и создание объекта серво

Сначала, в начале программы Arduino, необходимо подключить библиотеку Servo.h, что делается с помощью директивы препроцессора #include <Servo.h>. Затем создается объект класса Servo, в данном примере с именем myservo. Этот объект будет использоваться для всех последующих операций, связанных с сервоприводом.

#include <Servo.h>

Servo myservo; // Создаем объект сервопривода

Функция setup

В функции setup() мы подключаем сервопривод к определенному цифровому пину на плате Arduino. В этом примере используется цифровой пин 9. Строка myservo.attach(9); связывает объект сервопривода с цифровым пином 9, что позволяет выходному сигналу с этого пина управлять сервоприводом.

void setup() {

myservo.attach(9); // Подключаем сервопривод к цифровому пину 9

}

Функция loop

В функции loop() прописывается логика управления сервоприводом. Эта функция выполняется непрерывно, образуя бесконечный цикл. В данном примере сервопривод поворачивается на 0 градусов, затем на 90 градусов, и затем на 180 градусов. После каждого поворота программа делает паузу на одну секунду (1000 миллисекунд), что достигается с помощью функции delay(1000);.

void loop() {

myservo.write(0); // Повернуть сервопривод на 0 градусов

delay(1000); // Задержка 1 секунда

myservo.write(90); // Повернуть сервопривод на 90 градусов

delay(1000); // Задержка 1 секунда

myservo.write(180); // Повернуть сервопривод на 180 градусов

delay(1000); // Задержка 1 секунда

}

В этом процессе функция myservo.write(angle); используется для задания целевого угла поворота сервопривода. Параметр angle — это целое число, обозначающее угол, на который должен повернуться мотор. Библиотека Servo обеспечивает генерацию сигналов, чтобы мотор переместился в указанное положение.

Результат проекта

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

P20