Spisu treści:
Wideo: Rotary Encoder - Zrozum i używaj (Arduino/inny Kontroler): 3 kroki
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:29
Enkoder obrotowy to urządzenie elektromechaniczne, które przekształca ruch obrotowy na informacje cyfrowe lub analogowe. Może obracać się zgodnie z ruchem wskazówek zegara lub przeciwnie do ruchu wskazówek zegara. Istnieją dwa rodzaje enkoderów obrotowych: enkodery absolutne i względne (przyrostowe).
Podczas gdy enkoder absolutny wyprowadza wartość proporcjonalną do aktualnego kąta wału, enkoder inkrementalny wyprowadza krok wału i jego kierunek (w tym przypadku mamy enkoder inkrementalny)
Enkodery obrotowe stają się coraz bardziej popularne, ponieważ w jednym module elektrycznym można korzystać z dwóch funkcji: prostego przełącznika do potwierdzania operacji oraz enkodera obrotowego do nawigacji m.in. poprzez menu.
Przyrostowy enkoder obrotowy generuje dwa sygnały wyjściowe, gdy jego wał się obraca. W zależności od kierunku jeden z sygnałów prowadzi drugi. (patrz poniżej)
Krok 1: Zrozumienie danych wyjściowych
Jak widać, kiedy wałek enkodera zaczyna się obracać zgodnie z ruchem wskazówek zegara, wyjście A najpierw spada na LOW, a wyjście B podąża za nim. W kierunku przeciwnym do ruchu wskazówek zegara operacja obraca się w przeciwnym kierunku.
Teraz musimy tylko zaimplementować to na naszym µControllerze (użyłem Arduino Nano).
Krok 2: Zbuduj obwód
Jak opisałem wcześniej, wyjścia tworzą bok WYSOKI i NISKI. Aby uzyskać czyste WYSOKIE na pinach danych A i B µControllera, musimy dodać rezystory Pull-Up. Wspólny Pin C idzie prosto do ziemi na NISKIM boku.
Do uzyskania informacji o wewnętrznym przełączniku (przycisku) wykorzystamy pozostałe dwa piny. Jeden z nich trafia do VCC, a drugi do pinu danych mikrokontrolera. Musimy również dodać rezystor Pull-Down do pinu danych, aby uzyskać czysty LOW.
Możliwe jest również użycie wewnętrznych rezystorów Pull-Up i Pull-Down swojego mikrokontrolera!
W moim przypadku pinout wygląda tak:
- +3, 3V => +3, 3V (Arduino)(możliwe również +5V)
- GND => GND (Arduino)
- A => Pin10
-
B =>
Szpilka
11
- C => GND
-
SW =>
Szpilka
12
Krok 3: Pisanie kodu
int pinA = 10; //przełącznik wewnętrzny A int pinB = 11; //włącznik wewnętrzny B int pinSW = 12; //przełącznik (wciśnięty koder) int encoderPosCount = 0; // zaczyna się od zera, zmień jeśli chcesz
int pozycyjny;
bool switchval; int mrotateOstatni; wewn. rotacja;
pusta konfiguracja () {
int mrotateLast = digitalRead(pinA); Serial.początek (9600); opóźnienie(50); }
void loop() { readencoder(); if(readswitch() == 1){ Serial.println("Przełącznik = 1"); } }
int readenkoder (){
mrotate = digitalRead(pinA); if (mrotate != mrotateLast){ //pokrętło obraca się if (digitalRead(pinB) != mrotate) { //przełącznik A zmieniono jako pierwszy -> obracanie zgodnie z ruchem wskazówek zegara encoderPosCount ++; Serial.println ("obrócony zgodnie z ruchem wskazówek zegara"); } else {// przełącznik B zmienił się jako pierwszy -> obracanie w kierunku przeciwnym do ruchu wskazówek zegara PosCount--; Serial.println ("obrócony przeciwnie do ruchu wskazówek zegara"); }
Serial.print("Pozycja kodera: "); Serial.println(liczbaPoz kodera); Serial.println(""); } mrotateLast = mrotate; koder powrotuPosCount; } bool przełącznik odczytu(){
if(digitalRead(pinSW)!=0){ //przełącznik jest wciśnięty
while(digitalRead(pinSW)!=0){} //przełącznik jest aktualnie wciśnięty switchval = 1; } else{switchval = 0;} //switch jest nienaciśnięty return switchval; }
Teraz możesz obrócić enkoder, a zmienna encoderPosCount będzie odliczać w górę, jeśli obrócisz się zgodnie z ruchem wskazówek zegara, i odlicz w dół, jeśli obrócisz się w kierunku przeciwnym do ruchu wskazówek zegara.
Otóż to! Prosto i pożytecznie.
Zapraszam do zmiany i wykonania kodu. Możesz to zaimplementować w swoim projekcie.
Prześlę również projekt LED, w którym użyłem enkodera do ustawienia jasności moich diod LED.
Zalecana:
Obiektyw makro do majsterkowania z AF (inny niż wszystkie inne obiektywy makro do majsterkowania): 4 kroki (ze zdjęciami)
Zrób to sam obiektyw makro z AF (inny niż wszystkie inne obiektywy makro do majsterkowania): Widziałem wielu ludzi robiących obiektywy makro za pomocą standardowego obiektywu kitowego (zwykle 18-55 mm). Większość z nich to obiektyw po prostu przyklejony do aparatu tyłem lub zdjęta przednia soczewka. Obie te opcje mają wady. Do montażu obiektywu
Nie kupuj modułu GSM, używaj starego telefonu!: 6 kroków
Nie kupuj modułu GSM, używaj starego telefonu!: Ostatnio robiłem wiele projektów bezprzewodowych, głównie opartych na module Bluetooth, ale od tego czasu chciałem przejść dalej i zacząć tworzyć projekty SMS-em lub Sterowanie rozmowami telefonicznymi, które jest prawie tak samo proste za pomocą modułu GSM
Jak emulować pilota telewizora lub inny za pomocą Arduino Irlib: 3 kroki (ze zdjęciami)
Jak emulować pilota telewizyjnego lub innego za pomocą Arduino Irlib: WprowadzenieCześć wszystkim i witam w moim pierwszym Instructable.Dzisiaj nauczymy się, jak mówi tytuł, emulować pilota telewizora lub coś podobnego, które działa z sygnałami podczerwieni za pomocą Arduino (dowolny model) .Problem polegał na tym, że jak mogę przekazać kody do
UŻYWAJ SWOJEGO GPS GARMIN E-TREX LEGEND Z GOOGLE EARTH.: 4 kroki
UŻYWAJ SWOJEGO GARMIN E-TREX LEGEND GPS Z GOOGLE EARTH.: NOWY I ULEPSZONY SPOSÓB KORZYSTANIA Z GARMIN E-TREX Z GOOGLE EARTH, Z LAPTOPA, G.P.S. I OPROGRAMOWANIE, KTÓRE MOŻESZ MIEĆ NAPRAWDĘ FANTASTYCZNĄ KONFIGURACJA. OCZYWIŚCIE BĘDZIE TO ZA CENĘ SUMIENIA. JEŚLI MASZ JAKIEKOLWIEK PYTANIA PROSIMY ZAPYTAĆ I ZROBIĆ
Joule Thief - Używaj diod LED z tylko jedną baterią AA!: 9 kroków
Joule Thief – Używaj diod LED z tylko jedną baterią AA!: Przenośność urządzeń LED może być trochę nieporęczna ze względu na baterie. Joule Thief rozwiązuje ten problem, zwiększając napięcie pojedynczej baterii AA do poziomu wystarczająco wysokiego, aby zapalić diodę LED. Ta umiejętność będzie wymagała, jak zlutować złodzieja dżuli ze