Interfacer Arduino et P3D

Programmation LUA, Macros FSUIPC, logiciel LINDA
et codage en LUA des gauges Air Manager

Re: Interfacer Arduino et P3D

Messagede JacquesZ » Jeu 27 Juin 2019 22:42

Il faut remplacer dans ton code le hw_dial_add() par celui que je t’ai indiqué, en rajoutant les paramètres:

Code: Tout sélectionner
———————————-
— paramètres encodeurs
———————————-
type="TYPE_2_DETENT_PER_PULSE"
acceleration=20
debounce=4
———————————-

(Reste du code)



course_dialchange = hw_dial_add("ARDUINO_MEGA2560_G_D38", "ARDUINO_MEGA2560_G_D39", type,acceleration,debounce,course_dialchange_callback)


Si ça ne marche pas essaies de remplacer :
type="TYPE_2_DETENT_PER_PULSE" par
"TYPE_1_DETENT_PER_PULSE" ou "TYPE_4_DETENT_PER_PULSE".
L’acceleration est une affaire de goût. Commences par 20 et descends ou montes la valeur en fonction de ce que tu préfères.
Le temps d’anti-rebond (debounce) par défaut est de 4ms, peut être augmente légèrement si les encodeurs sont de mauvaise qualité

Jacques
Dernière édition par JacquesZ le Jeu 27 Juin 2019 22:47, édité 1 fois.
Ma chaîne YouTube Tutos sur l’A320 par un Pilote de Ligne: https://youtube.com/channel/UCljftuoKBcgeR-WBgYJpuoA
Avatar de l’utilisateur
JacquesZ
 
Messages: 2848
Inscription: 24/11/10

Re: Interfacer Arduino et P3D

Messagede JacquesZ » Jeu 27 Juin 2019 22:43

Bon tu as été plus rapide que moi sur ce coup-ci ecroulerire

Ceci dit, une valeur de 1 pour l’accelération et de 10msec pour l’antirebond me parait peut être à affiner, je dirais plutôt 10 et 4

Jacques
Ma chaîne YouTube Tutos sur l’A320 par un Pilote de Ligne: https://youtube.com/channel/UCljftuoKBcgeR-WBgYJpuoA
Avatar de l’utilisateur
JacquesZ
 
Messages: 2848
Inscription: 24/11/10

Re: Interfacer Arduino et P3D

Messagede JacquesZ » Ven 28 Juin 2019 09:05

hadrien a écrit:Tout d'abord, félicitations Jacques !!!

Merci!
hadrien a écrit:Concernant mes afficheurs digitaux, problème réglé. J'avais simplement câblé sur la mauvaise série de broches du max7219. Il y a en effet 5 petits "trous" sur les côtés pour faire les connexions. Je pensais que c'était les mêmes. J'avais testé sur celui de gauche et branché au final sur celui de droite. Mon erreur était là. J'ai inversé, et tout fonctionne nickel.
Hadrien

Pour le MAX7219, les circuits tout prêts peuvent être chaînés entre eux en SPI pour économiser des broches sur l’Arduino. Les 5 broches de gauche doivent sûrement servir à ça.

Le côté à brancher sur l’Arduino est celui où une des broches est marquée DIN (Digital Input)
De l’autre côté du circuit, la broche DOUT(Digital Output) sert au chaînage, elle doit être raccordée à la broche DIN du circuit suivant.

Avec AM, le nombre maximum de circuits qui peuvent être chaînés est de 8 si ma mémoire est bonne, il y a ensuite un paramètre dans la fonction d’affichage pour indiquer quel circuit on adresse (1-8 ou 0-7, ne me souviens plus).

Jacques
Ma chaîne YouTube Tutos sur l’A320 par un Pilote de Ligne: https://youtube.com/channel/UCljftuoKBcgeR-WBgYJpuoA
Avatar de l’utilisateur
JacquesZ
 
Messages: 2848
Inscription: 24/11/10

Re: Interfacer Arduino et P3D

Messagede hadrien » Mar 2 Juil 2019 22:57

Bonsoir à tous,

Je poste ce message car je sèche un peu sur la programmation de mes servo moteurs pour ma flaps gauge. Voici mon code actuel, je vous explique ensuite mon soucis.

Code: Tout sélectionner
L_flaps_gauge = hw_output_pwm_add("ARDUINO_MEGA2560_H_D6", 50, 0.075)

function L_flaps_callback (Val)
   
   hw_output_pwm_duty_cycle(L_flaps_gauge, 0.05+(Val*0.05/40))

