Arduino + сервопривід + потенціометр

Сервопривід – це привід з управлінням через негативний зворотній зв’язок, що дозволяє точно керувати параметрами руху. Сервоприводом є будь-який тип механічного приводу, що має в складі давач (положення, швидкості, зусилля і т.п.) і блок управління приводом, що автоматично підтримує необхідні параметри на давачі і пристрою згідно заданому зовнішньому значенню.

6cbcfb7bbdc72ba36170cde54b77371d

Підключення до Arduino

Багато сервоприводів можуть бути підключені до Arduino безпосередньо. Для цього від них іде шлейф з трьох проводів:

червоний – живленняпідключається до контакту 5V або безпосередньо до джерела живлення
коричневий або чорнийземля (GND контакт Arduino)
жовтий або білийсигнал; підключається до цифрового виходу Arduino.

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

Обмеження по живленню

Звичайний хобі-сервопривід під час роботи споживає більше 100 мА. При цьому Arduino здатне видавати до 500 мА. Тому, якщо вам в проекті необхідно використовувати кілька сервоприводів, є сенс замислитися про виділення сервоприводів в контур з додатковим живленням.

Обмеження по кількості підключених сервоприводів

На більшості плат Arduino бібліотека Servo підтримує управління не більше 12 сервоприводами, на Arduino Mega це число зростає до значення 48. При цьому є невеликий побічний ефект використання цієї бібліотеки: якщо ви працюєте не з Arduino Mega, то стає неможливим використовувати функцію analogWrite () на 9 і 10 контактах незалежно від того, підключені сервоприводи до цих контактів чи ні. На Arduino Mega можна підключити до 12 сервоприводів без порушення функціонування ШІМ/PWM, при використанні більшої кількості сервоприводів ми не зможемо використовувати analogWrite () на 11 і 12 контактах.



Функції бібліотеки Servo

Бібліотека Servo дозволяє здійснювати програмне керування сервоприводами. Для цього створюється об’єкт servo класу Servo. Управління здійснюється наступними функціями:

attach () – закріпляє привід до конкретного піну. Можливі два варіанти синтаксису для цієї функції: servo.attach (pin) і servo.attach (pin, min, max). При цьому pin – номер піна, до якого приєднують сервопривід, min і max – довжини імпульсів в мікросекундах, що відповідають за кути повороту 0 ° і 180 °. За замовчуванням виставляються рівними 544 мкс і 2400 мкс відповідно.
write () – віддає команду сервоприводу прийняти деяке значення параметра. Синтаксис наступний: servo.write (angle), де angle – кут, на який повинен обернутися сервопривід.
writeMicroseconds () – віддає команду надіслати сервоприводу імпульс певної довжини, є низькорівневим аналогом попередньої команди. Синтаксис наступний: servo.writeMicroseconds (uS), де uS – довжина імпульсу в мікросекундах.
read () – читає поточне значення кута, в якому знаходиться сервопривід. Синтаксис наступний: servo.read (), повертається ціле значення від 0 до 180.
attached () – перевірка, чи був приєднаний об’єкт до конкретного піну. Синтаксис наступний: servo.attached (), логічна одиниця повертається, якщо об’єкт був приєднаний до якого-небудь піну, або нуль в противному випадку.
detach () – виконує дію, зворотну дії attach (), тобто від’єднує об’єкт від піна, до якого він був приписаний. Синтаксис наступний: servo.detach ().

Потенціометр

Для керування зміною положення сервоприводу можна використати потенціометр. Він має три контакти підключається наступним чином:
Два крайні контакти (як правило) це живлення і земля, а середній – інформаційний. Під’єднуємо живлення потенціометра –> 5 V Arduino, земля –> GND Arduino, інформаційний –> аналоговий пін Arduino.
Ось так може виглядати схема:

Arduino+servo+pot

А так примітивна програма:

#include

Servo 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(9); // attaches the servo on pin 9 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
}





Робота даної програми:

Оставить ответ

Обязательные поля помечены*

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.