Parlons Arduino > Composants

à-coup servomoteur

<< < (2/2)

PhB22:

--- Citation de: Patrice59 le janvier 09, 2017, 09:36:14 pm ---Bonsoir phB22560
J' ai essayé ton prog +resistance pulldown 10k
Les servos s'initialisent et bagottes mais c'est toujours pareil
j'ai essayé avec une alim externe sans arduino, dés que je branche + et - mon copain accoup est là !!!!!
la seul différence entre le reely et le tower pro et que l'un est analogique et l'autre digital(le faller je sais pas)
est-ce important ???
A+

--- Fin de citation ---
Dans le setup, tu fais varier les valeurs d'angle max et mini.
Au lieu de 900, tu places 700.
Au lieu de +800, tu places +500.
Suivant les servos, on n'a pas le même résultat.

Dominique:
J'utilise la bibliothèque Servo intégrée.
Comme il y a beaucoup d'aiguilles (ce n'est pas mon réseau), j'ai créé des objets intégrant le servo, les 2 leds qui affichent sa position et l'inter de commande.  Comme cela va au delà du sujet, j'ai mis cette classe à la fin.

Mais revenons à nos moutons !

J'ai essayé d'attacher l'objet servo à sa pin après l'initialisation de sa position :


--- Code: --- void InitServo() {
    objetServo.writeMicroseconds(posInitiatle);  // position initiale
    objetServo.attach(pinServo);
  }

--- Fin du code ---

Mais n'étant pas sur place, je vous donnerai les résultats à mon retour.

Pour ceux que cela interesse, voici la classe complète


--- Code: ---class CommandeAiguille {
  Servo  objetServo;
  Bounce objetInter;
  byte   etatAutomate;      // 0 fixe, 1 bouge
  int    etatInter;         // O directe, 1 dévié
  int    taillePlage;       // pas utilisé pour le moment
  int    posMin;            // position droite
  int    posMax;            // position déviée
  int    posCourante;       // posotion courante
  int    delta;             // saut de position = pas
  int    pinServo;
  int    pinInter;
  int    pinLedDirecte;
  int    pinLedDeviee;
  unsigned long tempo;      // pour l'automate

public:
  CommandeAiguille() {      // constructeur
    etatAutomate = 0;
  }
 
  void SetpinServo(int p) { // définir la pin Servo
    pinServo = p;
  }
  void SetpinInter(int p) { // définir la pin Inter
    pinInter = p;
  }
  void SetpinLedDirecte(int p) { // définir la pin led
    pinLedDirecte = p;
  }
  void SetpinLedDeviee(int p) { // définir la pin led
    pinLedDeviee = p;
  }

  void SetPosMinMax (int pm, int PM) { //définir les butées
    posMin = pm;
    posMax = PM;
   
  }
  void InitCommandeAiguille() {                 // initialisations
    pinMode(pinInter,INPUT_PULLUP);
    pinMode(pinLedDirecte,OUTPUT);
    pinMode(pinLedDeviee,OUTPUT);
    objetInter.attach(pinInter);
    objetInter.interval(50);
    etatInter = digitalRead(pinInter); 
    digitalWrite(pinLedDirecte, !etatInter);
    digitalWrite(pinLedDeviee, etatInter);
    if (etatInter) posCourante = posMin; else posCourante = posMax;
    objetServo.writeMicroseconds(posCourante);  // position initiale en fonction de l'inter
    objetServo.attach(pinServo);                // attaches the servo on servo_pin to the servo object
  }

  void InterUpdate() {                    // test de l'inter
    if (objetInter.update( )) {           // 1 si changement sinon 0
      objetServo.attach(pinServo);
      etatInter = objetInter.read();
      digitalWrite(pinLedDirecte, !etatInter);
      digitalWrite(pinLedDeviee, etatInter);   
      //objetServo.attach(pinServo);
      if (etatInter==HIGH) {
        delta = -5;                         // position passe à droite
      } else {
        delta = +5;                         // position passe à devié
      }
      etatAutomate = 1;                     // en mouvement
      tempo = millis();
    }
  }

  void ServoUpdate() {                      // mouvement du servo
    if (etatAutomate == 1) {
      if ((tempo+pas) < millis())  {        // fin du pas de tempo       
        posCourante = posCourante + delta;
        objetServo.writeMicroseconds(posCourante);
        if ((posCourante <= posMin) || (posCourante >= posMax)) { // arret
          etatAutomate = 0;
          //objetServo.detach();
        } else {
          tempo = millis();
        }
      }
    } 
  }

}; // fin de la classe CommandeAiguille

--- Fin du code ---

PhB22:
Je viens de reprendre le sketch.
Tout fonctionne et pas d'accoup.
Je n'ai même pas mis de résistance de 10k entre le fil blanc de commande du servo et la masse.
J'ai ajouté quelques commentaires et je te redonne le point ino

Jean-Luc:
Bonjour,

Il faut mettre une résistance de 10kΩ entre le signal de PWM du servo et l'alimentation du servo (pas la masse, le +5V)

Patrice59:
Bonsoir à tous

Ca y est  :D
ca va beaucoup mieux avec la resistance au +5v
La solution à Jean-Luc est nikel .
un grand merci de partager vos connaissances
Amicalement

Navigation

[0] Index des messages

[*] Page précédente

Utiliser la version classique