Програмування arduino - бібліотека servo

Servo library - бібліотека для роботи з сервомашинками

Як ми пам'ятаємо - сервомашинка - це мотор-редуктор, зі зворотним зв'язком. завдяки якій можна повернути вихідний вал на строго певний кут.
Стандартні кермові машинки, крутяться від 0 до 180 градусів (також є серви постійного обертання - т.зв. Continuous Rotation Servo. Трохи пізніше покажемо, як звичайну серв можна переробити до такого стану).

Примітка:
В Arduino IDE 0017 бібліотека Servo підтримує до 12 серв (до 48 на Mega), а в IDE 0016 і раніше працює тільки на 9 і 10 пінах!

! Зверніть увагу:
На платах, відмінних від Mega, використання бібліотеки відключає можливість використання analogWrite () (PWM) на пінах 9 і 10 (незалежно підключені до цих пінам серви чи ні). На платах Mega, до 12 серв можуть використовуватися без впливу на функціональність PWM, але використання від 12 до 23 сервомашинок відключить PWM на пінах 11 і 12.

підключення
Схема включення сервомашікі дуже проста - у неї є три дроти:

Програмування arduino - бібліотека servo

- земля (коричневий / чорний),
- харчування +5 вольт (червоний),
- сигнальний (помаранчевий / жовтий / білий).
Керуючий сигнал можна подавати безпосередньо з ноги МК, а ось силове харчування (особливо якщо задіяно більше однієї-двох серв) потрібно подавати від зовнішнього джерела живлення (тобто не від +5 Arduino). В цьому випадку - потрібно не забути з'єднати землю Arduino / CraftDuino з мінусом зовнішнього джерела живлення.

Розглянемо функції, які надає бібліотека.

uint8_t attach (int pin);
uint8_t attach (int pin, int min, int max);

опис:
Вказуємо пін до якого підключений керуючий провід серви.

Примітка:
Версії Arduino IDE 0016 і молодше дозволяють підключення тільки до 9 і 10 пінам.


параметри:
(Servo - об'єкт класу Servo)
pin - номер порта до якого підключена серва

min (опціонально) - ширина імпульсу в мікросекундах встановлює положення вала серви в 0 градусів (по-замовчуванню 544)

max (опціонально) - ширина імпульсу в мікросекундах встановлює положення вала серви в 180 градусів (по-замовчуванню 2400)


void write (int value);

опис:
Встановлюємо кут повороту серви в градусах.
У разі серви постійного обертання:
0 - обертання на повній швидкості в одну сторону,
180 - обертання на повній швидкості в іншу сторону,
90 - немає обертання.


параметри:
angle - значення кута для повороту: від 0 до 180


void writeMicroseconds (int value);


параметри:
uS - значення ширини імпульсу в мікросекундах (int)

опис:
Зчитує «поточний» кут повороту сервомашинки (значення, передане в останньому виклику write ()).


Значення, що повертається:
Повертає значення типу int - кут від 0 до 180 градусів.

опис:
Визначаємо - чи є прив'язка до серве через pin.


Значення, що повертається:
Повертає true якщо є прив'язка до pin-у і false - в протилежному випадку.

опис:
Відключення Піна від бібліотеки Servo. Якщо всі змінні Servo відключені - Піни 9 і 10 можна використовувати для PWM-виведення через analogWrite ().


Значення, що повертається:
немає.

Розглянемо приклад роботи бібліотеки на прикладі Sweep, який повертає серв від 0 до 180 градусів і назад (як-би підмітає).
File - Examples - Servo - Sweep


Існують і інші бібліотеки:
SoftwareServo - www.arduino.cc/playground/ComponentLib/Servo - зручна однаковою назвою функцій з системної бібліотекою Servo
- вона не обмежує кількість серв 8-ю, але вимагає для роботи виклику методу
SoftwareServo :: refresh ()

MegaServo - www.arduino.cc/playground/Code/MegaServo
- бібліотека для більш ранніх версій IDE (в 0017 НЕ підвантажиться, тому що вона вже входить до складу IDE під ім'ям Servo :) - дозволяє контролювати до 12 серв

Всім привіт, переробив серв для обертання по колу (360 градусів) подредактировал скетч але вона крутиться без упину. якщо підключаючи непеределаную серв вона повертається на кожні 90 градусів. Але мені потрібно все 360 а не 180. підкажіть що не так.
ось скетч
#include
Servo myservo;

void setup ()
<
// встановлюємо пін як висновок управління Серв
myservo.attach (10);
>

void loop ()
<
// встановлюємо кут 0 °
myservo.write (0);
delay (3000);
// встановлюємо кут 90 °
myservo.write (90);
delay (3000);
// встановлюємо кут 180 °
myservo.write (180);
delay (3000);
// встановлюємо кут 270 °
myservo.write (270);
delay (3000);
>

ІМХО все саме так як повинно бути.
Серв, простими засобами, не примусити повертатися більш ніж на 180.
Про пристрій - тут.
тільки якщо потенціометр зворотного зв'язку змінювати на багатооборотний але тоді точність стане невисокою.
Не можу знати як переробляли саме ви, але зазвичай серви переробляють не стільки на «360», скільки на «постійне обертання» - див подробиці.

Я прибрав фіксатор, замість потенціометра підпаяв 2 резистора по 3,3к. значить неможливо зробити щоб вона зупинялася через кожні 90?

Так неможливо - ви ж витягли потенціометр серва тепер нічого не знає про своє поточне місце перебування.
Таки почитайте.

Схожі статті