Offline
Newbie
Karma: 0
Posts: 9
|
 |
« on: December 04, 2012, 03:15:55 am » |
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
God Member
Karma: 8
Posts: 658
|
 |
« Reply #1 on: December 04, 2012, 11:38:08 am » |
Essaie avec delay(250), car je ne suis pas sûr que la lib accepte un délai si court...
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 9
|
 |
« Reply #2 on: December 04, 2012, 12:20:01 pm » |
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
Newbie
Karma: 0
Posts: 35
|
 |
« Reply #3 on: December 04, 2012, 03:14:59 pm » |
Salut, essaye avec la fonction myservo.writeMicroseconds de 1000 à 2000 avec un delay plus court
|
|
|
|
|
Logged
|
|
|
|
|
France
Offline
Faraday Member
Karma: 36
Posts: 4331
Arduino Hacker
|
 |
« Reply #4 on: December 04, 2012, 03:31:38 pm » |
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
|
|
|
|
|
Bretagne
Offline
God Member
Karma: 8
Posts: 658
|
 |
« Reply #5 on: December 06, 2012, 02:57:27 am » |
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
Newbie
Karma: 0
Posts: 9
|
 |
« Reply #6 on: December 06, 2012, 03:30:21 am » |
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.
|
|
|
|
|
Logged
|
|
|
|
|
France
Offline
Faraday Member
Karma: 36
Posts: 4331
Arduino Hacker
|
 |
« Reply #7 on: December 06, 2012, 08:17:22 am » |
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 
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 9
|
 |
« Reply #8 on: December 06, 2012, 10:25:13 am » |
skywodd je ne comprend pas bien se que tu veux dire? peux tu écrire le code stp?
|
|
|
|
|
Logged
|
|
|
|
|
France
Offline
Faraday Member
Karma: 36
Posts: 4331
Arduino Hacker
|
 |
« Reply #9 on: December 06, 2012, 11:19:26 am » |
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); }
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 9
|
 |
« Reply #10 on: December 06, 2012, 05:35:21 pm » |
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
Newbie
Karma: 0
Posts: 9
|
 |
« Reply #11 on: December 07, 2012, 05:33:52 am » |
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
Edison Member
Karma: 12
Posts: 1800
There is an Arduino for that
|
 |
« Reply #12 on: December 07, 2012, 06:58:59 am » |
pos doit être un entier
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 9
|
 |
« Reply #13 on: December 07, 2012, 12:35:40 pm » |
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
Sr. Member
Karma: 4
Posts: 272
|
 |
« Reply #14 on: December 07, 2012, 01:09:16 pm » |
Tu as essayé avec un autre servomoteur ? Parce qu'avec un incrément de 1° j'obtiens un mouvement bien fluide.
|
|
|
|
|
Logged
|
Christian
|
|
|
|
|