Россия, Иркутская область, д. Шаманаева, Трактовая улица, 2, 1 этаж
Телефон:
+7 (395) 239-99-35
Пн-пт: 09:00—19:00
whatsapp telegram vk email

Как подключить энкодер к ардуино

Подключение энкодера к Ардуино и полнофункциональный код обработки для него

Энкодер — это устройство преобразования механического перемещения или угловых изменений положения в цифровой сигнал. В статье рассматривается самый популярный в DIY сообществе инкрементальный энкодер EC11 с кнопкой. При его вращении на выходах A и B формируются TTL сигналы в виде импульсов сдвинутые между собой по фазе на 90 градусов. Таким образом с его помощью, можно определить направление и скорость вращения, а так же рассчитать угол поворота. В отличие от потенциометров, энкодер KY-040 гораздо надежней и долговечный.

image

Немного подробностей

Собирая один из проектов с использованием encoder. Я не смог найти код для Ардуино выполняющий все мои условия. Так как для проекта нужно обрабатывать следующие команды: «Вращение без нажатия», «Вращение с нажатием», «Нажатие» и «Длинное нажатие», а так же требуется стабильная работа энкодера. Скетчи использующие один пин с прерыванием INT0 или INT1, работают отвратительно и при вращении вала энкодера вылетает очень много ошибок. Код без использования прерываний работает стабильно, но он не работает в фоновом режиме, его нужно встраивать в тело основной программы, что в свою очередь приводит к не своевременному срабатыванию обработчика и пропускам при вращении энкодера. Еще хуже обстоят дела с обработкой нажатия с вращением вала энкодера и обычным с нажатием. Пришлось написать свой код обработки, который исключает описанные выше проблемы. С дребезгом контактов я не стал бороться программно, так как это приводит к задержкам обработки. Проще и надежней использовать керамические конденсаторы.

Схема подключения энкодера к Ардуино

Для считывания сигналов с выходов EC-11, нужно использовать три цифровых входа Arduino. В схеме подключения я использовал редко используемые мной в своих проектах выводы Arduino(A1, A2 и A3). Внешние подтягивающие резисторы отсутствуют, так как я использовал внутреннюю подтяжку микроконтроллера. Конденсаторы нужны для гашения импульсов дребезга контактов. Если у вас новый и хороший энкодер, то можно обойтись и без них. Но на кнопку в любом случае потребуется конденсатор, так как ее дребезг неизбежен.

Используемые в схеме компоненты:

image

Скетч для Ардуино

Заключение

Результат работы кода меня порадовал и теперь я могу продолжить работу над своим новым проектом, который скоро здесь выложу. Надеюсь эта короткая статья вам понравилась и вы сможете воспользоваться моей наработкой в своих самоделках.

Если у Вас остались вопросы и замечания, пишите их в комментариях. Я с удовольствием на них отвечу.

Как работает инкрементальный энкодер и как его подключить к Arduino

Инкрементальный энкодер (rotary encoder) – это тип электромеханического датчика, который можно использовать для определения углового положения его оси. Данный датчик формирует на своем выходе электрические сигналы в зависимости от направления вращения своей оси. Энкодер состоит из механических компонентов, поэтому он отличается надежностью работы и используется в различных приложениях: роботы, компьютерные мышки, плоттеры, принтеры и т.д.

image

Существует два типа энкодеров: абсолютные энкодеры и инкрементальные энкодеры. В данной статье мы будем использовать инкрементальный энкодер.

Ранее на нашем сайте мы уже рассматривали подключение инкрементального энкодера к плате Arduino, но эта статья более свежая и значительно более подробная. Также на нашем сайте есть статьи про подключение инкрементального энкодера к другим микроконтроллерам:

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. Инкрементальный энкодер (купить на AliExpress).

Принципы работы инкрементального энкодера

Распиновка инкрементального энкодера