end

fsx_variable_subscribe("PMDG 737NGX:MAIN_TEFlapsNeedle:1", "NUMBER", L_flaps_callback)


Mon soucis est que la progression sur la jauge n'est pas continue. En effet, à chaque enclenchement de crans de volets, P3D renvoie dans AM des valeurs de 0.0 à 1.0 (pour le volet 1), de 1.0 à 2.0 (pour le volet 2), de 2.0 à 5.0 (pour le volet 5), etc... Toutefois, sur la jauge, l'écart entre les indicateurs des flaps est égal. Ce qui signifie qu'un duty cycle constant comme dans ce code ne permet pas que la jauge tombe "sur les indicateurs" des flaps.

J'ai donc testé le code suivant :

Code: Tout sélectionner
function R_flaps_callback (Val)

   print(Val)
   
   if Val == 0.0   then
   hw_output_pwm_duty_cycle(R_flaps_gauge, 0.0000)
   end
   
   if Val == 1.0   then
   hw_output_pwm_duty_cycle(R_flaps_gauge, 0.00015)
   end
end

R_flaps_gauge = hw_output_pwm_add("ARDUINO_MEGA2560_H_D5", 50, 0.075)

fsx_variable_subscribe("PMDG 737NGX:MAIN_TEFlapsNeedle:2", "NUMBER", R_flaps_callback)


Alors, l'indicateur de flaps se déplace bien avec ce code, mais ça a l'air très aléatoire. En effet, un dutycycle imposé de 0.0002 va moins loin qu'un dutycycle de 0.00015. De plus, le premier if qui a pour but de ramener le pointeur à 0 en cas de valeur de flaps de 0.0 ne fonctionne pas non plus.

Je suis donc un peu à court d'idées. Certains d'entre vous ont-ils déjà programmé des jauges "non linéaires" comme celle des volets ?

Merci pour vos éclaircissements,

Hadrien
hadrien
 
Messages: 95
Inscription: 30/10/18
Localisation: Seilles, Belgique

Re: Interfacer Arduino et P3D

Messagede fab » Mer 3 Juil 2019 08:17

C'est en effet un petit casse tête murrouge
Et il te faudra quelques lignes de code peurefrayé

Il te faudra relever la valeur que prend le servo à chaque repère, puis les faire correspondre aux valeurs linéaires

Regarde par ici pour d'inspirer du code SIOC utilisé : https://www.opencockpits.com/uploads/manual_gauge_flaps_eng.pdf

ou de cette vidéo pour la programmation des jauges non linéraire :


Fabien
Avatar de l’utilisateur
fab
 
Messages: 4417
Inscription: 26/12/12
Localisation: Roubaix

Re: Interfacer Arduino et P3D

Messagede hadrien » Mer 3 Juil 2019 09:14

Bonjour Fab,

Merci pour ton aide. Mais je comprends pas tout. Du coup, je vais simplifier mon code et simplement demander à mon indicateur de faire des "sauts de puces" à chaque niveau de flaps, plutôt que d'avoir une progression continue. C'était déjà mon idée hier. Mais après réflexion et surtout lecture du post de Jacques en anglais sur le forum de Air Manager, j'ai trouvé mon problème. En fait, le duty cycle que j'indiquais n'était pas correct. Pour tourner dans le sens horloger, mon duty cylcle doit impérativement se trouver entre 0.075 qui est le point médian, et 0.115 qui est le développement maximum. J'ai donc commencé à reprogrammer en partant d'un dutycycle de 0.075 pour les flaps up et de 0.082 pour le flap 1, et ça marche nickel. Il n'y a plus qu'à comme on dit...

Et encore merci à Jacques qui, sans le savoir, aura encore réglé mon problème ;-)

Hadrien
hadrien
 
Messages: 95
Inscription: 30/10/18
Localisation: Seilles, Belgique

Re: Interfacer Arduino et P3D

Messagede fab » Mer 3 Juil 2019 11:17

Pas de problème, c'est toi le patron ! sourirebis
Avatar de l’utilisateur
fab
 
Messages: 4417
Inscription: 26/12/12
Localisation: Roubaix

Re: Interfacer Arduino et P3D

Messagede hadrien » Mer 3 Juil 2019 11:56

Je regarderai sans doute à ça à l'avenir, d'autant plus que je pense que j'ai fait le gros du travail de repérage des intervalles avec mon système. Je posterai mon code final pour que vous en ayez un aperçu.

