• Post category:Fort
  • Commentaires de la publication :0 commentaire
  • Dernière modification de la publication :mars 13, 2022
  • Temps de lecture :9 min de lecture

Cycle de décélération, pause et accélération Moteur pas à pas bipolaire déclenché par 1 bouton avec un L298N et Arduino Uno *

Niveau APPRENTISSAGE :   Fort

 

    Prérequis :

Matériel :

  • 1 x Carte Arduino Uno
  • 1 x Bouton
  • 1 x L298N
  • 1 x Moteur PAP bipolaire
  • 1 x Alimentation 12v
  • Fils de connexion
  • 1 x Breadboard

Version IDE :

 

 

Vidéo de démonstration :

 

Schéma de câblage :

 

Code :

#include <Stepper.h>
//Nombre de pas par tour du moteur PAP
const int stepsPerRevolution = 200;
//Le numéro de la broche du bouton stop
const int Boutonstop = 2;
//Initialise le moteur PAP sur les broches 8 à 11 du L298N
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
//Vitesse max du moteur PAP
int Vitessemoteur = 200;
//Temps d'accélération et deceleration du moteur.
int TpsAccDec = 30;
//Temps de pause du moteur en ms.
int Tpsdepause = 5000;

//Variable programme/////////////
int Etatvitessemoteur = 1;
int Etatmoteur = 0;
int Etatpause = 0;
int Etatboutonstop = 0;
unsigned long currentTime = 0;
unsigned long previousTime = 0;
unsigned long previousTime2 = 0;
/////////////////////////////////

void setup() {
pinMode(Boutonstop, INPUT_PULLUP);
Etatmoteur = 1;
}

void loop() {
//On récupére le nombre de millisecondes écoulées "millis()" depuis que la carte Arduino a commencé à exécuter le programme
//et on y stocke dans la variable "currenttime" qui sera utilisée pour TIMER1 "previousTime" et TIMER2 "previousTime2" aprés.
currentTime=millis();

//Si détection appuie bouton "digitalRead(Boutonstop) == LOW"
//et que l'on n'a pas déjà lancer un cycle d'arrêt "Etatboutonstop == 0" grace au bouton.
//on demande arrêt du moteur "Etatmoteur = 0" et
//on bloque la détection appuie bouton "Etatboutonstop = 1" tant que le cycle n'est pas fini.

if (digitalRead(Boutonstop) == LOW && Etatboutonstop == 0) {
Etatboutonstop = 1;
Etatmoteur = 0;
}

//On attend que le l'opération(TIMER1) currentTime-PreviousTime1 soit > "TpsAccDec" Temps d'Accélération décélération
//Une fois le temps accélération décélération atteind "TpsAccDecde" :
//on récupére le nombre de millisecondes écoulées depuis que la carte Arduino a commencé à exécuter le programme "currenttime" et au stock dans "previoustime" pour mettre à jour notre TIMER1
//Si on demande la marche du moteur "Etatmoteur = 1"
//et que sa vitesse "Etatvitessemoteur" < que la vitesse max "Vitessemoteur"
//alors on augmente sa vitesse de +1 "etatvitessemoteur++"
//Ou Si on a demandé l'arrêt du moteur "Etatmoteur = 0"
//et que sa vitesse "Etatvitessemoteur" > que la vitesse min "1"
//alors on diminue sa vitesse de -1 "Etatvitessemoteur-;

//Ce cycle va se répéter à intervalles réguliers qui est = "TpsAccDec" tant que l'opération
//if(Etatmoteur == 1 && Etatvitessemoteur Vitessemoteur) ou
//if(Etatmoteur == 0 && Etatvitessemoteur > 1)
//ne sera pas fini.

if((currentTime-previousTime)>TpsAccDec){
previousTime=currentTime;
if(Etatmoteur == 1 && Etatvitessemoteur < Vitessemoteur){
Etatvitessemoteur++;
}
if(Etatmoteur == 0 && Etatvitessemoteur > 1){
Etatvitessemoteur--;
}
}

//Si une demande arrêt moteur est en cours "Etatmoteur == 0"
//et que sa vitesse est à l'arrêt "Etatvitessemoteur == 1"
//on met les sorties de L298N au repos pour pas que le moteur PAP et L298N chauffe
//On récupére le nombre de millisecondes écoulées depuis que la carte Arduino a commencé à exécuter le programme "currenttime" et a le stock dans "previousTime2" pour mettre à jour notre TIMER2
//On met alors le cycle en pause "Etatpause = 1"
//Et on attend que l'opération (TIMER2) currentTime-PreviousTime2 soit > "Tpsdepause" Tant de pause du moteur
//Une fois le temps de pause écoulé on stop la pause "Etatpause = 0"
//On demande la marche du moteur "Etatmoteur = 1"

if(Etatmoteur == 0 && Etatvitessemoteur == 1){
digitalWrite (8, LOW);
digitalWrite (9, LOW);
digitalWrite (10, LOW);
digitalWrite (11, LOW);
if(Etatpause == 0){
previousTime2=currentTime;
}
Etatpause = 1;
if((currentTime-previousTime2)>Tpsdepause){
Etatpause = 0;
Etatmoteur = 1;
}
}

//Si on est en demande de marche "Etatmoteur == 1 "
//Et que la vitesse du moteur "Etatvitessemoteur" == "Vitessemoteur" vitesse max
//Alors ont re autorise l'appui sur le bouton "Etatboutonstop = 0"

if(Etatmoteur == 1 && Etatvitessemoteur == Vitessemoteur){
Etatvitessemoteur = Vitessemoteur;
Etatboutonstop = 0;
}

//Si la consigne de vitesse du moteur n'est pas nulle "etatvitessemoteur > 1"
//On envoie la vitesse du moteur au L298N "my Stepper.Set Speed(Etatvitessemoteur)"
//Et on effectue un PAS sur le moteur PAP myStepper.step(1);
if(Etatvitessemoteur > 1){
myStepper.setSpeed(Etatvitessemoteur);
myStepper.step(1);
}
}

 


+ Infos sur le langage utilisé :

1. Fonctions
2. Variables
3. Stucture

 

Laisser un commentaire