mardi 27 janvier 2015

Cockpit maison pour Xplane

Intro

Utilisateur de Xplane depuis plus de 3 ans maintenant, je me suis dit qu'il était temps de bricoler à l'aide de quelques interrupteurs, de la colle et des clous, un tableau de bord me permettant d'ajouter des commandes supplémentaires au joystick actuellement utilisé le tout pour moins de 100 euros.


Choix techniques :

Seulement les clous ne suffisent pas, il faut également un peu d'électronique et d'informatique. Mais rien de bien méchant à posteriori. Effectivement, un petit tour de piste du web m'a permis  de découvrir que le micro-contrôleur Teensy permet facilement d'être programmé comme périphérique USB. Pour mon application, j'ai choisi le Teensy++2.0 car il possède une quarantaine d'entrées/sorties. Le site constructeur est le suivant : https://www.pjrc.com/teensy/.
Pour se procurer ce bidule en France, j'ai trouvé pour l'instant qu'un seul revendeur : http://www.lextronic.fr/ . J'ai jusqu'à présent passé deux commandes chez eux et je n'ai pas eu à m'en plaindre. Dommage toutefois que seule la poste (colissimo) soit proposée pour les livraisons. Un service de relais colis m'aurait permis de gagner 4 à 5 jours de délais plutôt que d'attendre le samedi matin pour pouvoir enfin retirer mon colis à la poste...

Afin de mieux appréhender ce qu'il est possible de faire, un tour d'horizon sur des projets existants nous montre qu'à priori on doit même pouvoir faire le café... :
Cet excellent blog : https://simelectronics.wordpress.com/
 
et bien sûr les forums sont une source immense de renseignements :

Menuiserie :

Bref, après être rassuré sur la faisabilité du projet, nous pouvons commencer à scier quelques planches. Mais tout d'abord, un petit plan :

Pour la menuiserie, des tasseaux de 13x38 feront le cadre et de l'aglo 'medium' de 3mm d'épaisseur sera parfait pour les faces.


Après quelques réflexions, voici les commandes choisies qui occuperont ce tableau de bord :

Électronique et câblage :

Maintenant, un peu de câblage nous attend. Faites chauffer le fer à souder...

changement de fréquence radio :

Pour commencer, on va s'occuper de la partie des codeurs rotatifs (ceux qui serviront à changer les fréquences de la radio). Pour cela, j'ai opté pour ce type de codeurs : P23054-encodeur-lumineux-a-rotation-infini dont les plans se trouvent .
Ces codeurs sont rétro-éclairés par deux leds internes verte et rouge. J'ai choisi de prendre la couleur verte pour la partie radio et la couleur rouge pour la partie navigation. Pour le codage, il y a deux manières possibles: soit on utilise des bascules D (composant CMOS 40xx) pour le décodage du sens de rotation, soit un laisse le soin au micro-contrôleur Teensy de gérer cela par programme. Pour l'instant, nous choisirons la deuxième approche.

Le schéma de câblage pour les 4 encodeurs se composent de 4 résistances pour l'alimentation des leds intégrés. A noter que les valeurs de résistances sont plus importantes pour les leds vertes afin de réduire leur luminosité par rapport aux rouges.


et voilà le résultat :


Pour tester nos leds, on peut alimenter le montage en 5 volts :


Platine support pour le micro-contrôleur Teensy :

Nous allons ajouter au teensy deux barrettes de connections :

Puis préparer sur un circuit imprimé "prototypage" la réception des fils et du connecteur teensy :


A noter que plutôt que d'opter pour un circuit imprimé, une autre solution aurait consisté à utiliser une nappe de 20 fils avec un connecteur femelle monté directement dessus.

Câblage :

En fouillant dans mes cartons, j'ai trouvé pour les fils un vieux câbles en nappe ainsi qu'un autre avec un connecteur 8 points très intéressant pour connecter les broches internes du Teensy. Ce dernier câble servait à raccorder 2 ports USB d'une carte mère vers la face avant d'un PC.

 A remarquer les 8 pins soudées en plus pour le raccordement de ce connecteur sur le Teensy ainsi que 2 autres pins pour déporter le bouton Reset du teensy.
Au départ, je n'avais pas prévu de déporter le bouton Reset. Cependant ce déport s’avérera pratique car ce bouton doit être utilisé pour déverser le programme vers le Teensy.
Je n'avais pas commandé assez de Pin lors de mon dernier achat, je suis allé à la déchetterie et j'ai pu y récupérer une vieille carte mère d'ordi sur laquelle j'ai récupéré ces connecteurs.

Côté platine d'accueil, voilà ce que cela donne :


Et enfin, les raccordements aux autres éléments :
Les câbles en nappes jouent parfaitement leurs rôles au niveau de l'aspect clean. ce qui est loin d'être le cas coté gros interrupteurs. Malgré tout, un schéma s'impose pour y voir plus clair... :



Plus qu'à mettre le teensy:


Programmation du Teensy :

pré-requis :

  1. installer TeensyLoader : https://www.pjrc.com/teensy/loader.html
  2. installer le logiciel "Arduino" puis "Teensyduino" : https://www.pjrc.com/teensy/td_download.html
  3. installer le plugin pour xPlane : http://www.pjrc.com/teensy/td_flightsim.html (ancienne version), ou préférer la dernière version qui notamment permet de gérer des références xplane DataRefs de longueur supérieure à 58 caractères . Cette version se trouve sur github  https://github.com/PaulStoffregen/X-Plane_Plugin/ , cliquer sur le bouton 'Download ZIP' et décompresser le fichier zip. Ensuite, utiliser le plugin xplane qui est dans le répertoire Target

 

 un premier test :

