Table des matières:
- Étape 1: Encodeurs rotatifs à l'intérieur
- Étape 2: Une misère qui cause une réelle douleur à beaucoup
- Étape 3: Solution de machine à états finis (FSM)
- Étape 4: Code Arduino
- Étape 5: Intégration sans faille
Vidéo: Une solution rotative Arduino complète : 5 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:08
Les encodeurs rotatifs sont des boutons de commande rotatifs pour les projets électroniques, souvent utilisés avec les microcontrôleurs de la famille Arduino. Ils peuvent être utilisés pour affiner les paramètres, naviguer dans les menus, déplacer des objets à l'écran, définir des valeurs de toute nature. Ils remplacent couramment les potentiomètres, car ils peuvent être tournés plus précisément et à l'infini, ils incrémentent ou décrémentent une valeur discrète à la fois, et sont souvent intégrés à un interrupteur poussable pour les fonctions de type sélection. Ils sont de toutes formes et tailles, mais la gamme de prix la plus basse est difficile à interagir comme expliqué ci-dessous.
Il existe d'innombrables articles sur les détails de fonctionnement et les modes d'utilisation des encodeurs rotatifs, ainsi que de nombreux exemples de codes et de bibliothèques sur la façon de les utiliser. Le seul problème est qu'aucun d'entre eux ne fonctionne avec une précision à 100% avec les modules rotatifs chinois les plus bas de gamme.
Étape 1: Encodeurs rotatifs à l'intérieur
La partie rotative de l'encodeur a trois broches (et deux de plus pour la partie interrupteur optionnelle). L'un est un terrain d'entente (GND noir), les deux autres servent à déterminer la direction lorsque le bouton est tourné (ils sont souvent appelés CLK bleu et DT rouge). Les deux sont attachés à une broche d'entrée PULLUP du microcontrôleur, faisant du niveau HAUT leur lecture par défaut. Lorsque le bouton est tourné vers l'avant (ou dans le sens des aiguilles d'une montre), le CLK bleu tombe d'abord au niveau BAS, puis le DT rouge suit. En tournant plus loin, le bleu CLK remonte à HIGH, puis à mesure que le patch GND commun quitte les deux broches de connexion, le rouge DT remonte également à HIGH. Complétant ainsi un tick complet FWD (ou dans le sens des aiguilles d'une montre). Il en va de même dans l'autre sens BWD (ou dans le sens inverse des aiguilles d'une montre), mais maintenant le rouge tombe en premier et le bleu remonte en dernier, comme indiqué respectivement dans les deux images de niveau.
Étape 2: Une misère qui cause une réelle douleur à beaucoup
Problème courant pour les amateurs d'Arduino, les modules d'encodeur rotatif bon marché font rebondir des changements supplémentaires dans les niveaux de sortie, provoquant des lectures de comptage supplémentaires et erronées. Cela empêche un comptage parfait et rend impossible l'intégration de ces modules dans des projets rotatifs précis. Ces rebonds supplémentaires sont causés par les mouvements mécaniques des patchs sur les broches de connexion, et même l'application de condensateurs supplémentaires ne peut pas les éliminer complètement. Les rebonds peuvent apparaître n'importe où dans les cycles de tick complets et sont illustrés par des scénarios de la vie réelle sur les images.
Étape 3: Solution de machine à états finis (FSM)
L'image montre l'espace d'état complet des changements de niveau possibles pour les deux broches (bleu CLK et rouge DT), à la fois pour les rebonds corrects et faux. Sur la base de cette machine d'état, une solution complète peut être programmée qui fonctionne toujours avec une précision à 100%. Parce qu'aucun délai de filtrage n'est nécessaire dans cette solution, elle est également la plus rapide possible. Un autre avantage de séparer l'espace d'état des broches du mode de travail est que l'on peut appliquer à la fois des modes d'interrogation ou d'interruption à son gré. L'interrogation ou les interruptions peuvent détecter les changements de niveau sur les broches et une routine distincte calculera le nouvel état en fonction de l'état actuel et des événements réels des changements de niveau.
Étape 4: Code Arduino
Le code ci-dessous compte les ticks FWD et BWD sur le moniteur série et intègre également la fonction de commutateur en option.
// Peter Csurgy 2019-04-10
// Broches du rotatif mappées sur les ports Arduino
#définir SW 21 #définir CLK 22 #définir DT 23
// Valeur actuelle et précédente du compteur accordé par le rotatif
int curVal = 0; int prevVal = 0;
// Sept états de FSM (machine à états finis)
#define IDLE_11 0 #define SCLK_01 1 #define SCLK_00 2 #define SCLK_10 3 #define SDT_10 4 #define SDT_00 5 #define SDT_01 6 int state = IDLE_11;
void setup() {
Serial.begin (250000); Serial.println("Démarrer…"); // Le niveau HAUT sera par défaut pour toutes les broches pinMode(SW, INPUT_PULLUP); pinMode(CLK, INPUT_PULLUP); pinMode(DT, INPUT_PULLUP); // CLK et DT déclencheront des interruptions pour tous les changements de niveau attachInterrupt(digitalPinToInterrupt(CLK), RotaryCLK, CHANGE); attachInterrupt(digitalPinToInterrupt(DT),rotatingDT, CHANGE); }
boucle vide() {
// Gestion du switch optionnel intégré à certains encodeurs rotatifs if (digitalRead(SW)==LOW) { Serial.println("Pressed"); while(!digitalRead(SW)); } // Tout changement dans la valeur du compteur est affiché dans Serial Monitor if (curVal != prevVal) { Serial.println(curVal); prevVal = curVal; } }
// Transitions State Machine pour les changements de niveau CLK
void RotaryCLK() { if (digitalRead(CLK)==LOW) { if (state==IDLE_11) state = SCLK_01; sinon si (état==SCLK_10) état = SCLK_00; sinon si (état==SDT_10) état = SDT_00; } else { si (état==SCLK_01) état = IDLE_11; sinon si (état==SCLK_00) état = SCLK_10; sinon si (état==SDT_00) état = SDT_10; else if (état==SDT_01) { état = IDLE_11; curVal--; } } }
// Transitions State Machine pour les changements de niveau DT
void RotaryDT() { if (digitalRead(DT)==LOW) { if (state==IDLE_11) state = SDT_10; sinon si (état==SDT_01) état = SDT_00; sinon si (état==SCLK_01) état = SCLK_00; } else { si (état==SDT_10) état = IDLE_11; sinon si (état==SDT_00) état = SDT_01; sinon si (état==SCLK_00) état = SCLK_01; else if (state==SCLK_10) { state = IDLE_11; curVal++; } } }
Étape 5: Intégration sans faille
Vous pouvez vérifier dans la vidéo ci-jointe que la solution FSM fonctionne avec précision et rapidité, même en cas d'encodeurs rotatifs à faible portée avec divers effets de rebond sporadiques.
Conseillé:
Comment faire une horloge analogique et une horloge numérique avec une bande LED à l'aide d'Arduino: 3 étapes
Comment faire une horloge analogique et une horloge numérique avec une bande LED à l'aide d'Arduino Horloge numérique avec Led Strip et module MAX7219 Dot avec Arduino. Elle corrigera l'heure avec le fuseau horaire local. L'horloge analogique peut utiliser une bande LED plus longue, elle peut donc être accrochée au mur pour devenir une œuvre d'art
Une solution de vision abordable avec bras robotique basée sur Arduino : 19 étapes (avec photos)
Une solution de vision abordable avec bras robotique basée sur Arduino : lorsque nous parlons de vision industrielle, cela nous semble toujours tellement inaccessible. Alors que nous avons fait une démo de vision open source qui serait super facile à faire pour tout le monde. Dans cette vidéo, avec la caméra OpenMV, peu importe où se trouve le cube rouge, le robot est
SKY CAM une solution de caméra aérienne : 10 étapes (avec photos)
SKY CAM une solution de caméra aérienne : ce Instructable vous expliquera comment j'ai fait un système de caméra de câble à télécommande (semi-autonome) pour mon projet de produits électroniques GCSE à l'école et, espérons-le, vous permettra de créer votre propre système ! Ceci est conçu comme un guide approximatif
Comment faire en sorte que votre servomoteur fasse une rotation complète : 5 étapes
Comment faire en sorte que votre servomoteur fasse une rotation complète : Qu'est-ce qu'un servomoteur ? Un servomoteur est un appareil électrique qui peut pousser ou faire tourner un objet avec une grande précision. Si vous souhaitez effectuer une rotation et un objet à des angles ou à une distance spécifiques, vous utilisez un servomoteur. Il est juste composé d'un simple moteur avec
Comment fabriquer une lampe de bureau rotative avec moteur à courant continu : 5 étapes (avec photos)
Comment faire une lampe de bureau rotative avec moteur à courant continu : c'est un moyen simple et efficace de construire une lampe rotative rougeoyante qui n'a pas besoin de machinerie complexe ou lourde, peut être placée sur votre bureau ou dans le salon, c'est un article personnalisable ce qui signifie que vous pouvez utiliser votre propre couleur de lumière ou faire