Servomoteur

Essaie avec delay(250), car je ne suis pas sûr que la lib accepte un délai si court...

Merci pour ta réponse mais le problème si je met le delay à 250 je me retrouve avec mon servomoteur qui saccade encore plus car le signal attend encore plus entre chaque "pas"

Salut, essaye avec la fonction myservo.writeMicroseconds de 1000 à 2000 avec un delay plus court

Bonjour,

Le délai de 15ms est peut être un peu juste (la fréquence de rafraichissement d'un servomoteur est de 50Hz = 20ms).
Essaye un delay(20) avec une incrémentation de pos += 10, en faisant cela ton servomoteur saccadera moins car il n'aura pas à faire des pas de +1 à chaque fois.

Peux-tu nous mettre le code complet, car j'ai un sérieux doute. En effet, la lib Servo envoie une pulse dont la durée dépend de la valeur utilisée dans myservo.write(); . Tu ne devrais pas avoir besoin de gérer le délai entre les pulses, la lib utilise un timer pour ça. Il faut savoir que la méthode .write() génère une brève pause dans le délai entre les pulses, et c'est peut-être ça qui te gêne si tu l'utilises trop souvent...

bonjour,

je joins le code.
Car en changent (pos1 = 0; pos1 <90; pos1 +=1) par (pos1 = 0; pos1 <90; pos1 +=10) et en changent le delay cela ne change la vitesse mais la fluidité du servomoteur reste néanmoins la même.

servo.ino (474 Bytes)

dam3:
je joins le code.
Car en changent (pos1 = 0; pos1 <90; pos1 +=1) par (pos1 = 0; pos1 <90; pos1 +=10) et en changent le delay cela ne change la vitesse mais la fluidité du servomoteur reste néanmoins la même.

J'avais oublié de préciser, si tu fait 10x plus de pas à chaque tour de boucle il faut un délai 10x plus grand pour avoir la même vitesse, sinon ça revient à faire la même chose :grin:

skywodd je ne comprend pas bien se que tu veux dire? peux tu écrire le code stp?

dam3:
skywodd je ne comprend pas bien se que tu veux dire? peux tu écrire le code stp?

Un truc dans ce genre:

 for(pos = 0; pos < 180; pos += 10) { 
    myservo.write(pos);
    delay(200);
}

je ne peux pas mettre pos 180 car si je fais cela le servomoteur fera une rotation de 180 degrés au lieu des 90 recherché.

Je me pose une question serai t il possible de faire un truc de style :
for ( pos = 0; pos<90, pos = 0,1)
{
myservo.write (pos);
delay (20);
}

ce qui ferai que j’augmente le nombre de pas et donc moins se saccade.

pos doit être un entier

oui pos doit être un entier l'idée serai d'avoir plus de pas pour avoir moins de saccade. mais comment l’écrire?

Tu as essayé avec un autre servomoteur ?
Parce qu'avec un incrément de 1° j'obtiens un mouvement bien fluide.

teste:

for(pos = 1000; pos < 1500; pos += 1) { 
    myservo.writeMicroseconds(pos);
    delay(20); // delay à ajuster
}

vince3838:

for(pos = 1000; pos < 1500; pos += 1) { 

myservo.writeMicroseconds(pos);
    delay(20); // delay à ajuster
}

Avec ce code il faudra 10 secondes pour faire un tour complet ...
Avec pos += 5 : 2 secondes
Avec pos += 10: 1 seconde

oui j'ai essais avec un servo numérique et celui ci analogique. le numérique encore plus de saccade... de plus la saccade se ressent plus car il es accouplé à une patte de longueur de 10mm qui fait tourné mon module.

oui j'ai essayer avec d'autre servomoteur (numérique et analogique), encore plus de saccade avec le servomoteur numérique.

Heu ... qu'on m'arrête si je dit une connerie mais un servomoteur analogique et un servomoteur numérique ne se contrôle pas de la même manière !
(cf http://www.societyofrobots.com/actuators_servos.shtml#digitalanalogservos)