Увеличить
Модуль энкодера
ВВЕДЕНИЕ
Модуль энкодера представляет собой небольшую платку с установленным на ней вращающимся переключателем и пяти контактным разъемом.
Энкодер содержит внутри две пары контактов. При вращении ручки, первая пара контактов замыкается чуть раньше второй пары, соответственно размыкается тоже чуть раньше второй пары. Такая особенность расположения контактов позволяет определить, в какую сторону происходит вращение ручки. Заодно можно подсчитать, сколько оборотов сделала ручка. Если известно, сколько всего импульсов поступило с контактов валкодера и известно, сколько импульсов на один оборот ручки имеет сам валкодер.
Данный тип валкодера имеет 20 импульсов на один оборот ручки.
ПАРАМЕТРЫ
- Управляющее напряжение: 4,8 - 6 Вольт DC
- Крутящий момент: 1,6 кг/см
- Угол поворота: 0 - 180 Гр
- Размер: 21,5х11.8х22,7 мм
- Вес: 9 грамм
ПРИМЕР КОДА
int redPin = 2; int yellowPin = 3; int greenPin = 4; int aPin = 6; int bPin = 7; int buttonPin = 5; int state = 0; int longPeriod = 5000; // Time at green or red int shortPeriod = 700; // Time period when changing int targetCount = shortPeriod; int count = 0; void setup () { pinMode (aPin, INPUT); pinMode (bPin, INPUT); pinMode (buttonPin, INPUT); pinMode (redPin, OUTPUT); pinMode (yellowPin, OUTPUT); pinMode (greenPin, OUTPUT); } void loop () { count++; if (digitalRead (buttonPin)) { setLights (HIGH, HIGH, HIGH); } else { int change = getEncoderTurn (); int newPeriod = longPeriod + (change * 1000); if (newPeriod >= 1000 && newPeriod <= 10000) { longPeriod = newPeriod; } if (count> targetCount) { setState (); count = 0; } } delay (1); } int getEncoderTurn () { // Return -1, 0, or +1 static int oldA = LOW; static int oldB = LOW; int result = 0; int newA = digitalRead (aPin); int newB = digitalRead (bPin); if (newA != oldA || newB != oldB) { //Something has changed if (oldA == LOW && newA == HIGH) { result = - (oldB * 2 - 1); } } oldA = newA; oldB = newB; return result; } int setState () { if (state == 0) { setLights (HIGH, LOW, LOW); targetCount = longPeriod; state = 1; } else if (state == 1) { setLights (HIGH, HIGH, LOW); targetCount = shortPeriod; state = 2; } else if (state == 2) { setLights (LOW, LOW, HIGH); targetCount = longPeriod; state = 3; } else if (state == 3) { setLights (LOW, HIGH, LOW); targetCount = shortPeriod; state = 0; } } void setLights (int red, int yellow, int green) { digitalWrite (redPin, red); digitalWrite (yellowPin, yellow); digitalWrite (greenPin, green); }
КОМПЛЕКТ
- Модуль энкодера x1
Метки: #encoders #arduino