Pour limiter l' encombrement des accessoires de pilotage , j' ai fabriqué un joystick de petite taille qui permet de l' emmener en vacances et qui tient beaucoup moins de place sur le bureau . Le boitier a été imprimé 3D en PLA .
Ce joystick est très précis ; en plus il nécessite peu d' efforts pour la manipulation du manche , pas de fatigue après les vols longs !
Ce joystick est basé sur une carte Arduino leonardo , il est reconnu automatiquement par Windows comme un Joystick :
Il utilise des éléments d'une vieille radio Multiplex MC3010 pour le manche , le trim et la tirette des volets et des boutons poussoir pour les différentes fonctions .
La programmation de l' Arduino permet des commandes intéressantes comme :
- un seul bouton active le largage et le train d' atterrissage
- le frein de roue est activé automatiquement en fin de course AF .
- augmentation du couplage aileron/dérive auto de Condor
2 config sont accessibles à la mise sous tension : une config Condor et une config Flight Simulator Microsoft .
Le logiciel Arduino :
---------------------------------------------------------------------------------------------------------------------------
//----------------------------------------------------------
// pour Condor et MSFS
//----------------------------------------------------------
#include <Joystick.h>
Joystick_ Joystick(0x03, //hid report id
JOYSTICK_TYPE_GAMEPAD, //joystick type
12, //button count
0, //Hsw 0-2
true, //x
true, //y
true, //z
false, //rx
false, //ry
false, //rz
true, //rudder
true, //throttle
false, //accelerator
false, //brake
false); //steering
int i,j=0,condor;
bool c[10],led;
void setup()
{
Joystick.begin();
Serial.begin(9600);
led=HIGH;
// Initialize Button Pins
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
pinMode(8, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
pinMode(11, INPUT_PULLUP);
pinMode(12, INPUT_PULLUP);
pinMode(13, INPUT_PULLUP);
pinMode(4, OUTPUT);
pinMode(2, OUTPUT);
do
{
for (i=0;i<9;i++)c[i]=!digitalRead(5+i);
digitalWrite(4,led);
digitalWrite(2,led);
delay(300);
led=!led;
}while (!(c[7]|c[2]));
digitalWrite(2,c[7]);
if (c[7]) condor=1; else condor=0;
digitalWrite(4,c[2]);
}
void loop()
{
j=analogRead(A1);
//Serial.println(j);
Joystick.setXAxis(j);
for (i=0;i<9;i++)c[i]=!digitalRead(5+i);
if(condor==1)
if(c[5]==true) Joystick.setRudder(j);
if (condor==0)
if(c[7]==true) Joystick.setRudder(j);
Joystick.setYAxis(analogRead(A0));
Joystick.setZAxis(analogRead(A2));
Joystick.setThrottle(analogRead(A3));
if (condor==1)
{
if (analogRead(A3)<20) // frein actif en bout d' AF
{Joystick.setButton(11, true);}
else
{Joystick.setButton(11, false);}
}
// The input is reversed due to mounting of the sensor
if (condor==1)
{
for (i=0;i<9;i++)
{
if (i==4)
{
Joystick.setButton(i+1,c[i] ); // rentre et sort le train
// si largage
Joystick.setButton(i, c[i]);
}
else
if (i!=5)Joystick.setButton(i, c[i]);
}
}
if (condor==0)
{
for (i=0;i<9;i++)
Joystick.setButton(i, c[i]);
}
delay(10);
}
-----------------------------------------------------------------------------------------------------------------------------