Подключение к ардуино датчика вращения енкодер KY-040



Описание работы енкодера Поворотный энкодер имеет фиксированное число позиций на оборот. Эти позиции легко ощущаются руками как небольшие щелчки при повороте оси энкодера. Данный модуль энкодера имеет тридцать таких позиций. Количество таких позиций характеризует чувствительность датчика вращения.


У отдельного датчика имеются три вывода. Они обычно обозначаются как A, B и C. В случае KY-040, они ориентированы так, как показано на рисунке. Внутри энкодера есть два переключателя. Первый переключатель соединяет вывод А с выводом С, а второй соединяет вывод B с выводом C. В каждом фиксированном положении датчика, оба переключателя или открыты или закрыты. Каждый клик означает переключение состояния переключателей следующим образом: Если оба переключателя замкнуты, поворачивая ось по часовой стрелке или против часовой стрелки на одну позицию переведет оба переключателя на размыкание Если оба разомкнуты, поворачивая ось по часовой стрелке или против часовой стрелки на одну позицию переведет оба переключателя в закрытое состояние. На приведенном ниже рисунке показано расположение переключателей.


Как вы можете видеть, угловое положение контакта A и контакта B такое, что: вращающаяся пластинка по часовой стрелке соединит контакты А и С. Вращающаяся пластина против часовой стрелки соединит контакты В и С. Представим на графике переходные характеристики контактов при равномерном вращении пластины.


Определив то, какая пара контактов изменяет свое состояние первой, узнаем направление вращения вала. Если контакт А изменяет состояние первым, то вал вращается в направлении по часовой стрелке. Если же контакт B изменяет свое состояние первым, то вал энкодера вращается в направлении против часовой стрелки.


Выводы KY-040

На следующем рисунке показано назначение выводов данного ротационного энкодера.


Модуль сконструирован таким образом, что низкий логический уровень появляется, когда контакты замкнуты, и высокий, когда контакты разомкнуты. Низкий сигнал генерируется путем замыкания контакта C на общий провод, а так же ноль подается в это время и на выводы CLK и DT, когда переключатель замкнут. Высокий уровень генерируется подачей напряжения питания 5В через подтягивающий резистор. При этом на выходах CLK и DT будут единицы, когда контакты энкодера разомкнуты. Так же у данного енкодера имеется кнопка, расположенная в начале вала, и она является его неотемлемой частью. Если нажать на вал, то нормально открытый контакт кнопки замкнется. Это может быть полезно для программного увеличения или уменьшения чувствительности датчика, а так же для выбора пунктов меню, если использовать енкодер как устройство ввода настроек меню.


Схема ротационного енкодера

Схема рассматриваемого модуля приведена ниже. R2 и R3 на схеме выполняют функцию подтягивающих резисторов.



Схема подключения енкодера KY-040

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

Очень медленно вращайте вал датчика угла поворота как по часовой стрелке так и против часовой стрелки. И следите за переключением светодиодов реагирующих на вращение вала.

Подключение модуля к Arduino

Тут всё максимально просто. Все, что вам нужно сделать, это подключить четыре провода к модулю.


Пример программы для Arduino

int pinA = 3;  // номер вывода, подключенный к CLK енкодера
 int pinB = 4;  // номер вывода контроллера, подключенный к DT енкодера
 int encoderPosCount = 0; 
 int pinALast;  
 int aVal;
 boolean bCW;

 void setup() { 
   pinMode (pinA,INPUT);
   pinMode (pinB,INPUT);
   /* Считываем значение на выводе A и запоминаем его как последнее значение на этом выводе */
   pinALast = digitalRead(pinA);   
   Serial.begin (9600);
 } 

 void loop() { 
   aVal = digitalRead(pinA);
   if (aVal != pinALast){ // проверка на изменение значения на выводе А по сравнению с предыдущим запомненным, что означает, что вал повернулся
     // а чтобы определить направление вращения, нам понадобится вывод В.
     if (digitalRead(pinB) != aVal) {  // Если вывод A изменился первым - вращение по часовой стрелке
       encoderPosCount ++;
       bCW = true;
     } else {// иначе B изменил свое состояние первым - вращение против часовой стрелки
       bCW = false;
       encoderPosCount--;
     }
     Serial.print ("Вращение: ");
     if (bCW){
       Serial.println ("по часовой стрелке");
     }else{
       Serial.println("против часовой стрелки");
     }
     Serial.print("Положение енкодера: ");
     Serial.println(encoderPosCount);
   } 
   pinALast = aVal;
 } 

