Mise à jour le 03/03/2021 :
Sommaire :
- Principe de fonctionnement
- Programme pour le pilotage d’un moteur pas à pas avec Arduino et un joystick
- Vidéo pour le tuto
- Pour tout probléme
- Retour au menu
Principe de fonctionnement |
.
Le but de ce tutoriel est de piloter un moteur pas à pas avec un joystick.
Nous verrons comment définir la valeur des positions de notre joystick pour créer un mouvement de marche avant ou de marche arrière et de conserver le couple maintien quand notre manipulateur est dans un état statique.
Dans le programme vous pourrez retrouver :
La création d’un générateur d’impulsion qui nous permettra de définir la vitesse et le déplacement du moteur pas à pas
La gestion du couple maintien par l’intermédiaire d’un bouton
Et enfin le pilotage du moteur pas à pas en avant et en arrière avec le joystick par l’intermédiaire de la borne DIR se trouvant sur notre driver
.
Retour au sommaire
Programme pour le pilotage d’un moteur pas à pas avec Arduino
|
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 |
// // //*********************************************************** // RedOhm // le 06/02/2021 // // Pilotage d'un moteur pas a pas avec joystick // // but : // 1 - creation d'un generateur d'impulsion pour le deplacement // et la vitesse du moteur ( avec la fonction micros() ) // 2 - Creation de la fonction debrayage du moteur // 4 - Pilotage avec un Joystik // // Ce programme est un logiciel libre: vous pouvez le redistribuer // et / ou le modifier // Ce programme est distribué dans l'espoir qu'il vous sera utile, // mais sans aucune garantie de fonctionnement // // Par: Mazelin Herve // IDE Arduino 1.8.13 //********************************************************** // Declaration des variables demarrage // unsigned long-> déclare une variable de type long non signé // pour la base de temps il y a 1 000 microsecondes dans une milliseconde // et // 1 000 000 microsecondes dans une seconde. unsigned long demarrage = micros(); // Declaration des variables // int -> declare une variable du type int (pour integer, entier en anglais) // elles peuvent stocker des valeurs de - 32 768 à 32 767 int base_de_temps1 = 1 ; // Affectation des sorties de la carte Ardunio pour le pilotage // du driver DRI0043 // une impulsion montante ou descendante sur cette entrée fait // avancer le moteur d’un pas. La tension de l’impulsion doit // être de 4,5 à 5 V pour un état HAUT et 0 à 0,5 V pour un état BAS. // La largeur d’impulsion doit être de minimum 2,5 μs pour un // fonctionnement correct. int PUL=12; // Definit le sens de rotation en fonction de l'etat bas ou haut int DIR=10; // ce signal est utilisé pour permettre ou interdire l’utilisation du // driver. Le moteur est hors tension int ENA=11; // déclaration de l'entrée du bouton branché sur la broche 15 // pour le debrayage du moteur int bouton_debrayage = 15; int bouton_debrayage_v; // Declaration de pin pour le voyant marche avant vert int voyant_vert_mar = 20; // Declaration de pin pour le voyant marche arriere rouge int voyant_rouge_arr = 21; // declaration de l'entree analogique 6 pour l'axe x int JoyStick_X = 6; // axe x // declaration de la vitesse du joystick int vitesse=0 ; /* * Un programme Arduino doit impérativement contenir cette fonction * Elle ne sera exécutee une seule fois au démarrage du microcontroleur * Elle sert à configurer globalement les entrées sorties * */ void setup() { // Configure la broche spécifiée pour qu'elle se comporte soit en entrée, // soit en sortie. // Configuration des broches pour le driver pinMode (PUL, OUTPUT); pinMode (DIR, OUTPUT); pinMode (ENA, OUTPUT); // Configuration des broches pour les boutons et les voyants pinMode(bouton_debrayage,INPUT); pinMode(voyant_vert_mar,OUTPUT); pinMode(voyant_rouge_arr,OUTPUT); } // Le programme principal s’exécute par une boucle infinie appelée Loop () void loop() { // ******************************************* // Demande de debrayage du moteur // ******************************************* // debrayage du moteur de son driver bouton_debrayage_v = digitalRead(bouton_debrayage); if ( bouton_debrayage_v == 1 ) { digitalWrite(ENA,LOW); } // ******* Fin de demande debrayage ********** // ******************************************* // Traitement du JoyStick // ******************************************* int x; // Lecture de l'entree analogique x=analogRead(JoyStick_X); if ((x>501)&&(x<518)&&(bouton_debrayage_v==0)) { digitalWrite(voyant_vert_mar,LOW); digitalWrite(voyant_rouge_arr,LOW); digitalWrite(ENA,HIGH); digitalWrite(DIR,HIGH); digitalWrite(PUL,HIGH); } // si x est superieur a 520 les instructions comprises // entre les accolades sont exécutées. else if (x>520) { // Marche arriere digitalWrite(voyant_vert_mar,LOW); digitalWrite(voyant_rouge_arr,HIGH); digitalWrite(ENA,HIGH); digitalWrite(DIR,HIGH); vitesse = map ( x,520,1023,3500,5); deplacement(); } // sinon si x est inferieur a 500 les instructions comprises // entre les accolades sont exécutées. else if (x<500) { // Marche avant digitalWrite(voyant_rouge_arr,LOW); digitalWrite(voyant_vert_mar,HIGH); digitalWrite(DIR,LOW); digitalWrite(ENA,HIGH); vitesse = map ( x,500,0,3500,5); deplacement(); } // ***** Fin du traitement du JoyStick ********* } //============================================== //Fonction de deplacement du moteur //============================================== void deplacement() { // la ligne if effectue la difference entre le temps actuel et le // temps de debut de boucle . if (micros()-demarrage>vitesse) { //Inversion de la valeur de la variable memoire et envoie l'information //a la broche digitalWrite(PUL,base_de_temps1=!base_de_temps1); // on reinitialise la variable demarrage avec le contenu de micros() demarrage=micros(); } } |
.
Retour au sommaire
Vidéo pour le tuto |
.
.
Retour au sommaire
Pour tout probléme |
.
Pour tout problème de téléchargement ou pour nous suivre sur les réseaux sociaux voici les plateformes sur lesquelles nous éditons.
Cliquez sur celle qui vous intéresse .