Bonjour à tous, et merci d'avance pour votre aide sur ce problème qui me tracasse depuis un certain temps.
Je souhaite réaliser un bras qui s'étend à sa longueur maximale, y placer des objets, puis se replie. C'est aussi simple que ça. Voici une image du système, et il est question d'ajouter une plaque sur le dessus et de la faire avancer jusqu'au bout de la vis sans fin, puis de la faire reculer après un certain temps.
Pour ce faire, j'ai acheté deux moteurs pas à pas afin de contrôler de manière précise les mouvements, et je les pilote à l'aide de deux ponts en H.
Voici les caractéristiques des moteurs pas à pas :
- Nema17 Bipolaire 42BYGH48-4170.
- Nombre de phases : 2.
- Angle de pas : 1,8°.
- Courant de phase : 1,7A.
- Résistance : 3,3Ω ±10%
- Inductance : 2,8mH ±20% (1KHz).
- Nombre de fils : 4 (longueur de 100 cm).
- Longueur du corps du moteur : 48 mm.
- Couple de maintien : 55N.cm.
- Diamètre de l'arbre : Ø5mm en forme de "D".
- Inertie du rotor : 57gcm
- Élévation de la température : 80°C maximum.
- Rigidité diélectrique : 500VAC/1 minute.
- Masse : 300g
Dans le cadre de mes tests, j'alimente le circuit avec une alimentation réglable de 24V - 1,2A.
J'ai réussi à faire fonctionner le système par le passé avec le code suivant :
#include <AccelStepper.h>
const int stepsPerRevolution = 200;
AccelStepper stepper1(AccelStepper::FULL4WIRE, 8, 9, 10, 11);
AccelStepper stepper2(AccelStepper::FULL4WIRE, 4, 5, 6, 7);
int stepsToMove = 25500; // Nombre de pas à avancer pour un aller simple
bool direction = true; // Pour suivre la direction de mouvement
void setup() {
stepper1.setMaxSpeed(1000);
stepper1.setAcceleration(900);
stepper2.setMaxSpeed(1000);
stepper2.setAcceleration(900);
Serial.begin(9600);
Serial.println("Appuyez sur une touche pour faire un aller-retour pour les moteurs ou 'q' pour quitter.");
}
void loop() {
if (Serial.available() > 0) {
char input = Serial.read();
if (input == 'q' || input == 'Q') {
Serial.println("Sortie du programme.");
while (true) {
// Attendre indéfiniment
}
} else {
// Faites un aller simple pour les moteurs
stepper1.moveTo(-stepsToMove);
stepper2.moveTo(-stepsToMove);
// Tant que les moteurs n'ont pas atteint leur position cible, continuez à les faire avancer
while (stepper1.run() && stepper2.run()) {
// Attendez que les moteurs atteignent leur position
}
if (direction) {
Serial.println("Aller simple terminé. Attente...");
delay(1000); // Attendre une seconde à la fin de l'aller
direction = !direction; // Inverser la direction pour le retour
} else {
stepper1.moveTo(stepsToMove);
stepper2.moveTo(stepsToMove);
Serial.println("Retour terminé. Attente...");
delay(1000); // Attendre une seconde à la fin du retour
direction = !direction; // Revenir à la direction de l'aller
}
}
}
}
Actuellement, les moteurs ne fonctionnent plus avec ce même code, et ce, malgré l'absence de changements. Ils ne bougent plus et tremblent jusqu'à ce qu'Arduino MEGA compte le nombre de pas effectués, puis ils s'arrêtent. Aucun mouvement dans aucun sens n'est observé.
Pouvez-vous m'aider ? Merci d'avance.