Модуль инкрементального энкодера содержит 5 контактов: GND, +(VCC), SW(Switch), DT и CLK. Все эти контакты являются цифровыми, за исключением контактов VCC и Ground. Назначение контактов (распиновка) инкрементального энкодера представлена на следующем рисунке.

image

GND – контакт общего провода (земли) инкрементального энкодера, в нашем проекте его необходимо подключить к общему проводу (ground pin) платы Arduino.

VCC – контакт для подачи питания на инкрементальный энкодер, его необходимо подключать к источнику напряжения питания 5V или 3.3V.

SW (switch pin) – контакт переключения энкодера. Инкрементальный энкодер, который мы используем, содержит внутри себя кнопку, которая активируется при нажатии на верхний край его рукоятки (оси). В активном состоянии эта кнопка формирует уровень LOW.

DT – данный контакт представляет собой фактически то же самое что и контакт CLK, но последовательность импульсов на нем сдвинута по фазе на 90 градусов относительно контакта CLK.

CLK – главный контакт модуля инкрементального энкодера. Каждый раз при вращении рукоятки выходной импульс на нем сменяет свое состояние с High на Low.

Как работает инкрементальный энкодер

Если посмотрим внутрь инкрементального энкодера, то там мы увидим диск с большим количеством вырезанных в нем отверстий. Логика выходных импульсов энкодера определяется его двумя контактами, показанными на рисунке ниже. Пластина энкодера подключается к общему проводу схемы.

При вращении оси энкодера его контакты Output A и Output B вступают в контакт с его пластиной в определенном порядке, который зависит от направления вращения оси энкодера. Если ось энкодера вращается по часовой стрелке, то сначала с пластиной соединяется output A, а потом output B. Если ось энкодера вращается против часовой стрелки, то все происходит с точностью наоборот. Таким образом, при любом направлении вращения оси энкодера сигналы на его выходах output A и output B сдвинуты на до градусов относительно друг друга.

На представленной анимации если мы вращаем ось энкодера по часовой стрелке, контакт A подключается первым, а потом подключается контакт B. Отслеживая какой контакт подключился к пластине первым мы можем определить направление вращения оси энкодера и, соответственно, мы можем инкрементировать или декрементировать состояние счетчика в нашей программе.

Компоненты модуля инкрементального энкодера

Это очень дешевый и простой в использовании модуль, который может быть использован в разнообразных приложениях. В зависимости от направления вращения своей оси он генерирует последовательность цифровых сигналов на своих контактах DATA и clock. Если импульсы начинаются с контакта data, а импульсы на контакте CLK сдвинуты относительно него на 90 градусов, это значит что ось энкодера вращается по часовой стрелке, иначе она вращается против часовой стрелки.

image

Если вы посмотрите внимательно на модуль инкрементального энкодера, то вы увидите, что на его печатной плате сравнительно мало элементов: на фронтальной части мы видим рукоятку энкодера и контакты, а на тыльной части только подтягивающие резисторы. Фактически, инкрементальный энкодер – это механическое устройство, способное работать с уровнями напряжения 3.3V и 5V.

Наиболее часто задаваемые вопросы про инкрементальный энкодер

Схема модуля инкрементального энкодера

Модуль инкрементального энкодера состоит из легко доступных компонентов общего назначения, в простейшем случае это сам энкодер и три подтягивающих резистора. Схема энкодера показана на следующем рисунке.

Схема проекта

Схема подключения инкрементального энкодера к плате Arduino представлена на следующем рисунке.

Как видите, схема подключения достаточно проста, необходимо всего лишь подключить контакты CLK и DT инкрементального энкодера к контактам внешних прерываний D2 и D3 платы Arduino. Также необходимо подключить контакт SW энкодера к контакту D4 платы Arduino – этот контакт мы также будем конфигурировать для обработки внешнего прерывания.

Внешний вид собранной конструкции проекта представлен на следующем рисунке.

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

