Spisu treści:

Samouczek dotyczący enkodera obrotowego z Arduino: 6 kroków
Samouczek dotyczący enkodera obrotowego z Arduino: 6 kroków

Wideo: Samouczek dotyczący enkodera obrotowego z Arduino: 6 kroków

Wideo: Samouczek dotyczący enkodera obrotowego z Arduino: 6 kroków
Wideo: #0271 Enkoder obrotowy - part 04 2024, Listopad
Anonim
Samouczek dotyczący enkodera obrotowego z Arduino
Samouczek dotyczący enkodera obrotowego z Arduino

Enkoder obrotowy to element elektroniczny, który może monitorować ruch i pozycję podczas obracania. Enkoder obrotowy wykorzystuje czujniki optyczne, które mogą generować impulsy, gdy enkoder obrotowy się obraca. Zastosowanie enkodera obrotowego, zwykle jako mechanicznego lub zrobotyzowanego monitora ruchu, może być również wykorzystane do wyboru menu na wyświetlaczu. Enkoder obrotowy ma dwa wyjścia, dzięki czemu może rozróżniać obrót ujemny (CW) i dodatni (CCW), a także ma jeden przycisk.

Krok 1: Przepływ impulsowy enkodera obrotowego

Przepływ impulsowy enkodera obrotowego
Przepływ impulsowy enkodera obrotowego

Przepływ impulsów generowany przez następujący enkoder obrotowy jest taki jak na powyższym obrazku.

Krok 2: Pinout enkodera obrotowego

Pinout enkodera obrotowego
Pinout enkodera obrotowego

Wyjaśnienie:

  • GND GND
  • + +5V
  • Przycisk SW enkodera obrotowego po naciśnięciu
  • Dane DT
  • Dane CLK 2

Jeden z pinów DT lub CLK musi być podłączony do stopki przerwania Arduino Uno lub oba piny DT i CLK są podłączone do pinu przerwania.

Krok 3: Schemat

Schematyczny
Schematyczny
  • GND do GND Arduino Uno
  • + do +5V Arduino Uno
  • SW na PIN 4 Arduino Uno
  • DT na PIN 3 Arduino Uno
  • CLK na PIN2 Arduino Uno

Krok 4: Kod

Kod
Kod

W poniższym samouczku, który będzie używany jako przerwanie, jest PIN 2 Arduino Uno, podczas gdy PIN 3 jest używany tylko jako zwykłe wejście.

#zdefiniuj koder0PinA 2#zdefiniuj koder0PinB 3 #zdefiniuj koder0Btn 4 int koder0Pos = 0; void setup() { Serial.begin(9600); pinMode(enkoder0PinA, INPUT_PULLUP); pinMode(enkoder0PinB, INPUT_PULLUP); pinMode(encoder0Btn, INPUT_PULLUP); attachInterrupt(0, doEncoder, CHANGE); } int valRotary, lastValRotary; void loop() { int btn = digitalRead(encoder0Btn); Serial.print(btn); Serial.print(" "); Serial.print(valRotary); if(valRotary>ostatniValRotary) { Serial.print("CW"); } if(valRotary {

Serial.print(" CCW");

} lastValRotary = valRotary; Serial.println(" "); opóźnienie(250); } void doEncoder() { if (digitalRead(encoder0PinA) == digitalRead(encoder0PinB)) { koder0Pos++; } else { koder0Pos--; } valRotary = encoder0Pos/2,5; }

W linii 10 powyższego szkicu służy do włączenia przerwania pinu 2 Arduino Uno. W funkcji „doEncoder” obliczana jest z enkodera obrotowego. Jeżeli wartość DT i CLK (przerwanie pinów Arduino Uno) jest taka sama, to zmienna „encoder0Pos” będzie inkrementowana/dodana, dodatkowo do tego warunku zostanie zmniejszona zmienna „encoder0Pos”.

Krok 5: Wyjaśnienie

Wartość ValRotary to wartość liczby wykonanych kroków. Wartość ValRotary jest uzyskiwana z wartości odczytu enkodera czujnika obrotowego podzielonej przez 2,5. Z testu uzyskuje się wartość 2,5, ponieważ jeden krok enkodera obrotowego może przekroczyć 1, więc należy podzielić przez 2,5 dla jego wartości zgodnie z krokiem, a także dodać opóźnienie odczytu.

Podczas gdy w linii 19 - 25 jest program do określenia, czy obrotowy enkoder obrotowy CW czy CCW. Wyjaśnienie wierszy 19 - 25 ma miejsce, gdy bieżący odczyt enkodera obrotowego jest większy niż poprzednie dane obrotowe, a następnie wyrażone jako CW. Natomiast jeśli bieżący odczyt jest mniejszy niż poprzedni, to jest to określane jako CCW.

Krok 6: Wyjście

Wyjście
Wyjście

1 = wartość przycisku start pokrętła, gdy nie został wciśnięty

Zalecana: