Table des matières:

Contrôle de position angulaire du moteur pas à pas 28BYJ-48 avec manette Arduino et analogique : 3 étapes
Contrôle de position angulaire du moteur pas à pas 28BYJ-48 avec manette Arduino et analogique : 3 étapes

Vidéo: Contrôle de position angulaire du moteur pas à pas 28BYJ-48 avec manette Arduino et analogique : 3 étapes

Vidéo: Contrôle de position angulaire du moteur pas à pas 28BYJ-48 avec manette Arduino et analogique : 3 étapes
Vidéo: Défi Arduino: Contrôler le moteur pas-à-pas 28BYJ-48 avec l'encodeur de rotation KY-040 2024, Juillet
Anonim
Contrôle de position angulaire du moteur pas à pas 28BYJ-48 avec manette Arduino et analogique
Contrôle de position angulaire du moteur pas à pas 28BYJ-48 avec manette Arduino et analogique

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é: