Merci beaucoup ! j'ai déclaré la variable et ça fonctionne ainsi, reste maintenant le pb du fonctionnement simultané (voir post général), merci encore !
Si vous voulez activer des pins vraiment simultanément (a une fraction de microseconde près) il faut passer par la gestion des ports pour les moteurs pas a pas.
Pour jouer une musique « non cacophonique » il faudra aussi écrire un séquenceur qui va définir quelle(s) corde(s) doit/doivent être touchées et quand.
Il faut un code très asynchrone et à faible latence pour gérer ça bien. Pas simple comme projet
Bonsoir, j'ai pas mal avancé. je rencontre cependant une petite difficulté. le code (ci-dessous) fonctionne très bien. Je vais pouvoir ajouter des fonctions aléatoires par la suite pour modifier la durée des notes. Mais, car il y a toujours un mais, si pour un moteur c'est parfait, avec trois je n'ai plus assez de puissance. En passant par un transformateur (et non le port usb du pc) c'est mieux mais après un certain temps les moteurs s'arrêtent (je ne sais pas pourquoi). Auriez-vous une idée pour me faire gagner un peu de puissance ? D'avance merci !
#define Motor1a 2
#define Motor1b 3
#define Motor2a 4
#define Motor2b 5
#define Motor3a 6
#define Motor3b 7
#define Motor4a 8
#define Motor4b 9
#define Motor5a 10
#define Motor5b 11
#define Motor6a 12
#define Motor6b 13
int step_period = 2; // Inter-step interval
void setup() {
pinMode(Motor1a, OUTPUT);
pinMode(Motor1b, OUTPUT);
pinMode(Motor2a, OUTPUT);
pinMode(Motor2b, OUTPUT);
pinMode(Motor3a, OUTPUT);
pinMode(Motor3b, OUTPUT);
pinMode(Motor4a, OUTPUT);
pinMode(Motor4b, OUTPUT);
pinMode(Motor5a, OUTPUT);
pinMode(Motor5b, OUTPUT);
pinMode(Motor6a, OUTPUT);
pinMode(Motor6b, OUTPUT);
// Initialize motor off
digitalWrite(Motor1a, LOW);
digitalWrite(Motor1b, LOW);
digitalWrite(Motor2a, LOW);
digitalWrite(Motor2b, LOW);
digitalWrite(Motor3a, LOW);
digitalWrite(Motor3b, LOW);
digitalWrite(Motor4a, LOW);
digitalWrite(Motor4b, LOW);
digitalWrite(Motor5a, LOW);
digitalWrite(Motor5b, LOW);
digitalWrite(Motor6a, LOW);
digitalWrite(Motor6b, LOW);
}
void loop() {
digitalWrite(Motor1a, HIGH);
digitalWrite(Motor1b, HIGH);
digitalWrite(Motor2a, LOW);
digitalWrite(Motor2b, LOW);
delay(step_period);
digitalWrite(Motor1a, LOW);
digitalWrite(Motor1b, HIGH);
digitalWrite(Motor2a, HIGH);
digitalWrite(Motor2b, LOW);
delay(step_period);
digitalWrite(Motor1a, LOW);
digitalWrite(Motor1b, LOW);
digitalWrite(Motor2a, HIGH);
digitalWrite(Motor2b, HIGH);
delay(step_period);
digitalWrite(Motor1a, HIGH);
digitalWrite(Motor1b, LOW);
digitalWrite(Motor2a, LOW);
digitalWrite(Motor2b, HIGH);
delay(step_period);
digitalWrite(Motor3a, HIGH);
digitalWrite(Motor3b, HIGH);
digitalWrite(Motor4a, LOW);
digitalWrite(Motor4b, LOW);
delay(step_period);
digitalWrite(Motor3a, LOW);
digitalWrite(Motor3b, HIGH);
digitalWrite(Motor4a, HIGH);
digitalWrite(Motor4b, LOW);
delay(step_period);
digitalWrite(Motor3a, LOW);
digitalWrite(Motor3b, LOW);
digitalWrite(Motor4a, HIGH);
digitalWrite(Motor4b, HIGH);
delay(step_period);
digitalWrite(Motor3a, HIGH);
digitalWrite(Motor3b, LOW);
digitalWrite(Motor4a, LOW);
digitalWrite(Motor4b, HIGH);
delay(step_period);
digitalWrite(Motor5a, HIGH);
digitalWrite(Motor5b, HIGH);
digitalWrite(Motor6a, LOW);
digitalWrite(Motor6b, LOW);
delay(step_period);
digitalWrite(Motor5a, LOW);
digitalWrite(Motor5b, HIGH);
digitalWrite(Motor6a, HIGH);
digitalWrite(Motor6b, LOW);
delay(step_period);
digitalWrite(Motor5a, LOW);
digitalWrite(Motor5b, LOW);
digitalWrite(Motor6a, HIGH);
digitalWrite(Motor6b, HIGH);
delay(step_period);
digitalWrite(Motor5a, HIGH);
digitalWrite(Motor5b, LOW);
digitalWrite(Motor6a, LOW);
digitalWrite(Motor6b, HIGH);
delay(step_period);
}
Les moteurs pas-à-pas consomment quand même pas mal de courant. Il ne faut surtout pas les alimenter par le port USB.
Et si tu fais tourner plusieurs moteurs ensemble il faut que ton alimentation soit correctement dimensionnée.
Qu'utilises-tu comme alimentation actuellement?
Merci pour le retour, j'utilise un transfo 9v 1,0 A
Les moteurs utilisées sont des 12V ou des 5V?
Bonjour, ils sont à 5 v
Les moteurs sont alimentés par le 5V de la carte?
Si oui, il faut savoir qu'elle ne peut guère transformer le 9V en 5V que pour 170mA maximum. Au delà le régulateur chaufferait trop et diminue la tension de sortie. voir la page ARDUINO : l'alimentation (VCC, VIN, etc.)
Un moteur ne doit jamais être alimenté au travers de la carte. La puissance doit venir d'ailleurs, par exemple par un chargeur de téléphone.
Un 28BJY_48 c'est 240mA de mémoire. Un seul passerait à la rigueur, mais plus ce n'est pas possible. Du coup le régulateur froid, cela fonctionne, puis il chauffe trop car tu demandes trop de courant et le régulateur coupe le courant. Tout peut s'arrêter.
Merci pour ce retour, donc si je comprends bien je ne peux pas alimenter les moteurs via les cartes (ni mega, ni uno ni nano) mais je dois créer une source d'alimentation supplémentaire (genre celui-ci ? Amazon.com) j'en ai deux cela m'arrangerai.
Ainsi : la carte est alimentée via son port usb relié à un chargeur de téléphone, les modules MBv2 via un transformateur (par exemple 9v 1.0A), seul l'alimentation des moteurs PAP (fils + et -) sont reliés au module MBv2, la carte s'occupant des pins des drivers ?
J'ai bon
?
Super, j'essaie ça ce soir et reviens pour les résultats (cette histoire est plus longue que prévue
merci à tous pour vos conseils !
Hello ! Les nouveaux branchements fonctionnent, les 3 moteurs PAP fonctionnent mais ils ont très peu de puissance, je dirai presque moins que lorsqu’ils étaient tous alimenté par la carte uno, est ce normal ? Le module de branchement est un MBv2 alimenté avec un transfo 9v et 1A …. Comment faire pour avoir plus de puissance ? C’est le code encore une fois qui pose pb ?
Jai l'impression que c'est un peu par hasard que l'on a su que les moteurs étaient alimentés par la carte Arduino. Il serait peut être bon que tu donnes le schéma de branchement fait.
C'est ce type de MBV2 qui alimente les moteurs?

