Як обертати сервоприводом на кут, що задається потенціометром

Теми по керування сервоприводами, управління обертами двигунів, драйвери моторів, перетворювачі струму для моторів, управління кроковими двигунами, шілди для підключення моторів квадрокоптнрів та літаків
Відповісти
Аватар користувача
Arduino
Site Admin
Повідомлень: 99
З нами з: 16 травня 2017 18:18

Як обертати сервоприводом на кут, що задається потенціометром

Повідомлення Arduino »

Особливості монтажу сервоприводу (серво двигуна)

Конденсатор в даній схемі нам потрібен для того, щоб при включенні сервоприводу уникнути просідання живлення плати.
Не забувайте про те, що потрібно дотримуватись полярності елетролітіческого конденсатора. Коротка ніжка (з боку білої смуги на корпусі) - «мінус».
Ви можете з'єднати провід сервоприводу з макетною платою проводами «тато-тато»: коричневий це земля, червоний - живлення, помаранчевий - сигнал.
В даному експерименті ми підключаємо живлення сервоприводу до 5V-виходу Arduino. З одним сервоприводом плата впорається, але якщо в якомусь проекті вам потрібно більше серводвигунів, використовуйте спеціальні плати-драйвера з окремим джерелом живлення для серв.
pantograf1.jpg
// управляти сервоприводами (англ. Servo motor) самостійно
// не так то просто, але в стандартній бібліотеці вже все
// заготовлено, що робить задачу тривіальною
#include <Servo.h>

#define POT_MAX_ANGLE 270.0 // макс. кут поворота потенціометра

// оголошуємо об'єкт типу Servo з ім'ям myServo. Раніше ми
// використовували int, boolean, float, а тепер точно також
// використовуємо тип Servo, що надається бібліотекою. У разі
// Serial ми використовували об'єкт відразу ж: він уже був створений
// для нас, але у випадку з Servo, ми повинні зробити це явно.
// Адже в нашому проекті можуть бути одночасно кілька
// приводів, і нам знадобиться розрізняти їх по іменах

Servo myServo;

void setup()
{
// прикріплюємо (англ. attach) нашу серв до 9-му піну. Явний
// виклик pinMode не потрібен: функція attach зробить все за нас
myServo.attach(9);
}

void loop()
{
int val = analogRead(A0);
// на основі сигналу розуміємо реальний кут повороту движка.
// Використовуємо речові числа в розрахунках, але отриманий
// результат округляємо назад до цілого числа
int angle = int(val / 1024.0 * POT_MAX_ANGLE);
// звичайна серва не зможе повторити кут потенціометра на
// всьому діапазоні кутів. Вона вміє вставати в кути від 0 ° до
// 180 °. Обмежуємо кут відповідно
angle = constrain(angle, 0, 180);
// і, нарешті, подаємо серві команду встати в зазначений кут
myServo.write(angle);
}
Пояснення до коду

В даному експерименті ми також маємо справу з об'єктом, на цей раз він потрібен для простого управління сервоприводом. Як зазначено в коментарі, на відміну від об'єкта Serial, об'єкти типу Servoнам потрібно явно створити: Servo myServo, попередньо підключивши бібліотеку <Servo.h>.
Далі ми використовуємо два методи для роботи з ним:
myServo.attach(pin)- спочатку «підключаємо» серв до порту, з яким фізично з'єднаний його сигнальний провід.
pinMode() не потрібна, метод attach() займеться цим.
myServo.write(angle) - задаємо кут, тобто позицію, яку повинен прийняти вал сервоприводу. Зазвичай це 0-180 °.
myServoтут це ім'я об'єкта, ідентифікатор, який ми придумуємо так само, як назви змінних. Наприклад, якщо ви хочете керувати двома захопленнями, у вас можуть бути об'єкти leftGripі rightGrip.
Ми використовували функцію int() для явного перетворення числа з плаваючою точкою в цілочисельне значення. Вона приймає в якості параметра значення будь-якого типу, а повертає ціле число. Коли в одному вираженні ми маємо справу з різними типами даних, потрібно подбати про те, щоб не отримати непередбачуваний помилковий результат.
Аватар користувача
lDoberMannl
Повідомлень: 30
З нами з: 12 жовтня 2017 14:50
Звідки: Боярка

Re: Як обертати сервоприводом на кут, що задається потенціометром

Повідомлення lDoberMannl »

При подключении сервы к ардуино - с конденсатором понятно.
А вот если я подключаю несколько сервов к отдельному питанию - есть ли смысл ставить конденсатор? (чет мне кажется что есть, но пока не експерементировал) хотелось бы узнать мнение профессионалов.
А так же подскажите какие есть драйвера для серв?
Відповісти

Повернутись до “Керування двигунами”