problème de transfert de programme

Bonjour à tous,

voilà je débute avec l'arduino et j'essaye de piloter un servo moteur continu, mais quand je lance le programme ci-dessous :

#include <Servo.h> 

Servo myservo;
int pos =0;
void setup() 
{ 
  myservo.attach(9);
  myservo.writeMicroseconds(1500);  // set servo to mid-point
} 

void loop() {
   for(pos = 120; pos < 180; pos += 1)  // boucle qui va de 0 à 180 degrés par pas de 1 degré                           
  {                                 
    myservo.write(pos);  
    Serial.print(pos); 
 myservo.writeMicroseconds(1500);   // pilote le servo pour aller à la position 'pos'
    delay(100);                       // attend 15 ms que le servo atteigne sa nouvelle position
  }
  
}

le servo ne fait que tourner sur lui même ..., et lors de l'execution du programme celui-ci ne m'affiche pas dans la console la position du servo,

je ne sais pas quoi faire

Merci

Il manque un Serial.begin(9600); dans le setup pour pouvoir afficher avec Serial.print
http://arduino.cc/en/Serial/begin

Merci Christian, effectivement il manquait bien le serial.print(9600)

  • je n'ai pas très bien compris l'instruction -> myservo.writeMicroseconds(1500); quelqu'un peut m'en dire plus ?

  • est-il possible d'arrêter pendant 5 secondes le motor dans la boucle for dans le programme ?

  • pourquoi le motor tourne lorsque je lance le programme ?

  • et pourquoi l'instruction myservo.write(pos); dans la boucle for ne s'éxécute pas ...

  • quelqu'un peut me dire ce que le programme ci dessous est censé faire, car lorsque je l'éxécute le motor ne fait que tourner, en affichant les messages (serial.Print(9600)) en fonction du delay que j'ai fixé ...

Merci

dernière question, est-ce je peux faire tourner le servo moteur dans le sens inverse ?

Angles croissants, rotation en sans direct.
Angles décroissants, rotation en sens inverse. Il suffit de décrémenter la boucle for.

Retire carrément les lignes myservo.writeMicroseconds.
L'instruction *myservo.write(pos); *suffit à elle seule à atteindre la positionanglulare pos.

Merci pour ton aide Christian_R

sinon j'ai rentrer ce code, en décrémentant l'angle dans la boucle, mais cela ne marche toujours pas...

void loop()
{
  for(pos = 180; pos >=0 ; pos -= 1)  // boucle qui va de 0 à 180 degrés par pas de 1 degré                           
  {                                 
    myservo.write(pos);              // pilote le servo pour aller à la position 'pos'
    Serial.print(pos,DEC); 
    delay(1500);                       // attend 15 ms que le servo atteigne sa nouvelle position
  }

}

et je vois bien l'angle se décrémenter lorsque je lance le Moniteur série (180,179,178....)

j'ai un Tower Pro MG995, et je l'ai modifié pour qu'il soit en rotation continue

nathan62:
j'ai un Tower Pro MG995, et je l'ai modifié pour qu'il soit en rotation continue

Pour que le servo se comporte correctement il faut que le potentiomètre de recopie soit positionné au milieu (ou alors mettre un pont de résistances de valeurs égales à la place du potentiomètre).
Si tu envoies une impulsion de 1,5ms, le servo doit être au neutre ce qui correspond à l'arrêt pour un servo à rotation continu.
Si tu envoies une impulsion de 1ms, le servo doit être au maximum dans un sens.
Si tu envoies une impulsion de 2ms, le servo doit être au maximum dans l'autre sens.

Si tu n'obtiens pas ce comportement, c'est peut être que tu as un problème dans ta modification du servo