|

Piloter 2 moteurs pas à pas avec chacun une vitesse et un nombre de tours défini avec un Arduino

Prérequis :

  • 1 x Carte Arduino Uno
  • 2 x 28BYJ-48
  • 2 x ULN2003
  • 1 x Alimentation 12V
  • 1 x Bouton
  • Fils de connexion

Version IDE :

  • Arduino IDE 2.3.5

STL :

Vidéo de démonstration :

Schéma de câblage :

Code :

const int Bouton = 2;
int NbTourMoteur1 = 1;  //Nb de tours que va faire le moteur 1
int NbTourMoteur2 = 1;  //Nb de tours que va faire le moteur 2
int VitMoteur1 = 1;      //Défini la vitesse du moteur1 (1 = Max)
int VitMoteur2 = 4;      //Défini la vitesse du moteur2 (1 = Max)

// Déclaration des broches de contrôle du moteur 1
const int M1IN1 = 4;
const int M1IN2 = 5;
const int M1IN3 = 6;
const int M1IN4 = 7;
// Déclaration des broches de contrôle du moteur 2
const int M2IN1 = 8;
const int M2IN2 = 9;
const int M2IN3 = 10;
const int M2IN4 = 11;

//Variables utilisées pour le moteur 1
long CptStepM1 = 0;
int M1EtapeStep = 0;
int TopStepMoteur1 = 0;
int CptNbTourMoteur1 = 0;
//Variables utilisées pour le moteur 2
long CptStepM2 = 0;
int M2EtapeStep = 0;
int TopStepMoteur2 = 0;
int CptNbTourMoteur2 = 0;

int EtatBouton;
unsigned long previousMillis = 0;

void setup() {
  // Définition des broches de sortie pour les broches de contrôle des moteurs
  pinMode(M1IN1, OUTPUT);
  pinMode(M1IN2, OUTPUT);
  pinMode(M1IN3, OUTPUT);
  pinMode(M1IN4, OUTPUT);
  pinMode(M2IN1, OUTPUT);
  pinMode(M2IN2, OUTPUT);
  pinMode(M2IN3, OUTPUT);
  pinMode(M2IN4, OUTPUT);

  pinMode(Bouton, INPUT_PULLUP);
}

void loop() {
  unsigned long currentMillis = micros();
  int EtatBouton = digitalRead(Bouton);
//2500
  if (currentMillis - previousMillis >= 1500) {
    previousMillis = currentMillis;
    TopStepMoteur1++;
    TopStepMoteur2++;
  }

  if (CptNbTourMoteur1 > 0 && CptStepM1 < 0) {
    CptNbTourMoteur1--;
    CptStepM1 = 2048 * 2;
  }
  if (CptStepM1 >= 0 && TopStepMoteur1 == VitMoteur1) {
    StepMoteur1();
    TopStepMoteur1 = 0;
    CptStepM1--;
  }
  if (CptNbTourMoteur1 == 0 && CptStepM1 < 0) {
    digitalWrite(M1IN1, LOW);
    digitalWrite(M1IN2, LOW);
    digitalWrite(M1IN3, LOW);
    digitalWrite(M1IN4, LOW);
    TopStepMoteur1 = 0;
  }


  if (CptNbTourMoteur2 > 0 && CptStepM2 < 0) {
    CptNbTourMoteur2--;
    CptStepM2 = 2048 * 2;
  }
  if (CptStepM2 >= 0 && TopStepMoteur2 == VitMoteur2) {
    StepMoteur2();
    TopStepMoteur2 = 0;
    CptStepM2--;
  }
  if (CptNbTourMoteur2 == 0 && CptStepM2 < 0) {
    digitalWrite(M2IN1, LOW);
    digitalWrite(M2IN2, LOW);
    digitalWrite(M2IN3, LOW);
    digitalWrite(M2IN4, LOW);
    TopStepMoteur2 = 0;
  }


  if (CptStepM1 < 0 && CptStepM2 < 0 && EtatBouton == LOW) {
    CptNbTourMoteur1 = NbTourMoteur1;
    CptNbTourMoteur2 = NbTourMoteur2;
  }
}

