- Wymagane materiały
- Jak działa enkoder obrotowy?
- Rodzaje enkoderów obrotowych
- Pinout i opis enkodera obrotowego KY-040
- Schemat obwodu enkodera obrotowego Arduino
- Programowanie Arduino dla Rotary Encoder
- Współpraca enkodera obrotowego z Arduino
Pokrętło jest urządzeniem wejściowym, który pozwala użytkownikowi na interakcję z systemem. Wygląda bardziej jak potencjometr radiowy, ale generuje ciąg impulsów, co czyni jego zastosowanie wyjątkowym. Kiedy pokrętło Enkodera jest obracane, obraca się w postaci małych kroków, co pomaga w użyciu do sterowania silnikiem krokowym / serwomechanizmem, poruszania się po sekwencji menu, zwiększania / zmniejszania wartości liczby i wielu innych.
W tym artykule dowiemy się o różnych typach enkoderów obrotowych i jak to działa. Połączymy go również z Arduino i będziemy kontrolować wartość liczby całkowitej, obracając Enkoder i wyświetlając jej wartość na ekranie LCD 16 * 2. Pod koniec tego samouczka będziesz mógł swobodnie korzystać z enkodera obrotowego w swoich projektach. Więc zacznijmy…
Wymagane materiały
- Enkoder obrotowy (KY-040)
- Arduino UNO
- 16 * 2 alfanumeryczny wyświetlacz LCD
- Potencjometr 10k
- Płytka prototypowa
- Przewody łączące
Jak działa enkoder obrotowy?
Enkoder obrotowy to przetwornik elektromechaniczny, co oznacza, że przekształca ruchy mechaniczne w impulsy elektroniczne. Składa się z pokrętła, które obracając się, przesuwa się krok po kroku i generuje sekwencję ciągów impulsów o wstępnie zdefiniowanej szerokości dla każdego kroku. Istnieje wiele typów Enkoderów, każdy z własnym mechanizmem pracy. O typach dowiemy się później, ale na razie skupmy się tylko na enkoderze przyrostowym KY040, ponieważ używamy go w naszym tutorialu.
Poniżej przedstawiono wewnętrzną strukturę mechaniczną Enkodera. Zasadniczo składa się z okrągłego dysku (kolor szary) z przewodzącymi podkładkami (kolor miedzi) umieszczonymi na górze tego okrągłego dysku. Te przewodzące podkładki są umieszczone w równej odległości, jak pokazano poniżej. Piny wyjściowe są zamocowane na górze tej okrągłej tarczy w taki sposób, że gdy pokrętło jest obracane, przewodzące podkładki stykają się z pinami wyjściowymi. Tutaj są dwa styki wyjściowe, Wyjście A i Wyjście B, jak pokazano na poniższym rysunku.
Przebieg wyjściowy wytwarzany przez styk wyjściowy A i wyjściowy B jest wyświetlany odpowiednio w kolorze niebieskim i zielonym. Gdy podkładka przewodząca znajduje się bezpośrednio pod pinem, wzrasta ona w czasie, a gdy podkładka przewodząca odsuwa się, pin obniża się, co powoduje czas wyłączenia przebiegu pokazanego powyżej. Teraz, jeśli policzymy liczbę impulsów, będziemy w stanie określić, o ile kroków Enkoder został przesunięty.
Teraz może pojawić się pytanie, po co nam dwa sygnały impulsowe, skoro wystarczy jeden, aby policzyć liczbę kroków wykonanych przy obracaniu pokrętła. Dzieje się tak, ponieważ musimy określić, w którym kierunku obracano pokrętło. Jeśli spojrzysz na dwa impulsy, zauważysz, że oba są przesunięte w fazie o 90 °. Stąd, gdy pokrętło jest obracane zgodnie z ruchem wskazówek zegara, wyjście A przechodzi w stan wysoki jako pierwsze, a gdy pokrętło jest obracane w kierunku przeciwnym do ruchu wskazówek zegara, wyjście B jako pierwsze przechodzi w stan wysoki.
Rodzaje enkoderów obrotowych
Na rynku dostępnych jest wiele typów enkoderów obrotowych, które projektant może wybrać zgodnie z jego zastosowaniem. Najpopularniejsze typy są wymienione poniżej
- Enkoder przyrostowy
- Absolute Encoder
- Enkoder magnetyczny
- Enkoder optyczny
- Enkoder laserowy
Te enkodery są klasyfikowane w oparciu o sygnał wyjściowy i technologię wykrywania, enkoder inkrementalny i enkoder absolutny są klasyfikowane na podstawie sygnału wyjściowego, a enkoder magnetyczny, optyczny i laserowy są klasyfikowane na podstawie technologii wykrywania. Enkodera stosowane tutaj jest typ enkodera przyrostowe.
Pinout i opis enkodera obrotowego KY-040
Poniżej pokazano pinouty enkodera obrotowego typu inkrementalnego KY-040
Pierwsze dwa piny (masa i Vcc) są używane do zasilania enkodera, zwykle używane jest zasilanie + 5V. Enkoder oprócz obracania pokrętła w kierunku zgodnym i przeciwnym do ruchu wskazówek zegara posiada również przełącznik (Aktywny niski), który można wcisnąć wciskając pokrętło wewnątrz. Sygnał z tego przełącznika jest uzyskiwany poprzez pin 3 (Switch). Wreszcie ma dwa piny wyjściowe, które wytwarzają przebiegi, jak już omówiono powyżej. Teraz nauczmy się, jak połączyć go z Arduino.
Schemat obwodu enkodera obrotowego Arduino
Pełny schemat obwodu dla łączenia enkodera obrotowego z Arduino pokazano na poniższym rysunku
Enkoder obrotowy ma 5 pinów w kolejności pokazanej na etykiecie powyżej. Pierwsze dwa piny to Ground i Vcc, które są połączone z uziemieniem i pinem + 5V Arduino. Przełącznik enkodera jest podłączony do cyfrowego pinu D10 i również jest podciągany w górę przez rezystor 1k. Dwa piny wyjściowe są podłączone odpowiednio do D9 i D8.
Aby wyświetlić wartość zmiennej, która zostanie zwiększona lub zmniejszona przez obrót Enkodera obrotowego, potrzebujemy modułu wyświetlacza. Zastosowany tutaj to powszechnie dostępny wyświetlacz LCD 16 * 2 Alpha numeryczny. Podłączyliśmy wyświetlacz do pracy w trybie 4-bitowym i zasililiśmy go za pomocą pinu + 5V Arduino. Potencjometr służy do regulacji kontrastu wyświetlacza LCD. Jeśli chcesz dowiedzieć się więcej o połączeniu wyświetlacza LCD z Arduino, kliknij link. Cały obwód można zbudować na płytce stykowej, po wykonaniu wszystkich połączeń wyglądało to mniej więcej tak jak poniżej.
Programowanie Arduino dla Rotary Encoder
Programowanie płyty Arduino do łączenia z nią enkodera obrotowego jest dość łatwe i proste, jeśli zrozumiałeś zasadę działania enkodera obrotowego. Musimy po prostu odczytać liczbę impulsów, aby określić, ile obrotów wykonał enkoder i sprawdzić, który impuls był pierwszy, aby znaleźć kierunek obrotu enkodera. W tym samouczku wyświetlimy zwiększaną lub zmniejszaną liczbę w pierwszym wierszu LCD, a kierunek Enkodera w drugim wierszu. Kompletny program dla robią to samo można znaleźć na dole tej strony z Demonstracja wideo, nie wymaga żadnej biblioteki. Teraz podzielmy program na małe części, aby zrozumieć działanie.
Ponieważ użyliśmy wyświetlacza LCD, dołączamy bibliotekę ciekłokrystaliczną, która jest domyślnie obecna w Arduino IDE. Następnie definiujemy piny do połączenia LCD z Arduino. Na koniec inicjalizujemy wyświetlacz LCD na tych pinach.
#zawierać
Następnie w funkcji konfiguracji wyświetlamy komunikat wprowadzający na ekranie LCD, a następnie czekamy 2 sekundy, aby komunikat był czytelny dla użytkownika. Ma to na celu zapewnienie prawidłowego działania wyświetlacza LCD.
lcd.print ("Enkoder obrotowy"); // Intro Message line 1 lcd.setCursor (0, 1); lcd.print ("Z Arduino"); // Intro Message line 2 delay (2000); lcd.clear ();
Enkoder obrotowy ma trzy piny wyjściowe, które będą pinami INPUT dla Arduino. Te trzy piny to odpowiednio Przełącznik, Wyjście A i Wyjście B. Są one deklarowane jako wejście za pomocą funkcji pinMode, jak pokazano poniżej.
// deklaracja trybu pin pinMode (Encoder_OuputA, INPUT); pinMode (Encoder_OuputB, INPUT); pinMode (Encoder_Switch, INPUT);
Wewnątrz funkcji void setup odczytujemy stan wyjścia A pin, aby sprawdzić ostatni stan pinezki. Następnie użyjemy tych informacji do porównania z nową wartością, aby sprawdzić, który pin (wyjście A lub wyjście B) osiągnął stan wysoki.
Previous_Output = digitalRead (Encoder_OuputA); // Przeczytaj początkową wartość wyjścia A
Na koniec, wewnątrz funkcji głównej pętli , musimy porównać wartość wyjścia A i wyjścia B z poprzednim wyjściem, aby sprawdzić, które z nich przechodzi w stan wysoki. Można to zrobić, po prostu porównując wartość prądu wyjściowego A i B z poprzednim wyjściem, jak pokazano poniżej.
if (digitalRead (Encoder_OuputA)! = Previous_Output) { if (digitalRead (Encoder_OuputB)! = Previous_Output) { Encoder_Count ++; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("Zgodnie z ruchem wskazówek zegara"); }
W powyższym kodzie drugi warunek jeśli zostanie wykonany, jeśli wyjście B zmieniło się w porównaniu z poprzednim wyjściem. W takim przypadku wartość zmiennej enkodera jest zwiększana, a wyświetlacz LCD pokazuje, że enkoder jest obracany w kierunku zgodnym z ruchem wskazówek zegara . Podobnie, jeśli warunek zawiedzie, w kolejnym warunku else zmniejszamy wartość zmiennej i wyświetlamy, że enkoder jest obrócony w kierunku przeciwnym do ruchu wskazówek zegara . Kod tego samego jest pokazany poniżej.
else { Encoder_Count--; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("Przeciwnie do ruchu wskazówek zegara"); } }
Wreszcie, na końcu głównej pętli musimy zaktualizować poprzednią wartość wyjściową aktualną wartością wyjściową, aby pętla mogła zostać powtórzona z tą samą logiką. Poniższy kod robi to samo
Previous_Output = digitalRead (Encoder_OuputA);
Inną opcjonalną rzeczą jest sprawdzenie, czy przełącznik na Enkoderze jest wciśnięty. Można to monitorować, sprawdzając kołek przełącznika na koderze obrotowym. Ten pin jest aktywnym niskim pinem, co oznacza, że schodzi nisko po naciśnięciu przycisku. Jeśli nie zostanie wciśnięty, pin pozostaje wysoki, zastosowaliśmy również rezystor podciągający, aby upewnić się, że pozostanie wysoki, gdy przełącznik nie jest wciśnięty, unikając w ten sposób stanu zmiennoprzecinkowego.
if (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("Przełącznik wciśnięty"); }
Współpraca enkodera obrotowego z Arduino
Gdy sprzęt i kod są gotowe, po prostu prześlij kod na płytkę Arduino i włącz płytkę Arduino. Możesz go zasilać przez kabel USB lub użyć adaptera 12 V. Po włączeniu LCD powinien wyświetlić komunikat powitalny, a następnie zgaśnie. Teraz obróć obrotowy enkoder i powinieneś zobaczyć, że wartość zaczyna się zwiększać lub zmniejszać w zależności od kierunku, w którym obracasz. Druga linia pokaże, czy enkoder jest obracany w kierunku zgodnym lub przeciwnym do ruchu wskazówek zegara. Poniższe zdjęcie pokazuje to samo
Również po naciśnięciu przycisku w drugim wierszu zostanie wyświetlona informacja o naciśnięciu przycisku. Całość pracy można znaleźć na poniższym filmie. To tylko przykładowy program do połączenia Enkodera z Arduino i sprawdzenia, czy działa zgodnie z oczekiwaniami. Gdy już tu dotrzesz, powinieneś być w stanie użyć kodera do dowolnego projektu i odpowiednio zaprogramować.
Mam nadzieję, że zrozumiałeś samouczek i wszystko działało tak, jak powinno. Jeśli masz jakiekolwiek problemy, skorzystaj z sekcji komentarzy lub forum, aby uzyskać pomoc techniczną.