Ajout Joystick
Fredblock
20 Messages
Le dimanche 22 mars 2020 à 23:07:19
Bonjour à toute et à tous
Etant en période de confinement (saleté de coronavirus), je passe le temps sur l'arduino, et donc sur mon drone.
Malgré le fait que se soit un stade beaucoup trop avancée pour mon niveau débutant, je m'y aventure tout de même.
Bref, aujourd'hui je n'ai malheureusement pas l'ensemble des composants nécessaires pour la réalisation complète de ma version personnel de drone (toujours lié au coronavirus, mes composants NRF24 ne sont pas arrivés à temps ...). je m'amuse donc, pour le moment, à faire un drone version filaire (haha oui pas commun).
Donc avant de configurer le capteur MPU selon le chapitre 7 et d'essayé de comprendre l'asservissement, il me faut remplacer l'accélérateur que j'avais précédemment (potentiomètre) par un Joystick.
Seulement je rencontre un problème.
Après avoir écrit mon code, compilé et téléversé, j'ouvre le moniteur série pour vérifier les bornes du joystick et la c'est le drame.
Il y a un mix entre la valeur moyenne (509) et 1000.
Lorsque je pousse le Joystick vers sa valeur max, il m'indique un mix 1000/1023
et vers sa valeur min, il m'indique un mix 0/1000.
Comme ceci : (illustration pour le point 0 de joystick, centre)
J'ai d'abord pensé à un problème de faux contact. Mais après changement de joystick, maquettage sur breadboard vs uno, changement des fils : BIS REPETITA.
Il est donc possible que se soit mon code le défaut.
Le voici :
Je suis sur que vous voyez déjà le problème alors pouvez-vous m'orienter s'il vous plais ?
Merci par avance pour votre temps et votre patience.
Fred
Etant en période de confinement (saleté de coronavirus), je passe le temps sur l'arduino, et donc sur mon drone.
Malgré le fait que se soit un stade beaucoup trop avancée pour mon niveau débutant, je m'y aventure tout de même.
Bref, aujourd'hui je n'ai malheureusement pas l'ensemble des composants nécessaires pour la réalisation complète de ma version personnel de drone (toujours lié au coronavirus, mes composants NRF24 ne sont pas arrivés à temps ...). je m'amuse donc, pour le moment, à faire un drone version filaire (haha oui pas commun).
Donc avant de configurer le capteur MPU selon le chapitre 7 et d'essayé de comprendre l'asservissement, il me faut remplacer l'accélérateur que j'avais précédemment (potentiomètre) par un Joystick.
Seulement je rencontre un problème.
Après avoir écrit mon code, compilé et téléversé, j'ouvre le moniteur série pour vérifier les bornes du joystick et la c'est le drame.
Il y a un mix entre la valeur moyenne (509) et 1000.
Lorsque je pousse le Joystick vers sa valeur max, il m'indique un mix 1000/1023
et vers sa valeur min, il m'indique un mix 0/1000.
Comme ceci : (illustration pour le point 0 de joystick, centre)
J'ai d'abord pensé à un problème de faux contact. Mais après changement de joystick, maquettage sur breadboard vs uno, changement des fils : BIS REPETITA.
Il est donc possible que se soit mon code le défaut.
Le voici :
#include <Servo.h> //Appel de la library Servo.h
int joystick; //Variable joystick
int valeur = 0;
Servo esc1 ; //Variable de type servo et de nom esc
Servo esc2 ; //Variable de type servo et de nom esc
Servo esc3 ; //Variable de type servo et de nom esc
Servo esc4 ; //Variable de type servo et de nom esc
void setup() {
esc1.attach(4); //attribution de la pin 4 à la variable esc
esc2.attach(5); //attribution de la pin 5 à la variable esc
esc3.attach(6); //attribution de la pin 6 à la variable esc
esc4.attach(7); //attribution de la pin 7 à la variable esc
esc1.writeMicroseconds(1000); //attribution de la valeur mini
esc2.writeMicroseconds(1000); //attribution de la valeur mini
esc3.writeMicroseconds(1000); //attribution de la valeur mini
esc4.writeMicroseconds(1000); //attribution de la valeur mini
Serial.begin(115200);
}
void loop() {
joystick = analogRead(A0);
Serial.println(joystick);
int valeuresc = map (valeur , 0 , 1023 , 1000 , 2000);
esc1.writeMicroseconds(valeuresc); //attribution de la variable mappée à l'esc
esc2.writeMicroseconds(valeuresc); //attribution de la variable mappée à l'esc
esc3.writeMicroseconds(valeuresc); //attribution de la variable mappée à l'esc
esc4.writeMicroseconds(valeuresc); //attribution de la variable mappée à l'esc
Serial.println(valeuresc);
}
Je suis sur que vous voyez déjà le problème alors pouvez-vous m'orienter s'il vous plais ?
Merci par avance pour votre temps et votre patience.
Fred
Le lundi 23 mars 2020 à 09:41:16
Salut, tu peux donner la référence de ton joystick stp ?
A première vue je ne vois rien d'anormal dans ton code.
Comment as-tu câblé ton bâton de joie à l'entrée analogique ?
A première vue je ne vois rien d'anormal dans ton code.
Comment as-tu câblé ton bâton de joie à l'entrée analogique ?
Fredblock
20 Messages
Le lundi 23 mars 2020 à 10:18:58
Hello
J'avais commandé sur banggood 2 joystick. Malheureusement j'en ai reçu 2 différents (merci banggood).
Le 1er avec 5 pins ( GND/+5V/VRX/VRY/SW) et le 2nd avec 9 pins ( SY/VCC/GND, SX/VCC/GND, SK/VCC/GND)
sur les 2, il n'y a qu'une seule inscription : B103 267.
Dans ma commande, il était notifié modèle KY-023 de chez KEYES.
Pour le câblage, j'ai branché le Y sur le pin A0 analog de la carte UNO.
Fred
J'avais commandé sur banggood 2 joystick. Malheureusement j'en ai reçu 2 différents (merci banggood).
Le 1er avec 5 pins ( GND/+5V/VRX/VRY/SW) et le 2nd avec 9 pins ( SY/VCC/GND, SX/VCC/GND, SK/VCC/GND)
sur les 2, il n'y a qu'une seule inscription : B103 267.
Dans ma commande, il était notifié modèle KY-023 de chez KEYES.
Pour le câblage, j'ai branché le Y sur le pin A0 analog de la carte UNO.
Fred
Le lundi 23 mars 2020 à 11:28:55
Ok, du coup le câblage et le code ne sont pas bons.
Jette un œil à ce tuto : https://arduinomodules.info/ky-023-joystick-dual-axis-module/
Jette un œil à ce tuto : https://arduinomodules.info/ky-023-joystick-dual-axis-module/
Fredblock
20 Messages
Le lundi 23 mars 2020 à 18:13:56
Hello
Merci pour ta réponse. J'ai résolu le problème, qui était le code. Je me suis inspiré du lien que tu m'as donné
Voici le code :
Cela fonctionne.
Je ne m'y attendais pas, mais dans le moniteur, les inscriptions sont du type : Y/valeur du joystick entre 510 et 1023 / valeur mapé esc entre 1000 et 2000.
par exemple : Y5101000.
Ce n'est pas gênant.
Retour d'expérience intéressant : après essais sur le drone, il est plutôt difficile d'être précis avec le joystick, surtout dans les bas régime. Mais j'imagine que dans la pratique, c'est à dire drone en vol, nous sommes rarement en bas régime.
Mais la sensibilité au joystick est importante, j'imagine qu'elle vient avec le temps et la pratique lors de nombreux vols.
Je remarque une chose également, cela n'est pas lié au joystick, mais j'ai l'impression que les 20 ou 30 dernier % de gaz ne servent à rien.
A l'oreille il n'y aucune différence de régime à partir des 70 ou 80 % de gaz.
Je remet en cause l'apprentissage
Fred
Merci pour ta réponse. J'ai résolu le problème, qui était le code. Je me suis inspiré du lien que tu m'as donné
Voici le code :
#include <Servo.h> //Appel de la library Servo.h
int valeur = 0; //Variable joystick
Servo esc1 ; //Variable de type servo et de nom esc1
Servo esc2 ; //Variable de type servo et de nom esc2
Servo esc3 ; //Variable de type servo et de nom esc3
Servo esc4 ; //Variable de type servo et de nom esc4
void setup() {
esc1.attach(4); //attribution de la pin 4 à la variable esc1
esc2.attach(5); //attribution de la pin 5 à la variable esc2
esc3.attach(6); //attribution de la pin 6 à la variable esc3
esc4.attach(7); //attribution de la pin 7 à la variable esc4
esc1.writeMicroseconds(1000); //attribution de la valeur mini
esc2.writeMicroseconds(1000); //attribution de la valeur mini
esc3.writeMicroseconds(1000); //attribution de la valeur mini
esc4.writeMicroseconds(1000); //attribution de la valeur mini
Serial.begin(115200);
}
void loop() {
valeur = analogRead(A0);
Serial.print("Y");
Serial.print(valeur);
int valeuresc = map (valeur , 515 , 1023 , 1000 , 2000); //515 = un poil au dessus de la valeur correspondant à la position repos du potard, sur l'axe Y
esc1.writeMicroseconds(valeuresc); //attribution de la variable mappée à l'esc1
esc2.writeMicroseconds(valeuresc); //attribution de la variable mappée à l'esc2
esc3.writeMicroseconds(valeuresc); //attribution de la variable mappée à l'esc3
esc4.writeMicroseconds(valeuresc); //attribution de la variable mappée à l'esc4
Serial.println(valeuresc);
}
Cela fonctionne.
Je ne m'y attendais pas, mais dans le moniteur, les inscriptions sont du type : Y/valeur du joystick entre 510 et 1023 / valeur mapé esc entre 1000 et 2000.
par exemple : Y5101000.
Ce n'est pas gênant.
Retour d'expérience intéressant : après essais sur le drone, il est plutôt difficile d'être précis avec le joystick, surtout dans les bas régime. Mais j'imagine que dans la pratique, c'est à dire drone en vol, nous sommes rarement en bas régime.
Mais la sensibilité au joystick est importante, j'imagine qu'elle vient avec le temps et la pratique lors de nombreux vols.
Je remarque une chose également, cela n'est pas lié au joystick, mais j'ai l'impression que les 20 ou 30 dernier % de gaz ne servent à rien.
A l'oreille il n'y aucune différence de régime à partir des 70 ou 80 % de gaz.
Je remet en cause l'apprentissage
Fred
Le mardi 24 mars 2020 à 09:10:40
Cool. Par contre tu n'as branché que l'axe Y du joystick, exact ?
En effet, on est assez rarement en bas régime. On y passe juste pendant les phases de décollage/atterrissage.
Je ne m'y attendais pas, mais dans le moniteur, les inscriptions sont du type : Y/valeur du joystick entre 510 et 1023 / valeur mapé esc entre 1000 et 2000.Oui c'est normal. Tu fais des "Serial.print" à la suite sans espaces, donc tout est collé.
En effet, on est assez rarement en bas régime. On y passe juste pendant les phases de décollage/atterrissage.
Fredblock
20 Messages
Le mardi 24 mars 2020 à 09:44:21
Hello
Jusqu'à présent oui, je m'y attèle à partir de maintenant :)
J'ai déjà essayé d'espacer les "Serial.print", même des les séparer par la ligne "valeur = analogRead(A0);".
Sans succès.
En tout cas cette découverte du Joystick est intéressante, Je m'aperçois que la sensibilité est complètement différente. Il va falloir le manier avec grande précaution.
Fred
Jusqu'à présent oui, je m'y attèle à partir de maintenant :)
J'ai déjà essayé d'espacer les "Serial.print", même des les séparer par la ligne "valeur = analogRead(A0);".
Sans succès.
En tout cas cette découverte du Joystick est intéressante, Je m'aperçois que la sensibilité est complètement différente. Il va falloir le manier avec grande précaution.
Fred
Le mardi 24 mars 2020 à 11:00:02
Tu dois mettre les espaces dans les Serial.print :
ce qui donnera
void loop() {
Serial.print("un espace ici ");
Serial.println("Un autre là : ");
}
ce qui donnera
un espace ici Un autre là :
un espace ici Un autre là :
un espace ici Un autre là :
...
Kendy545
3 Messages
Le lundi 6 juillet 2020 à 15:07:33
Salut, je m'introduis dans cette discussion parce que je constate que la commande se fait avec la librairie servo !
Faute de matériel disponible, je dois commander mon drone par l'appli Blynk (et un arduino MEGA wemos wifi) et en utilisant absolument cette libraire ! Dis, comment tu gères l'asservissement avec cette librairie ?
Chez moi j'ai essayé ; environ 5 secondes après le démarrage à 1100 us le tout s'arrête et les moteurs bippent.
Le code que j'ai utilisé c'est celui que tu nous a proposé au dernier chapitre sur le drone.
Faute de matériel disponible, je dois commander mon drone par l'appli Blynk (et un arduino MEGA wemos wifi) et en utilisant absolument cette libraire ! Dis, comment tu gères l'asservissement avec cette librairie ?
Chez moi j'ai essayé ; environ 5 secondes après le démarrage à 1100 us le tout s'arrête et les moteurs bippent.
Le code que j'ai utilisé c'est celui que tu nous a proposé au dernier chapitre sur le drone.