void StepMoteur1() {
  switch (M1EtapeStep) {
    case 0:
      digitalWrite(M1IN1, LOW);
      digitalWrite(M1IN2, LOW);
      digitalWrite(M1IN3, LOW);
      digitalWrite(M1IN4, HIGH);
      break;
    case 1:
      digitalWrite(M1IN1, LOW);
      digitalWrite(M1IN2, LOW);
      digitalWrite(M1IN3, HIGH);
      digitalWrite(M1IN4, HIGH);
      break;
    case 2:
      digitalWrite(M1IN1, LOW);
      digitalWrite(M1IN2, LOW);
      digitalWrite(M1IN3, HIGH);
      digitalWrite(M1IN4, LOW);
      break;
    case 3:
      digitalWrite(M1IN1, LOW);
      digitalWrite(M1IN2, HIGH);
      digitalWrite(M1IN3, HIGH);
      digitalWrite(M1IN4, LOW);
      break;
    case 4:
      digitalWrite(M1IN1, LOW);
      digitalWrite(M1IN2, HIGH);
      digitalWrite(M1IN3, LOW);
      digitalWrite(M1IN4, LOW);
      break;
    case 5:
      digitalWrite(M1IN1, HIGH);
      digitalWrite(M1IN2, HIGH);
      digitalWrite(M1IN3, LOW);
      digitalWrite(M1IN4, LOW);
      break;
    case 6:
      digitalWrite(M1IN1, HIGH);
      digitalWrite(M1IN2, LOW);
      digitalWrite(M1IN3, LOW);
      digitalWrite(M1IN4, LOW);
      break;
    case 7:
      digitalWrite(M1IN1, HIGH);
      digitalWrite(M1IN2, LOW);
      digitalWrite(M1IN3, LOW);
      digitalWrite(M1IN4, HIGH);
      break;
  }
  M1EtapeStep++;
  if (M1EtapeStep > 7) {
    M1EtapeStep = 0;
  }
}

void StepMoteur2() {
  switch (M2EtapeStep) {
    case 0:
      digitalWrite(M2IN1, LOW);
      digitalWrite(M2IN2, LOW);
      digitalWrite(M2IN3, LOW);
      digitalWrite(M2IN4, HIGH);
      break;
    case 1:
      digitalWrite(M2IN1, LOW);
      digitalWrite(M2IN2, LOW);
      digitalWrite(M2IN3, HIGH);
      digitalWrite(M2IN4, HIGH);
      break;
    case 2:
      digitalWrite(M2IN1, LOW);
      digitalWrite(M2IN2, LOW);
      digitalWrite(M2IN3, HIGH);
      digitalWrite(M2IN4, LOW);
      break;
    case 3:
      digitalWrite(M2IN1, LOW);
      digitalWrite(M2IN2, HIGH);
      digitalWrite(M2IN3, HIGH);
      digitalWrite(M2IN4, LOW);
      break;
    case 4:
      digitalWrite(M2IN1, LOW);
      digitalWrite(M2IN2, HIGH);
      digitalWrite(M2IN3, LOW);
      digitalWrite(M2IN4, LOW);
      break;
    case 5:
      digitalWrite(M2IN1, HIGH);
      digitalWrite(M2IN2, HIGH);
      digitalWrite(M2IN3, LOW);
      digitalWrite(M2IN4, LOW);
      break;
    case 6:
      digitalWrite(M2IN1, HIGH);
      digitalWrite(M2IN2, LOW);
      digitalWrite(M2IN3, LOW);
      digitalWrite(M2IN4, LOW);
      break;
    case 7:
      digitalWrite(M2IN1, HIGH);
      digitalWrite(M2IN2, LOW);
      digitalWrite(M2IN3, LOW);
      digitalWrite(M2IN4, HIGH);
      break;
  }
  M2EtapeStep++;
  if (M2EtapeStep > 7) {
    M2EtapeStep = 0;
  }
}

Publications similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *