У цьому уроці ми збираємося розробити схему з використанням датчика FLEX, Arduino Uno та сервомотора. Цей проект являє собою систему керування сервоприводом, де положення валу сервоприводу визначається гнучкістю, згинанням або відхиленням датчика FLEX.
Давайте спочатку трохи поговоримо про сервомотори. Сервомотори використовуються там, де є необхідність у точному русі вала або його положенні. Вони не пропонуються для високошвидкісних програм. Вони пропонуються для низької швидкості, середнього крутного моменту та точного застосування положення. Ці двигуни використовуються в робототехнічних машинах, системах управління польотом та управління. Сервомотори використовуються у вбудованих системах, таких як торгові автомати тощо.
Сервомотори доступні різних форм і розмірів. Сервомотор буде мати в основному там дроти, один для позитивної напруги, інший для заземлення і останній для встановлення положення. ЧЕРВОНИЙ провід підключений до живлення, Чорний провід підключений до землі, а ЖОВТИЙ провід - до сигналу.
Сервомотор - це комбінація двигуна постійного струму, системи управління положенням, шестерень. Положення вала електродвигуна постійного струму регулюється керуючою електронікою в сервоприводі, виходячи з коефіцієнта завантаження ШІМ-сигналу штифтом СИГНАЛУ.
Простіше кажучи, керуюча електроніка регулює положення вала, керуючи двигуном постійного струму. Ці дані щодо положення вала передаються через штифт SIGNAL. Дані про положення управління повинні надсилатися у вигляді ШІМ-сигналу через сигнальний штифт сервомотора.
Частота сигналу ШІМ (модульована по ширині імпульсу) може змінюватися залежно від типу сервомотора. Тут найважливішим є КОЕФІЦІЄНТ ШИМ-сигналу. На основі цього ОБОВ'ЯЗКУ ОБЛАСТІ управління електроніка регулює вал. Для того, щоб вал був перенесений на 9o годинник, СІЙЧИС УКЛЮЧЕННЯ повинен становити 1/18. 1 мілісекунда "часу ввімкнення" та 17 мілісекунд "часу вимкнення" у сигналі 18 мс.
Щоб вал був перенесений на годинник 12o, час включення сигналу повинен становити 1,5 мс, а час вимкнення - 16,5 мс. Цей коефіцієнт декодується системою управління на сервоприводі, і він регулює положення на основі нього.
Цей ШІМ тут генерується за допомогою ARDUINO UNO. Отже, на даний момент ми знаємо, що ми можемо управляти валом сервомотора, змінюючи коефіцієнт опору ШІМ-сигналу, що генерується Arduino Uno. UNO має спеціальну функцію, яка дозволяє нам надавати позицію SERVO, не заважаючи сигналу ШІМ. Однак важливо знати співвідношення ШІМ та співвідношення положення сервоприводу. Детальніше про це ми поговоримо в описі.
Тепер поговоримо про FLEX SENSOR. Для підключення датчика FLEX до ARDUINO UNO ми використовуємо 8-бітну функцію АЦП (аналого-цифрове перетворення) для виконання цієї роботи. Датчик FLEX - це перетворювач, який змінює свій опір при зміні його форми. Датчик FLEX має довжину 2,2 дюйма або довжину пальця. Це показано на малюнку.
Датчик гнучкості - це перетворювач, який змінює свій опір при згинанні лінійної поверхні. Звідси і назва flex flex. Говорячи простою мовою, опір клеми датчика збільшується, коли він зігнутий. Це показано на малюнку нижче.
Ця зміна опору не може принести користі, якщо ми не зможемо їх прочитати. Підручний контролер може зчитувати лише шанси напруги і не менше, для цього ми будемо використовувати схему дільника напруги, при цьому ми можемо отримати зміну опору у міру зміни напруги.
Дільник напруги є резистивним контуром і показаний на малюнку. У цій резистивній мережі ми маємо один постійний опір та інший змінний опір. Як показано на малюнку, R1 тут є постійним опором, а R2 - датчиком FLEX, який діє як опір.
Середня точка гілки приймається для вимірювання. Зі зміною R2 ми маємо зміни на Vout. Отже, з цим ми маємо напругу, яка змінюється із вагою.
Зараз важливо відзначити, що вхід, який приймає контролер для перетворення АЦП, становить лише 50 мкАмпер. Цей навантажувальний ефект дільника напруги на основі опору є важливим, оскільки струм, який надходить від Vout дільника напруги, збільшує відсоток похибок, і наразі нам не потрібно турбуватися про ефект навантаження.
FLEX SENSOR при згинанні його опір змінюється. З цим датчиком, підключеним до схеми дільника напруги, ми матимемо змінну напругу з FLEX на датчику. Ця змінна напруга подається на один з каналів АЦП, ми матимемо цифрове значення, що стосується FLEX.
Ми будемо підбирати це цифрове значення до положення сервоприводу, при цьому ми матимемо контроль сервоприводу за допомогою flex.
Компоненти
Апаратне забезпечення: Arduino Uno , джерело живлення (5 В), конденсатор 1000 мкФ, конденсатор 100 нФ (3 штуки), резистор 100 кОм, SERVO MOTOR (SG 90), резистор 220 Ом, датчик FLEX.
Програмне забезпечення: Atmel studio 6.2 або Aurdino nightly.
Принципова схема та пояснення
Схема для стежить управління двигуном з допомогою датчика FLEX показано на малюнку нижче.
Напруга на датчику не є повністю лінійною; це буде шумно. Щоб фільтрувати шум, конденсатори розміщують по кожному резистору в ланцюзі дільника, як показано на малюнку.
Тут ми збираємося взяти напругу, яку надає дільник (напруга, яка представляє вагу лінійно) і подати її в один з каналів АЦП Arduino UNO. Для цього ми використаємо A0. Після ініціалізації АЦП ми отримаємо цифрове значення, що відображає зігнутий сенсор. Ми візьмемо це значення та порівняємо його з положенням сервоприводу.
Для цього нам потрібно встановити кілька інструкцій у програмі, і ми детально про них поговоримо нижче.
ARDUINO має шість каналів АЦП, як показано на малюнку. У них будь-який один або всі з них можуть бути використані як входи для аналогової напруги. АЦП UNO має 10-бітну роздільну здатність (тому цілі значення від (0- (2 ^ 10) 1023)). Це означає, що він відобразить вхідні напруги від 0 до 5 вольт у цілі значення від 0 до 1023. Отже, для кожного (5/1024 = 4,9 мВ) на одиницю.
Тут ми будемо використовувати A0 UNO.
Потрібно знати кілька речей.
|
Перш за все, канали АЦП UNO мають стандартне опорне значення 5 В. Це означає, що ми можемо дати максимальну вхідну напругу 5 В для перетворення АЦП на будь-якому вхідному каналі. Оскільки деякі датчики забезпечують напругу від 0-2,5 В, при еталонному напрузі 5 В ми отримуємо меншу точність, тому ми маємо інструкцію, яка дозволяє нам змінювати це контрольне значення. Тож для зміни опорного значення ми маємо (“analogReference ();”) Наразі ми залишаємо це як.
За замовчуванням ми отримуємо максимальну роздільну здатність АЦП на платі, яка становить 10 біт, цю роздільну здатність можна змінити за допомогою інструкції (“analogReadResolution (біти);”). Ця зміна дозволу може стати в нагоді в деяких випадках. Наразі ми залишаємо це як.
Тепер, якщо вищевказані умови встановлені за замовчуванням, ми можемо зчитувати значення з АЦП каналу '0', безпосередньо викликаючи функцію “analogRead (pin);”, тут “pin” представляє pin, куди ми підключили аналоговий сигнал, в даному випадку це буде "A0".
Значення з АЦП можна взяти у ціле число як “int SENSORVALUE = analogRead (A0); ”, За цією інструкцією значення після АЦП зберігається у цілому числі„ SENSORVALUE ”.
Тепер давайте поговоримо про SERVO, UNO має функцію, яка дозволяє нам контролювати положення сервоприводу, просто вказуючи значення градуса. Скажімо, якщо ми хочемо, щоб сервопривід був на рівні 30, ми можемо безпосередньо представляти значення в програмі. Файл заголовка SERVO внутрішньо здійснює всі розрахунки коефіцієнта мита.
#включати
Серво серво; servo.attach (3); servo.write (градуси); |
Перше твердження представляє заголовочний файл для управління SERVO MOTOR.
Друге твердження - іменування сервоприводу; ми залишаємо це як сам сервопривід.
Третє твердження вказує, де підключений штифт сервосигналу; це повинен бути ШІМ-штифт. Тут ми використовуємо PIN3.
Четверте твердження дає команди для позиціонування серводвигуна і знаходиться в градусах. Якщо йому дано 30, сервомотор обертається на 30 градусів.
Тепер sg90 може рухатися від 0-180 градусів, ми маємо результат АЦП 0-1024
Отже, АЦП приблизно в шість разів перевищує СЕРВОПОЛОЖЕННЯ. Отже, поділивши результат АЦП на 6, ми отримаємо приблизне положення руки SERVO.
Завдяки цьому ми отримаємо значення положення сервоприводу, подане на серводвигун, яке пропорційно гнучкому або зігнутому. Коли цей гнучкий датчик встановлений на рукавичці, ми можемо контролювати положення сервоприводу рухом руки.