Problema con servo

Buongiorno a tutti!
In questi giorni ho provato a comandare un servo con arduino, però non riesco a muoverlo come desidero io..
Il servo è un Graupner Servo C 577 http://www.graupner.de/en/products/4101.LOSE/product.aspx
Vorrei capire se sono io che sbaglio con il codice oppure è il mio servo che è diverso da quelli standard..
Innanzitutto ho usato il codice standard che ci offre il programma di arduino:

#include <Servo.h> 
 
Servo myservo;  
                
int pos = 0;
 
void setup() 
{ 
  myservo.attach(9);  
} 
 
 
void loop() 
{ 
  for(pos = 0; pos < 180; pos += 1)  
  {                                  
    myservo.write(pos);              
    delay(15);                       
  } 
  for(pos = 180; pos>=1; pos-=1)     
  {                                
    myservo.write(pos);              
    delay(15);                       
  } 
}

E fin qua tutto ok, il mio servo gira di 180° e poi torna a 0° senza nessun problema..
Il problema nasce quando io voglio posizionarlo a mio piacimento, non riesco..
se ad esempio scrivo: myservo.write(90) lui fa tutti i 180°
o sennò, se con le debite sostituzioni, sostituisco sul ciclo for i valori 0 e 180 con 60 e 120, mi dovrei aspettare che compia una rotazione meno ampia..e invece niente, gira comunque di 180°!!
Mi potreste aiutare?
Grazie mille per l'ascolto

Molto strano, non dovrebbe darti alcun problema...

So che è strano, ma mi serve per far girare le ruote di una macchinina, e per me è essenziale poterlo muovere a piacere, da tastiera ad esempio..
Ma quando ruota, lo fa solo di 180°, oppure sforza verso la direzione opposta dove non può andare

Interessante.
Hai alla mano documentazione specifica del servo?
Uno volta mi sono imbattuto in un servo che aveva un range di utilizzo diverso dagli altri e sostituendolo nella scheda questo si comportava diversamente.

Carta alla mano dovresti vedere i valori di minimum pulse width e maximum pulse width.
Una volta recuperati usa il costruttore servo.attach(pinnumber,min,max).

niki77:
Interessante.
Hai alla mano documentazione specifica del servo?
Uno volta mi sono imbattuto in un servo che aveva un range di utilizzo diverso dagli altri e sostituendolo nella scheda questo si comportava diversamente.

Carta alla mano dovresti vedere i valori di minimum pulse width e maximum pulse width.
Una volta recuperati usa il costruttore servo.attach(pinnumber,min,max).

Purtroppo non ho documentazioni su questo servo e per ora su internet non ne ho trovate..
Su che valori possono variare solitamente min e max? cosi se non trovo un valore su qualche sito, almeno provo ad indovinarlo :slight_smile:

Nel mio caso era da circa 700 (min) a 1800(max) ma non ricordo ne marca ne modello.
Il default della libreria arduino è da 544 a 2400 se non sbaglio.

niki77:
Nel mio caso era da circa 700 (min) a 1800(max) ma non ricordo ne marca ne modello.
Il default della libreria arduino è da 544 a 2400 se non sbaglio.

Ok! Più tardi provo e stasera mi farò risentire, grazie intanto!

niki77:
Nel mio caso era da circa 700 (min) a 1800(max) ma non ricordo ne marca ne modello.
Il default della libreria arduino è da 544 a 2400 se non sbaglio.

Ho provato, ma niente, sempre il solito problema.. scrivo ( myservo.write(90) ) e si muove comunque di 180 °, però piu lentamente..

Ma se provi a fare qualcosa tipo myservo.write(10) di quanto si sposta?

Su che pin l'hai collegato?
un pwm spero!
Se il codice che hai allegato è lo stesso lo hai collegato al 9, prova a fare la stessa cosa su un altro pin pwm, non il 10 però.
Prova sul 3 e sul 5 e facci sapere.
Se risolvi allora hai lo stesso problema che ho avuto io tempo fà con i pwm collegati al tmr1.
Problema software per fortuna che poi ho risolto.

niki77:
Ma se provi a fare qualcosa tipo myservo.write(10) di quanto si sposta?

Su che pin l'hai collegato?
un pwm spero!
Se il codice che hai allegato è lo stesso lo hai collegato al 9, prova a fare la stessa cosa su un altro pin pwm, non il 10 però.
Prova sul 3 e sul 5 e facci sapere.
Se risolvi allora hai lo stesso problema che ho avuto io tempo fà con i pwm collegati al tmr1.
Problema software per fortuna che poi ho risolto.

Grazie per la risposta! ma niente da fare..ho scritto questo codice:

#include <Servo.h> 
 
Servo myservo; 
 
void setup() 
{ 
  myservo.attach(5);
} 
void loop() 
{ 
  myservo.write(90);
  delay(1000);
  myservo.write(120);
  delay(1000);
}

ma la rotazione è comunque di 180°, qualsiasi cosa io scrivo su write(), sia sul pin 3 che sul pin 5..

Ma hai provato uno psostamento minimo come ti avevo detto io?
tipo

myservo.write(10);
delay(2000);
myservo.write(15);
delay(2000);

che risultato hai ottenuto?

saluti a tutti,
leggevo questo post e dato che anche io armeggio con i servi ti posso dare solo questa dritta per quello che vale.
Probabilmente codice a parte, tutti i servi che io sappia sono limitati per un arco di 180 gradi, sicuramente quelli destinati al modellismo.
Infatti per alcune applicazioni particolari esistono dei servi appositi.
Non è un grosso problema, in rete c'è un video che ho visto circa un anno fa che ti insegna come togliere il dentino di blocco nel servo.
Spero di esserti stato utile.
ciao

come alimenti il servo? ricorda che tutto deve essere messo a massa comune per avere un riferimento di potenziale!

smasho:
come alimenti il servo? ricorda che tutto deve essere messo a massa comune per avere un riferimento di potenziale!

Quoto di brutto!!!
Questo è alla base!!!
Spero tu abbia seguito gli esempi di collegamento del playground...

Per il collegamenti ho seguito quest'immagine che ho trovato su una guida (però io ho un arduino mega):

Domani provo a fargli fare lo spostamento minino e vi dirò l'esito..
Vi ringrazio ancora per la disponibilità

niki77:
Ma hai provato uno psostamento minimo come ti avevo detto io?
tipo

myservo.write(10);
delay(2000);
myservo.write(15);
delay(2000);

che risultato hai ottenuto?

Ho provato ma il servo fa comunque uno spostamento di 180°!!
Non so più cosa provare per poterlo farlo ruotare in un modo decente

Provane un altro, forse è guasto il servo.
non sò cos'altro dirti.