Come collegare modulo encoder rotativo Arduino

L’encoder rotativo Arduino (modulo KY-040) viene utilizzato molto spesso nei progetti per controllare vari dispositivi dalla scheda Arduino. In questa recensione prenderemo in considerazione il circuito di collegamento del modulo al microcontrollore, oltre a presentare diversi esempi di utilizzo dell’encoder per accendere e controllare la luminosità dei LED, la rotazione del servomotore utilizzando l’encoder e la scheda Arduino Uno.




Per questa attività sono necessari:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • modulo encoder rotativo ky-040
  • LED e resistenze
  • servomotore
  • breadboard
  • cavi di collegamento
  • libreria RotaryEncoder.h

Modulo encoder rotativo ky-040 datasheet, pinout

L’encoder rotativo viene utilizzato per convertire l’angolo di rotazione in un segnale elettrico. Quando si ruota la manopola del modulo ky 040, si ottengono due segnali (A e B), che sono in fase opposta. I segnali A e B dipendono l’uno dall’altro quando l’encoder Arduino viene ruotato in senso orario o antiorario. Le porte digitali e analogiche del microcontrollore possono essere utilizzate per leggere i segnali A e B dal modulo encoder rotativo ky-040.

Modulo encoder ky-040 Arduino pinout, datasheet
Modulo encoder ky-040 Arduino pinout, datasheet

Caratteristiche del modulo encoder ky-040 Arduino:

  • Tensione di alimentazione: 5 V
  • Corrente di funzionamento: 10mA
  • Impulsi/giro: 20
  • Durata: 15.000 giri o più
  • Lunghezza dell’albero: 12 mm

Ogni volta che il segnale A passa da positivo a zero dal modulo encoder, viene letto il segnale B (vedere il diagramma precedente). Se il segnale B è positivo in quel momento, l’encoder sta ruotando in senso orario, se B è zero, l’encoder sta ruotando in senso antiorario. Leggendo entrambi i segnali dal modulo encoder ky040 tramite il microcontrollore Arduino, è possibile determinare la direzione e l’angolo di rotazione della manopola.

Collegamento un modulo encoder ky-040 ad Arduino

Come usare e pilotare modulo encoder ky-040 Arduino Uno
Come usare e pilotare modulo encoder ky-040 Arduino Uno
Encoder Arduino Uno Arduino Nano Arduino Mega
GND GND GND GND
+ 5V 5V 5V
SW 2 2 2
DT A2 A2 A2
CLC A3 A3 A3

L’esempio seguente consente di controllare la luminosità di un LED mediante un segnale PWM e di accendere e spegnere un secondo LED premendo un pulsante encoder rotativo. A tale scopo, assemblare il circuito pubblicato sopra. Si noti che la porta SW dell’encoder è collegata al pin 2 di Arduino, mentre i LED sono collegati ai pin 12 e 11. Dopo aver assemblato il circuito, caricare il seguente codice per controllare i LED su Arduino Uno con l’encoder ky040.

Programma Arduino per controllo LED da un encoder ky-040




#include "RotaryEncoder.h"
RotaryEncoder encoder(A2, A3);  // (DT, CLK)

#define STEPS  5
#define POSMIN 0
#define POSMAX 255

int lastPos, newPos;

void setup() {
  pinMode(2, INPUT_PULLUP);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);

  Serial.begin(9600);
  encoder.setPosition(10 / STEPS);
}

void loop() {
  encoder.tick();
  newPos = encoder.getPosition() * STEPS;

  if (newPos < POSMIN) { 
    encoder.setPosition(POSMIN / STEPS); 
    newPos = POSMIN;
  }
 
  else if (newPos > POSMAX) { 
    encoder.setPosition(POSMAX / STEPS); 
    newPos = POSMAX; 
  }

  if (lastPos != newPos) {
     Serial.println(newPos);
     lastPos = newPos;
  }

  analogWrite(11, lastPos);

  if (digitalRead(2)==HIGH) { digitalWrite(12, LOW);  }
  if (digitalRead(2)==LOW)  { digitalWrite(12, HIGH); }
}

Spiegazione del codice per controllo LED da un encoder Arduino:



  1. per il pin 2 si utilizza la configurazione INPUT_PULLUP, poiché il pulsante dell’encoder è collegato a GND e quando viene premuto, l’ingresso digitale mostrerà un segnale LOW;
  2. nel programma è possibile modificare il valore massimo e minimo di rotazione dell’encoder e il passo di rotazione della manopola dell’encoder ky-040.

Collegamento un encoder rotativo e servo Arduino

Come usare modulo encoder e servo Arduino
Come usare modulo encoder e servomotore Arduino

Lo schizzo seguente dimostra il controllo del servo da un modulo encoder. Il filo logico del microservo (colore giallo o arancione) è collegato alla porta PWM 11 del microcontrollore Arduino. Il programma imposta l’angolo del servo ruotando la manopola del modulo ky-040. Il funzionamento del programma è simile al controllo Arduino del potenziometro del servo, ma nel caso dell’encoder è possibile impostare l’angolo di rotazione più preciso.

Programma Arduino per controllo servo da un encoder ky-040

#include "RotaryEncoder.h"
RotaryEncoder encoder(A2, A3);  // (DT, CLK)

#include "Servo.h"
Servo servo;

#define STEPS  10
#define POSMIN 0
#define POSMAX 180

int lastPos, newPos;

void setup() {
  servo.attach(11);
  Serial.begin(9600);
  encoder.setPosition(10 / STEPS);
}

void loop() {
  encoder.tick();
  newPos = encoder.getPosition() * STEPS;

  if (newPos < POSMIN) { 
    encoder.setPosition(POSMIN / STEPS); 
    newPos = POSMIN;
  }
 
  else if (newPos > POSMAX) { 
    encoder.setPosition(POSMAX / STEPS); 
    newPos = POSMAX; 
  }
 
  if (lastPos != newPos) {
     Serial.println(newPos);
     lastPos = newPos;
  }
 
  servo.write(lastPos);
}

Spiegazione del codice per controllo servo da un encoder Arduino:

  1. il passo di rotazione del servo Arduino è di 10 gradi. Il passo di rotazione e l’angolo di rotazione massimo possono essere modificati nel software.

Conclusione. Abbiamo esaminato diverse opzioni per collegare il modulo encoder ad Arduino: un programma per controllare un LED, un esempio di programma con servo comando. È anche possibile utilizzare il modulo per controllare i menu sul display LCD di Arduino 1602. Abbiamo utilizzato la libreria RotaryEncoder.h, ma esistono numerose altre librerie di encoder per il microcontrollore Arduino che non possono essere inserite in una recensione.

5/5 - (1 vote)


Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.