Oui c'est à peu près ça !
Pour le module d'alimentation c'est un module basic qui permet d'avoir en sortie 3.3 ou 5 v. Pour le schéma (je ne sais pas si une photo serait parlante) il est basique : les 3 moteurs PAP sont relié via des drivers à la carte Uno (pin 2 à 13), depuis hier l'alimentation est relié sur une breadboard avec le module d'alimentation (9v et 1A). Pour un moteur : parfait, 2 ça va mais le troisième peine un peu trop. J'ai lu que les moteurs PAP pouvaient gagner un peu de puissance en augmentant le voltage (il ne me faut pas beaucoup de puissance en plus), si je passe sur une alimentation de 12v et 2ou 3 A cela pourrait m'aider ?
Et oui, comme je le disais à l'origine des post : je suis un ultra débutant, d'où certaines inanités qui pourrait choquer et me faire passer pour un débutant de chez débutant. ![]()
C’est le truc qui se branche en bout de breadboard ? Je ne suis pas sûr de la puissance dispo en sortie
Avez vous aussi connecté les GND?
Bonjour, oui tout à fait la puissance de sortie est de 700 mA et oui j'ai bien branché les GND comme indiqué dans un post précédent. Pensez-vous qu'un transformateur plus puissant pourrait régler mon problème ?
700mA même s'il y a 3 moteurs type 28BYJ-48 devraient juste suffire — j'ai lu à divers endroits qu'ils pouvaient en fait tirer jusqu'à 240mA et ici il semble qu'il ne forcent absolument pas
Si vous avez moyen de mesurer le courant réel appelé en sortie de votre alimentation ce serait pas mal pour être sûr que vous disposez bien de ce qu'il faut
Mon multimètre est HS, je vais m'en procurer un autre et vérifier tout ça, à très vite
C'est mieux que rien, mais un schéma sur un papier serait l'idéal. Preuve que c'est insuffisant le post d'après demande si les GND sont connectés.
Moi je vois que la résistance des enroulement vaut 50Ω, ce qui fait 100mA par enroulement ou 200mA par moteur. Pour 3 moteurs on est large.
Que l'alim soit de 9V ou de 12V cela ne doit rien changer pour la tension d'alimentation des moteurs car il seront toujours alimentés en 5V, et demanderont toujours 1W. Si le MBV2 (un lien sur le produit serait le bienvenu) est un convertisseur classique, il a peu de pertes et comme on lui demande 3W en sortie, va prendre 3W en entrée. Avec une alim 9V/1A (soit 9W), c'est bon. Passer à 12V/1 ou 2W ne devrait rien changer car on ne tire que 3W.
On y gagne si on va vite avec des drivers de moteurs bipolaires. Ce n'est pas le cas ici.
Avec ton moteur 5V, on peut diminuer la tension (il pourra fournir moins de couple, mais chauffera moins) , mais si on dépasse les 5V, bien sûr que cela va augmenter le couple possible, mais il risque fort de cramer. C'est comme un camion 3 tonnes 5, on peut toujours le surcharger, mais pas sans risque. Rouler à mi-charge permettra de prolonger sa durée de vie.
J'ai quand même l'impression que l'on ne sait pas exactement ce qui est réalisé. On ne voit pas bien ce qui est fait.
Il peut y avoir un gros problème que l'on verrait du premier coup, mais pour toi, tout semble normal.
Je n'ai aucun moyen de vérifier que l'ordre des phases est correct. C'est une erreur très fréquente qui pourrait expliquer le manque de couple. Si pour toi l'ordre des phases n'est pas important, tu ne le signaleras pas, et tu nous diras "je l'ai correctement câblé".
Un cas qui nous est arrivé est une personne qui avait bien utilisé une alim par exemple 9V/1A, et au bout de plein de post, on s'est aperçu que c'était de l'alternatif qu'elle délivrait et pas du continu. Tout lui semblait normal.
Hello tout le monde,
me revoilà avec les photos du montage (étant en panne de "noir" j'ai utilisé d'autres couleurs pas le choix)
. Sinon pour rebondir sur les précédentes remarques :
- la question des phases : ha ben oui ça ... j'y avais pas pensé
- la question du courant continu ou non : cela m'est imposé par le transfo non ? Si c'est le cas, c'est bien du continu (transfo vendu avec le Kit)
- pour le GND de la carte je l'ai bien relié à la masse de la breadboard, j'ai essayé les 3 GND, puis sans GND et ... aucune différence, cela n'est peut-être pas normal ?
- Enfin pour le câblage des moteurs aux driver j''ai tenté d'inverser sans différence
Voici les photos et le code (j'ai progressé en code
celui-ci est plus simple et donne la même chose que les autres)
#define IN1 2
#define IN2 3
#define IN3 4
#define IN4 5
#define IN5 6
#define IN6 7
#define IN7 8
#define IN8 9
#define IN9 10
#define IN10 11
#define IN11 12
#define IN12 13
int paso [12][4] =
{
{1, 1, 0, 0},
{0, 1, 1, 0},
{0, 0, 1, 1},
{1, 0, 0, 1},
{1, 1, 0, 0},
{0, 1, 1, 0},
{0, 0, 1, 1},
{1, 0, 0, 1},
{1, 1, 0, 0},
{0, 1, 1, 0},
{0, 0, 1, 1},
{1, 0, 0, 1},
};
void setup()
{
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(IN5, OUTPUT);
pinMode(IN6, OUTPUT);
pinMode(IN7, OUTPUT);
pinMode(IN8, OUTPUT);
pinMode(IN9, OUTPUT);
pinMode(IN10, OUTPUT);
pinMode(IN11, OUTPUT);
pinMode(IN12, OUTPUT);
}
void loop()
{
for (int i = 0; i < 4; i++)
{
digitalWrite(IN1, paso[i][0]);
digitalWrite(IN2, paso[i][1]);
digitalWrite(IN3, paso[i][2]);
digitalWrite(IN4, paso[i][3]);
digitalWrite(IN5, paso[i][0]);
digitalWrite(IN6, paso[i][1]);
digitalWrite(IN7, paso[i][2]);
digitalWrite(IN8, paso[i][3]);
digitalWrite(IN9, paso[i][0]);
digitalWrite(IN10, paso[i][1]);
digitalWrite(IN11, paso[i][2]);
digitalWrite(IN12, paso[i][3]);
delay(10);
}
}