Hadrien
hadrien
 
Messages: 95
Inscription: 30/10/18
Localisation: Seilles, Belgique

Re: Interfacer Arduino et P3D

Messagede JacquesZ » Mer 3 Juil 2019 13:43

Merci Hadrien, mais pour te dire, je ne me rappelais même plus de ce Post! lunettesnoires

Pour ton indicateur de flaps, le premier problème que je vois est qu'un servo type G90 (au fait tu n'as pas précisé de quel servo il s'agissait) ne tourne que sur un secteur de +/-90° soit 170/180°. Or ton indicateur de flaps semble plutôt être dans les 270° voire plus.
Il te faudra donc un rapport d'engrenages de 3/2 si je ne me trompe pas (18 dents/12 dents par exemple) pour démultiplier la rotation de ton aiguille sur 270 degrés. Il faut faire une cage d'engrenage, tu peux t'inspirer du travail de notre ami ici http://aircockpit.com/viewtopic.php?f=149&t=6362&start=10

Une fois ce "petit" problème mécanique réglé, reste la programmation pour obtenir un déplacement de l'aiguille au bon endroit.
J'ai regardé, l'indicateur est (à peu près) linéaire soit un déplacement tous les 30° par cran de volets.
Image

Image
Le servo va d'une position complètement à gauche (Duty Cycle de 0.05) à complètement à droite (Duty cycle: 0.1) soit un écart de 0.05 sur toute l'étendue du déplacement

Donc je te conseille tout d'abord d'envoyer l'aiguille du servo complètement à gauche (Duty Cycle 0.05), puis de rajouter x/9 de 0.05 à cette valeur minimale pour passer d'un cran à l'autre (x étant le cran de volets en valeur 0-8).

Il faudra pour cela convertir les positions de volets FSX données en degrés vers des "crans" linéaires de 0 à 8 avec des tests en cascade if...elseif...

je n'ai pas de servo ni d'Arduino sous la main pour essayer, mais ca devrait fonctionner.

Jacques
Ma chaîne YouTube Tutos sur l’A320 par un Pilote de Ligne: https://youtube.com/channel/UCljftuoKBcgeR-WBgYJpuoA
Avatar de l’utilisateur
JacquesZ
 
Messages: 2848
Inscription: 24/11/10

Re: Interfacer Arduino et P3D

Messagede hadrien » Mer 3 Juil 2019 14:53

Bonjour Jacques,

Je viens seulement de voir ton message. J'avais en attendant pondu un code qui fonctionnait en sauts de puce, le voici :

Code: Tout sélectionner
function R_flaps_callback (Val)
   
   if Val == 0.0   then
   hw_output_pwm_duty_cycle(R_flaps_gauge, 0.067)
   end
   
   if Val == 1.0   then
   hw_output_pwm_duty_cycle(R_flaps_gauge, 0.074)
   end
   
   if Val == 2.0   then
   hw_output_pwm_duty_cycle(R_flaps_gauge, 0.081)
   end
   
   if Val == 5.0   then
   hw_output_pwm_duty_cycle(R_flaps_gauge, 0.089)
   end
   
   if Val == 10.0   then
   hw_output_pwm_duty_cycle(R_flaps_gauge, 0.097)
   end
   
   if Val == 15.0   then
   hw_output_pwm_duty_cycle(R_flaps_gauge, 0.104)
   end
   
   if Val == 25.0   then
   hw_output_pwm_duty_cycle(R_flaps_gauge, 0.111)
   end
   
   if Val == 30.0   then
   hw_output_pwm_duty_cycle(R_flaps_gauge, 0.117)
   end
   
   if Val == 40.0   then
   hw_output_pwm_duty_cycle(R_flaps_gauge, 0.125)
   end
end

R_flaps_gauge = hw_output_pwm_add("ARDUINO_MEGA2560_H_D5", 50, 0.075)
fsx_variable_subscribe("PMDG 737NGX:MAIN_TEFlapsNeedle:2", "NUMBER", R_flaps_callback)


Concernant la jauge de flaps, c'est une jauge que j'ai commandée toute faite et montée sur cette page : https://www.cockpitsimparts.co.uk/gauges/214-b737-flaps-gauge-dual-needle.html

Hadrien
hadrien
 
Messages: 95
Inscription: 30/10/18
Localisation: Seilles, Belgique

PrécédenteSuivante

Retourner vers LUA, Linda, Macros & gauges Air Manager





Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 14 invités