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:

blank

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

blank

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

blank

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

Articles similaires

Bouton retour en haut de la page
Fermer