В коде нашей программы для обработки угловых координат оси энкодера мы будем использовать прерывания, поскольку в этом случае они значительно уменьшают вероятность ошибки.

Первым делом в программе мы подключим необходимые библиотеки и назначим контактам платы Arduino, к которым подключены контакты энкодера, осмысленные имена.

Подключение энкодера к Ардуино (KY-040)

Энкодер Ардуино, а точнее модуль KY-040 очень часто используется в проектах для управления различными устройствами от платы Arduino. В этом обзоре мы рассмотрим схему подключения модуля к микроконтроллеру, а также представим сразу несколько примеров с использованием датчика для включения и управления яркостью светодиодов, вращение сервопривода с помощью энкодера и платы Arduino.

Модуль энкодер Ардуино: схема, распиновка

Энкодер служит для преобразования угла поворота в электрический сигнал. При вращении ручки модуля мы получаем два сигнала (A и B), которые противоположны по фазе. Сигналы A и B зависят друг от друга при вращении энкодера Ардуино по часовой или против часовой стрелки. Для считывания сигнала A и B с энкодера можно использовать, как цифровые, так и аналоговые порты микроконтроллера.

Распиновка и принципиальная схема модуля энкодера

Каждый раз, когда сигнал A переходит от положительного уровня к нулю, мы считываем значение сигнала B (смотри диаграмму выше). Если сигнал B находится в этот момент в положительном состоянии, значит энкодер вращается по часовой стрелке, если B равен нулю, то энкодер вращается против часовой стрелки. Считывая оба выхода при помощи Ардуино, можно определить направление и угол поворота.

Как подключить энкодер к Ардуино

Для этого занятия потребуется:

  • Arduino Uno / Arduino Nano / Arduino Mega;
  • модуль энкодер ky-040;
  • беспаечная макетная плата;
  • светодиоды и резисторы;
  • микро сервопривод;
  • провода «папа-папа», «папа-мама».

Схема подключения энкодера к Ардуино (модуль KY-040)

Encoder Arduino Uno Arduino Nano Arduino Mega
GND GND GND GND
+ 5V 5V 5V
SW 2 2 2
DT A2 A2 A2
CLC A3 A3 A3

Для работы с энкодером потребуется установить библиотеку RotaryEncoder.h, скачать архив можно здесь. Если у вас возникли трудности с установкой библиотеки для энкодера, то рекомендуем ознакомиться с информацией, как установить библиотеку в Arduino IDE. Для подключения KY-040 к Arduino можно использовать цифровые и аналоговые пины микроконтроллера, в наших примерах используются пины A2-A3.

Скетч. Пример Ардуино энкодер прерывание

Разберем для начала самый простой пример управления энкодером от Ардуино с помощью прерываний, где вся черновая работа по определению положения ручки энкодера выполняется с помощью библиотеки RotaryEncoder.h. Мы лишь выводим данные на монитор порта Arduino IDE. Соберите схему с энкодером, как показано на картинке выше и загрузите в микроконтроллер Arduino следующую программу.

Пояснения к коду:
  1. начальное положение ручки равно нулю static int pos = 0; и это значение выводится на мониторе порта в процедуре void setup в начале программы;
  2. в примере программы для энкодера нет ограничения по положению рукоятки датчика KY-040, положение может быть положительным и отрицательным.

Как подключить энкодер для управления светодиодами

Скетч. Управление энкодером Ардуино светодиодом

Следующий пример позволит управлять яркостью светодиода с помощью ШИМ сигнала, а также включать и выключать второй светодиод с помощью нажатия кнопки энкодера. Для этого соберите схему, размещенную выше. Обратите внимание, что порт SW энкодера подключен к пину 2 Arduino, а светодиоды к 12 и 11 пину. После сборки схемы загрузите следующий код управления светодиодами на Arduino с энкодером.

