Pages: [1] 2   Go Down
Author Topic: Servomoteur  (Read 2976 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

   j'ai actuellement un petit soucis sur le pilotage de mon servomoteur car celui ci n'est pas linéaire, le servomoteur saccade. (servomoteur HS-84MG, carte arduino UNO)
j'utilise se code la :
  for(pos = 0; pos < 180; pos += 1)
   { myservo.write(pos);
    delay(15);
 Il y a t-il un moyen pour supprimé se "défaut" dans le programme? changer le servomoteur? car à vitesse plus élever le saccadement est supprimé.
merci de votre aide d'avance

Logged

Bretagne
Offline Offline
Edison Member
*
Karma: 16
Posts: 1398
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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"
Logged

St Marcellin
Offline Offline
Newbie
*
Karma: 1
Posts: 38
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5413
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Bretagne
Offline Offline
Edison Member
*
Karma: 16
Posts: 1398
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 (0.46 KB - downloaded 26 times.)
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5413
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-mr-green
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5413
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

skywodd je ne comprend pas bien se que tu veux dire? peux tu écrire le code stp?
Un truc dans ce genre:
Code:
for(pos = 0; pos < 180; pos += 10) {
    myservo.write(pos);
    delay(200);
}
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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é.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

France
Offline Offline
Faraday Member
**
Karma: 40
Posts: 3636
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

pos doit être un entier
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

france
Offline Offline
God Member
*****
Karma: 15
Posts: 881
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Christian

Pages: [1] 2   Go Up
Jump to: