Bonjour , après avoir lu des dizaines d’articles , et vu des dizaines de vidéos je n’ai toujours pas trouvé la réponse à mon problème (qui n’est pas si simple qu’il en a l’air)
je cherche a contrôler 2 moteurs pas à pas nema17 (moteur d’imprimante 3d) en utilisant les contrôleurs A4988 a l’aide d’un Arduino qui recevra les données du joystick d’un autre Arduino.
Les 2 Arduino communiqueront grâce à 2 modules NRF24L01 (avec antenne externe pour plus de portée).
L’Arduino émetteur avec le joystick sera aussi équipé d’un écran LCD I2C et de boutons qui permettront d’exécuter des fonctions comme un test de connexion wifi (qui indiquera si la connexion est bonne ou pas. Voila le montage en image :
Mais un problème à la fois , pour commencer je dois faire tourner les deux moteurs indépendamments à des vitesses différentes , plus le joystick est écarté du centre , plus le moteur tourne vite .
J’utilise la librairy AccelStepper pour contrôler les moteurs.
Lorsque je fais tourner 1 moteur tout fonctionne bien , mais quand j’actionne le second , le premier ralenti. Je crois que cela est du à un léger changement de fréquence (car les A4988 fonctionnent avec une fréquence et non un signal PWM) du à un ’’rallongement du code’’ , rajouté par les boucles if je pense.
voici mon code :
#include <AccelStepper.h>
int potV ; //variable joystique Verticale
int potH ; //variable joystique Horizontal
int potHH;
int potVV;
int t1 = 0;//variable d'activation
// The X Stepper pins
#define STEPPER1_DIR_PIN 2
#define STEPPER1_STEP_PIN 3
// The Y stepper pins
#define STEPPER2_DIR_PIN 5
#define STEPPER2_STEP_PIN 6
AccelStepper stepper1(AccelStepper::DRIVER, STEPPER1_STEP_PIN, STEPPER1_DIR_PIN);
AccelStepper stepper2(AccelStepper::DRIVER, STEPPER2_STEP_PIN, STEPPER2_DIR_PIN);
void setup() {
pinMode(A0, INPUT);
pinMode(A1, INPUT);
// Paramétrage du premier moteur avec setMaxSpeed
stepper1.setMaxSpeed(8000.0);
// Paramétrage du second moteur avec setMaxSpeed
stepper2.setMaxSpeed(8000.0);
}
void loop() {
potV = analogRead(A0);
potH = analogRead(A1);
potH = map(potH, 0, 1023, -500, 500);//changement des valeur min/max pour plus de faciliter
if(potH < -100){
potHH = map(potH, -100, -500, 0, 2500);
stepper1.setSpeed(potHH);
stepper1.move(-1);
t1 = 0;
}
if(potH > 100){
potHH = map(potH, 0, 500, 0, -2500);
stepper1.setSpeed(potHH);
stepper1.move(1);
t1 = 0;
}
//=======================================================
potV = map(potV, 0, 1023, -500, 500);
if(potV < -100){
potVV = map(potV, 0, -500, 0, 2500);
stepper2.setSpeed(potVV);
stepper2.move(1);
t1 = 0;
}
if(potV > 100){
potVV = map(potV, 0, 500, 0, -2500);
stepper2.setSpeed(potVV);
stepper2.move(1);
t1 = 0;
}
if (t1 == 0){
stepper1.run();
stepper2.run();
}
t1 = 1;
}
Voyez vous une solution , j’avais pensé utiliser des ne555 eux même contrôlés par l’Arduino mais je n’ai pas trouvé de moyen simple de les contrôler. Bref , je bloque. Merci d’avance pour vos réponses potentielles.