[RISOLTO] Servo multipli braccio robotico

Buongiorno,
Stavo costruendo un braccio robotico 6dof utilizzando sei servo motori mg996r collegati a un arduino Mega e utilizzando un'alimentazione unica.
Il giorno prima i servo funzionavano normalmente.
Successivamente ho voluto inserire un condensatore da 100uf per ogni servo volendo dargli più stabilità.
Ma da quando ho dato tensione alla scheda dopo aver collegato i condensatori accade questo anche eliminando i condensatori:
Collegando singolarmente i servo alla scheda i servo funzionano.
Se nel codice dichiaro un solo servo, esso segue senza problemi il programma.
Se dichiaro più di un servo nello sketch,
collego più di un servo alla scheda e nel programma dico a un solo servo di muoversi, si muovono anche tutti gli altri andando a posizioni casuali, mentre il servo in questione va alla posizione indicata.
Pensando che fosse la scheda ho provato a collegare i servo motori anche a un arduino Uno e si è verificato lo stesso preoblema.
Da cosa puó dipendere?
Grazie

240605:
Scusate se ho postato questo topic anche in software ...

In conformità al REGOLAMENTO, punto 13, il cross-posting è proibito (anche tra lingue diverse) per cui, il tuo post duplicato nella sezione Software del forum è stato cancellato.

Ti prego, per il futuro, di evitare di aprire più post sullo stesso argomento in sezioni differenti del forum. Grazie.

Guglielmo

Questo è il codice che ho utilizzato dichiarando un solo servo nello sketch e collegando un solo servo alla scheda.

#include <Servo.h>
Servo servo;

void setup{
servo.attach(8);
}
void loop{
for (int i = 10; i <180; i++) {
servo.write(i);
delay(20);
}
delay(2000);
for (int i = 179; i >=10;  i++) {
servo.write(i) ;
delay(20);
}
}

Il progetto inizia a darmi i problemi del post precedente se collego due o più servo alla scheda e li dichiaro nello sketch.

Metti lo schema esatto dei collegamenti (incluse le alimentazioni ed i pin Arduino utilizzati) ed il codice completo per più di un servo.

Guglielmo

utilizzando tutti i servo ho semplicemente aggiunto gli altri servo alla scheda e li ho dichiarati nello sketch cercando comunque di far muovere un solo servo

#include <Servo.h>
Servo servo;
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;

void setup{
servo.attach(8);
servo1.attach(9);
servo2.attach(10);
servo3.attach(11);
servo4.attach(12);
servo4.attach(13);

}
void loop{
for (int i = 10; i <180; i++) {
servo.write(i);
delay(20);
}
delay(2000);
for (int i = 179; i >=10;  i++) {
servo.write(i) ;
delay(20);
}
}

Per lo schema come lo realizzo, su una piattaforma come tinkercad?

I servo mg996r da te utilizzati, assorbono mediamente 1A e sotto sforzo

possono arrivare a oltre 2A. Hai l'alimentatore adeguato, tieni conto che se li vuoi comandare insieme i sei servo hai bisogno di un alimentatore da 10A. Mi è anche capitato che Arduino non esegguisse correttamente dei comandi semplici, ma era dovuto solo all'alimentazione che si abbassava anche per poco tempo e poi il programma non funzionava più correttamente. Per l'alimentazione ti consiglio di recuperare l'alimentatore di qualche PC vecchio, visto che hanno l'uscita a 5V con un amperaggio che supera i 20A.

Ok proveró, visto che per desso stavo usando come alimentazione semplicemente il cavetto usb della scheda collegato al pc.

Quindi se ho capito bene dovrei usare due alimentazioni:
Una per i servo da 5v e 10a;
Una per l'arduino mega.
Giusto?

Si, ma ricordati che i GND li devi mettere in comune (collegati tra loro).

Guglielmo

Ho controllato e casa ho degli alimentatori di PC che non uso ma danno tutti più di 10V in output e pochi ampere.

Potreste consigliarmi qualche alimentatore da 5V a 7V e da 10A magari che non costi troppo?

Preché ho dato un'occhiata in giro e costano tutti circa 20euro...

Grazie

forse hai guardato gli alimentatori dei notebook, mentre io dicevo gli alimentatori dei PC Desktop

Immagine.jpg

L’altro ho giorno ho ordinato l’alimentatore da 5V e 20A. Oggi è arrivato.

Ma anche utilizzando l’alimentatore per alimentare i servo il problema rimane e si verificano le stesse cose che ho specificato nel 1° post.

vi allego l’immagine del circuito che ho realizzato con l’unica differenza che al posto di un arduino UNO ho utilizzato un MEGA 2560 e l’alimentatore esterno da 5V e 20A

Quindi, se metti un solo servo e nel programma Citi un solo servo va tutto bene

Se metti 2 servo, con lo stesso programma?

Se metto due servo con lo stesso programma e li cito tutti e due accade la stessa cosa con il secondo servo che anche se gli dico di non fare niente va alla posizione 90.

Ti ho forse chiesto questo?

Rileggi la mia domanda

Ho dato uno sguardo alla libreria

Non ho mai usato servo, quindi ho solo intuizioni, non certezze

Secondo me se Citi due servo la libreria comanda due servo, e se di un servo non fai mai la write() quel servo va alla sua posizione di default

E questo spiegherebbe il funzionamento apparentemente anomalo

Ecco perché ti ho detto di collegarlo ma non citarlo

Da questo, se ci avessi pigliato giusto, discenderebbe che i bracci robotici con dei servo sono solo dei delicati giocattoli

Perché se venisse a mancare energia col braccio in ingombro alla riaccensione si muoverebbero in maniera incontrollata, garantendo quindi una bella collisione

Ma io per fare muovere un servo lo devo dichiarare quindi se ne dichiaro solo uno posso far muovere solo quello e gli altri non li potrei usare...

Comunque ho guardato un po' in giro e ho visto che nessuno ha avuto questo tipo di problema utilizzando più di un servo...

Io la libreria Servo.h l'avevo già usata in precedenza ma solo con un servo. Sempre guardando in giro ho visto che chi realizzava un braccio robotico con arduino utilizzava questa libreria...

Per questo ho pensato che ci fosse un problema hardware dato che il codice credo sia giusto ed è da quando ho deciso di utilizzare quei condensatori che accade tutto ció mentre prima se facevo muovere solo un servo si muoveva solo quello anche dichiarando gli altri.

Ma continui a non rispondere alla domanda

Se un servo collegato ma non citato rimanesse fermo significherebbe che NON ci sono problemi di disturbi

Quindi fai questa prova oppure no?

Ok scusate se non ho risposto subito
Comunque ora ho fatto la prova e succede che se collego un secondo servo oltre al primo e dichiaro solo il primo funziona tutto normalmemte.

Il problema incomincia quando dichiaro l'altro servo in questo modo nel setup

 servo.attach(5);

E il secondo servo si muove sempre oppure va in una posizione e poi non si muove più?