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