- Matériaux nécessaires
- Comment fonctionne un encodeur rotatif?
- Types d'encodeur rotatif
- Brochage et description du codeur rotatif KY-040
- Schéma du circuit de l'encodeur rotatif Arduino
- Programmation de votre Arduino pour encodeur rotatif
- Fonctionnement de l'encodeur rotatif avec Arduino
Un encodeur rotatif est un périphérique d'entrée qui aide l'utilisateur à interagir avec un système. Il ressemble plus à un potentiomètre Radio mais il émet un train d'impulsions qui rend son application unique. Lorsque le bouton de l'encodeur est tourné, il tourne sous forme de petites étapes, ce qui l'aide à être utilisé pour le contrôle du moteur pas à pas / servomoteur, la navigation dans une séquence de menu et l'augmentation / diminution de la valeur d'un nombre et bien plus encore.
Dans cet article, nous découvrirons les différents types d'encodeurs rotatifs et leur fonctionnement. Nous allons également l' interfacer avec Arduino et contrôler la valeur d'un entier en tournant l'encodeur et afficher sa valeur sur un écran LCD 16 * 2. À la fin de ce didacticiel, vous serez à l'aise avec l'utilisation d'un encodeur rotatif pour vos projets. Alors, commençons…
Matériaux nécessaires
- Encodeur rotatif (KY-040)
- Arduino UNO
- LCD alphanumérique 16 * 2
- Potentiomètre 10k
- Planche à pain
- Fils de connexion
Comment fonctionne un encodeur rotatif?
Un encodeur rotatif est un transducteur électromécanique, ce qui signifie qu'il convertit les mouvements mécaniques en impulsions électroniques. Il se compose d'un bouton qui, lorsqu'il tourne, se déplacera pas à pas et produira une séquence de trains d'impulsions avec une largeur prédéfinie pour chaque pas. Il existe de nombreux types d'encodeurs, chacun avec son propre mécanisme de fonctionnement, nous en apprendrons plus sur les types plus tard, mais pour l'instant, concentrons-nous uniquement sur l' encodeur incrémental KY040 puisque nous l'utilisons pour notre tutoriel.
La structure mécanique interne du codeur est illustrée ci-dessous. Il se compose essentiellement d'un disque circulaire (couleur grise) avec des plots conducteurs (couleur cuivre) placés sur le dessus de ce disque circulaire. Ces pastilles conductrices sont placées à égale distance comme indiqué ci-dessous. Les broches de sortie sont fixées sur le dessus de ce disque circulaire, de telle sorte que lorsque le bouton tourne, les plots conducteurs entrent en contact avec les broches de sortie. Ici, il y a deux broches de sortie, la sortie A et la sortie B, comme indiqué dans la figure ci-dessous.
La forme d'onde de sortie produite par la broche de sortie A et la sortie B est affichée respectivement en bleu et en vert. Lorsque la pastille conductrice est directement sous la broche, elle devient haute, ce qui en résulte à l'heure et lorsque la pastille conductrice s'éloigne la broche devient basse, ce qui entraîne un temps d'arrêt de la forme d'onde représentée ci-dessus. Maintenant, si nous comptons le nombre d'impulsions, nous pourrons déterminer combien de pas l'encodeur a été déplacé.
Maintenant, la question peut se poser: pourquoi avons-nous besoin de deux signaux d'impulsion alors qu'un seul suffit pour compter le nombre de pas effectués en tournant le bouton. En effet, nous devons identifier dans quelle direction le bouton a été tourné. Si vous regardez les deux impulsions, vous remarquerez qu'elles sont toutes les deux déphasées de 90 °. Par conséquent, lorsque le bouton est tourné dans le sens des aiguilles d'une montre, la sortie A passera d'abord au niveau haut et lorsque le bouton est tourné dans le sens inverse des aiguilles d'une montre, la sortie B passera en premier à l'état haut.
Types d'encodeur rotatif
Il existe de nombreux types d'encodeur rotatif sur le marché, le concepteur peut en choisir un en fonction de son application. Les types les plus courants sont listés ci-dessous
- Codeur incrémental
- Codeur absolu
- Encodeur magnétique
- Encodeur optique
- Encodeur laser
Ces codeurs sont classés en fonction du signal de sortie et de la technologie de détection, le codeur incrémental et les codeurs absolus sont classés en fonction du signal de sortie et les codeurs magnétique, optique et laser sont classés en fonction de la technologie de détection. Le codeur utilisé ici est un codeur de type incrémental.
Brochage et description du codeur rotatif KY-040
Les broches du codeur rotatif incrémental KY-040 sont illustrées ci-dessous
Les deux premières broches (Terre et Vcc) sont utilisées pour alimenter le codeur, généralement une alimentation + 5V est utilisée. En plus de tourner le bouton dans le sens des aiguilles d'une montre et dans le sens anti-horaire, l'encodeur dispose également d'un interrupteur (actif bas) qui peut être enfoncé en appuyant sur le bouton à l'intérieur. Le signal de ce commutateur est obtenu via la broche 3 (commutateur). Enfin, il a les deux broches de sortie qui produisent les formes d'onde comme déjà discuté ci-dessus. Maintenant, apprenons à l'interfacer avec Arduino.
Schéma du circuit de l'encodeur rotatif Arduino
Le schéma de circuit complet pour l' interfaçage de l'encodeur rotatif avec Arduino est montré dans l'image ci-dessous
Le codeur rotatif a 5 broches dans l'ordre indiqué sur l'étiquette ci-dessus. Les deux premières broches sont Ground et Vcc qui est connectée à la Terre et + 5V pin de l'Arduino. L'interrupteur du codeur est connecté à la broche numérique D10 et est également tiré haut par une résistance de 1k. Les deux broches de sortie sont connectées respectivement à D9 et D8.
Pour afficher la valeur de la variable qui sera augmentée ou diminuée en tournant le bouton rotatif, nous avons besoin d'un module d'affichage. Celui utilisé ici est un écran LCD alphanumérique 16 * 2 couramment disponible. Nous avons connecté l'écran pour qu'il fonctionne en mode 4 bits et l'avons alimenté en utilisant la broche + 5V d'Arduino. Le potentiomètre est utilisé pour régler le contraste de l'écran LCD. Si vous voulez en savoir plus sur l'interfaçage de l'écran LCD avec Arduino, suivez le lien. Le circuit complet peut être construit au-dessus d'une maquette, mon ressemblait à quelque chose comme ça ci-dessous une fois que toutes les connexions ont été faites.
Programmation de votre Arduino pour encodeur rotatif
Il est assez facile et direct de programmer la carte Arduino pour interfacer un encodeur rotatif avec elle si vous aviez compris le principe de fonctionnement d'un encodeur rotatif. Nous devons simplement lire le nombre d'impulsions pour déterminer le nombre de tours effectués par le codeur et vérifier quelle impulsion est passée au niveau haut en premier pour trouver dans quelle direction le codeur a été tourné. Dans ce tutoriel, nous afficherons le nombre en cours d'incrémentation ou de décrémentation sur la première ligne de l'écran LCD et la direction de l'encodeur sur la deuxième ligne. Le programme complet pour faire de même se trouve au bas de cette page avec une vidéo de démonstration, il ne nécessite aucune bibliothèque. Maintenant, divisons le programme en petits morceaux pour comprendre le fonctionnement.
Depuis que nous avons utilisé un écran LCD, nous incluons la bibliothèque de cristaux liquides qui est présente par défaut dans l'IDE Arduino. Ensuite, nous définissons des broches pour connecter l'écran LCD à Arduino. Enfin, nous initialisons l'écran LCD sur ces broches.
#comprendre
Ensuite, dans la fonction de configuration , nous affichons un message d'introduction sur l'écran LCD, puis attendons 2 secondes pour que ce message soit lisible par l'utilisateur. Ceci permet de garantir que l'écran LCD fonctionne correctement.
lcd.print ("encodeur rotatif"); // Ligne de message d'introduction 1 lcd.setCursor (0, 1); lcd.print ("Avec Arduino"); // Retard de la ligne 2 du message d'introduction (2000); lcd.clear ();
L'encodeur rotatif a trois broches de sortie qui seront des broches INPUT pour l'Arduino. Ces trois broches sont respectivement le commutateur, la sortie A et la sortie B. Ceux-ci sont déclarés comme Input en utilisant la fonction pinMode comme indiqué ci-dessous.
// Déclaration du mode pin pinMode (Encoder_OuputA, INPUT); pinMode (Encoder_OuputB, INPUT); pinMode (Encoder_Switch, INPUT);
À l'intérieur de la fonction de configuration d' annulation, nous lisons l'état de la broche de sortie A pour vérifier le dernier état de la broche. Nous utiliserons ensuite ces informations pour comparer avec la nouvelle valeur pour vérifier quelle broche (sortie A ou sortie B) est devenue haute.
Previous_Output = digitalRead (Encoder_OuputA); // Lire la valeur initiale de la sortie A
Enfin, à l'intérieur de la fonction de boucle principale, nous devons comparer la valeur de la sortie A et de la sortie B avec la sortie précédente pour vérifier laquelle est la première. Cela peut être fait en comparant simplement la valeur de la sortie courant de A et B avec la sortie précédente comme indiqué ci-dessous.
if (digitalRead (Encoder_OuputA)! = Previous_Output) { if (digitalRead (Encoder_OuputB)! = Previous_Output) { Encoder_Count ++; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("Sens horaire"); }
Dans le code ci-dessus, la deuxième condition if est exécutée si la sortie B a changé par rapport à la sortie précédente. Dans ce cas, la valeur de la variable du codeur est incrémentée et l'écran LCD indique que le codeur est tourné dans le sens des aiguilles d'une montre . De même si cela si l' état échoue, dans la suite d' autre condition que nous décrémente la variable et l' affichage que le codeur tourne dans le sens anti - horaire direction. Le code correspondant est indiqué ci-dessous.
else { Encoder_Count--; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("sens anti-horaire"); } }
Enfin, à la fin de la boucle principale , nous devons mettre à jour la valeur de sortie précédente avec la valeur de sortie actuelle afin que la boucle puisse être répétée avec la même logique. Le code suivant fait de même
Previous_Output = digitalRead (Encoder_OuputA);
Une autre chose facultative est de vérifier si l'interrupteur de l'encodeur est enfoncé. Cela peut être surveillé en vérifiant la broche de l'interrupteur sur le codeur rotatif. Cette broche est une broche basse active, ce qui signifie qu'elle descendra lorsque le bouton sera enfoncé. Si elle n'est pas enfoncée, la broche reste haute, nous avons également utilisé une résistance de rappel pour nous assurer que le reste haut lorsque l'interrupteur n'est pas enfoncé, évitant ainsi la condition de virgule flottante.
if (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("Interrupteur enfoncé"); }
Fonctionnement de l'encodeur rotatif avec Arduino
Une fois que le matériel et le code sont prêts, téléchargez simplement le code sur la carte Arduino et mettez la carte Arduino sous tension. Vous pouvez l'alimenter via le câble USB ou utiliser un adaptateur 12V. Lorsqu'il est sous tension, l'écran LCD doit afficher le message d'introduction, puis être vide. Maintenant, tournez l'encodeur rotatif et vous devriez voir la valeur commencer par incrémentation ou décrémentation en fonction du sens de rotation. La deuxième ligne vous montrera si l'encodeur est tourné dans le sens horaire ou anti-horaire. L'image ci-dessous montre la même chose
De même, lorsque le bouton est enfoncé, la deuxième ligne indique que le bouton est enfoncé. Le travail complet peut être trouvé dans la vidéo ci-dessous. Ceci est juste un exemple de programme pour interfacer l'encodeur avec Arduino et vérifier s'il fonctionne comme prévu. Une fois arrivé ici, vous devriez pouvoir utiliser l'encodeur pour n'importe lequel de vos projets et programmer en conséquence.
J'espère que vous avez compris le tutoriel et que les choses ont fonctionné comme prévu. Si vous rencontrez des problèmes, utilisez la section des commentaires ou les forums pour obtenir une aide technique.