Problème surprenant avec Servo

Je veux simplement manipuler des servos moteurs (1 pour le moment). J'utilise bien évidemment la bibliothèque servo, les branchements semblent bon sur l'arduino uno et le servo. Par contre des que j'ai la commande .attach() le servo fait des va et vient tout seul, ne répond à aucune commande et je ne peux plus televerser tant que le servo est branché. Si vous avez une idée...
Merci

Oui, on a surement des idées, mais ça manque un peu de détails sur la configuration et le code utilisé pour pouvoir répondre.

Par exemple :

  • comment sont alimentés les servos?
  • Quel servo?

Oui et il manque l'information si par tout à fait par hasard le servo ne serait pas connecté sur Rx ou Tx.

Bonjour @raf23

En arrivant sur le forum la consultation des Bonnes Pratiques du Forum est essentielle, en particulier pour y découvrir l'ensemble des informations à fournir.

Excusez moi, j'ai testé sur différents pin (notamment le 3, 9 et 10) comme dans les exemples que j'ai pu trouver. J'ai testé sur 2 mg995 et un b7018 et sur deux uno différents. Le servo est alimenté par l'arduino lui même branché en usb. Voici les 2 codes utilisé (presque rien) :

#include <Servo.h>

Servo myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards

int pos = 0;    // variable to store the servo position
int var = 0;

void setup() {
  myservo.attach(3);  // attaches the servo on pin 9 to the servo object
}

void loop() {
  delay(5000);
  myservo.write(pos);
  while(var < 200){

    for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
      myservo.write(pos);              // tell servo to go to position in variable 'pos'
      delay(15000);                       // waits 15ms for the servo to reach the position
    }
    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(15000);                       // waits 15ms for the servo to reach the position
    }
    for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
      myservo.write(pos);              // tell servo to go to position in variable 'pos'
      delay(1500);                       // waits 15ms for the servo to reach the position
    }
    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(1500);                       // waits 15ms for the servo to reach the position
    }
  }
}

(j'ai testé différentes variables de ce code)
et la version minimaliste :

#include <Servo.h>

Servo myservo;  

int pos = 0;    

void setup() {
  myservo.attach(3); 
}

void loop() {
  
}

Dès que le code comprend le .attach() ça ne répond à aucune commande
Merci pour vos réponses

Quel est le courant absorbé par le servo ?
Même si certains servos peu gourmands en courant peuvent être alimenté à partir de la pin 5 V des cartes, il est préférable de les alimenter à part. Un simple chargeur de téléphone, qui maintenant délivre couramment 2A, suffit.

Au minimum pour faire un essai.

Petite erreur delay() utilise des milli secondes et 15 000 ms font 15 secondes.
Sûr que le mouvement n'est pas fluide.

Courant ?

Servo mg995 , sur ce site Robot Maker on lit courant = 120mA sans charge

Même valeur , sans charge, sur ce site pour le servo 'fort couple' B7018

Merci, concernant le delay j'ai d’abord testé avec 15 puis 150 et 15000 juste pour voir si quelque chose change mais aucun changement malgré ces différentes valeurs. J'ai testé en l'alimentant suite à vos conseils, mais pareil le problème persiste...

Bonjour raf23

Essaies de régler les temps mini et maxi du PWM ainsi

	myservo.attach(3, 700, 2300);  // attaches the servo on pin 9 to the servo object

Pas sûr des valeurs, à contrôler.
Tu peux aussi commander le servo en donnant directement la largeur d'impulsion à la place de l'angle, ainsi myservo.write(900);.
La bibliothèque considère ce qui est < 200 comme un angle et >= 200 comme un temps d'impulsion.

Cordialement
jpbbricole

Revérifier, s'il n'y aurait pas un malentendu sur le brochage de la prise servo. Parce que franchement, il n'y a aucune raison pour que ce programme ne fonctionne pas.
Pour autant que la source de l'alimentation USB soit correcte, bien sûr.
Tu peux nous faire une photo de l'installation?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.