Arduino utiliser un encodeur rotatif

Petit tutoriel pour utiliser un encodeur rotatif sur un arduino. Ce composant vous permettra d’incrémenter ou décrémenter une valeur en tournant un axe, la mise en 0 se fera par un appui sur l’axe.

Toujours pour vous permettre d’utiliser les différents de base de l’arduino, élément qui peut être indispensable pour des montages de base, nous allons voir le fonctionnement, câblage et codage d’un encodeur rotatif.

Matériels nécessaires

Pour ce tutoriel, j’ai utilisé :

Vous pouvez également (si vous débutez), opter pour l’acquisition d’un kit du débutant complet pour l’Arduino.

Présentation de l’encodeur rotatif

Dans mon cas, il s’agit d’un Ky-040, celui-ci se présente comme ceci :

Encodeur_rotatif
Encodeur_rotatif
broche_ky_040
broche_ky_040

Vous trouverez une présentation complète, notamment son fonctionnement sur cette page.

Câblage

Voici un petit tableau de correspondance pour les branchements, il n’y a pas de difficultés particulières :

KY-040 => Arduino

CLK =>  D2

Vcc => 5 V

SW => D4

DT => D3

GND => GND

Code pour l’arduino

Dans votre IDE, saisir :

int CLK = 2;//CLK->D2
int DT = 3;//DT->D3
int SW = 4;//SW->D4
const int interrupt0 = 0;// Interrupt 0  pin 2 
int compteur = 0;//initialisation du compteur
int lastCLK = 0;//initialisation de la valeur
 
void setup()
{
  pinMode(SW, INPUT);
  digitalWrite(SW, HIGH);
  pinMode(CLK, INPUT);
  pinMode(DT, INPUT);
  attachInterrupt(interrupt0, ClockChanged, CHANGE);

  Serial.begin(9600);
}
 
void loop()
{
  if (!digitalRead(SW) && compteur != 0) //Read the button press and the compteur value to 0 when the compteurer reset

  {
    compteur = 0;
    Serial.print("compteur:");
    Serial.println(compteur);
  }
}
 
//The interrupt handlers
void ClockChanged()
{
  int clkValue = digitalRead(CLK);
  int dtValue = digitalRead(DT);
  if (lastCLK != clkValue)
  {
    lastCLK = clkValue;
    compteur += (clkValue != dtValue ? 1 : -1);// incrémente et décrémente en fonction des valeurs lues

    Serial.print("compteur:");
    Serial.println(compteur);
  }
}

Très bonne utilisation, n’hésitez pas à partager et / ou commentez

 

Laisser un commentaire