Mobile
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łycie 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
Połączenie
Moduł zasilany jest bezpośrednio z Arduino , więc nie potrzebujemy zewnętrznego zasilania. Aby podłączyć enkoder 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
D4
+
5V
GND
Arduino 5 i 6 Arduino idą do anod (+) odpowiednich diod LED, a ich katody do wspólnej masy, która trafi do portu GND Arduino . Pamiętaj, że wszystkie masy muszą być zjednoczone.
Konfiguracja bez rezystorów szeregowych wyglądałaby tak:
Kod
Otwórz nowy szkic i skopiuj następujący kod:
const int przerwanieA = 0; // Przerwij 0
const int przerwanieB = 1; // Przerwanie 1
int CLK = 2; // PIN2
int DAT = 3; // PIN3
int BUTTON = 4; // PIN4
int LED1 = 5; // PIN5
int LED2 = 6; // PIN6
int COUNT = 0;
void setup ()
{
attachInterrupt (przerwanieA, RoteStateChanged, FALLING);
// attachInterrupt (przerwanieB, buttonState, FALLING);
pinMode (CLK, INPUT);
digitalWrite (2, WYSOKI); // Pull High Restance
pinMode (DAT, INPUT);
digitalWrite (3, WYSOKI); // Pull High Restance
pinMode (PRZYCISK, WEJŚCIE);
digitalWrite (4, WYSOKI); // Pull High Restance
pinMode (LED1, OUTPUT);
pinMode (LED2, OUTPUT);
Serial.begin (9600);
}
void loop ()
if (! (digitalRead (BUTTON)))
LICZBA = 0;
Serial.println ("STOP COUNT = 0");
digitalWrite (LED1, LOW);
digitalWrite (LED2, LOW);
opóźnienie (2000);
Serial.println (COUNT);
// -------------------------------------------
void RoteStateChanged () // Gdy CLK FALLING READ DAT
if (digitalRead (DAT)) // Gdy DAT = HIGH IS FORWARD
COUNT ++;
digitalWrite (LED1, HIGH);
opóźnienie (20);
else // When DAT = LOW IS BackRote
LICZYĆ--;
digitalWrite (LED2, HIGH);
Możesz zobaczyć, jak zmienia się poziom diod LED podczas obracania dźwigni.