====== Модуль энкодера KY-040 ======
===== Описание =====
Энкодер (или датчик угла поворота) - устройство, которое нужно для преобразования угла поворота в электрический сигнал. Таким образом можно определить угол его поворота. Энкодеры очень широко применяются в различных видах устройств. Они применяются в сервоприводах, робототехнике, электронике, машиностроении. Энкодеры бывают двух типов: абсолютные и накапливающие:
  * Абсолютные - позволяют определить угол поворота непосредственно по положению вала датчика. Основным отличием данного типа датчиков является то, что что уже при включении они могут определить угол поворота.
  * Накапливающие - формируют импульсы, по числу которых можно определить положение вала. Сразу же после включения положение вала такого типа датчиков неизвестно.

Рассматриваемый энкодер относится к датчикам накапливающего типа.

==== Физические размеры ====
  * Модуль (Д х Ш х В): 31 х 19 х 31 мм

==== Плюсы использования ====
  * Удобен для использования в проектах с определением угла поворота
  * В энкодер встроена кнопка

==== Минусы использования ====
  * В датчиках данного типа невозможно определить угол поворота сразу же после включения

==== Библиотека для работы с модулем ====
  * [[http://files.smartelements.ru/know_libs/encoder.zip|Скачать (encoder)]]


//Внимание! При использовании данных модулей в том числе и для определения нажатия кнопки, необходимо дополнительное использование резистора на 10 кОм.//

===== Примеры подключения и использования =====
**Пример 1:** В примере иллюстрируется подключение модуля энкодера к контроллеру, и определение текущего значения поворота. Значение поворота выводится в монитор Serial - порта. (Примеры тестировались на контроллере Smart UNO)

^ Что нужно                                                                                                               ^  Кол-во, шт  ^
| [[http://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|Контроллер Smart UNO]]                            |  1           |
| [[http://smartelements.ru/collection/moduli/product/modul-enkodera-ky-040|Модуль энкодера KY-040]]                      |  1           |
| [[http://smartelements.ru/collection/provoda-i-kabeli/product/nabor-provodov-20-sht-20sm-papa-mama|Провода папа-мама]]  |  4           |


**Схема подключения:**
{{ главная:модули:enkoder_ex1.jpg |}}

**Скетч для загрузки:**
<file Arduino>
//Подключение библиотеки для энкодера
#include <Encoder.h>

//пины
const int CLK_PIN = 10;
const int DT_PIN = 9;


long position  = -999; //установка значения переменной для хранения текущей позиции 

//создание объекта типа Экнеодер
Encoder myEnc(DT_PIN, CLK_PIN);

void setup() {
  Serial.begin(9600); //инициализация Serial-порта
}



void loop() {
  long newPosition = myEnc.read(); //считать новую позицию
  if (newPosition != position) { //если значение отличается от старого
    position = newPosition; //установить новое текущее значение
    Serial.println(position); //вывести значение в Serial - порт
  }
  // Если в код добавить существенную задержку,
  // Энкодер сможет отследить только очень медленное движение.
  // Для проверки, можно раскомментировать нижнюю строчку:

  //delay(50);
}
</file>

**Пример 2:** В примере иллюстрируется подключение модуля энкодера к контроллеру, и определение текущего значения поворота. Также проверяется нажатие кнопки энкодера. Значения поворота и нажатия кнопки выводятся в монитор Serial - порта. (Примеры тестировались на контроллере Smart UNO)

^ Что нужно                                                                                                               ^ Кол-во, шт  ^
| [[http://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|Контроллер Smart UNO]]                            |  1           |
| [[http://smartelements.ru/collection/moduli/product/modul-enkodera-ky-040|Модуль энкодера KY-040]]                      |  1           |
| [[http://smartelements.ru/collection/provoda-i-kabeli/product/nabor-provodov-20-sht-20sm-papa-mama|Провода папа-мама]]  |  5           |
| [[http://smartelements.ru/collection/provoda-i-kabeli/product/nabor-provodov-20-sht-20sm-papa-papa|Провода папа-папа]]  |  2           |
| [[http://smartelements.ru/collection/radiodetali/product/nabor-rezistorov|Резистор 10 кОм]]                             |  1           |
| [[http://smartelements.ru/collection/raznoe/product/maketnaya-plata-mini|Макетная плата мини]]                          |  1           |

**Схема подключения:**
{{ главная:модули:enkoder_ex2.jpg |}}

**Скетч для загрузки:**
<file Arduino>
//Подключение библиотеки для энкодера
#include <Encoder.h>

//пины
const int CLK_PIN = 10;
const int DT_PIN = 9;
const int SW_PIN = 8;

long position  = -999; //установка значения переменной для хранения текущей позиции 

//создание объекта типа Экнеодер
Encoder myEnc(DT_PIN, CLK_PIN);

void setup() {
  Serial.begin(9600); //инициализация Serial-порта
}



void loop() {
  long newPosition = myEnc.read(); //считать новую позицию
  if (newPosition != position) { //если значение отличается от старого
    position = newPosition; //установить новое текущее значение
    Serial.println(position); //вывести значение в Serial - порт
  }
  
  // Если в код добавить существенную задержку,
  // Энкодер сможет отследить только очень медленное движение.
  // Для проверки, можно раскомментировать нижнюю строчку:

  //delay(50);

  if (digitalRead(SW_PIN) == LOW) { //проверка нажатия на кнопку
    Serial.println("Pressed"); //вывод сообщения
  }
  
}
</file>