Go Down

Topic: Gauge de simulateur de vol. (Read 3312 times) previous topic - next topic

thierryhl

Bonjour
Relativement nouveau dans le monde de l'Arduino, je me permet de venir vous voir et soliciter votre savoir.
J'ai l'intention de réaliser des gauge pour un simulateur de vol.
Certaine gauge sont simple à réaliser en se servant d'un servo car les données ne dépassent les 180° de rotation.

Par contre, je souhaite réaliser un Altimètre analogique, et là, même en faisant mes propres recherches, j'ai du mal.

Je sais récupérer la variable du simulateur.
Mais je câle sur le fonctionnement avec l'Arduino.
Vu que l'aiguille peut faire plusieurs tours dans un sens ou dans l'autre.
Comment puis-je procéder.
Merci

JMe87

Bonjour,
Un petit moteur pas-a-pas fera parfaitement l'affaire.
Jacques

infobarquee

bonjour,
cadran à 1 ou 2 aiguilles?
AUCUNE AIDE PAR MP

patg_


bonjour,
cadran à 1 ou 2 aiguilles?

Il y a deux aiguilles sur un altimètre, mais elles sont reliées par un engrenage.

En plus du moteur pas à pas il faut pouvoir étalonner l'altimètre à 0 au démarrage du système, donc prévoir un capteur de position optique, magnétique ou autre. Après il suffit de compter les pas à partir de cette position.

En tout cas c'est un projet sympa.

A mon aéroclub on a tout un tas de vieux instruments et je me suis dit qu'un jour faudrait que j'en modifie certains pour les brancher sur un simulateur.
Mes Arduineries: http://breizhmakers.over-blog.com/

infobarquee

Quote
Il y a deux aiguilles sur un altimètre, mais elles sont reliées par un engrenage.

je le savais, mais la question est importante pour trouver la solution la plus adéquate ;)
une solution pourrait être d'utiliser une pendule.
AUCUNE AIDE PAR MP

patg_


Quote
Il y a deux aiguilles sur un altimètre, mais elles sont reliées par un engrenage.

je le savais, mais la question est importante pour trouver la solution la plus adéquate ;)
une solution pourrait être d'utiliser une pendule.

Le rapport de réduction n'est pas le même: sur un altimètre la petite aiguille fait 1 tour pour 10 tours de la grande.

Et encore s'il s'agit d'un altimètre d'avion de ligne, il y a 3 aiguilles  :smiley-mr-green: chacune tournant 10 fois moins vite que l'autre.
Mes Arduineries: http://breizhmakers.over-blog.com/

thierryhl

Déjà merci à vous pour vos réponses.
C'est bien un alitimètre 2 aiguilles.
Je suis tombé sur ça https://www.youtube.com/watch?v=8jajnIBX2cU
Je dois dire que je suis bluffé par la fluidité....

Auriez-vous des liens pour que je puisse m'inspirer
Code - Branchement...
merci

JMe87

#7
Jun 19, 2014, 05:38 pm Last Edit: Jun 19, 2014, 05:39 pm by JMe87 Reason: 1
Et si tu veux une solution 100% electro-mecanique (sans engrenages reducteurs),
tu places 2 moteurs pas-a-pas l'un derriere l'autre en utilisant ce type de moteur :



contrairement a ce que l'on pourrait croire, ce n'est pas si cher :

http://www.robotdigg.com/product/43/Nema8-Hollow-Shaft-Stepper-Motor

23$ !!

Jacques

thierryhl

Merci pour l'info du moteur.
J'essaye de faire avec ce que j'ai sous la main. donc un seul moteur, et je me suis donc tourné vers ça à faire


Avec ça comme moteur

Plus d'info sur le moteur http://www.instructables.com/id/BYJ48-Stepper-Motor/?ALLSTEPS

Mon soucis, c'est que les degrés du compteur ne sont pas égal sinon j'aurais pu simplement faire un "map"



