Sto implementando un sistema pan-tilt, ma ho un problema con il servo che esegue lo spostamento verticale, quello orizzontale risponde ai comandi correttamente.
Praticamente il servo verticale non risponde ai comandi rimane fermo e fa un rumore strano tipo di vibrazione.
Per il codice è sempre quello classico:
#include <Servo.h>
#define PIN_SERVO_H 9
#define PIN_SERVO_V 11
Servo servo_h;
Servo servo_v;
void setup(){
servo_h.attach(PIN_SERVO_H);
servo_v.attach(PIN_SERVO_V);
servo_h.write(0); // posiziono il servo alla posizione iniziale
servo_v.write(0); // posiziono il servo alla posizione iniziale
delay(15); // aspetto 15ms per consentire al servo di raggiungere la posizione
}
void loop(){
int max_h = 180;
int init_h = 0;
int max_v = 180;
int init_v = 0;
for(int i = init_h; i < max_h; i=i+10){
servo_h.write(i);
delay(100);
for(int j = init_v; j < max_v; j++){
servo_v.write(j);
delay(300);
}
}
}
incollo le specifiche del servo verticale che mi da problemi
ANNIMOS 80KG
RDS5180SG 80kg
Specifiche di controllo:
Sistema di controllo: PWM (modifica della larghezza di impulso)
Gamma di larghezza degli impulsi: 500-2500μsec
Posizione neutra: 1500μsec
Grado di marcia: 270° (quando 500-2500μsec)
Larghezza banda morta: 3μsec
Frequenza di funzionamento: 50-330Hz
Direzione di rotazione: Senso antiorario (quando 1500-2500μsec)
Per quale ragione i due cicli for{} sono annidati?
Ad ogni modo, se vuoi che il tuo sistema pan-tilt sia reattivo
(forse è questo il motivo per cui hai annidato i cicli for{} ?)
e risponda in modo immediato ai comandi devi assolutamente evitare dei cicli bloccanti come stai facendo in questo momento.
Capisco che il 99% degli esempi sui servo che ci sono in rete e ahimè anche nei corsi, usano questo approccio (che trovo assurdo) però bisogna imparare ad andare oltre gli esempi di base che sono forniti con le librerie.
30/7.4 ≈ 4A ... quindi, quell'alimentatore, tirandolo al massimo (cosa che NON va mai fatta) da 4A ... la corrente di stallo dei motori che stai usando, a 7.4V è di 5A ciascuno ... vedi un po' te ...
anche facendo un solo ciclo, quello del servo verticale, il problema rimane, il servo fa rumori, mettendo la mano sopra si sente che si muove o cerca di muoversi dentro, ma la "rotella" del servo non si sposta.
Hai provato ad invertire i due motori per vedere se si sposta anche il problema.
In caso positivo, probabilmente il tuo servo si è danneggiato in qualche modo.
Forse neanche adesso ti sei spiegato bene o non hai inteso quale prova fare...
Tu hai INVERTITO i comandi dei due servo, o hai solo cambiato il pin del servo "problematico"?
Diciamo che il servo A sta sul pin X ed il servo B (quello che dà problemi) sul pin Y: dovresti provare a collegare il servo A al pun Y ed il B sul pin X e vedere se il problema resti identico (quindi il problema potrebbe essere il servo B) oppure se invece il problema compare per l'altro mentre quello problematico invcece funziona (quindi il problema non è il servo ma a monte del controllo).
E' questa la prova che hai fatto?