Aller au contenu


Photo
- - - - -

Géré la vitesse de mon moteur pas a pas


22 réponses à ce sujet

#21 Victorien

Victorien

    Membre occasionnel

  • Membres
  • Pip
  • 96 messages

Posté 22 janvier 2021 - 05:54

coucou

j'ai oublié une petite question ?

sur le programme de jpbbricole , peut on y rajouter un bouton start pour l'anser le programme (donc faire tourner le moteur) ? et stop pour l'arreter .

Tout en gardant l'alime .



#22 jpbbricole

jpbbricole

    Membre

  • Membres
  • 19 messages
  • Gender:Male
  • Location:CH1804 Corsier-Sur-Vevey

Posté 22 janvier 2021 - 09:39

Bonsoir Victorien

 

Oui, certainement, je regarde ça demain.

 

Cordialement 

jpbbricole 


L'expérience est la seule chose qu'il ne faut acheter que d'occasion!


#23 jpbbricole

jpbbricole

    Membre

  • Membres
  • 19 messages
  • Gender:Male
  • Location:CH1804 Corsier-Sur-Vevey

Posté 23 janvier 2021 - 08:30

Bonjour Vitctorien

 

Voilà la version avec boutons marche et arrêt:
 

/*
    Name:       Vitesse MPAP
    Auteur:     jpbbricole
*/
#define tempoDepart 2080;
int tempo = 0;                         // Moteur arrete
int tempoAccelerer = -500;
int tempoRalentir = 700;
int tempoAddition = 0;

#define driverDirPin 4
#define driverStepPin 5    
#define boutonAccelererPin 6    
#define boutonRalentirPin 7
#define boutonMarchePin 8
#define boutonArretPin 9

void setup()
{
	pinMode(driverDirPin, OUTPUT);
	pinMode(driverStepPin, OUTPUT);

	pinMode(boutonAccelererPin, INPUT_PULLUP);  // L'autre cote du bouton au GND
	pinMode(boutonRalentirPin, INPUT_PULLUP);   //         "        "        "
	pinMode(boutonMarchePin, INPUT_PULLUP);
	pinMode(boutonArretPin, INPUT_PULLUP);

	digitalWrite(driverDirPin, LOW);            // On met la broche DIR a l'etat bas
}

void loop()
{
	for (int i = 0; i <= 200; i++)
	{
		tempoAddition = 0;
		if (digitalRead(boutonAccelererPin) == LOW)      // Si le bouton accelerer est presse
		{
			tempoAddition = tempoAccelerer;
		}
		else if (digitalRead(boutonRalentirPin) == LOW)  // Si le bouton freiner est presse
		{
			tempoAddition = tempoRalentir;
		}
		else if (digitalRead(boutonMarchePin) == LOW)    // Si le bouton marche est presse
		{
			tempo = tempoDepart;
		}
		else if (digitalRead(boutonArretPin) == LOW)     // Si le bouton arrêt est presse
		{
			tempo = 0;
		}

		if (tempo > 0)
		{
			digitalWrite(driverStepPin, LOW);
			delayMicroseconds(tempo + tempoAddition);
			digitalWrite(driverStepPin, HIGH);
			delayMicroseconds(tempo + tempoAddition);
		}
	}
}

Et pourquoi pas, avec marche avant et marche arrière?

/*
    Name:       Vitesse MPAP
    Auteur:     jpbbricole

	https://www.robot-maker.com/forum/topic/13336-gere-la-vitesse-de-mon-moteur-pas-a-pas/
*/
#define tempoDepart 2080;
int tempo = 0;                         // Moteur arrete
int tempoAccelerer = -500;
int tempoRalentir = 700;
int tempoAddition = 0;

#define driverDirPin 4
#define driverStepPin 5   
 
#define boutonAccelererPin 6    
#define boutonRalentirPin 7
#define boutonMarchePin 8
#define boutonArretPin 9
#define boutonAvantPin 10
#define boutonArrierePin 11

void setup()
{
	pinMode(driverDirPin, OUTPUT);
	pinMode(driverStepPin, OUTPUT);

	pinMode(boutonAccelererPin, INPUT_PULLUP);  // L'autre cote du bouton au GND
	pinMode(boutonRalentirPin, INPUT_PULLUP);
	pinMode(boutonMarchePin, INPUT_PULLUP);
	pinMode(boutonArretPin, INPUT_PULLUP);
	pinMode(boutonAvantPin, INPUT_PULLUP);
	pinMode(boutonArrierePin, INPUT_PULLUP);

	digitalWrite(driverDirPin, LOW);            // On met la broche DIR a l'etat bas
}

void loop()
{
	for (int i = 0; i <= 200; i++)
	{
		tempoAddition = 0;
		if (digitalRead(boutonAccelererPin) == LOW)      // Si le bouton accelerer est presse
		{
			tempoAddition = tempoAccelerer;
		}
		else if (digitalRead(boutonRalentirPin) == LOW)  // Si le bouton freiner est presse
		{
			tempoAddition = tempoRalentir;
		}
		else if (digitalRead(boutonMarchePin) == LOW)    // Si le bouton marche est presse
		{
			tempo = tempoDepart;
		}
		else if (digitalRead(boutonArretPin) == LOW)     // Si le bouton arrêt est presse
		{
			tempo = 0;
		}
		else if (digitalRead(boutonAvantPin) == LOW)     // Si le bouton avant est presse
		{
			digitalWrite(driverDirPin, LOW);             // On met la broche DIR a l'etat bas marche avant
		}
		else if (digitalRead(boutonArrierePin) == LOW)   // Si le bouton arrière est presse
		{
			digitalWrite(driverDirPin, HIGH);            // On met la broche DIR a l'etat haut marche arriere
		}

		if (tempo > 0)
		{
			digitalWrite(driverStepPin, LOW);
			delayMicroseconds(tempo + tempoAddition);
			digitalWrite(driverStepPin, HIGH);
			delayMicroseconds(tempo + tempoAddition);
		}
	}
} 

Je te laisse jouer au jeu des différences, il n'y en a pas beaucoup  :)

 

Cordialement

jpbbricole


L'expérience est la seule chose qu'il ne faut acheter que d'occasion!




Répondre à ce sujet



  


0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users