bonjour, je vous demande conseille car je n'arrive pas a contrôler mes servo continue comme je le veux .
mes servo continue serviront comme un pédalo. un servo continue de chaque coter du bateau. Tout comme le pédalo:
-pour avancer: servo continue à droite, rotation dans le sens horaire.
servo continue à gauche, rotation antihoraire.
pour reculer: servo continue à droite, rotation dans le sens antihoraire.
servo continue à gauche, rotation horaire.
tourné a gauche: servo continue à droite, rotation dans le sens horaire.
servo continue à gauche, rotation horaire.
tourné a droite: servo continue à droite, rotation dans le sens antihoraire.
servo continue à gauche, rotation antihoraire.
dans mon programme, j'ai réussi a le faire avancer. mais je n'arrive pas a le faire tourner. Pourriez-vous m'aidez s'il vous play.
#include <Servo.h> // Utilisation de la bibliothèque Servo.h.
#define pinJx A0 // Broche pour l'axe X du joystick.
#define pinJy A1 // Broche pour l'axe Y du joystick.
#define pinSx 9 // Broche pour le signal du servomoteur X.
#define pinSy 10 // Broche pour le signal du servomoteur Y.
unsigned short X, Y; // Variables pour les valeurs du joystick.
Servo Sx, Sy; // Déclaration de deux objets Servo.
void setup()
{
pinMode(pinSx, OUTPUT); // Broches fixées en sortie.
pinMode(pinSy, OUTPUT);
Sx.attach(pinSx); // Correspondance broche/servomoteur.
Sy.attach(pinSy);
Sx.write(90); // Mouvement du servomoteur en position initiale.
Sy.write(90);
}
void loop()
{
X = analogRead(pinJx); // Lecture des valeurs du joystick.
Y = analogRead(pinJy);
Sx.write(joyToServo(X)); // Envoi des signaux de rotation.
Sy.write(joyToServo(X));
}
byte joyToServo(unsigned short n) // Fonction de correspondance.
{
return (byte)(-0.175953 * n + 180); // f(x) calculée précédemment.
}
Édite ton message pour mettre ton code entre balises CODE (le bouton </>). C'est plus facile à lire notamment sur un smartphone.
Ça doit ressembler à ça :
Mon code ici
Lis bien ton code : est-ce que ça te semble correct ?
Sx.write(joyToServo(X)); // Envoi des signaux de rotation.
Sy.write(joyToServo(X));
Précise ce que sont tes servo-moteurs.
A te lire j'ai l'impression que ce sont " ce qu'on appelle " des servo 360°
Un vrai servo moteur fait des débattement de ± 90 °, certains ± 135 ° mais jamais des tours complets.
Un vrai servo-moteur est fait pour tenir une position.
Ce qu'on appelle " des servos 360 ou servos continus " sont des moteurs classiques dont la commande est copiée sur celle des servo ce qui permet d'en grandement simplifier l'utilisation.
lesept:
Édite ton message pour mettre ton code entre balises CODE (le bouton </>). C'est plus facile à lire notamment sur un smartphone.
Ça doit ressembler à ça :
Mon code ici
Lis bien ton code : est-ce que ça te semble correct ?
Sx.write(joyToServo(X)); // Envoi des signaux de rotation.
Sy.write(joyToServo(X));
au départ, mon code était :
Sx.write(joyToServo(X)); // Envoi des signaux de rotation.
Sy.write(joyToServo(Y));
mais les servo moteur ne tournait pas en même temps malheureusement . j'ai donc mis pour essayer
Sx.write(joyToServo(X)); // Envoi des signaux de rotation.
Sy.write(joyToServo(Y));
et la , j'ai réussi à avancer , à reculer, mais pas à tourner
68tjs:
Précise ce que sont tes servo-moteurs.
A te lire j'ai l'impression que ce sont " ce qu'on appelle " des servo 360°
Un vrai servo moteur fait des débattement de ± 90 °, certains ± 135 ° mais jamais des tours complets.
Un vrai servo-moteur est fait pour tenir une position.
Ce qu'on appelle " des servos 360 ou servos continus " sont des moteurs classiques dont la commande est copiée sur celle des servo ce qui permet d'en grandement simplifier l'utilisation.
j'ai créé un autre programme qui me permet de lire la position du joystick dans le moniteur en série. serais t'il pas préférable qui je continue sur ce programme en disant par example:
la position avancer = au chiffre 1
chiffre 1 = servo continue à droite, rotation dans le sens horaire.
servo continue à gauche, rotation antihoraire.
/*
Programme pour utilisation Joystick
Celui-ci permet de définir la zone en fonction de la position du Joystick
*/
#include <Servo.h>
Servo myservo;
int pos = 0;
int port_v = A0; // joystick mouvement vertical
int port_h = A1; // joystick mouvement horizontal
int valeur_v = 0;
int valeur_h = 0;
int zone = 0;
void setup()
{
Serial.begin(9600);
}
void calcul_zone(int x, int y)
{
if (x <= 250)
{
if (y >= 700){zone = 4;}
if (y <= 200){zone = 6;}
if ((y < 700) && (y > 200)) {zone = 5;}
}
if (x >= 700)
{
if (y >= 700){zone = 2;}
if (y <= 200){zone = 8;}
if ((y < 700) && (y > 200)) {zone = 1;}
}
if ((x > 200) && (x < 700))
{
if (y >= 700){zone = 3;}
if (y <= 200){zone = 7;}
if ((y < 700) && (y > 200)) {zone = 0;}
}
}
void loop()
{
// Lit l’entrée analogique A0
valeur_v = analogRead(port_v);
// lit l’entrée analogique A1
valeur_h = analogRead(port_h);
calcul_zone(valeur_h, valeur_v);
switch (zone)
{
case 0:
Serial.println("Robot stop");
break;
case 1:
Serial.println("Robot avance ");
break;
case 2:
Serial.println("Robot avance et tourne à droite ");
break;
case 3:
Serial.println("Robot tourne à droite toute ");
break;
case 4:
Serial.println("Robot recule et tourne à droite");
break;
case 5:
Serial.println("Robot recule");
break;
case 6:
Serial.println("Robot recule et tourne à gauche");
break;
case 7:
Serial.println("Robot tourne à gauche toute ");
break;
case 8:
Serial.println("Robot avance et tourne à gauche");
break;
}
delay(500);
}
C'est quoi ? Peux-tu poster une photo, image, référence ou datasheet de ces trucs bizarres ?
Ce sont des moteur normaux avec une électronique de puissance intégrée.
L'électronique utilise le protocole des servos :
Position milieu du servo (0°) = moteur arrété
Position vers un coté (disons vers la droite ) : le moteur tourne dans un sens
Position vers l'autre coté (disons vers la gauche) : le moteur tourne dans l'autre sens
Plus on se rapproche de la position extrême = plus la vitesse augmente.
j'ai du nouveau !
j'arrive a commander parfaitement un moteur comme je le veux avec ce code
/*
Programme pour utilisation Joystick
Celui-ci permet de définir la zone en fonction de la position du Joystick
*/
#include <Servo.h>
Servo myservo;
int pos = 90;
int port_v = A0; // joystick mouvement vertical
int port_h = A1; // joystick mouvement horizontal
int valeur_v = 0;
int valeur_h = 0;
int zone = 0;
void setup()
{
Serial.begin(9600);
myservo.attach(9);
}
void calcul_zone(int x, int y)
{
if (x <= 250)
{
if ((y < 700) && (y > 200)) {zone = 3;}
}
if (x >= 700)
{
if ((y < 700) && (y > 200)) {zone = 1;}
}
if ((x > 200) && (x < 700))
{
if (y >= 700){zone = 2;}
if (y <= 200){zone = 4;}
if ((y < 700) && (y > 200)) {zone = 0;}
}
}
void loop()
{
// Lit l’entrée analogique A0
valeur_v = analogRead(port_v);
// lit l’entrée analogique A1
valeur_h = analogRead(port_h);
calcul_zone(valeur_h, valeur_v);
switch (zone)
{
case 0:
Serial.println("Robot stop");
for(pos = 90 ; pos >= 90; pos--)
myservo.write(pos);
break;
case 1:
Serial.println("Robot avance ");
for(pos = 180 ; pos >= 0; pos--)
myservo.write(pos);
break;
case 2:
Serial.println("Robot tourne à droite toute ");
for(pos = 180 ; pos >= 0; pos--)
myservo.write(pos);
break;
case 3:
Serial.println("Robot recule");
for(pos = 180 ; pos >= 0; pos++)
myservo.write(pos);
break;
case 4:
Serial.println("Robot tourne à gauche toute ");
for(pos = 180 ; pos >= 0; pos++)
myservo.write(pos);
break;
}
delay(500);
}
maintenant il faudrait que j'arrive a faire tourné le deuxième servo moteur dans le même sens pour avancer, reculer. et le sens contraire pour tourné a droite ou tourné a gauche. comment définir moteur x et moteur y. comment les commander avec mon programe
j'ai réussi mon programme merci à vous, maintenant manque plus que je m'informe pour mettre les moteurs et la télécommande avec un arduino bluetooth shield v2.01
/*
Programme pour utilisation Joystick
Celui-ci permet de définir la zone en fonction de la position du Joystick
*/
#include <Servo.h>
Servo myservoG;
Servo myservoD;
int port_v = A0; // joystick mouvement vertical
int port_h = A1; // joystick mouvement horizontal
int valeur_v = 0;
int valeur_h = 0;
int zone = 0;
void setup()
{
Serial.begin(9600);
myservoG.attach(9);
myservoD.attach(10);
}
void calcul_zone(int x, int y)
{
if (x <= 250)
{
if ((y < 700) && (y > 200)) {zone = 3;}
}
if (x >= 700)
{
if ((y < 700) && (y > 200)) {zone = 1;}
}
if ((x > 200) && (x < 700))
{
if (y >= 700){zone = 2;}
if (y <= 200){zone = 4;}
if ((y < 700) && (y > 200)) {zone = 0;}
}
}
void loop()
{
// Lit l’entrée analogique A0
valeur_v = analogRead(port_v);
// lit l’entrée analogique A1
valeur_h = analogRead(port_h);
calcul_zone(valeur_h, valeur_v);
switch (zone)
{
case 0:
Serial.println("Robot stop");
myservoG.write(95);
myservoD.write(87);
break;
case 1:
Serial.println("Robot avance ");
myservoG.write(0);
myservoD.write(0);
break;
case 2:
Serial.println("Robot tourne à droite toute ");
myservoG.write(0);
myservoD.write(180);
break;
case 3:
Serial.println("Robot recule");
myservoG.write(180);
myservoD.write(180);
break;
case 4:
Serial.println("Robot tourne à gauche toute ");
myservoG.write(180);
myservoD.write(0);
break;
}
delay(500);
}
finalement je n'arrive pas à coder pour envoyer en Bluetooth mes état de sevo moteur à une autre carte Bluetooth shield 2v01. pourriez vous encore m'aidez s'il vous play