SOMMAIRE ►
L’encodeur rotatif Arduino (module KY-040) est très souvent utilisé dans les projets pour contrôler divers dispositifs à partir du microcontrôleur Arduino. Dans cette revue, nous examinerons le schéma de câblage du module KY-040 au microcontrôleur et présenterons plusieurs exemples utilisant ce module pour allumer et contrôler la luminosité des LEDs, la rotation du servomoteur avec l’encodeur rotatif (codeur incrémental) et Arduino.
Pour cette activité, nous aurons besoin:
- Arduino Uno / Arduino Nano / Arduino Mega
- rotary encoder ky-040
- servomoteur
- LEDs et résistances
- breadboard
- fils de connexion
- librairie RotaryEncoder.h
Matériel supplémentaire sur ce sujet:
Fonctionnement du encodeur rotatif (datasheet)
Le codeur est utilisé pour convertir l’angle de rotation en un signal électrique. En tournant le bouton du module, on obtient deux signaux (A et B) qui sont en opposition de phase. Les signaux A et B dépendent l’un de l’autre lorsque le codeur Arduino est tourné dans le sens des aiguilles d’une montre ou dans le sens inverse. Les ports numériques et analogiques du microcontrôleur peuvent être utilisés pour lire les signaux A et B du codeur.

Caractéristiques rotary encoder KY-040
- Alimentation: 5 V
- Courant de fonctionnement: 10mA
- Impulsions/tours: 20
- Durée de vie: 15 000 révolutions ou plus
- Longueur de l’arbre: 12 mm
Chaque fois que le signal A passe du positif au zéro, nous lisons la valeur du signal B (voir le schéma ci-dessus). Si le signal B est positif à ce moment, alors l’encodeur rotatif tourne dans le sens des aiguilles d’une montre, si B est nul, alors l’encodeur tourne dans le sens inverse des aiguilles d’une montre. En lisant les deux sorties avec microcontrôleur l’Arduino, il est possible de déterminer la direction et l’angle du bouton poussoir du module.
Comment branchement encodeur rotatif Arduino

| 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 |
Pour travailler avec l’encodeur, vous devez installer la bibliothèque RotaryEncoder.h. Si vous avez des difficultés à installer la bibliothèque de l’encodeur, nous vous recommandons de lire les informations sur la façon d’installer la bibliothèque dans l’IDE Arduino. Pour connecter le KY-040 à l’Arduino, vous pouvez utiliser les broches numériques et analogiques du microcontrôleur, dans nos exemples les broches A2-A3 sont utilisées.
Commençons par l’exemple le plus simple de contrôle d’encodeur commandé par interruption à partir de l’Arduino, où tout le travail grossier de détermination de la position du bouton de l’encodeur est effectué à l’aide de la bibliothèque RotaryEncoder.h. Nous ne sortons les données que sur le moniteur du port Arduino IDE. Assemblez le circuit du codeur comme indiqué sur l’image ci-dessus et chargez le programme suivant dans l’Arduino.
Programme Arduino pour encodeur rotatif
#include "RotaryEncoder.h" RotaryEncoder encoder(A2, A3); // (DT, CLK) static int pos = 0; int newPos; void setup() { Serial.begin(9600); // ouvre le port série Serial.println(pos); } void loop() { encoder.tick(); newPos = encoder.getPosition(); if (pos != newPos) { Serial.println(newPos); pos = newPos; } }
Explication du code pour codeur incrémental Arduino:
- la position initiale du bouton est zéro static int pos = 0; et cette valeur est affichée sur le moniteur du port au début du programme;
- il n’y a pas de limite à la position de la poignée KY-040 dans le programme d’exemple, la position peut être positive ou négative.

L’exemple suivant contrôlera la luminosité de la LED à l’aide d’un signal PWM et allumera et éteindra la seconde LED en appuyant sur le bouton de l’encodeur. Pour ce faire, assemblez le circuit affiché ci-dessus. Notez que le port SW de l’encodeur est connecté à la broche 2 de l’Arduino et les LEDs aux broches 12 et 11. Après avoir assemblé le circuit, chargez le code suivant pour contrôler les LEDs sur l’Arduino avec l’encodeur rotatif.
Programme Arduino pour contrôler la LED
#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); // ouvre le port série 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); } }
Explication du code pour contrôler la LED de l’encodeur:
- la broche 2 est configurée comme INPUT_PULLUP, car le bouton de l’encodeur est connecté à GND et l’entrée numérique sera LOW lorsqu’il sera pressé;
- vous pouvez modifier la valeur maximale et minimale de la rotation de l’encodeur, ainsi que le pas de rotation du bouton de codeur incrémental arduino ky-040 dans le logiciel.

Le croquis suivant montre la connexion d’un servo avec un encodeur. Le fil logique du micro-servo (jaune ou orange) est connecté au port 11 du micro-contrôleur. Le programme définit l’angle de rotation du servo en tournant le bouton du module ky-040. Le fonctionnement du programme est similaire à celui de la commande par servo-potentiomètre, mais dans le cas du codeur, l’angle de rotation peut être réglé aussi précisément que possible.
Programme Arduino pour contrôler servomoteur
#include "RotaryEncoder.h" RotaryEncoder encoder(A2, A3); // (DT, CLK) #include "Servo.h" Servo servo; // création de l'objet "servo" #define STEPS 10 #define POSMIN 0 #define POSMAX 180 int lastPos, newPos; void setup() { servo.attach(11); // attache le servo au pin spécifié Serial.begin(9600); // ouvre le port série 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); }
Explication du code contrôler servomoteur de l’encodeur:
- le pas de rotation du servo pour l’Arduino est de 10 degrés. Le pas et l’angle maximal de rotation peuvent être modifiés dans le croquis pour codeur incrémental arduino.
Conclusion. Nous avons examiné plusieurs options pour connecter le module encodeur à l’Arduino : un exemple avec interruption et contrôle des LED, un exemple avec contrôle du servomoteur. Le module peut également être utilisé pour contrôler le menu sur l’écran LCD 1602 Arduino. Nous avons utilisé le librairie RotaryEncoder.h, mais il existe plusieurs autres bibliothèques qui ne peuvent tout simplement pas tenir dans un seul aperçu.








Bonjour,Admin
sur le schéma le pin 2 est pour le bouton mais quand je téléverse
le programme le moniteur série affiche l’emplacement de l’encodeur rotatif,
mais quand j’appuis sur le bouton, le moniteur série n’affiche pas si on appui
sur le bouton .
Le moniteur du port n’affiche pas la pression sur le bouton. Lorsque le bouton est enfoncé, la LED sur la broche 12 doit s’allumer.