Table des matières:
Vidéo: Contrôle de position angulaire du moteur pas à pas 28BYJ-48 avec manette Arduino et analogique : 3 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:07
Il s'agit d'un schéma de contrôle pour le moteur pas à pas 28BYJ-48 que j'ai développé pour l'utiliser dans le cadre de mon projet de thèse de dernière année. Je n'ai jamais vu cela auparavant, alors j'ai pensé télécharger ce que j'ai découvert. Espérons que cela aidera quelqu'un d'autre là-bas!
Le code permet essentiellement à un moteur pas à pas de "copier" la position angulaire d'un joystick analogique, c'est-à-dire que si vous poussez le joystick vers l'avant, le moteur pointe vers le "nord". poussez le joystick vers l'ouest, le moteur tourne pour pointer dans la même direction.
Pour ma mise en œuvre, j'ai exigé que si le joystick est relâché, c'est-à-dire qu'il n'a pas de position angulaire, le moteur revienne dans la direction "home". La direction d'origine fait face à l'est, et le moteur (ou au moins tout pointeur / dispositif que vous avez attaché à l'arbre de sortie !) doit également faire face à cette direction lorsqu'il est sous tension.
Fournitures
Arduino Uno ou similaire
planche à pain et sélection de cavaliers (mâle à mâle, mâle à femelle)
Alimentation 5V
Module joystick analogique (idéalement avec une fonction de bouton poussoir momentané, cela facilite le repos de la position "home"
Moteur pas à pas 28BYJ-48 et pilote pas à pas ULN2003
Stylo, papier et blu-tac (ou tout autre dispositif de pointage à attacher au moteur !)
Étape 1: Étape 1: Configuration
Connectez le moteur pas à pas au pilote pas à pas et connectez les broches comme suit:
IN1 - Broche Arduino 8
IN2 - broche Arduino 9
IN3 - broche Arduino 10
IN4 - broche Arduino 11
Connectez votre alimentation 5v aux rails d'alimentation de votre maquette et connectez les entrées ULN2003 5v aux rails d'alimentation. connectez le rail de terre au sol sur votre Arduino.
pour le joystick, connectez comme suit:
Broche de commutation - broche Arduino 2
Axe X - Arduino A0 (Analogique en 0)
Axe Y - Arduino A1
+5V - Sortie Arduino 5V
GND - Arduino GND
Enfin, connectez la masse de votre maquette à l'autre broche Arduino GND
Étape 2: Étape 2: Expliquer le code
J'ai inclus le code Arduino complet à télécharger et à utiliser. Mais je ferai de mon mieux pour expliquer les parties pertinentes ici.
La théorie derrière ce code est que l'espace occupé par le joystick est divisé en un graphique, avec 0, 0 au centre. cependant, les entrées du joystick reposent à (environ) 512 au centre, donc pour surmonter cela, deux fonctions sont utilisées pour "mettre à zéro" la valeur lue sur les axes X et Y. selon l'alimentation que vous utilisez, vous devrez peut-être modifier les valeurs des fonctions ZeroX et ZeroY afin que votre joystick donne une lecture fiable de 0 au repos.
Lorsque les valeurs X, Y sont lues, elles sont d'abord converties en radians à l'aide de la fonction atan2() dans la bibliothèque math.h. Expliquer cette fonction est en dehors de la portée de cette instructable, mais s'il vous plaît allez le chercher - c'est une astuce assez simple de la géométrie !
Enfin, pour faciliter la vie de ceux d'entre nous qui travaillaient en degrés plutôt qu'en rads, la valeur rad calculée par atan2() est convertie en degrés.
En haut de la boucle se trouve un petit extrait de code qui vous permet de cliquer sur le bouton momentané du joystick pour déplacer l'emplacement "d'origine". Cela a été incroyablement utile lors du test du code, mais je l'ai laissé car je peux voir comment cela pourrait être utile dans certains cas.
Passons maintenant au gros du code ! nous commençons par lire le joystick les coordonnées X, Y séparées deux fois par un délai de 10 ms, puis vérifions si elles sont identiques - j'ai constaté que le joystick produisait occasionnellement des lectures sporadiques, et ce léger délai était suffisant pour arrêter le moteur de tourner en fonction de celles-ci. C'est aussi un délai suffisamment court pour qu'il ne semble pas interférer avec les entrées intentionnelles.
Le reste du code est plutôt explicite et j'ai fait de mon mieux pour le documenter; Une série d'instructions IF compare l'angle actuel du joystick à l'angle du moteur et déplace le moteur vers cet angle. Le 28BYJ-48 a 5,689 pas par degré, c'est pourquoi nous multiplions le mouvement requis par ce nombre apparemment impair !
La partie du code qui nécessite le plus d'explications est ce que j'ai surnommé le "boîtier enveloppant". Dans le cas où le joystick et le moteur étaient par ex. +175°, et le joystick s'est ensuite déplacé à -175° (un mouvement de seulement 10° sur le joystick, d'un peu nord-ouest à juste sud-ouest), le moteur se déplacerait DANS LE MAUVAISE DIRECTION de 350° ! pour rendre compte de cela, le cas particulier a été écrit.
Le boitier wraparound commence par vérifier que le moteur et le joystick ont des signes opposés, c'est-à-dire que le moteur est positif et le joystick négatif, ou vice versa. Il vérifie également que la somme des valeurs absolues (c'est-à-dire positives) du joystick et du moteur est supérieure à 180°.
Si ces deux affirmations sont vraies, la fonction vérifie alors si le moteur doit se déplacer dans le sens des aiguilles d'une montre (la valeur du moteur est négative) ou dans le sens inverse (si la valeur du moteur est positive).
Les valeurs absolues de l'angle du moteur et de l'angle du joystick sont totalisées et soustraites de 360° pour déterminer la distance à parcourir. Enfin, l'angle du moteur (qui reflète désormais l'angle du joystick) est mis à jour en tant que tel.
Étape 3: FINI
Donc, tout ce qu'il vous reste à faire est de télécharger le code sur votre Arduino et de l'exécuter ! Voir la vidéo ci-dessus pour une bonne idée du fonctionnement du projet. Ce serait utile pour les cardans de caméra, les bras robotiques et bien d'autres applications !
Si vous utilisez le code, faites-le moi savoir, et si vous voyez où le code peut être amélioré, j'aimerais entendre vos commentaires.
Conseillé:
Comment utiliser le moteur pas à pas 28BYJ-48 avec 3 boutons-poussoirs : 5 étapes
Comment utiliser le moteur pas à pas 28BYJ-48 avec 3 boutons poussoirs : Voulez-vous contrôler votre moteur pas à pas à l'aide de boutons poussoirs ? Cela peut faire dans le sens horaire, dans le sens inverse des aiguilles d'une montre, puis dans la fonction d'arrêt ? Alors cette vidéo est pour toi
Moteur pas à pas contrôlé par moteur pas à pas sans microcontrôleur ! : 6 étapes
Moteur pas à pas contrôlé par moteur pas à pas sans microcontrôleur ! : Dans ce rapide Instructable, nous allons faire un simple contrôleur de moteur pas à pas à l'aide d'un moteur pas à pas. Ce projet ne nécessite aucun circuit complexe ni microcontrôleur. Alors sans plus tarder, commençons
Moteur pas à pas contrôlé par moteur pas à pas sans microcontrôleur (V2) : 9 étapes (avec photos)
Moteur pas à pas contrôlé par moteur pas à pas sans microcontrôleur (V2) : Dans l'un de mes précédents Instructables, je vous ai montré comment contrôler un moteur pas à pas à l'aide d'un moteur pas à pas sans microcontrôleur. C'était un projet rapide et amusant, mais il est venu avec deux problèmes qui seront résolus dans ce Instructable. Alors, esprit
Locomotive modèle commandée par moteur pas à pas - Moteur pas à pas en tant qu'encodeur rotatif : 11 étapes (avec photos)
Locomotive modèle commandée par moteur pas à pas | Moteur pas à pas en tant qu'encodeur rotatif : Dans l'un des précédents Instructables, nous avons appris à utiliser un moteur pas à pas comme encodeur rotatif. Dans ce projet, nous allons maintenant utiliser cet encodeur rotatif à moteur pas à pas pour contrôler un modèle de locomotive à l'aide d'un microcontrôleur Arduino. Alors, sans fu
Moteur pas à pas contrôlé par moteur pas à pas - Moteur pas à pas en tant qu'encodeur rotatif : 11 étapes (avec photos)
Moteur pas à pas contrôlé par moteur pas à pas | Moteur pas à pas en tant qu'encodeur rotatif : Vous avez quelques moteurs pas à pas qui traînent et vous voulez faire quelque chose ? Dans ce Instructable, utilisons un moteur pas à pas comme encodeur rotatif pour contrôler la position d'un autre moteur pas à pas à l'aide d'un microcontrôleur Arduino. Alors sans plus tarder, allons-y