- Необхідні матеріали
- Як працює ротаційний кодер?
- Типи поворотного кодера
- KY-040 Поворотний кодер Розпіновка та опис
- Електрична схема поворотного кодера Arduino
- Програмування вашого Arduino для поворотного кодера
- Робота поворотного кодера з Arduino
Регулятор, що обертається являє собою пристрій введення, яке дозволяє користувачеві взаємодіяти з системою. Він більше схожий на радіопотенціометр, але виводить послідовність імпульсів, що робить його застосування унікальним. Коли обертається регулятор кодера, він обертається у вигляді невеликих кроків, що допомагає використовувати його для керування кроковим / сервомотором, навігації по послідовності меню та збільшення / зменшення значення числа та багато іншого.
У цій статті ми дізнаємося про різні типи поворотних кодерів та як це працює. Ми також будемо взаємодіяти з Arduino і контролювати значення цілого числа, обертаючи кодер і відображати його значення на РК-екрані 16 * 2. Наприкінці цього підручника вам буде зручно використовувати поворотний кодер для ваших проектів. Тож давайте почнемо…
Необхідні матеріали
- Поворотний кодер (KY-040)
- Arduino UNO
- 16 * 2 буквено-цифровий РК-дисплей
- Потенціометр 10k
- Макет
- Підключення проводів
Як працює ротаційний кодер?
Поворотний кодер - це електромеханічний перетворювач, тобто він перетворює механічні рухи в електронні імпульси. Він складається з ручки, яка при обертанні рухатиметься крок за кроком і створюватиме послідовність імпульсних послідовностей із заздалегідь заданою шириною для кожного кроку. Існує багато типів кодерів, кожен із яких має свій робочий механізм, про типи ми дізнаємося пізніше, але наразі зосередимося лише на додатковому кодері KY040, оскільки ми використовуємо його для нашого підручника.
Внутрішня механічна структура кодера показана нижче. В основному він складається з кругового диска (сірого кольору) з провідними подушечками (мідного кольору), розміщених зверху цього кругового диска. Ці електропровідні прокладки розміщені на однаковій відстані, як показано нижче. Вихідні штифти закріплені поверх цього кругового диска таким чином, що при обертанні ручки провідні колодки контактують з вихідними штифтами. Тут є два вихідні штифти, вихід A і вихід B, як показано на малюнку нижче.
Вихідна форма сигналу, вироблена вихідним штифтом A та виходом B, відображається синім та зеленим кольорами відповідно. Коли провідна площадка знаходиться безпосередньо під штифтом, вона піднімається високо, що вчасно і, коли провідна прокладка віддаляється, штифт опускається, що призводить до часу вимкнення сигналу, показаного вище. Тепер, якщо підрахувати кількість імпульсів, ми зможемо визначити, на скільки кроків перенесено кодер.
Тепер може постати питання, чому нам потрібні два імпульсні сигнали, коли одного достатньо, щоб підрахувати кількість кроків, зроблених під час обертання ручки. Це пов’язано з тим, що нам потрібно визначити, в якому напрямку було повернуто ручку. Якщо ви поглянете на два імпульси, ви зможете помітити, що вони обидва на 90 ° поза фазою. Отже, коли обертається ручка за годинниковою стрілкою, вихід А підніметься спочатку високим, а коли обертається ручка проти годинникової стрілки, вихід В підніметься спочатку високим.
Типи поворотного кодера
На ринку існує багато типів поворотних кодерів, які дизайнер може вибрати один відповідно до своєї заявки. Найпоширеніші типи перелічені нижче
- Інкрементний кодер
- Абсолютний кодер
- Магнітний кодер
- Оптичний кодер
- Лазерний кодер
Ці кодери класифікуються на основі вихідного сигналу та технології зондування, інкрементальний кодер та абсолютні кодери класифікуються на основі вихідного сигналу, а магнітний, оптичний та лазерний кодери класифікуються на основі технології зондування. Кодувальника тут використовується тип датчика Інкрементальний.
KY-040 Поворотний кодер Розпіновка та опис
Розпінації поворотного кодера KY-040 показані нижче
Перші два висновки (Ground і Vcc) використовуються для живлення кодера, як правило, використовується джерело живлення + 5 В. Окрім обертання ручки за годинниковою стрілкою та проти годинникової стрілки, кодер також має перемикач (активний низький), який можна натиснути, натиснувши на ручку всередині. Сигнал від цього перемикача отримується через штифт 3 (перемикач). Нарешті, у нього є два вихідних висновки, які виробляють сигнали, як вже обговорювалося вище. А тепер давайте навчимося взаємодіяти з Arduino.
Електрична схема поворотного кодера Arduino
Повна електрична схема для взаємодії поворотного кодера з Arduino показана на малюнку нижче
Поворотний кодер має 5 контактів у порядку, вказаному на етикетці вище. Перші два висновки - це Ground та Vcc, який підключений до заземлення та + 5V виводу Arduino. Перемикач кодера підключений до цифрового штифта D10 і також витягнутий високо через резистор 1к. Два вихідні штирі підключені до D9 і D8 відповідно.
Для відображення значення змінної, яке буде збільшено або зменшено обертанням поворотного кодера, нам потрібен модуль відображення. Тут використовується загальнодоступний цифровий РК-дисплей із форматом 16 * 2 Alpha. Ми підключили дисплей, щоб він працював у 4-бітному режимі, і живимо його за допомогою виводу + 5 В Arduino. Потенціометр використовується для регулювання контрастності РК-дисплея. Якщо ви хочете дізнатись більше про взаємодію РК-дисплея з Arduino, перейдіть за посиланням. Повна схема може бути побудована поверх макетної дошки, я виглядав приблизно так нижче, як тільки всі з'єднання були зроблені.
Програмування вашого Arduino для поворотного кодера
Досить легко і прямо запрограмувати плату Arduino для взаємодії з нею поворотного кодера, якщо ви зрозуміли принцип роботи поворотного кодера. Нам просто потрібно зчитати кількість імпульсів, щоб визначити, скільки оборотів зробив кодер, і перевірити, який імпульс пішов першим високо, щоб знайти, в якому напрямку обертався кодер. У цьому посібнику ми покажемо число, яке збільшується або зменшується в першому рядку РК-дисплея, а напрямок кодера у другому рядку. Повна програму для робити те ж саме можна знайти в нижній частині цієї сторінки з демонстрацією відео, не вимагає якоїсь - або бібліотеки. Тепер давайте розділимо програму на невеликі шматки, щоб зрозуміти роботу.
Оскільки ми використовували РК-дисплей, ми включаємо бібліотеку рідких кристалів, яка за замовчуванням присутня в IDE Arduino. Потім визначаємо шпильки для підключення РК-дисплея до Arduino. Нарешті ми ініціалізуємо РК-дисплей на цих штифтах.
#включати
Далі всередині функції налаштування ми відображаємо вступне повідомлення на РК-екрані, а потім зачекаємо 2 секунди, щоб це повідомлення було зручним для читання. Це гарантує належну роботу РК-дисплея.
lcd.print ("Поворотний кодер"); // Вступний рядок повідомлення 1 lcd.setCursor (0, 1); lcd.print ("With Arduino"); // Затримка вступного рядка повідомлення 2 (2000); lcd.clear ();
Поворотний кодер має три вихідні висновки, які будуть вхідними виводами для Arduino. Цими трьома контактами є перемикач, вихід A і вихід B відповідно. Вони оголошені як вхід, використовуючи pinMode функцію, як показано нижче.
// декларація про режим виводу pinMode (Encoder_OuputA, INPUT); pinMode (Encoder_OuputB, INPUT); pinMode (Encoder_Switch, INPUT);
Усередині функції налаштування порожнечі ми зчитуємо статус вихідного штифта A, щоб перевірити останній статус штифта. Потім ми використаємо цю інформацію для порівняння з новим значенням, щоб перевірити, який штифт (вихід A або вихід B) піднявся високо.
Previous_Output = digitalRead (Encoder_OuputA); // Зчитуємо початкове значення результату A
Нарешті, всередині функції основного циклу , ми повинні порівняти значення виходу А і виходу В з попереднім результатом, щоб перевірити, який з них переходить до високого. Це можна зробити, просто порівнявши значення поточного виходу А і В з попереднім виходом, як показано нижче.
if (digitalRead (Encoder_OuputA)! = Previous_Output) { if (digitalRead (Encoder_OuputB)! = Previous_Output) { Encoder_Count ++; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("За годинниковою стрілкою"); }
У наведеному вище коді друге, якщо умова виконується, якщо отримує вихід B змінилася в порівнянні з попереднім виходом. У цьому випадку значення змінної кодера збільшується, і на РК-дисплеї відображається, що кодер обертається за годинниковою стрілкою . Подібним чином, якщо це, якщо умова не вдається, в наступній умові else ми зменшуємо змінну і показуємо, що кодер обертається проти годинникової стрілки . Код для цього наведено нижче.
ще { Encoder_Count--; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("проти годинникової стрілки"); } }
Нарешті, наприкінці основного циклу ми маємо оновити попереднє вихідне значення поточним вихідним значенням, щоб цикл можна було повторити з тією ж логікою. Наступний код робить те саме
Previous_Output = digitalRead (Encoder_OuputA);
Інша необов’язкова річ - перевірити, чи натиснуто перемикач на кодері. Це можна контролювати, перевіряючи штифт перемикача на поворотному кодері. Цей штифт є активним низьким штифтом, що означає, що він буде низьким при натисканні кнопки. Якщо не натиснути штифт залишається високим, ми також використовували підтягуючий резистор, щоб переконатися, що він залишається високим, коли перемикач не натиснутий, таким чином уникаючи стану з плаваючою точкою.
if (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("Перемикач натиснутий"); }
Робота поворотного кодера з Arduino
Коли обладнання та код готові, просто завантажте код на плату Arduino та увімкніть плату Arduino. Ви можете живити його через USB-кабель або використовувати адаптер 12 В. При живленні РК-дисплей повинен відображати вступне повідомлення, а потім пустим. Тепер поверніть поворотний кодер, і ви побачите, як значення починає збільшуватися або зменшуватися залежно від напрямку, в якому ви обертаєте. Другий рядок покаже, чи кодувач обертається за годинниковою стрілкою або проти годинникової стрілки. На малюнку нижче показано те саме
Також при натисканні кнопки, у другому рядку відображатиметься, що кнопка натиснута. Повну роботу можна знайти на відео нижче. Це лише зразок програми для взаємодії кодера з Arduino та перевірки, чи працює він належним чином. Потрапивши сюди, ви зможете використовувати кодер для будь-якого з ваших проектів і відповідно програмувати.
Сподіваюся, ви зрозуміли навчальний посібник і справи працювали так, як передбачається. Якщо у вас виникли проблеми, скористайтеся розділом коментарів або форумами для отримання технічної допомоги.