thierryhl

#9
Jun 29, 2014, 09:57 am Last Edit: Jun 29, 2014, 09:59 am by thierryhl Reason: 1
Bonjour
J'ai réussi à peu près à faire ce que je voulais.
Mon seul soucis, c'est quand l'aiguille tourne lentement, ça saccade.
Code: [Select]
#include <AccelStepper.h>

// Branchement du moteur
#define motorPin1  7     // IN1 on the ULN2003 driver 1
#define motorPin2  8     // IN2 on the ULN2003 driver 1
#define motorPin3  9     // IN3 on the ULN2003 driver 1
#define motorPin4  11     // IN4 on the ULN2003 driver 1

int stepsknots = 805;

// 40 = 360
// 50 = 575
// 60 = 805
// 70
// 80
// 90
// 100 =

// Initialize with pin sequence IN1-IN3-IN2-IN4 for using the AccelStepper with 28BYJ-48
AccelStepper stepper1(AccelStepper::HALF4WIRE, motorPin1, motorPin3, motorPin2, motorPin4);

void setup() {
 stepper1.setMaxSpeed(900.0);
 stepper1.setAcceleration(100.0);
 stepper1.setSpeed(400);
 stepper1.moveTo(stepsknots);
}

void loop() {

 //Change direction when the stepper reaches the target position
 if (stepper1.distanceToGo() == 0) {
   stepper1.moveTo(0);
 }
 stepper1.run();
}

Le résultat en vidéo
https://www.youtube.com/watch?v=5DLQAsTx9Tc
https://www.youtube.com/watch?v=zwWeg3kjNjU

thierryhl

Et voici mon code pour fonctionner avec X-Plane le simulateur de vol

Code: [Select]
#include <AccelStepper.h>

// Branchement du moteur
#define motorPin1  7     // IN1 on the ULN2003 driver 1
#define motorPin2  8     // IN2 on the ULN2003 driver 1
#define motorPin3  9     // IN3 on the ULN2003 driver 1
#define motorPin4  11     // IN4 on the ULN2003 driver 1


// Parameters for debouncing the D2/D3/D4 button, uses the "Bounce" Library by Thomas Ouellet Fredericks

AccelStepper stepper(AccelStepper::HALF4WIRE, motorPin1, motorPin3, motorPin2, motorPin4);



FlightSimFloat KNOTS;

void setup() {
  stepper.setMaxSpeed(700.0);
  stepper.setAcceleration(200.0);
  stepper.setSpeed(700);
 
  KNOTS = XPlaneRef("sim/cockpit2/gauges/indicators/airspeed_kts_pilot");
  KNOTS.onChange(viewKNOTS);

}

void loop() {
  FlightSim.update();
      if (stepper.distanceToGo() == 0) {
      stepper.moveTo(0);
       }
    stepper.run();
}


void viewKNOTS(float kval){
  if ((KNOTS >= 0) and (KNOTS <40))
  {
    kval = map(KNOTS, 0, 40, 0, 360);
  }
    else if ((KNOTS >= 40) and (KNOTS <60))
  {
    kval = map(KNOTS, 40, 60, 360, 795);
  }
    else if ((KNOTS >= 60) and (KNOTS <80))
  {
    kval = map(KNOTS, 60, 80, 795, 1295);
  }
    else if ((KNOTS >= 80) and (KNOTS <100))
  {
    kval = map(KNOTS, 80, 100, 1295, 1860);
  }
    else if ((KNOTS >= 100) and (KNOTS <120))
  {
    kval = map(KNOTS, 100, 120, 1860, 2355);
  }
    else if ((KNOTS >= 120) and (KNOTS <160))
  {
    kval = map(KNOTS, 120, 160, 2355, 3055);
  }

    //Serial.println(kval);
    stepper.moveTo(kval);
    stepper.runSpeedToPosition();
   
  }

Go Up