0. Komponenty i niezbędne programowanie enkodera obrotowego z wałem popychającym

Wymagane komponenty:

{Produkt: 2000} {Produkt: 703}

I. Jak używać modułu obrotowego enkodera z przełącznikiem wciskanym

Enkoder obrotowy to urządzenie generyczne, które umożliwia określenie położenia i prędkości kątowej fizycznie wykonywanego napędu oraz rejestrację pomiaru z procesora lub automatu, takiego jak Arduino .

Enkodery te składają się z dwóch pinów do przycisku (działa jak zwykły przycisk) i trzech pinów do enkodera. Trzy piny enkodera są podłączone jeden do masy, a pozostałe dwa do odpowiednich wejść, które wyznaczamy na płytce Arduino . Te dwa sygnały wychodzące z enkodera dają łącznie 4 kombinacje. 00, 01, 10 i 11. Jest to znane jako 2 bity kodu Graya.

Jeśli potraktujemy piny w kodzie binarnym, odczytujemy je jako 00, 01, 10 lub 11. Sekwencja wyjść enkodera, gdy obrócimy zgodnie z ruchem wskazówek zegara, to 00, 01, 11, 10

II. Eksperymentalne procedury

Połączenie

Moduł zasilany jest bezpośrednio z Arduino , więc nie potrzebujemy zewnętrznego zasilania. Do podłączenia enkodera do Arduino potrzebujemy trzech wejść cyfrowych, dwóch do wykrywania enkodera i dodatkowego, jeśli chcemy nagrywać naciśnięcie dźwigni (SW)

Piny są połączone zgodnie z tabelą:

Moduł pinów

Przypnij przez Arduino UNO

CLK

D2

DT

D3

południowy zachód

D9

+

5V

GND

GND

Kod

Otwórz nowy szkic i skopiuj następujący kod:

const int channelPinA = 9;

const int channelPinB = 10;

unsigned char stateChannelA;

unsigned char stateChannelB;

unsigned char prevStateChannelA = 0;

const int maxSteps = 255;

int prevValue;

wartość int;

const int timeThreshold = 5;

unsigned long currentTime;

unsigned long loopTime;

bool IsCW = true;

void setup () {

Serial.begin (9600);

pinMode (channelPinA, INPUT);

pinMode (channelPinB, INPUT);

currentTime = millis ();

loopTime = currentTime;

wartość = 0;

prevValue = 0;

}

void loop () {

currentTime = millis ();

if (currentTime> = (loopTime + timeThreshold))

{

stateChannelA = digitalRead (channelPinA);

stateChannelB = digitalRead (channelPinB);

if (stateChannelA! = prevStateChannelA) // Dla pojedynczej precyzji if ((! stateChannelA) && (prevStateChannelA))

{

if (stateChannelB) // B jest HIGH, to CW

{

bool IsCW = true;

if (wartość + 1 <= maxSteps) wartość ++; // Upewnij się, że nie przekraczamy maxSteps

}

else // B jest LOW, jest CWW

{

bool IsCW = false;

if (wartość - 1> = 0) wartość = wartość--; // Upewnij się, że nie mamy negatywów

}

}

prevStateChannelA = stateChannelA; // Zapisz wartości na następny

// Jeśli wartość uległa zmianie, pokaż ją

if (prevValue! = wartość)

{

prevValue = wartość;

Serial.print (wartość);

}

loopTime = currentTime; // Czas aktualizacji

}

// Inne zadania

}

Z poziomu Serial Monitor w zakładce Tools możemy obserwować pozycje.