Débuter avec un potentiomètre angulaire (360 degrés) Keyes KY-040

Partager sur facebook
Partager sur twitter
Partager sur linkedin
Partager sur pinterest
Partager sur email
Partager sur telegram

Dans ce tutoriel nous allons apprendre comment utiliser un potentiomètre angulaire (Rotary Encoder). Un potentiomètre angulaire permet de connaître la position du curseur sur 360 degrés et de déterminer le sens de rotation. Pour cet article, j’ai utilisé un potentiomètre angulaire Keyes KY-040 acheté sur Banggood pour moins de 4,50€ (lot de 5).

Principe du potentiomètre angulaire

Un potentiomètre angulaire à un nombre définit de positions pour une révolution complète (un tour de 360 degrés). On peut sentir un clic à chaque pas lorsqu’on tourne le curseur du potentiomètre. Le KY-040 possède 30 pas, soit une résolution de 12 degrés.

Même si on appel ce composant un potentiomètre, le principe de fonctionnement en est tout autre. Ici on ne mesure pas la valeur d’une résistance variable, on mesure des signaux logiques sur deux broches digitales de l’Arduino. Par exemple, lorsque l’on est sur une position, A et B ont le même niveau logique (0 ou 1). Si on tourne dans le sens horaire, le signal d’état A change avant B, et inversement lorsque tourne dans le sens horaire.

signal potentiometre angulaire

Signaux en sortie du potentiometre angulaire. Source : http://playground.arduino.cc/Main/RotaryEncoders#Example1

Le KY040 est également équipé d’un bouton que l’on actionne en appuyant sur l’axe. Le signal est récupéré sur la broche repérée SW. On pourra s’en servir pour faire un Reset de la position (au démarrage), allumer un afficheur….

Branchement du Keyes KY-040

Branchez le KY-040 comme ceci sur un Arduino. La broche indiquée entre parenthèse correspond à un branchement sur un module ESP8266 ESP-12 (par exemple une Wemos D1 Mini) :

GND <–> GND

+       <–> +5V

CLK  <–>  Pin 4 (D1) -> signal A

DT     <–> Pin 5 (D2) -> signal B

SW    <–> Pin 0 (D3) -> Bouton poussoir

keyes ky-040 ky040 potentiometre angulaire 360 degres esp8266 arduino _

Code

Voici un petit code pour tester rapidement le comportement du KY040. En début de programme, vous trouverez plusieurs variables pour configurer le programme en fonction de votre branchement et des caractéristiques de votre potentiomètre angulaire :

  • PinCLK, broche CLK (signal A)
  • PinDT, broche DT (signal B)
  • PinSW, broche SW (bouton)
  • nbPos, résolution du potentiomètre

Ouvrez le moniteur série pour afficher l’index de la position et l’angle du curseur.

int val; 
int PinCLK = 4;
int PinDT = 5;
int PinSW = 0;
static long encoderPos = -1;    // Au 1er démarrage, il passera à 0
int PinCLKLast = LOW;
int nbPas = 20;                 // Résolution de l'encodeur
int n = LOW;

void setup() { 
  pinMode (PinCLK,INPUT);
  pinMode (PinDT,INPUT);
  pinMode (PinSW,INPUT);
  Serial.begin (9600);
} 

void loop() { 
   if (!(digitalRead(PinSW))) {      // Reset la position si on appui sur le potentiomètre
     encoderPos = 0;
     //Serial.println("Reset position");
   }
   
   n = digitalRead(PinCLK);
   
   if ((PinCLKLast == LOW) && (n == HIGH)) {
     
     if (digitalRead(PinDT) == LOW) {
       Serial.print("Sens antihoraire, position ");
       encoderPos--;
       if ( encoderPos < 0 ) {
         encoderPos = nbPas;
       }
     } else {
       Serial.print("Sens horaire, position ");
       encoderPos++;
       if ( encoderPos > ( nbPas - 1 ) ) {
         encoderPos = 0;
       }
     }
     Serial.print (encoderPos); Serial.print(", angle "); Serial.println( abs ( encoderPos * ( 360 / nbPas ) ) );
     //Serial.print ("/");
   } 
   PinCLKLast = n;
 }

Conclusions

Un potentiomètre angulaire permet de connaitre la position d’un curseur sur un tour complet. On peut également déterminer le sens de rotation. Petit bémol toutefois, il est nécessaire de mettre le potentiomètre dans une position initiale connue au démarrage du programme (zéro), position à partir de laquelle seront déterminée les changements suivants. Comme à chaque redémarrage du programme, on perd la position précédente, on ne pourra pas utiliser le KY-040 pour faire un contrôle de volume par exemple. On pourra utiliser le signal SW du bouton poussoir pour réaliser un reset de la position par exemple.

Avez-vous aimé cet article ?
[Total: 0 Moyenne: 0]
Partager sur facebook
Partager sur twitter
Partager sur linkedin
Partager sur pinterest
Partager sur email
Partager sur telegram

Vous avez aimé ce projet ? Ne manquez plus aucun projet en vous abonnant à notre lettre d’information hebdomadaire!

Ressources utiles
quel modèle esp8266 choisir
Quel modèle d'ESP8266EX choisir en 2020 ?
guide choix esp32 development board
Quel ESP32 choisir en 2020 ?
8 Commentaires
  1. Bonjour,

    J’ai une erreur sur cette ligne : if ((PinCLKLast == LOW) && (n == HIGH)) {
    avec : ‘amp’ was not declared in this scope
    c’est quoi ce amp ?

    • Bonjour, c’est juste une erreur de mise en forme du code Arduino causée par un plugin que j’utilise pour le blog. C’est corrigé.

      • Merci, j’avais corrigé en cherchant…. Cependant, je viens de refaire le montage que vous proposez et il ne se passe absolument rien. j’obtiens juste la première ligne : Sens horaire, position 0, angle 0

        Quand j’appuie sur le bouton une diode bleu s’allume, quand je tourne d’un cran la diode d’upload s’allume si en encore un cran elle s’éteint et ainsi de suite, mais il ne se passe rien à l’écran .

        Etes vous sûr du montage et/ou du code ?

  2. You connect the rotary encoder to the 5v pin. Does that not cause problems? I thought the IO pins of the Wemos operate at 3.3V.

    Laisser un commentaire

    Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

    Domotique et objets connectés à faire soi-même