
arduino code servo
#1
Posté 17 mars 2012 - 09:37
cad qu'elles aillent de plus en plus vite jusqu'à atteindre une valeur max fixée ! (si c'est possible ?)
j'ai une carte arduino et 2 servos à rotation continue!
pour l'instant j'utilise tout simplement
myservo.attach();
myservo.writeMicroseconds();
pour les faire fonctionner à une vitesse constante que je fixe
Je veux juste quelques indications, pour le reste je vais essayer de me débrouiller !
Mercii d'avance !!
#2
Posté 17 mars 2012 - 11:06
Tu peux résoudre ton problème d'une manière "différente". Je m'explique : il suffit que tu pilotes tes servomoteurs en ralenti (pwm de rapport cyclique 0.5 par exemple), puis que tu changes la valeur du rapport cyclique en l'augmentant progressivement jusqu'à la valeur 1.
#3
Posté 17 mars 2012 - 11:06
#4
Posté 20 avril 2012 - 11:01
j'ai essayé d'augmenter la vitesse progressivement avec un code simple mais cela ne fonctionne pas (le code compile mais donne pas ce que je veux ^^ )
#include <Servo.h>
Servo myservo1;
int vitesse =1520;
void setup()
{
myservo1.attach(9);
}
void loop () {
while (vitesse<1800) { vitesse= vitesse +0,5 ; }
myservo1.writeMicroseconds(vitesse);
}
concernant les cycles je dois utiliser la fonction analogwrite je crois mais je vois pas trop comment?
#5
Posté 20 avril 2012 - 11:18
Bon avec un peu de retard je me replonge dans ce problème..
j'ai essayé d'augmenter la vitesse progressivement avec un code simple mais cela ne fonctionne pas (le code compile mais donne pas ce que je veux ^^ )
concernant les cycles je dois utiliser la fonction analogwrite je crois mais je vois pas trop comment?
Tu peux utiliser le bouton


#include <Servo.h> Servo myservo1; int vitesse =1520; void setup() { myservo1.attach(9); } void loop () { while (vitesse<1800) { vitesse= vitesse +0,5 ; } myservo1.writeMicroseconds(vitesse); }
Ici, ce que tu fais, c'est que tu incrémentes de 0.5 la valeur de la variable vitesse.
Une fois que cette variable est arrivé à 1800, tu fixes la vitesse de ton servo.
Du coup, la vitesse est fixé une fois pour toute ! Pour faire varier la vitesse, il faut faire un writeMicroseconds A CHAQUE FOIS que tu modifies ta variable vitesse, donc dans ta boucle while !
Si tu veux voir quelque chose, je te conseil de mettre un petit delay de quelque millisecondes à chaque fois que tu utilises writeMicroseconds !
++
Black Templar
Mon site internet : http://ferdinandpiette.com/
#6
Posté 20 avril 2012 - 01:54
Pour faire varier la vitesse, il faut faire un writeMicroseconds A CHAQUE FOIS que tu modifies ta variable vitesse, donc dans ta boucle while !
ça veut dire qu'il faut que je declare plusieur variable vitesse? je suis pas sur d avoir compris?
#7
Posté 20 avril 2012 - 02:33
#8
Posté 20 avril 2012 - 02:46
Edit: j'ai écrit trop vite :-S en fait ce que BT voulais dire c'est toi ce que tu faisait c'est dans ta boucle tu modifiais ta variable en lui rajoutant plusieirs fois 0,5 , et tu l'envoyait à ton servo une fois qu'elle valait 1800 du coup pour ton servo ça revient au même que si tu lui envoi directement 1800 sans la boucle... ce qu'il faut c'est lui envoyer ta variable entre chaque incrementation de celle-ci, donc mettre le writeMicrosecond dans ta boucle...
oui mais je comprend pas comment le mettre dans la boucle?
while (vitesse<1800) { vitesse= vitesse +0,5 ; myservo1.writeMicroseconds(vitesse); }
????
#9
Posté 20 avril 2012 - 03:14
ajoute un delay de quelques millisecondes dans la boucle aussi afin de "voir" l'accélération
Mon site internet : http://ferdinandpiette.com/
#10
Posté 20 avril 2012 - 03:24
oui
ajoute un delay de quelques millisecondes dans la boucle aussi afin de "voir" l'accélération
#include <Servo.h> Servo myservo1; int vitesse =1520; void setup() { myservo1.attach(9); } void loop () { while (vitesse<1800) { vitesse= vitesse +0,5; myservo1.writeMicroseconds(vitesse); delay(25); } }
ça fonctionne pas rien ce passe? il prend seulement en compte le int vitesse=1520; (mon neutre)
#11
Posté 20 avril 2012 - 04:29
#12
Posté 21 avril 2012 - 02:09
je ne sais pas si c'est ça qui est responsable de ton bug mais tu as déclaré ta variable vitesse comme int et tu lui rajoute un nombre à virgule... il aurait fallu que tu la déclares en float
En effet j'avais pas remarqué merci !
malheureusement ça change pas le résultat..
#13
Posté 23 avril 2012 - 07:23
C'est prévu pour faire tourer un servo dans un sens puis dans l'autre, mais avec un servo à rotation continue ça le fait accélérer jusqu'à une certaine vitesse, ralentir, réaccélerer, etc.
J'ai juste modifier les delays pour que ça soit plus flagrant:
// Sweep // by BARRAGAN <http://barraganstudio.com> // This example code is in the public domain. #include <Servo.h> Servo myservo; // create servo object to control a servo // a maximum of eight servo objects can be created int pos = 0; // variable to store the servo position void setup() { myservo.attach(9); // attaches the servo on pin 9 to the servo object } void loop() { for(pos = 0; pos < 180; pos += 1) // goes from 0 degrees to 180 degrees { // in steps of 1 degree myservo.write(pos); // tell servo to go to position in variable 'pos' delay(150); // waits 15ms for the servo to reach the position } for(pos = 180; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees { myservo.write(pos); // tell servo to go to position in variable 'pos' delay(150); // waits 15ms for the servo to reach the position } }
#14
Posté 23 avril 2012 - 09:58
En modifiant le 0,5 par un 1 ça marches très bien aussi:)En effet j'avais pas remarqué merci !
malheureusement ça change pas le résultat..
Edit:
Essayes ton code précédent avec float au lieux de int comme déja dit mais aussi avec 0.5 au lieux de 0,5.
#15
Posté 23 avril 2012 - 11:18
0 utilisateur(s) li(sen)t ce sujet
0 members, 0 guests, 0 anonymous users