Управління сервомотором за допомогою плати Arduino Genuino Carnet du - L; Зроби сам дух
3, 2, 1, виявляється !

від skywodd | 4 травня 2016 р. | Ліцензія (див. Нижній колонтитул)
Ця стаття востаннє змінена 5 травня 2016 року о 11:43.
Ця стаття деякий час не оновлювалась, її зміст може бути застарілим.
У цьому підручнику ми збираємось разом вивчити, як використовувати сервоприводи для побудови моделей з дошкою Arduino/Genuino. Ми вивчимо функцію сервомотора і проведемо кілька тестів із класичною моделлю сервомотора. Як бонус ми побачимо, як скористатися всіма функціями, пропонованими бібліотекою Arduino "Servo".
Резюме
- Принцип роботи та управління серводвигуном
- Використання сервомотора з платою Arduino/Genuino
- Кріплення
- Код
- Впровадження сервотеки
- Ініціалізація сервотеки
- Зміна кута нахилу сервомотора
- Приклад: розгортка
- Висновок
Привіт всім !
У цьому підручнику ми зупинимось на сервомоторах та використанні сервомоторів з платою Arduino/Genuino.
Сервомотори - це дещо специфічні двигуни, які можуть обертатися зі свободою близько 180 ° і утримувати відносно точно кут повороту, який хочеться отримати.
Сервомотори зазвичай використовуються у моделях для управління механічними системами (кермо літака, прискорювач теплового двигуна тощо). Сервомотори також часто використовуються в робототехніці для виготовлення міні-роботів, приводів або поворотних індикаторів.
Принцип роботи та управління серводвигуном
Китайський сервомотор "9 грам"
Модель сервомотора у формі невеликого прямокутника з двома виступами з боків для фіксації та нецентрова вісь із кронштейном (взаємозамінним) для механічного з'єднання.
Привід Futuba S3003
Існують різні типи сервомоторів, різні за розмірами, вагою та крутним моментом (силою). На наведеній вище фотографії представлений дуже класичний сервомотор виготовлення моделей: Futuba S3003. Трохи нижче в статті ми будемо використовувати інший сервомотор, який зазвичай називають "9-грамовим сервомотором", заради споживання електроенергії.
Вид на сервомотор
Внутрішня робота сервомотора досить проста.
Невелика електронна схема дозволяє управляти двигуном постійного струму відповідно до положення потенціометра, вбудованого в сервомотор.
Вихід двигуна постійного струму механічно з'єднаний з низкою передач, які збільшують силу (крутний момент) сервомотора за рахунок зменшення швидкості обертання останнього.
Коли двигун працює, шестерні оживають, важель рухається і приводить у рух потенціометр. Електронна схема безперервно регулює частоту обертання двигуна, так що потенціометр (і, розширюючи важель), завжди залишається на тому ж місці.
Достатньо задати задане значення сервомотору (наприклад, "залишатися на 45 °"), і сервомотор зробить усе можливе, щоб залишатися якомога ближче до цього заданого значення.
Ілюстрація керуючого сигналу
Це задане значення передається за допомогою цифрового сигналу, точніше імпульсу.
Для того, щоб сервомотор залишався в заданому положенні, необхідно кожні 20 мілісекунд (тобто на частоті 50 Гц) передавати імпульс довжиною від 1 до 2 мілісекунд.
Імпульс в 1 мілісекунду відповідає куту 0 °.
Імпульс 2 мілісекунди відповідає куту 180 °.
Посилаючи імпульс проміжної довжини, ми отримуємо різні кути, наприклад, 90 ° з імпульсом 1,5 мілісекунди.
Більшість сервомоторів працюють при напрузі 5 вольт, але деякі працюють при напрузі 3,3 вольта. Перед використанням обов’язково прочитайте документацію на серводвигун.
Використання сервомотора з платою Arduino/Genuino
У цій главі ми застосуємо невеликий сервомотор "9 грам" з платою Arduino/Genuino.
Кріплення
Для проведення цієї збірки нам знадобляться:
Плата Arduino UNO (та її USB-кабель),
Сервомотор "9 грам" або подібний,
Провід для підключення нашого сервомотора.
Схематичний вигляд збірки
Вид прототипу збірки
Проводка відносно проста: червоний провід від сервомотора до 5-контактного виводу плати Arduino, чорний провід до виводу GND та білий провід (або жовтий залежно від виробника) до виводу D9 плати Arduino.
Готова збірка
Що стосується мого сервомотора, (китайський) виробник був задоволений кольорами. Тож у мене замість чорного є коричневий дріт, а замість червоного - помаранчевий. Якщо ви сумніваєтесь, завжди звертайтесь до документації виробника
PS У стандартного сервомотора потужність завжди подається на середній провід.
Повторюваною проблемою вищезгаданої збірки є втрата зв'язку USB та/або несвоєчасне перезавантаження плати Arduino.
Це пов’язано з енергоспоживанням сервомотора. Сервомотор споживає багато струму, іноді занадто багато для простої плати Arduino. Це надмірне споживання спрацьовує на електронному запобіжнику плат Arduino і має наслідком їх повторного запуску.
Є лише одне рішення цієї проблеми: підключіть джерело живлення сервомотора до спеціального джерела живлення на 5 вольт.
Вид прототипу збірки (із зовнішнім джерелом живлення + 5 В постійного струму)
Схематичний вигляд збірки (із зовнішнім джерелом живлення + 5 В постійного струму)
Підключення одного або декількох приводів до зовнішнього джерела живлення є відносно простим.
"+" Кожного сервомотора має бути підключений до "+" зовнішнього джерела живлення. Те саме стосується "-" кожного сервомотора, який повинен бути підключений до "-" джерела живлення. Штифт GND плати Arduino також повинен бути підключений до "-" джерела живлення.
N.B. Заземлення джерела живлення та сервомотори завжди повинні бути підключені до заземлення плати Arduino. Якщо заземлення плати Arduino та сервомоторів не є загальним, нічого не вийде.
Крім того, з великими сервоприводами, такими як Futuba S3003, часто доводиться підключати конденсатор на 10
100мкФ паралельно з сервомотором, щоб уникнути небажаних коливань важеля.
Будьте обережні при підключенні конденсатора, хімічні конденсатори (циліндричні) є поляризованими компонентами. "-" хімічного конденсатора матеріалізується білою смужкою збоку конденсатора.
Примітка: Уникайте інвертування знаків "+" та "-", конденсатори це зовсім не люблять і вибухають, коли це відбувається. Дим, який виходить, не дуже корисний для вашого здоров’я, але перш за все запах гидкий.
Код
Щоб наш сервомотор рухався, нам доведеться скористатися бібліотекою кодів, що називається «Серво». Це стандартно забезпечується середовищем розробки Arduino.
Бібліотека сервоприводу дозволяє керувати до 12 сервоприводів одночасно з платою Arduino UNO і 48 з платою Arduino Mega.
З платою Arduino UNO використання бібліотеки сервоприводів робить штифти D9 і D10 непридатними для ШІМ з analogWrite () .
З платою Arduino Mega можна одночасно використовувати 11 сервомоторів, не створюючи особливих проблем. З 12 сервомоторів штифти D11 і D12 більше не можуть використовуватися в ШІМ з analogWrite () .
Впровадження сервотеки
Бібліотека Servo стандартно постачається із середовищем розробки Arduino. Тому немає планування встановлення.
Все, що вам потрібно зробити, це імпортувати бібліотеку, додавши цей рядок на початку програми, щоб використовувати її:
Сервобібліотека - це об’єктно-орієнтована бібліотека, це означає, що вона працює, присвоюючи змінну (об’єкт) кожному сервомотору, який ви хочете використовувати.
Для створення об’єкта Servo потрібно лише оголосити (глобальну) змінну типу "Servo", приклад:
Якщо ви хочете використовувати кілька сервомоторів одночасно, ви повинні створити кілька змінних, по одній на сервомотор.
PS Повний приклад коду наведено в кінці глави
Ініціалізація сервотеки
Бібліотека сервоприводу ініціалізується за допомогою функції приєднання () кожного об’єкта типу сервосистеми. Приклад:
Функція attach () приймає в якості аргументу один обов’язковий параметр, що відповідає номеру виводу, на якому підключений сервомотор.
Функція attach () також може приймати два необов’язкові параметри, «min» та «max», що відповідають, відповідно, мінімальній та максимальній тривалості в мікросекундах контрольного імпульсу, видному на початку статті.
Час за замовчуванням становить 544 мкс для 0 °
240 мкс для 180 °. Ці значення за замовчуванням призначені для роботи з переважною більшістю комерційних сервомоторів.
Якщо ви використовуєте стару версію програмного забезпечення Arduino, версію 0016 або нижчу, бібліотека сервоприводу в цьому випадку дозволяє використовувати лише 2 сервомотори, лише на штифтах D9 і D10.
Це обмеження (досить обмежувальне) існує лише в цих версіях. Просто використовуйте новішу версію, щоб більше не мати проблем.
Якщо пізніше у коді ви хочете перевірити, що сервооб'єкт належним чином прикріплений до штифта, ви можете скористатися функцією прикріплений.
Функція Attached () повертає логічне значення True (true = 1), якщо об'єкт Servo прикріплений до виводу, False (false = 0), інакше.
А якщо ви хочете від'єднати сервооб'єкт від штифта, просто зателефонуйте функції detach ().
Функція detach () не приймає параметрів і не повертає значення. Просто зателефонуйте йому, щоб від’єднати об’єкт сервоприводу від його штифта.
Примітка.Якщо ви від'єднаєте всі об'єкти Servo від відповідних контактів, бібліотека Servo автоматично звільняє контакти D9 і D10 (або D11 і D12 на Mega), які знову стають придатними для використання з analogWrite () .
Зміна кута нахилу сервомотора
Щоб змінити кут нахилу рукоятки сервомотора, є два рішення: write () та writeMicroseconds ().
Функція write () використовується для модифікації кута важеля сервомотора, задаючи відповідний кут як параметр у вигляді цілого числа від 0 ° до 180 °.
Якщо пізніше ви захочете отримати останнє значення кута, присвоєне функції write (), просто викличте функцію read (), яка повертає останнє відоме значення.
Примітка.Диапазон обертання залежить від моделі сервомотора. Деякі сервомотори можуть становити 0 °
180 ° немає проблем, коли інший ледве встигає повернути 60 °. Не забудьте прочитати технічні характеристики
Функція writeMicroseconds () використовується для зміни кута нахилу сервомотора, задаючи як параметр тривалість імпульсу, що передається на сервомотор.
Зі стандартним сервомотором значення 1000 мкс дасть кут 0 °, а значення 2000 мкс - кут 180 °. Однак для деяких сервомоторів ці значення можуть сягати приблизно 700
Ця функція дозволяє точно вибрати кут важеля відповідно до використовуваного сервомотора. Однак необхідно попередньо зробити тести, щоб визначити межі руки.
Коли ви просите сервомотор вийти за його функціональні межі (наприклад, попросивши його зробити 360 °), ви зазвичай чуєте високий шум.
Якщо сервомотор видає високий/незвичний шум, ви просите його про неможливе
Зафіксувати руку підсилювача в "жорсткому" положенні не дуже добре, і врешті-решт його вб'ють. Це також спричиняє дуже високе споживання струму.
Приклад: розгортка
Для ілюстрації використання описаних вище функцій, ось невеликий приклад коду під назвою "Розгортка".
Його мета проста: обертати рукоятку сервомотора в одну сторону, а потім в іншу, на невизначений час.
Приклад розгортки за допомогою Servo.write () з коментарями:
Вищезазначений фрагмент коду доступний для завантаження на цій сторінці (за посиланням для завантаження .zip проект Arduino відсутній). Приклад розгортки за допомогою Servo.writeMicroseconds () з коментарями:
Вищезазначений фрагмент коду доступний для завантаження на цій сторінці (за посиланням для завантаження .zip проект Arduino готовий до використання).
Висновок
Цей підручник тепер готовий.
Якщо вам сподобався цей підручник, сміливо коментуйте його на форумі, розміщуйте в соціальних мережах і підтримуйте сайт, якщо він вам подобається.
- Хто ми ?
- Чому саме цей сайт ?
- Наші заручини
- Часті запитання
- Умови обслуговування
- Карта сайту
- Зв'яжіться з нами
- Юридичне повідомлення
- Використання печива
- @CarnetDuMaker
- +NotebookDuMaker
- Сторінка CarnetDuMaker
- Ланцюг CarnetDuMaker
- Github TamiaLab
- Торт - брехня
Вихідні коди, присутні на Carnet du Maker, в основному публікуються під ліцензією GPLv3. Але, якщо не вказано інше, всі елементи веб-сайту (тексти, зображення, вихідні коди тощо), за винятком вмісту, опублікованого на форумі, є виключною власністю TamiaLab. Будь-яке повне або часткове відтворення без попереднього дозволу автора та TamiaLab може спричинити судовий розгляд.
Декоративні візерунки, виготовлені витонченими візерунками за ліцензією CC BY-SA 3.0.