je suis sur un petit projet et je bloque sur mon code, quand j’inhibe le moteur1 le code fonctionne, si je remet le moteur1 avec le moteur0 il ne fonctionne pas.
j'ai une carte moteur shield voir en photo.
2 mortor pas a pas 200 pas nema17 de 12v un pour la vertical (motor1) et l'autre pour une rotation(motor0).
une carte arduino uno.
Voici le code :
#include <AFMotor.h>
// PINS des broches des moteurs
const int moteurCPin = 13; // PIN du moteur continu
// Bouton poussoir démarrage
const int bpStartPin = A0;
const int pasParTour1 = 200; //200 Nombre de pas/tour pour 1 tour
AF_Stepper moteur1(pasParTour1,1);
const int pasParTour0 = 200;
AF_Stepper moteur0(pasParTour0,2);
// Durée d'activité du moteur C en ms
const unsigned long dT_CC =15000; //180000; // 3 minutes
void setup() {
//------------------------------------------------
pinMode(bpStartPin, INPUT_PULLUP);
//Serial.begin(9600);
pinMode(moteurCPin, OUTPUT);
moteur1.setSpeed(150);
moteur0.setSpeed(10);
}
void loop() { //------------------------------------------------
// Appui sur le bouton poussoir A0 égale marche
//if(digitalRead(bpStartPin)) return;
//moteur1.step(4000, FORWARD,SINGLE );
//delay(5000);
moteur0.step(35, FORWARD, SINGLE);
delay(5000);
moteur1.step(4000, BACKWARD, SINGLE);
delay(5000);
// Activation du moteur C pendant le temps défini
unsigned long startTime = millis();
digitalWrite(moteurCPin, HIGH);
//while((millis() - startTime >= dT_CC));
while((millis() <= dT_CC));
digitalWrite(moteurCPin, LOW);
// Processus inverse
moteur1.step(4000, BACKWARD, SINGLE);
delay(5000);
moteur0.step(35, BACKWARD, SINGLE);
delay(5000);
moteur1.step(4000, FORWARD, SINGLE);
delay(5000);
}
Tu avais déposé ta demande d'aide dans la partie dédiée au dépôt et à la consultation des tutoriels
je l'ai déplacé dans la partie principale du forum Arduino francophone
Le delay() ne semble pas coller avec le nombre de pas que tu commandes.
Tu as défini une vitesse de 150 tours/minutes pour ce moteur
Dans la commande tu demandes 20 tours. A 150 tours/minutes il faut 60/150*40 = 8s
A 150 tours/minutes il faut 60/150*20 = 8s
Si tu veux une attende de dt_CC millisecondes il faut faire ça
while((millis() - startTime < dT_CC));
Mais au final, c'est un code bloquant alors autant faire un delay(dt_CC)
Mais surtout, pour avoir de l'aide il faut être clair. On a pas ton montage sur notre table.
Donc ce genre de phrase n'aide pas beaucoup.
C'est-à-dire? qu'est-ce qui ne fonctionne pas?
Les moteurs bloquent?
Le code s'arrête? Comment tu t'en aperçois, il n'y a aucun retour de ton code quelques Serial.print() permettraient de voir ce que fait ton code.
Désolé pour la réponse tardive, je rentre du travail.
Ok pour la première remarque sur le delay.
Par contre, je ne pensais pas que le delay agissait sur le nombre de pas, je débute j'apprends je vais donc faire les modifs pour voir si le moteur ne tremble plus.
Je ne comprends pas pourquoi tu me parle de 40 c'est quoi cette valeur ?
Merci pour le millis, je vais corrigé.
En effet mon explication n'étais pas des plus claire le moteur tremble sans tourné sur la fonction MICROSTEP, les autres fonctions SINGLE, DOUBLE et INTERLEAVE les moteurs ne bouge pas du tout.
faute de frappe c'était 20 mais le résultat était bon.
Non, le delay() n'agit pas sur le nombre de pas. Mais par contre cela modifie un peu le timing et si tu mets un délai de 5s à un moment les 2 moteurs tournent ensemble et la consommation va augmenter sérieusement.
Donc là, cela amène une question "est-ce que ton alimentation est correctement dimensionnée pour supporter l'alimentation des 2 moteurs en même temps".
Vérifie s'il n'y a pas une erreur de câblage des phases moteur. Le blocage et les tremblements sont souvent le symptôme d'une erreur de câblage du moteur. Mais cela peut aussi être la conséquence d'un mauvais réglage du driver de moteur (la limitation de courant par exemple).
J'ai sûrement mal fait mon code car, je pensais que les moteurs fonctionnerait chacun leur tour et non les deux en même temps.
Comment faire pour qu'ils fonctionnne chacun leur tour ?
J'ai pensé au câblage mais à priori, je suis bon j'envoie la doc du contrôleur.
Augmente la valeur du delay() de 5000 à 8000 lorsque tu commandes 4000 pas.
C'est la doc du moteur pas du contrôleur.
Mais on trouve facilement la doc du motor shield.
À priori, le L293D qui équipe ce shield ne supporte pas plus de 600mA. Sur la spécification de ton moteur je lis 1,2A. Je pense que c'est un max et si le moteur n'est pas chargé tu peux être inférieur à cette valeur mais il faudrait quand même vérifier que tes drivers ne chauffent pas et n'aillent pas ce mettre en protection.