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
|
.
//
//
//***********************************************************
// 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 .
