Servo e rumori strani ...è normale?

Salve a tutti!
Dopo aver seguito i tutorial che mi sono stati consigliati oggi mi sono cimentato nel comandare un servo, un piccolo giocattolino che era nel kit "del novizio" che mi è arrivato poco tempo fa.

Seguendo un tutorial sul Playground sono riuscito a farlo funzionare...però...

Se gli faccio compiere delle rotazioni da 0 a 110/120° circa e poi lo faccio tornare indietro tutto ok.

Se aumento portando la rotazione da 0 a 180° un grado alla volta, sembra che arrivato a fine corsa inizi a slittare per poi riprendere la corsa all'indietro in modo corretto.

Ho fatto un video che spiega meglio delle mie parole:

Come mai? Cosa sto sbagliando?

Ecco anche io codice che uso:

#include <Servo.h>
Servo myservo; // creiamo la variabile myservo per controllare il servo-motore
int pos=0;
 
void setup(){
myservo.attach(2);  // pin in cui colleghiamo il servo-motore
Serial.begin(9600);
}
 
void loop() {
 
  for(pos= 0;  pos < 180; pos += 1)             // loop partendo da 0 fino a 180 gradi
  {                                             //  a passi   di   un grado
  
    myservo.write(pos);               //  Imposta   la posizione del   servo
    delay(5);                          // attende che il   servo raggiunga   la  posizione
  }                              // dal   minimo al   massimo sono necessari   15msX180=2,7secondi
  
  delay(1000); 
  
  for(pos =  180;   pos>=1;   pos-=1)                 //   loop da   180 fino a  zero gradi
  {
    
    myservo.write(pos);                  // imposta la posizione del  servo
    delay(5);                       // attende che il  servo abbia raggiunto la posizione
    
   }
  
  delay(1000);

Il rumore che senti è il motore che sforza perché ha raggiunto il fine corsa meccanico.
La durata dell'impulso per raggiungere i 180° non è uguale per tutti i servo, varia a seconda del produttore e del modello, e non tutti riescono a ruotare di 180°.

astrobeed:
Il rumore che senti è il motore che sforza perché ha raggiunto il fine corsa meccanico.
La durata dell'impulso per raggiungere i 180° non è uguale per tutti i servo, varia a seconda del produttore e del modello, e non tutti riescono a ruotare di 180°.

Ho letto di questo concetto ma non mi è chiaro...

mi puoi rispiegare cosa si intende per "durata dell'impulso per raggiungere i 180°" ?

Sarebbe il delay tra un'istruzione e l'altra?
Oppure i parametri min e max che si passano alla funzione "attach" ?

Queste sono le specifiche che ho trovato sul servo...

Working voltage: 4.8-6.0v

Torque: 1.5/1.8Kg.cm 20.8/24.9oz.in (4.8V/6V)

Speed: 0.12/0.10sec/60°

Size: 32 x 11.5 x 24mm / 1.25 x 0.45 x 0.94 in
Weight: 8.5g / 0.29oz
Dead band width: 1-2 usec
Wire length: 23cm
connector type: Futaba/JR compatible

si riferisce ai parametri min e max che si passano alla funzione "attach". Se non erro (ma vado a naso), li puoi ricavare da Dead band width: 1-2 usec, quindi da 1000 a 2000

lesto:
si riferisce ai parametri min e max che si passano alla funzione "attach". Se non erro (ma vado a naso), li puoi ricavare da Dead band width: 1-2 usec, quindi da 1000 a 2000

Mmm...ho provato ad impostare quei valori ma il risuoltato è che la corsa si è dimezzata, ovvero compie circa 90° e basta....

devi trovare quei valori facendo delle prove. ogni servo ha i suoi.
per la 'durata dell'impulso' devi capire che arduino manda fuori un treno d'impulsi, e che la schedina che sta dentro al servo 'legge' la durata dell'impulso e la traduce in una posizione del servo. ogni servo appunto ha i suoi.
tu fatti una funzione che incrementa piano piano il valore max e restituisce sul monitor quel valore. quando senti che il motore sforza perchè è arrivato a fine corsa, ti segni il valore. la stessa cosa per il minimo.
poi magari misuri su carta l'angolo reale di intervento e lo imposti nello sketch, così da essere più preciso.

dab77:
devi trovare quei valori facendo delle prove. ogni servo ha i suoi.
per la 'durata dell'impulso' devi capire che arduino manda fuori un treno d'impulsi, e che la schedina che sta dentro al servo 'legge' la durata dell'impulso e la traduce in una posizione del servo. ogni servo appunto ha i suoi.
tu fatti una funzione che incrementa piano piano il valore max e restituisce sul monitor quel valore. quando senti che il motore sforza perchè è arrivato a fine corsa, ti segni il valore. la stessa cosa per il minimo.
poi magari misuri su carta l'angolo reale di intervento e lo imposti nello sketch, così da essere più preciso.

Ho capito, grazie, proverò a fare come dici.

Stavo iniziando anche a leggere come potevo fare ad utilizzare dei motori DC ma mi è sorto un dubbio, si possono utilizzare solo con degli shield aggiuntivi ?

no, però serve un ponte H o comunque almeno un transistor se no bruci i pin dell'arduino

lesto:
no, però serve un ponte H o comunque almeno un transistor se no bruci i pin dell'arduino

Tu cosa mi consigli ?
Ti spiego, io vorrei imparare ad usarli(anche motori piccolini piccolini solo per didattica) ed avere la possibilità, magari in futuro di con quello che ho imparato di utilizzarne anche di più grossi, perchè no belli potenti.

Che strada mi consigli di intraprendere? Shield o ponte H ?

gli shield non sono altro che un ponte H con un pò di "bellume" intorno... poi in realtà la storia dipende anche da che motore vuoi usare, di elettrici ne esistono tanti tipi e molti funzionano in modo diverso. Io non sono assolutamente esperto nel campo, per ora ho usato solo i brushless da modellismo che si comandano tramite ESC, che a sua volta si comanda come un comune servo

lesto:
gli shield non sono altro che un ponte H con un pò di "bellume" intorno... poi in realtà la storia dipende anche da che motore vuoi usare, di elettrici ne esistono tanti tipi e molti funzionano in modo diverso. Io non sono assolutamente esperto nel campo, per ora ho usato solo i brushless da modellismo che si comandano tramite ESC, che a sua volta si comanda come un comune servo

I brushless sono più performanti mi pare di aver capito o sbaglio?
Hai un link ad una guida per comandare quelli ?(almeno comincio :slight_smile: )

Azuki:
I brushless sono più performanti mi pare di aver capito o sbaglio?
Hai un link ad una guida per comandare quelli ?(almeno comincio :slight_smile: )

Sí, i brushless sono piú performanti ma assorbono anche parecchi Ampere. Praticamente sono motori trifasi o 5-fasi (quelli per uso industriale costosi) pilotati da un driver che genera un sistema trifase (o 5-Fase) col rotore a magneti (o anche asincroni a gabbia di scoiattolo).
Il driver (ESC) nel ambito del modelismo vengono pilotati come un servo.
I brushless nel modelismo vengono usati per eliche percui con velocitá di rotazione abbastanza altina.

Se vuoi fare un po di esperienza smonta un vecchio lettore CD o DVD per PC (rotto). Ci sono 1 o 2 motorini per corrente continua con le spazole per 12V.
Prova di pilotarlo conun transistore (BC337-40) in un verso e con un L293D nei due Versi e cerca di variare la velocitá con i PWM.
Ciao Uwe

uwefed:
Sí, i brushless sono piú performanti ma assorbono anche parecchi Ampere. Praticamente sono motori trifasi o 5-fasi (quelli per uso industriale costosi) pilotati da un driver che genera un sistema trifase (o 5-Fase) col rotore a magneti (o anche asincroni a gabbia di scoiattolo).
Il driver (ESC) nel ambito del modelismo vengono pilotati come un servo.
I brushless nel modelismo vengono usati per eliche percui con velocitá di rotazione abbastanza altina.

Se vuoi fare un po di esperienza smonta un vecchio lettore CD o DVD per PC (rotto). Ci sono 1 o 2 motorini per corrente continua con le spazole per 12V.
Prova di pilotarlo conun transistore (BC337-40) in un verso e con un L293D nei due Versi e cerca di variare la velocitá con i PWM.
Ciao Uwe

Sì ho un paio di lettori in effetti...che funzionano ma inutili roba vecchia...mi sa che li scrificherò...

Oltra al chip L293D (è questo vero ? http://www.robot-italy.com/product_info.php?products_id=236)

Cosa mi consigli di comperare ? Per testare questi motori ?