Підключення сервоприводу до Arduino

Серия-статей: Програмування Ардуіно з нуля #4

Серия-статей: Ардуіно, використання сервоприводів #1

Малопотужний сервопривід на 3,2 кг⋅см Одним з найпоширеніших деталей для створення роботів є сервопривід. Фактично це невеликий електродвигун з редуктором та вбудованим потенціометром. Потенціометр підключений до вихідного валу, і разом з його поворотом змінює свій опір - відповідно в будь-який момент часу можна дізнатися про положення валу. На відміну від звичайного двигуна, вбудована електроніка приводить в рух мотор таким чином, щоб його положення відповідало заданому значенню.

Зазвичай сервоприводи не розраховані на повний оборот, вал може повертатися на обмежений кут (найчастіше 180 градусів). Цього цілком достатньо, щоб керувати кермовими колесами чи магіпулятором. Тому і застосовують сервоприводи найчастіше для шарнірів. Основним показником потужності сервоприводу є момент, що крутить, зазвичай виявляється в кг⋅см. Для довгих маніпуляторів, які повинні піднімати пристойну вагу, вже знадобляться сервоприводи з моментом, що крутить, 30-40 кг⋅см і більше. Якщо ж ми хочемо за допомогою нашого сервоприводу виконувати не дуже важку роботу, то цілком достатньо найпростіших, на 1,8 або 3,2 кг см.

Схема обчислення крутного моменту сервоприводу Взагалі, крутний момент виражається в Н⋅м. Але для більшої простоти обчислень його часто призводять до в кг см см (1 кг см ~ 0.01 кг м ~ 0.098 Нм) Це зусилля, яке може забезпечити сервопривід на певній відстані від осі обертання. Тобто, наприклад сервопривід з моментом 4 кг см може підняти вантаж в 4 кг, в 1см від осі, або 400 грам, але вже на відстані 10 см від осі. Якщо ми хочемо зробити маніпулятор, то потрібно прикинути вагу частин, що рухаються, і підбирати відповідні сервоприводи для кожного суглоба.

Підключається сервопривід за допомогою трьох проводів – стандартної пари з живлення та заземлення та одного керуючого. Для малопотужних сервоприводів всі три можна підключати безпосередньо до контролера. Але якщо ми використовуємо багато сервоприводів або кілька, але потужних, то можливостей контоллера вже не вистачатиме. Потрібно підключати до контролера лише управляючий висновок, а харчування інші подавати незалежно.

Для зручнішого підключення великої кількості сервоприводів є спеціальні плати розширення, у яких контакти кожному за сервопривода вже зібрані групи по три, що дуже спрощує підключення. Але це для складних проектів, наприклад, павукоподібних роботів, де кожен суглоб ніг управляється окремо. Ми розглянемо найпростіший варіант з одним сервоприводом, підключеним безпосередньо до контролера.

Запитуємо сервопривід від піна "5V" (червоний дріт), землю підключаємо до піну "Gnd" (чорний дріт). Управління (білий провід) можна підключити до будь-якого з вільних виходів, наприклад, до піну номер 2 (виходи контролера 0 і 1 використовуються для зв'язку за послідовним інтерфейсом, тому використовувати їх не рекомендується)

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

Для керування сервоприводом використовується стандартний клас Servo. Нам потрібна процедура attach(), яка служить для ініціалізації сервоприводу та write(), для управління його рухом:

#include // Підключаємо бібліотеку для роботи із сервоприводом

Servo servo1; // Створюємо один об'єкт типу «сервопривід»

void setup()

{

servo1.attach(2); // Пояснюємо контролеру, що керуючий дріт сервоприводу підключений до піна 2

servo1.write(90); // Даємо команду сервоприводу прийняти положення 90 градусів, що відповідає середньому становищу

}

void loop()

{

}

При запуску нашої програми підключений сервопривід прийме положення 90 градусів. Якщо він уже в ньому, то нічого не станеться. Спробуємо плавно змінити положення від мінімального до максимального:

Servo servo1; // Створюємо один об'єкт типу «сервопривід»

void setup()

int angle = 0; // Змінна, в якій зберігається положення сервоприводу

{

servo1.attach(2); // Пояснюємо контролеру, що керуючий дріт сервоприводу підключений до піна 2

}

void loop()

{

For (angle = 0; angle <= 180; angle += 1) // Починаємо рух з 0 до 180 градусів

{

servo1.write(pos); // Даємо команду сервоприводу прийняти нове положення

delay(10); // Робимо паузу перед наступним переміщенням

}

}

Затримка в 10 мс дає поворот на 1 градус за 10 мс, тобто за 1 секунду ми повернемо на 1000/10 = 100 градусів, а цикл займе 1.8 секунди.

Крім того, нам необхідно мати окрему змінну, в якій зберігатиметься поточне положення сервоприводу. Справа в тому, що контролер не може знати, в якому положенні зараз перебуває сервопривід. Незважаючи на наявність потенціометра, який вимірює поточний кут повороту, ці дані використовуються лише внутрішньою електронікою сервоприводу. Ми можемо тільки подати команду зайняти потрібне положення. Тому потрібно окремо записувати кожну зміну положення у відповідну змінну, яку використовуватимемо, якщо нам необхідно щось обчислити виходячи з поточного положення сервоприводу

Еще:

Программирование контроллеров – с чего начать (Программирование Arduino с нуля #1)
Подключение периферии, платы расширения (Программирование Arduino с нуля #2)
Организация питания для Arduino (Программирование Arduino с нуля #3)
Программное ограничение перемещения сервопривода (Arduino, использование сервоприводов #4)
Подключение шагового двигателя. Контроллер L298 (Программирование Arduino с нуля #8)
Подключаем сервопривод к Arduino (Программирование Arduino с нуля #4)
Создаем класс для управления сервоприводом (Программирование Arduino с нуля #6)