Limite servo moteur

Wozeo
jeu, 11/12/2020 - 13:27
Salut,
Je débute en arduino, j'ai un projet où je connecte 8 servo moteur (Servo SG90 TowerPro) à un arduino, sauf qu'une fois le code lancé, seul 5 fonctionnent et 3 restent inactif. J'ai vérifié qu'ils fonctionnaient tous et j'ai tester sur arduino nano et arduino uno mais rien n'y fait.
Est-ce que vous savez d'où viens cette limite, et savez vous comment résoudre ce problème ?
Walter
jeu, 11/12/2020 - 19:12
Bonjour,
comment as tu connecté tes servos et comment les pilotes tu ?
Normalement on le pilote le servo en largeur d'impulsion.
Utilise tu la librairie servo d'arduino ou un signal PWM directement?
Wozeo
ven, 11/13/2020 - 18:25
J'utilise effectivement la librairie -> #include <Servo.h>
J'initialise les servos avec servo.attach(numPin) et je les déplace avec servo.write(angle)
Chaque servo moteur est relié au 5v (les 8 sont lié au même pin 5v de l'arduino) au gnd (de même les 8 sur le même) et à un pin de commande (entre le pin n°2 et le n°9)
Mon code complet :
#include <Servo.h>
Servo stG[4], stH[4];
int aMin = 40;
int aMax = 90;
int e = 0;
int emax = 3;
void setup() {
Serial.begin(9600);
for (int i = 0 ; i < 4 ; i ++) {
stG[i].attach(2 + 2 * i);
Serial.println(2 + 2 * i);
stG[i].write(aMin);
stH[i].attach(3 + 2 * i);
Serial.println(3 + 2 * i);
stH[i].write(aMin);
}
}
void loop() {
for (int i = 0 ; i < 4 ; i ++) {
cycle(stG[i], stH[i], e+i);
}
e ++;
if (e > emax) {
e = 0;
}
delay(500);
}
void cycle(Servo sGD, Servo sHB, int etat) { //sGD min -> arrière ; sHB min -> bas
switch (etat) {
case (0):
sGD.write(aMin);
sHB.write(aMin);
break;
case (1):
sGD.write(aMin);
sHB.write(aMax);
break;
case (2):
sGD.write(aMax-10);
sHB.write(aMax);
break;
case (3):
sGD.write(aMax-10);
sHB.write(aMin);
break;
}
}
Wozeo
ven, 11/13/2020 - 18:25
.
Walter
ven, 11/13/2020 - 19:51
Ok, peut tu aussi indiquer quels servos fonctionnent.
Wozeo
sam, 11/14/2020 - 13:21
Si je branche le servo a au pin 2 (ect ... jusqu'au servo h au pin 9 ) alors les servos f,g,h ne marche pas. Si maintenant je branche le servo h au pin 2 et le sevo a au pin 9, alors les servos f,g,a ne marche pas.
Walter
sam, 11/14/2020 - 23:23
Tu as essayé de brancher que les 3/4 dernières pour voir, si tu aussi le problème ou les pin supérieurs à 9.
Wozeo
dim, 11/15/2020 - 09:53
Si je branche que les 4 derniers ils fonctionnent tous.
Est-ce que ça pourrait être un problème de puissance ?
Wozeo
dim, 11/15/2020 - 09:40
Dans la boucle for (int i = 0 ; i < 4 ; i ++) { j'initialise 2 servo moteur à chaque boucle :
stG[i].attach(2 + 2 * i);
stH[i].attach(3 + 2 * i);
Ainsi les 8 servo moteurs sont bien initialisé, de plus il y a 3 servo moteur ne répondant pas et ils sont liés au pin 9,8 et 7.
Cependant merci pour votre réponse !
Wozeo
dim, 11/15/2020 - 15:34
J'ai fait mon code en 2 partie surtout pour me souvenir du branchement des différent servo moteur
J'utilise un arduino uno, et je comprend enfin à quoi correspond les ~ ! Par contre je peux brancher un servo moteur à un pin qui n'est pas ~ et il fonctionne (de même les ~ fonctionnent)
Est-ce que ça pourrait être un problème de puissance ?
Walter
dim, 11/15/2020 - 18:20
Bonjour, la librairie servo permet de gérer 12 servos sur une uno et 48 sur une méga, car la librairie n'utilise pas les sortie PWM, mais un seul timer (pour le atmega 328) et les sorties digitales pour générer la largeur d'impulsion pour chaque sortie.
Pourquoi seulement 5 sur 12 sont disponibles, j'avoue que je ne sais pas,
Par contre normalement tu ne devrait pas alimenter les servos par la carte arduino, mais par l'alimentation général car je n'ai pas trouvé de données officielles, mais il est question de 100 * 500mA par servo en charge
La data étant uniquement un contrôle "digital", il ne devrait pas consommer grand chose, tu peut surement le mesurer à l'ampère mètre.
hercule124
lun, 11/16/2020 - 00:38
bonjour,
Avec une carte Arduino UNO ou nano, l'utilisation de la bibliothèque Servo rend inutilisable la broches D9 et D10 PWM avec analogWrite.
l'alimentation des servos doit se faire sur l'alim externe et pas sur le regulateur integré de la carte arduino ,+de 100ma par servo.
courant max sur arduino 500ma