• Post category:Uno
  • Post comments:3 commentaires
  • Post last modified:mars 13, 2022
  • Temps de lecture :4 min de lecture

Moteur PAP + Driver TB6600 commandé par 2 boutons avec un Arduino (Exemple pour une rotonde en modélisme train) *

 

 

    Prérequis :

Matériel :

  • 1 x Carte Arduino Uno
  • 1 x Driver TB6600
  • 2 x Boutons
  • 1 x Fin de course
  • 1 x Alimentation 12v
  • 1 x Moteur PAP bipolaire
  • Fils de connexion
  • 1 x Breadboard

Version IDE :

 

 

 

Vidéo de démonstration :

 

Schéma de câblage :

 

Code :

#define dirPin 2  
#define stepPin 3 
#define boutonhoraire 4
#define boutonantihoraire 5
#define enabledmotor 6 
#define capteurinit 7
int vitessemoteurinit = 4000; //Vitesse du moteur pendant initialisation
int vitessemoteur = 4000; //Vitesse du moteur
int angle = 15; //Angle de rotation souhaité par impulsion sur le bouton
int positioncible = (3200/(360/angle)); // Calcul du nombre d'impulsion à effectuer par rapport à l'angle demandé sachant que 3200 = 1 tour


void setup() {
  Serial.begin(9600);
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);
  pinMode(enabledmotor, OUTPUT);
  pinMode(boutonhoraire, INPUT_PULLUP);
  pinMode(boutonantihoraire, INPUT_PULLUP);
  pinMode(capteurinit, INPUT_PULLUP);
  positioninit();
}

void loop() {
  int etatboutonhoraire = digitalRead(boutonhoraire);
  if (etatboutonhoraire == LOW){
    digitalWrite(dirPin, LOW);
    digitalWrite(enabledmotor, LOW);
    for (int rotation=0; rotation <= positioncible; rotation++){ 
      digitalWrite(stepPin, HIGH);
      delayMicroseconds(vitessemoteur);
      digitalWrite(stepPin, LOW);
      delayMicroseconds(vitessemoteur);
    }
    etatboutonhoraire = digitalRead(boutonhoraire);
    while(etatboutonhoraire == LOW){
        etatboutonhoraire = digitalRead(boutonhoraire);
    }
    digitalWrite(enabledmotor, HIGH);
  }
  
  int etatboutonantihoraire = digitalRead(boutonantihoraire);
  if (etatboutonantihoraire == LOW){
    digitalWrite(dirPin, HIGH);
    digitalWrite(enabledmotor, LOW);
    for (int rotation=0; rotation <= positioncible; rotation++){ 
      digitalWrite(stepPin, HIGH);
      delayMicroseconds(vitessemoteur);
      digitalWrite(stepPin, LOW);
      delayMicroseconds(vitessemoteur);
    }
    etatboutonantihoraire = digitalRead(boutonantihoraire);
    while(etatboutonantihoraire == LOW){
        etatboutonantihoraire = digitalRead(boutonantihoraire);
    }
    digitalWrite(enabledmotor, HIGH);
  }
}

void positioninit(){
  int etatcapteurinit = digitalRead(capteurinit);
  digitalWrite(dirPin, HIGH);
  digitalWrite(enabledmotor, LOW);
  while (etatcapteurinit == HIGH){ 
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(vitessemoteurinit);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(vitessemoteurinit);
    etatcapteurinit = digitalRead(capteurinit);
  }  
  digitalWrite(enabledmotor, HIGH);
}

 


 

Cet article a 3 commentaires

  1. Pairault Mickael

    Bonjour, j ai essayer de reproduire votre montage, mais sans succes, Doit je supprimer le code concernant le contacteur fin de course si je ne l utiise pas. Pour ce qui est des branchements sur PUL-, DIR- et ENA – je vois pas comment les brancher. Pour le code dois je modifier en quoique ce soit certaine valeur. Merci

    1. steven

      Bonjout
      Effectivement, si vous ne disposez pas du fin course le montage ne marchera pas, car il a été codé avec .
      Par contre le moteur devrait au moins tourner au début. Avez-vous bien disposé les petits switchs sur la carte ?
      Cordialement,

  2. PAIRAULT Mickael

    le moteur tourne effectivement, je doit donc supprimer la dernier parti du code. Les petits switch sont off on off et off off on
    merci

Laisser un commentaire