Table des matières:

Encodeur rotatif - Comprendre et l'utiliser (Arduino/autre ΜContrôleur): 3 étapes
Encodeur rotatif - Comprendre et l'utiliser (Arduino/autre ΜContrôleur): 3 étapes

Vidéo: Encodeur rotatif - Comprendre et l'utiliser (Arduino/autre ΜContrôleur): 3 étapes

Vidéo: Encodeur rotatif - Comprendre et l'utiliser (Arduino/autre ΜContrôleur): 3 étapes
Vidéo: Fonctionnement du codeur rotatif avec une Arduino (Rotary Encoder) 2024, Novembre
Anonim
Encodeur rotatif - Comprendre et l'utiliser (Arduino/autre ΜContrôleur)
Encodeur rotatif - Comprendre et l'utiliser (Arduino/autre ΜContrôleur)

Un encodeur rotatif est un dispositif électromécanique qui convertit le mouvement de rotation en informations numériques ou analogiques. Il peut tourner dans le sens horaire ou antihoraire. Il existe deux types d'encodeurs rotatifs: les encodeurs absolus et relatifs (incrémentaux).

Alors qu'un codeur absolu génère une valeur proportionnelle à l'angle actuel de l'arbre, un codeur incrémental génère le pas de l'arbre et sa direction. (Dans ce cas, nous avons un codeur incrémental)

Les encodeurs rotatifs deviennent de plus en plus populaires car vous pouvez utiliser deux fonctions dans un seul module électrique: un simple interrupteur pour confirmer les opérations et l'encodeur rotatif pour naviguer, par ex. à travers un menu.

Un codeur rotatif incrémental génère deux signaux de sortie pendant que son arbre tourne. Selon la direction, l'un des signaux entraîne l'autre. (voir ci-dessous)

Étape 1: Comprendre les données de sortie

Comprendre les données de sortie
Comprendre les données de sortie

Comme vous pouvez le voir, lorsque l'arbre du codeur commence à tourner dans le sens des aiguilles d'une montre, la sortie A tombe d'abord à BAS et la sortie B la suit. Dans le sens inverse des aiguilles d'une montre, l'opération tourne en sens inverse.

Il ne nous reste plus qu'à implémenter cela sur notre µController (j'ai utilisé un Arduino Nano).

Étape 2: Construire le circuit

Construire le circuit
Construire le circuit
Construire le circuit
Construire le circuit

Comme je l'ai décrit précédemment, les sorties créent un flanc HAUT et un flanc BAS. Pour obtenir un HIGH propre aux broches de données A et B du µController, nous devons ajouter des résistances Pull-Up. La broche commune C va directement à la terre pour le flanc BAS.

Pour obtenir des informations sur le commutateur interne (bouton-poussoir), nous utiliserons les deux autres broches. L'un d'eux va à VCC et l'autre à une broche de données du µController. Nous devons également ajouter une résistance pull-down à la broche de données pour obtenir un LOW propre.

Il est également possible d'utiliser des résistances internes Pull-Up et Pull-Down de votre µController !

Dans mon cas, le brochage ressemble à:

  • +3, 3V => +3, 3V (Arduino)(également +5V possible)
  • GND => GND (Arduino)
  • A => Pin10
  • B =>

    Épingler

    11

  • C => GND
  • SW =>

    Épingler

    12

Étape 3: Rédaction du code

broche intA = 10; //commutateur interne A int pinB = 11; //commutateur interne B int pinSW = 12; //commutateur (encodeur enfoncé) int encoderPosCount = 0; // commence à zéro, changez si vous voulez

int positionval;

bool switchval; int mrotateLast; int mrotate;

void setup() {

int mrotateLast = digitalRead(pinA); Serial.begin (9600); retard (50); }

boucle vide() { readencoder(); if(readswitch() == 1){ Serial.println("Switch = 1"); } }

int encodeur (){

mrotate = digitalRead(pinA); if (mrotate != mrotateLast){ //le bouton tourne if (digitalRead(pinB) != mrotate) { //switch A a d'abord changé -> rotation dans le sens des aiguilles d'une montre encoderPosCount ++; Serial.println ("tourné dans le sens des aiguilles d'une montre"); } else {// le commutateur B a d'abord changé -> rotation dans le sens antihoraire encoderPosCount--; Serial.println ("tourné dans le sens antihoraire"); }

Serial.print("Position de l'encodeur: "); Serial.println(encoderPosCount); Serial.println(""); } mrotateLast = mrotate; retourner encoderPosCount; } bool readswitch(){

if(digitalRead(pinSW)!=0){ // le commutateur est enfoncé

while(digitalRead(pinSW)!=0){} //le commutateur est actuellement enfoncé switchval = 1; } else{switchval = 0;} //le commutateur n'est pas enfoncé return switchval; }

Maintenant, vous pouvez tourner l'encodeur et la variable encoderPosCount comptera si vous tournez dans le sens des aiguilles d'une montre et comptera à rebours si vous tournez dans le sens inverse des aiguilles d'une montre.

C'est ça! Simple et utile.

N'hésitez pas à modifier et exécuter le code. Vous pouvez l'implémenter dans votre projet.

Je vais également télécharger un projet LED où j'ai utilisé l'encodeur pour régler la luminosité de mes LED.

Conseillé: