Enkoder obrotowy - impulsator - jest doskonałym urządzeniem wejściowym do sterowania np. menu w interfejsie urządzenia. W poniższym tutorialu opiszemy, jak wykorzystać typowy impulsator w połączeniu z modułem Arduino.
Krok 1. Obejrzyj film
Jeśli nie chce Ci się czytać całego poniższego tekstu, a język angielski nie jest dla Ciebie problemem, to obejrzyj poniższy film - z pewnością pomoże Ci on zrozumieć, w jaki sposób podłączyć impulsator i oprogramować Arduino, by całość wspólnie działała.
Krok 2. Wstęp
Enkoder taki to urządzenie elektromechaniczne, który tłumaczy pozycję kątową lub ruch obrotowy osi na cyfrowy lub analogowy sygnał wyjściowy. Istnieją dwa rodzaje enkoderów obrotowych:
1) Absolutny - stan wyjścia tego enkodera odpowiada dokładnie bezwzględnej pozycji osi. W ten sposób jest on przetwornikiem kąta.
2) Inkrementalny - sygnały na wyjściu tego enkodera odpowiadają ruchom osi, więc obliczana na ich podstawie pozycja jest względna. Przetwarzanie tych sygnałów na dane na temat pozycji, prędkości obrotowej etc. realizowane jest zawsze zdalnie.
Krok 3. Czym jest inkrementalny enkoder obrotowy
Enkoder inkrementalny podaje informacje na temat zmiany pozycji i jej kierunku (obrót zgodnie i przeciwnie do kierunku ruchu wskazówek zegara). W wielu aplikacjach taka funkcjonalność jest kluczowa, jednakże element ten nie śledzi pozycji bezwzględnej. Z uwagi na to w niektórych zastosowaniach enkodera może być konieczna inicjalizacja go poprzez przemieszczenie go do jakiejś znanej, ustalonej pozycji.
Krok 4. Budowa i zasada działania
Przykładowy enkoder, jaki wykorzystamy w tutorialu, posiada wbudowane wszystkie potrzebne rezystory podciągające linie I/O. Element ten posiada pięć pinów wyjściowych:
Zegar, Dane, Przełącznik, Vcc, GND.
Budowa
Pokrętło, którym kręcimy, jest wewnętrznie połączone z dyskiem wewnątrz enkodera. Będzie się on ruszał zgodnie z lub przeciwnie do ruchu wskazówek zegara, tak samo jak pokrętło, którym obraca użytkownik. Na powierzchni tego dysku znajdują się pola podłączone do linii zasilania. Pozostała część dysku znajduje się na potencjale masy. Nad dyskiem znajdują się dwa styki przesunięte względem siebie o określoną odległość - to wyprowadzenia Zegara oraz Danych.
Zasada działania
W momencie gdy obracamy enkoderem stan wyjść będzie zmieniał się wraz z położeniem dysku w enkoderze. Na wyjściu Zegarowym i Danych możemy zaobserwować w takiej sytuacji ciągi impulsów.
Jeśli spojrzymy na te impulsy, to możemy dostrzec, że są one przesunięte w fazie o 90 stopni. Jeśli enkoder obraca się zgodnie z kierunkiem wskazówek zegara, to impulsy na wyjściu zegarowym będą pierwsze, a jeżeli enkoder obraca się w drugą stronę, to pierwszy impuls pokaże się na wyjściu danych.
Analizując zmianę stanów na tych dwóch wyjściach, można natychmiastowo ocenić, w którą stronę obraca się pokrętło enkodera. Spróbujmy teraz zrealizować tą analizę programowo w Arduino.
Krok 5. Oprogramowanie
Przykład 1: (Counter.ino)
W tym przykładzie pin zegarowy podłączony jest do pinu 3, a pin danych do pinu 4. Do pinu 5 podłączyliśmy przełącznik, który aktywuje się, gdy naciśniemy enkoder.
W powyższym programie najpierw zdefiniowaliśmy szereg zmiennych oraz ustawiliśmy piny, do których podłączono enkoder jako piny wejściowe. Finalnie uruchomiono port szeregowy, który wykorzystamy do komunikacji i przesyłania danych.
Następnie uruchamiana jest główna pętla programu. To tutaj odczytujemy stan wejść enkodera. Obecny stan zapisywany jest do zmiennej state. Jeśli w którejkolwiek iteracji state != state to znaczy, że enkoder się obrócił. Następnie, jeżeli data != state to znaczy, że enkoder obrócił się zgodnie z kierunkiem wskazówki zegara, a przeciwnie jeśli zmienne są równe. Te impulsy z enkodera będą odpowiednio zwiększać i zmniejszać licznik.
Aktualna wartość licznika jest następnie przesyłana poprzez interfejs szeregowy. Jeśli naciśnięty zostanie przycisk, to licznik zostanie wyzerowany, a nowa wartość także przesłana poprzez port szeregowy.
Na końcu pętli nowy stan zapisywany jest do zmiennej state i cały cykl może rozpocząć się od nowa.
Przykład 2: (LEDBrightness.ino)
W tym przypadku, będącym modyfikacją pierwszego programu, wartość licznika wykorzystana jest do sterowania jasnością diody poprzez PWM. Wartość licznika zamiast na interfejs UART kierowana jest do funkcji analogWrite. Należy tylko ograniczyć wartość licznika do wartości od 0 do 255, gdyż takie wartości przyjmuje zmienna kontrolująca wypełnienie PWMa.
I tylko tyle potrzebne jest, aby w najprostszy sposób obsłużyć enkoder obrotowy - impulsator w naszym urządzeniu. Czy Wy korzystacie w swoich projektach z takiego elementu? Pochwalcie się swoimi implementacjami i urządzeniami, niekoniecznie opartymi o moduły Arduino.
Źródło: https://www.instructables.com/id/How-to-Use-an-Rotary-Encoder-With-Arduino/
Krok 1. Obejrzyj film
Jeśli nie chce Ci się czytać całego poniższego tekstu, a język angielski nie jest dla Ciebie problemem, to obejrzyj poniższy film - z pewnością pomoże Ci on zrozumieć, w jaki sposób podłączyć impulsator i oprogramować Arduino, by całość wspólnie działała.
Krok 2. Wstęp
Enkoder taki to urządzenie elektromechaniczne, który tłumaczy pozycję kątową lub ruch obrotowy osi na cyfrowy lub analogowy sygnał wyjściowy. Istnieją dwa rodzaje enkoderów obrotowych:
1) Absolutny - stan wyjścia tego enkodera odpowiada dokładnie bezwzględnej pozycji osi. W ten sposób jest on przetwornikiem kąta.
2) Inkrementalny - sygnały na wyjściu tego enkodera odpowiadają ruchom osi, więc obliczana na ich podstawie pozycja jest względna. Przetwarzanie tych sygnałów na dane na temat pozycji, prędkości obrotowej etc. realizowane jest zawsze zdalnie.
Krok 3. Czym jest inkrementalny enkoder obrotowy
Enkoder inkrementalny podaje informacje na temat zmiany pozycji i jej kierunku (obrót zgodnie i przeciwnie do kierunku ruchu wskazówek zegara). W wielu aplikacjach taka funkcjonalność jest kluczowa, jednakże element ten nie śledzi pozycji bezwzględnej. Z uwagi na to w niektórych zastosowaniach enkodera może być konieczna inicjalizacja go poprzez przemieszczenie go do jakiejś znanej, ustalonej pozycji.
Krok 4. Budowa i zasada działania
Przykładowy enkoder, jaki wykorzystamy w tutorialu, posiada wbudowane wszystkie potrzebne rezystory podciągające linie I/O. Element ten posiada pięć pinów wyjściowych:
Zegar, Dane, Przełącznik, Vcc, GND.
Budowa
Pokrętło, którym kręcimy, jest wewnętrznie połączone z dyskiem wewnątrz enkodera. Będzie się on ruszał zgodnie z lub przeciwnie do ruchu wskazówek zegara, tak samo jak pokrętło, którym obraca użytkownik. Na powierzchni tego dysku znajdują się pola podłączone do linii zasilania. Pozostała część dysku znajduje się na potencjale masy. Nad dyskiem znajdują się dwa styki przesunięte względem siebie o określoną odległość - to wyprowadzenia Zegara oraz Danych.
Zasada działania
W momencie gdy obracamy enkoderem stan wyjść będzie zmieniał się wraz z położeniem dysku w enkoderze. Na wyjściu Zegarowym i Danych możemy zaobserwować w takiej sytuacji ciągi impulsów.
Jeśli spojrzymy na te impulsy, to możemy dostrzec, że są one przesunięte w fazie o 90 stopni. Jeśli enkoder obraca się zgodnie z kierunkiem wskazówek zegara, to impulsy na wyjściu zegarowym będą pierwsze, a jeżeli enkoder obraca się w drugą stronę, to pierwszy impuls pokaże się na wyjściu danych.
Analizując zmianę stanów na tych dwóch wyjściach, można natychmiastowo ocenić, w którą stronę obraca się pokrętło enkodera. Spróbujmy teraz zrealizować tą analizę programowo w Arduino.
Krok 5. Oprogramowanie
Przykład 1: (Counter.ino)
Kod: C / C++
W tym przykładzie pin zegarowy podłączony jest do pinu 3, a pin danych do pinu 4. Do pinu 5 podłączyliśmy przełącznik, który aktywuje się, gdy naciśniemy enkoder.
W powyższym programie najpierw zdefiniowaliśmy szereg zmiennych oraz ustawiliśmy piny, do których podłączono enkoder jako piny wejściowe. Finalnie uruchomiono port szeregowy, który wykorzystamy do komunikacji i przesyłania danych.
Następnie uruchamiana jest główna pętla programu. To tutaj odczytujemy stan wejść enkodera. Obecny stan zapisywany jest do zmiennej state. Jeśli w którejkolwiek iteracji state != state to znaczy, że enkoder się obrócił. Następnie, jeżeli data != state to znaczy, że enkoder obrócił się zgodnie z kierunkiem wskazówki zegara, a przeciwnie jeśli zmienne są równe. Te impulsy z enkodera będą odpowiednio zwiększać i zmniejszać licznik.
Aktualna wartość licznika jest następnie przesyłana poprzez interfejs szeregowy. Jeśli naciśnięty zostanie przycisk, to licznik zostanie wyzerowany, a nowa wartość także przesłana poprzez port szeregowy.
Na końcu pętli nowy stan zapisywany jest do zmiennej state i cały cykl może rozpocząć się od nowa.
Przykład 2: (LEDBrightness.ino)
Kod: C / C++
W tym przypadku, będącym modyfikacją pierwszego programu, wartość licznika wykorzystana jest do sterowania jasnością diody poprzez PWM. Wartość licznika zamiast na interfejs UART kierowana jest do funkcji analogWrite. Należy tylko ograniczyć wartość licznika do wartości od 0 do 255, gdyż takie wartości przyjmuje zmienna kontrolująca wypełnienie PWMa.
I tylko tyle potrzebne jest, aby w najprostszy sposób obsłużyć enkoder obrotowy - impulsator w naszym urządzeniu. Czy Wy korzystacie w swoich projektach z takiego elementu? Pochwalcie się swoimi implementacjami i urządzeniami, niekoniecznie opartymi o moduły Arduino.
Źródło: https://www.instructables.com/id/How-to-Use-an-Rotary-Encoder-With-Arduino/
Fajne? Ranking DIY