Problème servo moteur continue

Bonjours,

je voudrais réaliser un projet avec deux servo moteur continue qui sont contrôlés par un

joystick mais seul problème est que quand le joystick est sur le point mort (quand il est au milieu)

les deux moteurs tournent encore.

Voici le code

#include <Servo.h>
const int X_pin = A0;
const int X_pin2 = A1;

Servo myservo1;
Servo myservo2;

int val;

void setup() 
{
  myservo1.attach(3);
  myservo2.attach(13);
}

void loop() 
{
 val = analogRead(X_pin2);
 val = map(val, 0, 1023, 0, 180);
 myservo1.write(val);
 delay(15);
 
 val = analogRead(X_pin);
 val = map(val, 0, 1023, 0, 180);
 myservo2.write(val);
 delay(15);
}

Merci d'avance

  • utilisez writeMicroseconds et trouver précisément la valeur qui arrête bien votre moteur
  • dans le code de contrôle, définissez une plage autour du point central du joystick (par exemple entre 500 et 524 si le analogRead() du joystick donne 512 au milieu) qui n'utilise pas la valeur renvoyée par map() mais enverra la valeur de repos
val = analogRead(X_pin2);
if ((val > 500) && (val <= 524)) {
myservo1.writeMicroseconds(xxxx); // la valeur d'arrêt de myservo1
} else {
  myservo1.write(map(val, 0, 1023, 0, 180));
}

val = analogRead(X_pin);
if ((val > 500) && (val <= 524)) {
myservo2.writeMicroseconds(yyyy); // la valeur d'arrêt de myservo2
} else {
  myservo2.write(map(val, 0, 1023, 0, 180));
}

 delay(15);

Merci mais comment j'execute writeMicroseconds pour trouver exactement la valeur qui l'arrête ?

vous faites un petit montage avec un code qui essaye différentes valeurs :slight_smile:
éventuellement vous lisez la valeur sur le port série et ça vous permet d'en tester simplement plusieurs

D'accord merci

je ne suis qu'un débutant pouvez vous plus m'aider si ça ne vous gêne pas ?

un truc simple comme cela

#include <Servo.h>

const byte servoPin = 3;

Servo xServo;

void setup()
{
  Serial.begin(115200);
  xServo.attach(servoPin);
  Serial.println(F("\nréglez le moniteur à 115200 bauds + envoi de NL (new line) uniquement"));

  for (int p = 1400; p <= 1600; p++) {
    Serial.print("Position = "); Serial.println(p);
    xServo.writeMicroseconds(p);
    Serial.println(F("\nappuyez sur entrée pour passer à la valeur suivante"));
    while (Serial.read() == -1);
  }
}

void loop() {}

il faut régler le moniteur série sur 115200 bauds et la fin de ligne juste sur un seul caractère, par exemple "Nouvelle Ligne"

vous connectez le servo à tester sur la pin 3, chargez le code et ouvrez le moniteur série et mettez le curseur dans le champs d'entrée de données

à chaque fois que vous tapez au clavier sur entrée vous passez à une valeur suivante

Vraiment merci vous m'aidez beaucoup

Donc je dois appuyer sur Entrée jusqu'à que le moteur s’arrête ?

oui - si la valeur est entre 1400 et 1600 (ça devrait être le cas autour de 1500)

comment alimentez vous votre Servo?

Par le 5V de l'Arduino Uno

C'est bon la valeur est égale à 1227 et du coup que dois-je modifier sur le code ?

Il ne faut pas alimenter par l’arduino
Vous risquez de tirer trop de courant et endommager la carte ou pas avoir assez de jus dispo. Il faut une alim séparée sans passer par la carte

Sinon la valeur est à injecter dans le code posté précédemment quand le joystick est dans la zone entre 500 et 524

Est ce que un batterie de 9V suffit pour alimenter deux servo moteur ? Ou il faut autre chose ?

Un tuto de hbachetti à lire en urgence !

Donc quelle alimentation puis-je utiliser car les servo moteur que j'ai on une tension de fonctionnement de 4,8 à 6,0 volts CC

Comment alimentez vous Votre arduino ?

par un cable UBS reliée à mon ordinateur

Ça va fournir 500 mA ce qui est OK pour la carte et quelques composants qui ne consomment pas beaucoup.

Un servo même petit (ça dépend lesquels) peut tirer facilement plusieurs centaines de mA surtout s’il doit forcer. Et vous en avez 2

Si Vous avez une vielle alim USB de téléphone portable dispo ou une petit alim 5V 1A qui traîne utilisez cela pour les moteurs

Sinon 4 piles bâtons AA en série de 1.5V peuvent aussi faire l’affaire, elles peuvent fournir plus de courant que la pile 9V dont vous parliez (qui ne convient que pour de l’électronique qui ne nécessite pas bcp de courant comme les détecteurs de fumée) - lisez le tuto de @hbachetti du post 15

D'accord merci et j'ai lus le tuto mais pour revenir au câble USB j'ai fais la même chose mais cela a fait chauffer tout les câble et les servo moteur donc je vais essayer en utilisant des piles en serie