Dans un premier temps, nous allons faire un programme juste pour repérer les branchements de chaque interrupteur. En effet, lors du câblage je n'ai peut être pas respecté exactement un ordre précis et maintenant mieux vaut vérifier qui est branché sur quoi. Vous remarquerez également que j'ai parfois sauté des Pins côté Teensy dans le but de garder les broches spécialisées (PWM -> Pulse Wave Modulation, AC/DC, etc ...). Ces broches pourront être utilisées plus tard comme par exemple un variateur d'éclairage du tableau de bord (sortie PWD), des manettes potentiomètres (convertisseur AN) pour le pas d'hélice, richesse carbu, etc...

Bref, avant de fantasmer, repérons d'abord nos branchements.
Le programme est disponible à l'adresse suivante : https://github.com/Nicolou/cockpit/blob/master/testButtons/testButtons.ino.
Pour la manip du déversement du programme dans le Teensy, les instructions sont sur le site constructeur : https://www.pjrc.com/teensy/loader.html
Comme mentionné dans les pré-requis, n'oublions pas d'installer le logiciel de programmation Arduino ainsi que le plugin pour pouvoir y utiliser le Teensy  : https://www.pjrc.com/teensy/tutorial.html 


Pour visualiser le résultat du test, ouvrir une console afin de voir ce qui est écrit sur le port 'série' grace à la commande cat suivi du nom du périphérique.
exemples :  
si le logiciel de programmation Arduino a été configuré en USB type: série
  cat /dev/ttyACM0
ou en type Flight Sim Controls
  cat /dev/hidraw4

Voici ce que cela donne chez moi :

A partir de là, voici le tableau récapitulatif des connexions


Pin number
Button namearduino styleC style
BATTERY20B0
ALTERNATOR21B1
MAGENTO_STOP7D7
MAGENTO_LEFT8E0
MAGENTO_RIGHT9E1
MAGNETO_BOTH10C0
MAGNETO_START11C1
AVIONIC23B3
PUMP22B2
CARB HEAT19E7
NC15D5
NC24D4
LAND_LIGHT3D3
TAXY_LIGHT2D2
NAV_LIGHT1D1
STROB_LIGHT0D0
BEACON_LIGHT27B7
RADIO_SWITCH17C7
NAV_SWTICH14C4
RADIO_MHZ28,29PA0,PA1
RADIO_KHZ32,33PA4,PA5
NAV_MHZ30,31PA2,PA3
NAV_KHZ34,35PA6,PA7
LANDING_GEAR12C2


un deuxième test : les codeurs rotatifs

pour cela, on va utiliser la librairie "Encoder.h" comme indiqué dans l'exemple du site : https://www.pjrc.com/teensy/td_libs_Encoder.html
En adaptant le programme cité en exemple avec les numéros de pins correspondant au notre nous obtenons le code suivant : https://github.com/Nicolou/cockpit/blob/master/testEncoders/TwoKnobs/TwoKnobs.ino

Un déversement du programme dans le teensy et hop ! , le test s'avère concluant.

Maintenant, les choses sérieuses vont pouvoir commencer.

Programme pour Xplane :

Nous allons utiliser les spécifications du fichier dataref prévues pour la communication entre le cockpit Teensy et le logiciel Xplane.


N'oublions pas d'installer le plugin xplane en le décompressant dans le répertoire de xplane à l'emplacement suivant  ./Resources/plugins.




Mais d'abord, quelques explications sur les éléments utilisés dans le programme vont permettre de mieux comprendre son fonctionnement.
  • Pour pouvoir utiliser la bibliothèque spécifique FlightSim de xplane, il faut, dans la configuration de l'éditeur de programme Arduino, aller dans le menu 'outil' -> 'usb type' et choisir 'Flight sim controls'
  • Pour identifier les numéros de pins du teensy, nous utiliserons des constantes afin de définir ces numéros une seule fois et à un seul endroit du programme.
  • En plus de la librairie 'Encoder.h'; nous utiliserons la librairie 'bounce.h'. Cette librairie permet de bien gérer les états des interrupteurs (anti- rebond, détection changement d'état, etc ... cf https://www.pjrc.com/teensy/td_libs_Bounce.html
  • Lire la doc https://www.pjrc.com/teensy/td_flightsim.html
  • Un programme 'Arduino' (ou teensy) se compose toujours d'une fonction setup() et d'une fonction loop().
Ceci étant dit, (et quelques heures plus tard... ), voici le programme à ouvrir dans arduino (version teensy) : https://github.com/Nicolou/cockpit/blob/master/xplaneDR400v1/xplaneDR400v1.ino
Puis à compiler et déverser dans le teensy.


ça y est, la boi-boite est quasi terminée.Il me manque juste une prise USB femelle et un interrupteur poussoir (celui du reset) qui me permettront de fermer l'ensemble.

Juste une dernière photo (et ce n'est pas la plus jolie) mais qui montre comment j'ai fixé le cockpit au bureau.




Voilà, c'est Fini en ce qui concerne cette étape de prototypage. En espérant que cet article vous soit utile.
Nicolas Montarnal.