Prérequis :
- 1 x Carte Arduino Uno
- 2 x 28BYJ-48
- 2 x ULN2003
- 1 x Alimentation 12V
- 1 x Bouton
- Fils de connexion
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;
}
}
Post Views: 144
J’aime ça :
J’aime chargement…