Пояснения к коду:
  1. для пина 2 используется конфигурация INPUT_PULLUP, так как кнопка энкодера подключена к GND и при ее нажатии на цифровом входе будет сигнал LOW;
  2. в программе можно изменить максимальное и минимальное значение поворота энкодера, а также шаг вращения ручки датчика ky-040.

Скетч. Управление серво мотором от энкодера

Управление микро серво от энкодера Ардуино Уно

Следующий скетч демонстрирует подключение серво с энкодером. Логический провод микросерво (желтый или оранжевый цвет) подключается к ШИМ порту 11 микроконтроллера. В программе задается угол поворота серво с помощью поворота ручки модуля ky-040. Работа программы похожа на управление потенциометром серво, но в случае с энкодером, можно задавать максимально точный угол поворота.

Arduino encoder, как подключить энкодер KY-040

Поворотный энкодер Arduino (модуль KY-040) очень часто используется в проектах для управления различными устройствами от микроконтроллера Arduino. В этом обзоре мы рассмотрим распиновку и схему подключения модуля KY-040 к Ардуино. Представим несколько примеров с использованием модуля rotary encoder для управления яркостью светодиода, вращением серводвигателя с помощью платы Arduino Uno.

Необходимые компоненты:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • rotary encoder ky-040
  • светодиоды и резисторы
  • сервомотор
  • макетная плата
  • коннекторы
  • скачать библиотеку RotaryEncoder.h

Encoder Arduino используется для преобразования угла поворота в электрический сигнал. Поворот ручки на модуле создает два сигнала (A и B), которые находятся в противоположной фазе. Исходящий сигнал зависит от направления поворота ручки энкодера — по часовой стрелке или против часовой стрелки. Цифровые и аналоговые порты микроконтроллера могут быть использованы для считывания сигнала A и B.

Encoder Arduino распиновка, характеристики

Характеристики энкодера ky-040 (datasheet)

  • Напряжение питания: 5 В
  • Рабочий ток: 10 мА
  • Импульсов / оборотов: 20
  • Рабочий ресурс: от 15000 оборотов
  • Длина вала: 12 мм

Каждый раз, когда сигнал A переходит от положительного значения к нулю, мы считываем значение сигнала B (смотрите схему с принципом работы модуля). Если сигнал B в это время положительный, то поворотный энкодер вращается по часовой стрелке, если сигнал B равен нулю, то энкодер вращается против часовой стрелки. Таким образом, с помощью микроконтроллера Arduino можно определить направление поворота ручки.

Как подключить энкодер к Arduino Uno

Для работы необходимо установить библиотеку RotaryEncoder.h. Начнем с примера для управления энкодером от Arduino Uno, где вся черновая работа по определению вращения ручки энкодера выполняется с помощью библиотеки RotaryEncoder.h. Мы только выводим данные на монитор порта Arduino IDE. Соберите схему с энкодером, как показано на рисунке выше и загрузите в микроконтроллер Ардуино следующую программу.

Скетч для подключения энкодера к Arduino

Подключение энкодера к Ардуино и светодиодов

Следующий пример позволяет управлять яркостью светодиода с помощью ШИМ-сигнала, включать и выключать второй светодиод нажатием кнопки энкодера. Для этого соберите схему, показанную на картинке выше. Обратите внимание, что порт SW модуля энкодера подключен к контакту 2 микроконтроллера Ардуино. После сборки схемы загрузите следующий код для управления светодиодами с помощью поворотного энкодера.

Скетч для управления светодиодами от энкодера

Управление серво мотором от энкодера Ардуино

На рисунке показано подключение сервопривода и энкодера к Ардуино. Логический провод сервомотора (желтый или оранжевый) подключается к порту 11 микроконтроллера. Программа устанавливает угол поворота сервопривода поворотом ручки модуля ky-040. Работа программы аналогична управлению от потенциометра (переменного резистора), но в случае с энкодером угол micro servo может быть установлен максимально точно.

Ссылка на основную публикацию
Похожее