Utilisation des encodeurs rotatifs avec les cartes Arduino
Vous pouvez contrôler de nombreux projets en utilisant des composants tels que des boutons ou des curseurs, mais que faire si votre construction nécessite un bouton rotatif ? Si votre projet nécessite une entrée rotative, vous avez deux choix : soit un potentiomètre, soit un encodeur rotatif.
Les potentiomètres, qui modifient la résistance en fonction de la position du bouton, sont plus simples et souvent un bon choix, mais vous ne pouvez les tourner que dans le sens horaire ou antihoraire (jusqu'à présent). Si vous avez besoin de quelque chose qui peut tourner continuellement dans les deux sens, le meilleur choix est un codeur rotatif. Si vous avez besoin d'aide pour choisir entre les deux, notre discussion sur le codeur vs. potentiomètre peut vous aider à trouver votre réponse.
Les codeurs existent en deux styles de base :
1. Les codeurs incrémentaux utilisent une série d'impulsions en quadrature pour indiquer jusqu'où et dans quelle direction un arbre tourne.
2. Les codeurs absolus connaissent intrinsèquement leur position angulaire.
Cet article se concentrera principalement sur les codeurs incrémentaux, le type de codeur que vous verrez le plus couramment. Les codeurs à sortie unique (également appelés tachymètres) sont également disponibles, mais ils sont beaucoup moins utiles car ils n'indiquent que la distance parcourue par un arbre, pas sa direction. Vous pouvez consulter notre article sur les types de codeurs pour une discussion plus détaillée, mais aujourd'hui nous couvrirons les bases de fonctionnement d'un codeur incrémental et comment l'interfacer avec une carte Arduino.
Codeurs en quadrature : tutoriel et aperçu
Diagramme de quadrature pour les signaux A et B de l'encodeur. Un front montant pour B et un signal bas pour A signifient un déplacement vers la droite sur ce schéma, tandis qu'un front descendant pour A avec B haut signifie un déplacement vers la gauche.
Au cœur de la plupart des encodeurs se trouvent des sorties “A” et “B”, pulsant régulièrement et de manière incrémentielle. Ces sorties se combinent avec l’alimentation et la masse, comme requis. Les sorties A et B sont “codées en quadrature”, ce qui signifie que chaque signal a un cycle de service de 50 % (allumé la moitié du temps et éteint l’autre moitié du temps). Voici comment cela fonctionne :
- Chaque cycle de service est déphasé de 90° par rapport à l’autre; une sortie change lorsque l’autre est à mi-chemin du temps nécessaire pour changer d’état.
- Un microcontrôleur ou une carte dédiée connectée traduit ces impulsions en un incrément de rotation, et la séquence d’impulsions indiquera la direction dans laquelle l’arbre a tourné.
Comme indiqué dans le schéma ci-dessus, si le signal B monte pendant que A est à l'état bas, alors la position de ce motif a avancé vers la droite. Cependant, si le signal B monte lorsque A est déjà à l'état haut, alors on avancerait vers la gauche. Combiné avec la montée et la descente du signal A, cela donne quatre états distincts pour chaque ligne :
Le même motif de signal est disponible pour le signal A, donnant huit transitions possibles distinctes et quatre dans chaque direction. Avec ce motif enroulé et se répétant en cercle, vous avez désormais la base pour un encodeur rotatif en quadrature.
1. B montant, A bas
2. B descendant, A haut
3. B montant, A haut
4. B descendant, A bas
Utilisation d'un encodeur rotatif avec Arduino
Nous associerons deux types d'encodeurs avec l'Arduino :
- Encodeur à contact : plus petit, généralement utilisé comme dispositif d'interface.
- Encodeur optique (LPD3806-600BM-G5-24C) : style plus grand avec un support de palier, généralement utilisé pour la mesure de vitesse de moteur.
Si vous utilisez le plus petit encodeur, effectuez les étapes suivantes :
1. Connectez la ligne du milieu à la masse.
2. Branchez une connexion externe à D2 et l'autre à D3 ; aucune tension positive n'est requise.
Pour le plus grand encodeur, suivez ces étapes :
1. Branchez le fil d'alimentation rouge à +5V et le fil noir à la masse.
2. Reliez les lignes A et B (vert et blanc) à Arduino D2 et D3.
3. Notez que les connexions, les exigences de tension et les schémas de couleurs peuvent varier en fonction de votre mise en œuvre.
Codeur Arduino
Image : Jeremy S. Cook
Une fois que vous comprenez comment les lignes A et B d'un encodeur pulsent avec la rotation, obtenir une sortie utile consiste à traduire cette entrée en code. Cette étape est simple en théorie mais peut être délicate en pratique. Vous pouvez trouver le code d'exemple ici (ainsi qu'un dessus imprimable en 3D pour aider aux tests). Bien que le dessus ne soit pas parfait, il est directionnellement précis et illustre comment fonctionne un encodeur. Lorsque le microcontrôleur de l'Arduino détecte une transition entre haut et bas sur l'une des lignes, il compare les états des deux lignes et ajoute ou soustrait un incrément selon le cas approprié.
Assurez-vous de sélectionner D2 et D3 car ce sont les deux seules entrées pour l'ATmega328 dans de nombreuses cartes Arduino capables de générer une interruption. Cela signifie que lorsqu'une transition est détectée ici, elle entre immédiatement dans une routine de lecture, sans attendre que la logique du programme l'appelle.
Pensez également au code de rebondissement millis(), qui s'adapte à une entrée changeant rapidement d'états lors d'une transition et peut se connecter et se déconnecter rapidement pendant un court instant. Bien que ce code fonctionne de manière acceptable dans certaines applications et puisse vous aider à comprendre comment fonctionnent les encodeurs, obtenir des lectures avec une précision de 100% n'est pas facile.
Utilisation de la bibliothèque Arduino Encoder
Le code de l'encodeur Arduino vous aidera à comprendre comment fonctionnent les encodeurs, mais si vous voulez simplement en utiliser un dans votre projet, profitez de la bibliothèque prête à l'emploi de Paul Stoffregen. Voici comment commencer :
1. Téléchargez la bibliothèque encoder depuis GitHub.
2. Sur l'IDE Arduino, allez dans Sketch => Include Library => Add .ZIP Library et ajoutez "Encoder-master.zip".
3. Une fois installée, vous verrez sous File => Examples => Encoder, qui a quatre programmes répertoriés. Chargez l'exemple "Basic" et transférez-le sur votre carte Arduino.
4. Connectez votre encodeur avec le positif et le négatif connectés comme avant, mais cette fois-ci, raccordez les fils de signal A et B à D5 et D6.
5. Ouvrez le moniteur série à 9600 bauds et vous verrez la position s'incrémenter et se décrémenter avec précision.
Comme avec l'encodeur optique, la position devrait changer sans aucun ajustement. Pour plus d'amusement, ouvrez le traceur série de l'IDE Arduino au même débit en bauds. Au lieu de simplement vous indiquer les numéros de position, il créera automatiquement un graphique des valeurs.
Que vous les utilisiez comme interface personnalisée ou pour mesurer la vitesse et la distance, les encodeurs offrent une excellente méthode d'entrée rotative pour votre projet Arduino. Ils demandent un peu plus de travail à configurer que de nombreux autres types d'appareils, mais les résultats peuvent en valoir la peine.
Étiquettes d'article