Sommario:

Tutorial dell'encoder rotativo con Arduino: 6 passaggi
Tutorial dell'encoder rotativo con Arduino: 6 passaggi

Video: Tutorial dell'encoder rotativo con Arduino: 6 passaggi

Video: Tutorial dell'encoder rotativo con Arduino: 6 passaggi
Video: Lesson 97: Controlling Servo Motor using Rotary Encoder and Display Angle On LCD 2024, Luglio
Anonim
Tutorial dell'encoder rotativo con Arduino
Tutorial dell'encoder rotativo con Arduino

L'encoder rotativo è un componente elettronico in grado di monitorare il movimento e la posizione durante la rotazione. L'encoder rotativo utilizza sensori ottici in grado di generare impulsi quando l'encoder rotativo ruota. L'applicazione dell'encoder rotativo solitamente come monitor di movimento meccanico o robotico può essere utilizzata anche per la selezione del menu sul display. Il codificatore rotante ha due uscite in modo che possa distinguere tra rotazione negativa (CW) e positiva (CCW) e ha anche un solo pulsante.

Passaggio 1: flusso di impulsi dell'encoder rotativo

Flusso di impulsi dell'encoder rotativo
Flusso di impulsi dell'encoder rotativo

Il flusso di impulsi generato dal seguente encoder rotativo è come nell'immagine sopra.

Passaggio 2: pinout dell'encoder rotativo

Pinout dell'encoder rotativo
Pinout dell'encoder rotativo

Spiegazione:

  • GND GND
  • + +5V
  • Pulsante SW del codificatore rotante quando premuto
  • Dati DT
  • Dati CLK 2

Uno dei pin DT o CLK deve essere collegato al piedino di interruzione di Arduino Uno, oppure entrambi DT e CLK sono collegati al pin di interruzione.

Passaggio 3: schematico

Schema
Schema
  • GND à GND Arduino Uno
  • + a +5V Arduino Uno
  • SW à PIN 4 Arduino Uno
  • DT à PIN 3 Arduino Uno
  • CLK à PIN2 Arduino Uno

Passaggio 4: codice

Codice
Codice

Nel seguente tutorial, che verrà utilizzato come interrupt è il PIN 2 di Arduino Uno, mentre il PIN 3 viene utilizzato solo come input normale.

#define encoder0PinA 2#define encoder0PinB 3 #define encoder0Btn 4 int encoder0Pos = 0; void setup() { Serial.begin(9600); pinMode(encoder0PinA, INPUT_PULLUP); pinMode(encoder0PinB, 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>lastValRotary) { Serial.print(" CW"); } if(valRotary {

Serial.print(" CCW");

} lastValRotary = valRotary; Serial.println(" "); ritardo(250); } void doEncoder() { if (digitalRead(encoder0PinA) == digitalRead(encoder0PinB)) { encoder0Pos++; } else { encoder0Pos--; } valRotary = encoder0Pos/2.5; }

Nella riga 10 dello schizzo sopra viene utilizzato per abilitare l'interruzione del pin 2 Arduino Uno. Nella funzione "doEncoder" viene calcolato dall'encoder rotativo. Se il valore di DT e CLK (pin interrupt di Arduino Uno) è lo stesso, allora verrà incrementata/aggiunta la variabile "encoder0Pos", oltre a tale condizione, viene decrementata la variabile "encoder0Pos".

Passaggio 5: spiegazione

Il valore ValRotary è il valore del numero di passaggi che sono stati eseguiti. Il valore ValRotary è ottenuto dal valore di lettura dell'encoder del sensore rotativo diviso per 2,5. Dal test si ottiene un valore di 2,5, poiché un passo dell'encoder rotativo può superare 1, quindi dividere per 2,5 per il suo valore in base al perpasso e anche all'aggiunta del ritardo di lettura.

Mentre sulla riga 19 - 25 c'è un programma per determinare se l'encoder rotativo rotativo CW o CCW. La spiegazione delle righe 19-25 è quando la lettura del codificatore rotante corrente è maggiore dei dati rotativi precedenti quindi espressi come CW. Considerando che se la lettura corrente è inferiore alla lettura precedente, viene indicata come CCW.

Passaggio 6: uscita

Produzione
Produzione

1 = il valore del pulsante di avvio della manopola quando non è stato premuto

Consigliato: