Comment utiliser un encodeur rotatif avec le Raspberry Pi

Comment utiliser un encodeur rotatif avec le Raspberry Pi

Dans ce tutoriel simple, nous vous montrerons comment câbler votre encodeur rotatif et comment utiliser du code python pour interagir avec lui.

Commençons par une brève explication de ce qu’est un encodeur rotatif et de son fonctionnement!

Un encodeur rotatif est un appareil qui détecte la rotation et la direction du bouton attaché. Il fonctionne en ayant 2 contacts internes qui créent et coupent un circuit lorsque le bouton est tourné. Lorsque vous tournez le bouton, vous pouvez le sentir « cliquer » indiquant qu’une position a été tournée. Si les contacts internes étaient à l’origine ÉLEVÉS (ou faisant le circuit) après un seul clic, ils seraient maintenant tous les deux FAIBLES (coupant le circuit). Avec un peu de logique, vous pouvez déterminer le sens de la rotation (expliqué en détail ci-dessous, assurez-vous de vérifier d’abord le code!).

Voici à quoi ressemblent les composants internes d’un encodeur rotatif:

Comment utiliser un encodeur rotatif avec le Raspberry Pi

Voici à quoi ressemble la rotation du codage dans le sens inverse des aiguilles d’une montre:

1592967610 675 Comment utiliser un encodeur rotatif avec le Raspberry Pi

Commençons par un schéma de câblage:

Comment utiliser un encodeur rotatif avec le Raspberry Pi

Comme vous pouvez le voir sur le schéma, vous devez câbler l’encodeur rotatif comme suit:

CLK – GPIO17 (broche 11)
DT – GPIO18 (broche12)
+ – 3v3 (broche1)
GND – GND (broche6)

C’est tout pour le câblage. Vous n’avez pas à vous soucier des résistances ou autres composants, car l’encodeur a construit des résistances de 10k Ohm gardant le courant au minimum absolu!

Ensuite, nous allons passer à du code python. Vous pouvez télécharger notre exemple de code depuis notre github – https://github.com/modmypi/Rotary-Encoder/

Ou téléchargez-le directement sur votre Pi en utilisant cette commande dans une fenêtre de terminal:

git clone https://github.com/modmypi/Rotary-Encoder/

Cet exemple de code est un simple compteur. Lorsque vous tournez l’encodeur dans le sens horaire, le nombre augmente de 1 à chaque « clic » et lorsque vous le tournez dans le sens anti-horaire, il diminue de 1 à chaque « clic ».

Permet de plonger dans le code et de voir comment il fonctionne …

cd Rotary-Encoder
nano rotary_encoder.py

Ligne 4 – Définissez la broche GPIO pour notre broche CLK de notre encodeur rotatif
Ligne 5 – Définissez la broche GPIO pour notre broche DT de notre encodeur rotatif

Ligne 8-9 – Réglez nos broches GPIO sur les entrées, avec une résistance de rappel.

Ligne 11 – Définissez notre variable de compteur, en commençant à 0
Ligne 12 – Obtenez l’état initial de notre broche CLK

Ligne 16-26 – Ceci est une boucle infinie dans laquelle nous vérifions les états de nos broches CLK et DT pour voir d’abord si l’encodeur est tourné, puis pour travailler notre s’il est tourné dans le sens horaire ou antihoraire

Ligne 17-18 – Donc, tout d’abord, nous obtenons l’état actuel de nos broches CLK et DT

Ligne 19 – Nous comparons ensuite l’état actuel de la broche CLK contre son état précédent. S’il est différent, l’encodeur est en rotation afin que nous puissions ensuite vérifier pour voir le sens de rotation

Ligne 20-21 – Si l’état de notre broche DT est différent de notre état de broche CLK, alors nous tournons dans le sens horaire et devons donc augmenter notre valeur de compteur de 1

Ligne 22-23 – Si l’état de notre broche DT est le même que notre état de broche CLK, alors nous tournons dans le sens anti-horaire et devons donc diminuer notre valeur de compteur de 1

Ligne 24 – Imprime simplement la valeur de notre variable de compteur

Ligne 25 – Mettez à jour notre variable clkLastState pour qu’elle corresponde à notre clkState

Ligne 26 – Mettez le script en pause à 0,01 seconde

La logique de détermination du sens de rotation est très simple à coder, mais pas si simple à comprendre pourquoi cela fonctionne.

Voici donc un petit exemple de son fonctionnement:

Pour une rotation dans le sens horaire

1. CLK et DT sont tous deux ÉLEVÉS
2. CLK devient LOW, DT reste HIGH – clkLastState était HIGH, clkState est LOW (clkState! = ClkLastState) alors maintenant nous pouvons déterminer la direction – dtState est HIGH, clkState LOW, dtState! = ClkState, +1
3. DT devient LOW, CLK reste LOW – clkLastState était LOW, clkState est LOW – Rien ne se passe

Pour une rotation anti-horaire

1. CLK et DT sont tous deux ÉLEVÉS
2. DT devient BAS, CLK reste ÉLEVÉ – clkLastState était ÉLEVÉ, clkState est ÉLEVÉ – Rien ne se passe
3. CLK devient LOW, DT reste LOW – clkLastState était HIGH, clkState est LOW (clkState! = ClkLastState) alors maintenant nous pouvons déterminer la direction – dtState est LOW, clkState LOW, dtState == clkState, -1

  • AZDelivery 3 x KY-040 Module Encodeur Rotatif Compatible avec Arduino et Raspberry Pi incluant Un E-Book!
    ✅ Obtenez maintenant 3 x KY-040 Module Encodeur Rotatif à un prix spécial avec remise sur quantité! ✅ Le bouton du Rotary Encoder peut non seulement être tourné, mais aussi appuyé. Vous avez donc encore plus de possibilités. ✅ Le codeur AZDelivery KY-040 n'a pas de position finale fixe. Vous pouvez continuer à le tourner aussi souvent que vous le souhaitez. ✅ Le codeur rotatif AZDelivery convient à votre Raspberry Pi. ✅ Ce produit inclut un E-Book qui fournit des informations utiles sur la façon de commencer votre projet. Il permet une installation rapide et fait gagner du temps sur le processus de configuration. On y trouve une série d'exemples d'applications, des guides d'installation complets et des bibliothèques.
  • YUNIQUE FRANCE Module encodeur Rotatif KY-040 pour Raspberry Pi et Arduino
    Vous pouvez utiliser l’encodeur rotatif ky-040 à la fois pour simuler un régulateur de volume et pour Le bouton d’encodeur rotatif peut être tourné et pressé; de cette façon, vous aurez plus de possibilités d’action L’encodeur rotatif n’a pas de position d’extrémité fixe; de cette façon, il peut être abattu indéfiniment L’encodeur rotatif est parfait pour votre framboise pi ou arduino
  • OcioDual Module Codeur Encodeur Rotatif KY-040 Capteur de Brique Bouton Developpement Potentiometre KY040 pour Raspberry AVR Pi
    Le bouton du Rotary Encoder peut non seulement être tourné, mais aussi appuyé. Vous avez donc encore plus de possibilités. Codeur incrémental est un déplacement du signal d'impulsions de rotation est converti en une série de capteurs rotatifs numériques. Le codeur n'a pas de position finale fixe. Vous pouvez continuer à le tourner aussi souvent que vous le souhaitez. Avec la clé sur le bouton rotatif, vous pouvez remettre à l'état initial, qui est, à compter de 0. Convient à votre Raspberry, Pi, AVR...