Похожие статьи

Arduino - что это такое? Популярно для начинающих

Arduino - что это такое? Популярно для начинающих

Arduino это недорогая, доступная в смысле покупки электронная плата с микроконтроллером и выводами входов-выходов. Arduino выпускаются в различных версиях, но поддерживают один и тот же, простой язык программирования. Огромный успех Ардуино, с уважением к другим микроконтроллерам, связан с тем, что аппаратное и программное обеспечение были опубликованы в открытом бесплатном для общего пользования виде: вы можете читать, изучать и даже расширять его возможности как в плане программного обеспечения, так и с точки зрения аппаратных средств. Вся информация об Ардуино доступна под лицензией "Creative Commons Attribution-ShareAlike 3.0 License".

Выбор шагового двигателя

Выбор шагового двигателя

Вам уже приходилось делать выбор между разными шаговыми двигателями для реализации своих амбициозных проектов? Зачастую у новичков существует миф, что NEMA 17 слабые и ни на что не годные шаговики, а для 3D-принтера обязательно нужен как минимум NEMA 23, а то и дороже. Давайте попробуем разобраться какие критерии всё-таки должны учитываться при правильном выборе шагового двигателя. Если на них не обращать внимание, а просто надеяться на свой инстинкт потребителя, то в результате можно сильно разочароваться. К примеру можно купить как бы обычный двигатель NEMA 17 и стандартный драйвер рекомендуемый под него, но получить постоянно перегревающуюся микросхему драйвера и невозможность нормальной работы проекта.

Посмотрим для начала какой выбор нам предоставляют самые доступные поставщики шаговых двигателей.


Arduino и шаговый двигатель

Arduino и шаговый двигатель

Перед началом очередного проекта на Arduino, было решено использовать шаговый двигатель Nema 17 из-за отличного соотношения цена/качество. Перед подключением Nema 17, за плечами был определенный опыт работы с шаговиком 24byj48 (даташит). Управлялся он и с помощью Arduino, и с помощью Raspberry pi, проблем не возникало. Основная прелесть этого двигателя - цена (около 3 долларов в Китае). Причем, за эту сумму вы приобретаете двигатель с драйвером в комплекте. Согласитесь, такое можно даже и спалить, не особо сожалея о содеянном.

Серводвигатель MG995 и Arduino ,подключение,распиновка + код

Серводвигатель MG995 и Arduino ,подключение,распиновка + код

Серводвигатель MG995 и Arduino

Серводвигатель MG995 поставляется с проводом длиной 30 см и 3-мя ‘S’ контактами типа мама. Выходной вал сервопривода поворачивается приблизительно на 120 градусов (60 градусов в каждом направлении). Для управления сервами MG995 можно использовать любые контроллеры с питанием логики 5 В, в том числе и Arduino.

Сервомашинка изготавливается в пластиковом корпусе. На выходе стоит редуктор с металлическими шестернями. В комплекте поставляются пластиковые качалки различных форм-факторов.

Подключение часов реального времени DS1302  к Arduino и дисплея 1602 i2C  - часы на ардуино !

Подключение часов реального времени DS1302 к Arduino и дисплея 1602 i2C - часы на ардуино !

Общее описание:

Микросхема DS1302 содержит часы реального времени с календарем и 31 байт статического ОЗУ. Она общается с микропроцессором через простой последовательный интерфейс. Информация о реальном времени и календаре представляется в секундах минутах, часах, дне, дате, месяце и годе. Если текущий месяц содержит менее 31 дня, то микросхема автоматически определит количество дней в месяце с учетом высокосности текущего года. Часы работают или в 24-часовом или 12-часовом формате с индикатором AM/PM (до полудня/ после полудня)

Теги: Подключение к ардуино датчика вращения енкодер KY-040