Controler 3 servomoteurs

Bonjour,

Je souhaite contrôler 3 servomoteurs FS5115M avec ma carte Arduino Uno.
Je sais, c’est très basique et je bosse sur Arduino depuis déjà quelques temps, mais là, je bloque.

Voici mon code :

#include <Servo.h>
Servo ServoM1;
Servo ServoM2;
Servo ServoM3;


void setup() {
ServoM1.attach(2);
ServoM2.attach(3);
ServoM3.attach(4);
Serial.begin(9600);

}


void loop() {
ServoM1.write(1);
ServoM2.write(1);
ServoM3.write(1);

mvt();

}


void mvt() {
ServoM1.write(1);
delay(1000);
ServoM1.write(60);
delay(1000);
ServoM2.write(1);
delay(1000);
ServoM2.write(60);
delay(1000);
ServoM3.write(1);
delay(1000);
ServoM3.write(60);
delay(1000);
}

Le but de ce code serait que les 3 moteurs fonctionnent l’un après l’autre.
Malheureusement, seul le premier moteur décide de bouger… pas les autres.

Il y a un truc que j’ai loupé ?

Merci de votre aide ! :slight_smile:

Comment tu alimentes en énergie tes servos ? Cela marche avec 2 ou 1 servo ?

Bonjour,

Comme indiqué, il y a 3 servomoteurs FS5115M branchés sur les ports 2, 3 et 4 de la carte arduino.
Et c’est actuellement alimenté par le câble par lequel j’envoie mon code.

Ce qui est étrange, c’est qu’avec ce code, les 3 servomoteurs fonctionnent bien les uns après les autres :

#include <Servo.h>
Servo ServoM1;
Servo ServoM2;
Servo ServoM3;


void setup() {
ServoM1.attach(2);
ServoM2.attach(3);
ServoM3.attach(4);
Serial.begin(9600);

}


void loop() {

  for (int position = 1; position <= 60; position++) {
    ServoM1.write(position);
    delay(15);
  }
  for (int position = 60; position >= 1; position--) {
    ServoM1.write(position);
    delay(15);
  }

  for (int position = 1; position <= 60; position++) {
    ServoM2.write(position);
    delay(15);
  }
  for (int position = 60; position >= 1; position--) {
    ServoM2.write(position);
    delay(15);
  }

  for (int position = 1; position <= 60; position++) {
    ServoM3.write(position);
    delay(15);
  }
  for (int position = 60; position >= 1; position--) {
    ServoM3.write(position);
    delay(15);
  }
}

Je pense donc que le code de mon premier post doit comporter des erreurs… qu’en pensez-vous ?

il faut essayer d’alimenter tes servos avec une alim externe, le port USB du PC n’est pas forcément asser puissant.
De plus tu initialise la liaison série

Serial.begin(9600);

mais tu ne t’en sert pas, c’est dommage ! Fait des

Serial.println("ordre servo n°x vers l'angle y");

régulièrement pour voir la réaction des servo à chaque ordre envoyés.

D’accord, je vais essayer ce weekend ! :slight_smile:
Merci !

Que mon montage soit branché sur ma prise de courant ou sur ma batterie lipo, ça ne change rien.

Voici mon montage :

Ce premier prgm ne fonctionne pas : les moteurs ne s’activent pas.

#include <Servo.h>
Servo ServoM1;
Servo ServoM2;
Servo ServoM3;


void setup() {
ServoM1.attach(2);
ServoM2.attach(3);
ServoM3.attach(4);
Serial.begin(9600);

}


void loop() {
ServoM1.write(1);
ServoM2.write(1);
ServoM3.write(1);

mvt();

}


void mvt() {
ServoM1.write(1);
delay(1000);
ServoM1.write(60);
delay(1000);
ServoM2.write(1);
delay(1000);
ServoM2.write(60);
delay(1000);
ServoM3.write(1);
delay(1000);
ServoM3.write(60);
delay(1000);
}

Celui-ci fonctionne : les moteurs s’activent les uns après les autres

#include <Servo.h>
Servo ServoM1;
Servo ServoM2;
Servo ServoM3;


void setup() {
ServoM1.attach(2);
ServoM2.attach(3);
ServoM3.attach(4);
Serial.begin(9600);

}


void loop() {

  for (int position = 1; position <= 60; position++) {
    ServoM1.write(position);
    delay(15);
  }
  for (int position = 60; position >= 1; position--) {
    ServoM1.write(position);
    delay(15);
  }

  for (int position = 1; position <= 60; position++) {
    ServoM2.write(position);
    delay(15);
  }
  for (int position = 60; position >= 1; position--) {
    ServoM2.write(position);
    delay(15);
  }

  for (int position = 1; position <= 60; position++) {
    ServoM3.write(position);
    delay(15);
  }
  for (int position = 60; position >= 1; position--) {
    ServoM3.write(position);
    delay(15);
  }
}

Et je ne sais pas pourquoi…