Bonjour,
Je viens de débuter dans la programmation avec Arduino, je suis en train de réaliser un projet pour animer une griffe censée rayer une plaque en alu recouverte d'un revêtement.
L'idée était donc de faire descendre la griffe à l'aide de deux moteurs sur l'axe z, la déplacer ensuite horizontalement (axe y) à l'aide d'un troisième moteur jusqu'à la détection de la plaque par conduction, afin d'effectuer la coupure et d'ensuite remonter la griffe. Les moteurs utilisés sont des moteurs pas à pas NEMA 17 contrôlés par des drivers TB6600.
Mon problème est lors du fonctionnement simultané des 2 moteurs latéraux lors de la descente de la griffe. J'ai bien câblé et codé les deux moteurs, mais un seul moteur ne fonctionne sur les deux.
Si quelqu'un pouvait m'apporter une aide, cela me permettrait de finaliser mon projet.
Vous trouverez ci-joint mon code. Même s'il me semble correct, n'hésitez surtout pas à me corriger pour la moindre erreur. Étant donné que j'ai supprimé certains passages du code ne concernant pas les moteurs, je suis à votre disposition pour toute éventuelle question à propos du code !
Je vous remercie d'avance.
// Déclaration des objets et constantes
const int Start = 22; // Broche du bouton de démarrage
const int ENAY = 31;
const int DIRY = 32;
const int PULY = 33;
const int ENAZ1 = 38;
const int DIRZ1 = 39;
const int PULZ1 = 40;
const int ENAZ2 = 41;
const int DIRZ2 = 42;
const int PULZ2 = 43;
const int conduction = 53; // Détection conduction
void setup() {
// Initialisation des broches
pinMode(Start, INPUT_PULLUP);
pinMode(ENAY, OUTPUT);
pinMode(DIRY, OUTPUT);
pinMode(PULY, OUTPUT);
pinMode(ENAZ1, OUTPUT);
pinMode(DIRZ1, OUTPUT);
pinMode(PULZ1, OUTPUT);
pinMode(ENAZ2, OUTPUT);
pinMode(DIRZ2, OUTPUT);
pinMode(PULZ2, OUTPUT);
pinMode(conduction, INPUT_PULLUP);
// Initialisation du moniteur série
Serial.begin(9600);
// Configuration initiale des broches
digitalWrite(ENAY, HIGH);
digitalWrite(ENAZ1, HIGH);
digitalWrite(ENAZ2, HIGH);
}
void loop() {
// Déplacement initial du servo moteur
delay(1000);
// Si le bouton Start est pressé
if (digitalRead(Start) == LOW) {
// Cycle de déplacement des moteurs
delay(1000);
AvanceMoteurZ();
// AvanceMoteurY(1, 5000);
delay(1000);
AvanceMoteurZ();
// AvanceMoteurY(1, 5000);
}
}
// Fonction pour faire avancer le moteur sur l'axe Y
void AvanceMoteurY(int direction, int nombrePas) {
digitalWrite(ENAY, HIGH);
digitalWrite(DIRY, direction > 0 ? HIGH : LOW);
for (int i = 0; i < nombrePas; i++) {
digitalWrite(PULY, HIGH);
delayMicroseconds(500); // Ajustement de la vitesse
digitalWrite(PULY, LOW);
delayMicroseconds(500);
}
delay(1000);
}
// Fonction pour faire avancer le moteur sur l'axe Z
void AvanceMoteurZ() {
digitalWrite(ENAZ1, HIGH);
digitalWrite(ENAZ2, HIGH);
digitalWrite(DIRZ1, LOW);
digitalWrite(DIRZ2, LOW);
// Boucle pour faire avancer le moteur jusqu'à l'activation de la conduction
while (digitalRead(conduction) == HIGH) {
digitalWrite(PULZ1, HIGH);
digitalWrite(PULZ2, HIGH);
delayMicroseconds(1750);
digitalWrite(PULZ1, LOW);
digitalWrite(PULZ2, LOW);
delayMicroseconds(1750);
}
digitalWrite(ENAZ1, LOW);
digitalWrite(ENAZ2, LOW);
delay(1000);
}