Joystick

 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 .


Les tripailles de l'outil:



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);
}

-----------------------------------------------------------------------------------------------------------------------------