Air Manager- Aiguilles vibrantes

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

Air Manager- Aiguilles vibrantes

Messagede JacquesZ » Sam 26 Aoû 2017 13:54

Bonjour à tous.
Suite à une question posée sur le forum anglais d'Air Manager, j'ai regardé rapidement comment on pouvait faire vibrer les aiguilles d'une jauge AM, pour les avions anciens par exemple.

Avec un timer c'est faisable, et il faut aussi le coupler avec les RPM pour plus de réalisme, mais le RPM n'est pas fiable.
J'ai donc, après quelques essais de différentes variables Simconnect, utilisé "engine percent sound", ça marche bien.
Avec 3 amplitudes de vibrations différentes en fonction du régime, c'est assez réaliste.

Ci joint le code, à remplacer dans une copie de la jauge "Baron 58 airspeed indicator" à télécharger sur le store, si vous voulez essayer, mais bien évidemment le principe marche sur n'importe quelle jauge.

Code: Tout sélectionner
-- Airpeed indicator with vibrating needle
-------------------------------------------
img_add_fullscreen("airspeed_backdrop2.png")
img_neddle = img_add_fullscreen("neddle.png")
img_rotate(img_neddle, -38)

local needleairspeed=0
local rpmlevel=0
local rand=1
local maxrnd=2
local rpmlvl=0
local val=0

function vibrate(soundrpm)

   if soundrpm<0.1 then
   vibrationlvl=0
   else vibrationlvl=soundrpm
   end
end

function timer_callback() -- function called every 40 mseconds,
   rand=-rand -- offset value of the needle, alternatively to the left or to the right
   --setting up of the amplitude of vibrations depending of the % of sound produced, since engine vibration variable is not reliable (Change val values to taste!)
   if vibrationlvl>90 then  -- high rpm, small amplitude
      val=0.2
   elseif vibrationlvl>30 then -- medium range rpm, larger amplitude of needle movements
      val=1
   elseif vibrationlvl>0.5 then --slow rpm, smaller amplitude of needle movements
          val=3
   else -- engine stopped, no needle movements
         val=0
    end
   
    needlepos=needleairspeed+(rand*val) -- calculation of the needle movement
    img_rotate(img_neddle, needlepos*320/220 - 38)
end

function PT_airspeed(airspeed)
    -- rotate the needle only if airspeed is above 25kts
   needleairspeed = var_cap(airspeed, 25, 260)
end



xpl_dataref_subscribe("sim/cockpit2/gauges/indicators/airspeed_kts_pilot", "FLOAT", PT_airspeed)
fsx_variable_subscribe("AIRSPEED INDICATED", "knots", PT_airspeed)
-- init the needle
fsx_variable_subscribe("GENERAL ENG COMBUSTION SOUND PERCENT:1","percent",vibrate)
-- init the needle
PT_airspeed(0)

timer_start(0,40,timer_callback) -- increase the 40 value to slow down the overall vibrations for "slow running" engines (up to 100 max)


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: Air Manager- Aiguilles vibrantes

Messagede JacquesZ » Sam 26 Aoû 2017 17:45

Toujours dans ma recherche sur les vibrations d'aiguilles, voici le nouveau code avec des variables en debut de code pour jouer sur les 2 paramètres :
- gamme de rpm (ralenti, moyenne, et élevée) en %, dans notre cas de 0.0 (coupé) à 100 (plein pot) : vib
- écart de vibration des aiguilles en + ou en moins: val

En jouant sur ces paramètres on obtient de chouettes effets:

pour un tagazou genre Cessna ou Robin:
-- sample Values for a modern single engine (Cessna, Piper, Robin)
frequency=40 -- increase the 40 value to slow down the overall vibrations for "slow running" engines (up to 100 max)
vibmax=80 --beginning of max vibrations in %power
valmax=0.15 -- range of max vibration values
vibmid=30 --beginning of medium vibrations in %power
valmid=0.35
viblow=0.25 -- low idle
vallow=0.22


pour un chasseur à hélice deuxième guerre
-- sample Values for a WWII Fighter
-- frequency=60 -- increase the 40 value to slow down the overall vibrations for "slow running" engines (up to 100 max)
-- vibmax=90 --beginning of max vibrations in %power
-- valmax=0.5 -- range of max vibration values
-- vibmid=30 --beginning of medium vibrations in %power
-- valmid=1
-- viblow=0.25 -- low idle
-- vallow=2

pour un avion de la première guerre
-- sample values for a WW1 Fighter
-- frequency=70 -- increase the 40 value to slow down the overall vibrations for "slow running" engines (up to 100 max)
-- vibmax=75 --beginning of max vibrations in %power
-- valmax=4 -- range of max vibration values
-- vibmid=40 --beginning of medium vibrations in %power
-- valmid=2.5
-- viblow=0.1 --low idle
-- vallow=3.5

Code: Tout sélectionner
-- Airpeed indicator with vibrating needle
-------------------------------------------

-- CUSTOMIZATION VARIABLES ------
-- sample Values for a modern single engine (Cessna, Piper, Robin)
frequency=40 -- increase the 40 value to slow down the overall vibrations for "slow running" engines (up to 100 max)
vibmax=80 --beginning of max vibrations in %power
valmax=0.15 -- range of max vibration values
vibmid=30 --beginning of medium vibrations in %power
valmid=0.35
viblow=0.25 -- low idle
vallow=0.22

-- sample Values for a WWII Fighter
-- frequency=60 -- increase the 40 value to slow down the overall vibrations for "slow running" engines (up to 100 max)
-- vibmax=90 --beginning of max vibrations in %power
-- valmax=0.5 -- range of max vibration values
-- vibmid=30 --beginning of medium vibrations in %power
-- valmid=1
-- viblow=0.25 -- low idle
-- vallow=2

-- sample values for a WW1 Fighter
-- frequency=70 -- increase the 40 value to slow down the overall vibrations for "slow running" engines (up to 100 max)
-- vibmax=75 --beginning of max vibrations in %power
-- valmax=4 -- range of max vibration values
-- vibmid=40 --beginning of medium vibrations in %power
-- valmid=2.5
-- viblow=0.1 --low idle
-- vallow=3.5
----------------------------------------------
img_add_fullscreen("airspeed_backdrop2.png")
img_neddle = img_add_fullscreen("neddle.png")
img_rotate(img_neddle, -38)

local needleairspeed=0
local rand=1
local val=0
local vibrationlvl=0
-------------- Varaition de luminosité en fonction de l'éclairage---------
D_mask = img_add_fullscreen("masque_Day.png")
K_mask = img_add_fullscreen("masque_Dusk.png")
N_mask = img_add_fullscreen("masque_Night.png")

-- function callback(turn)
-- print("turn:"..turn)
-- end
-- dial_id = dial_add("airknobjour.png", 100,100,100,100,callback)
-- dial_iddusk = dial_add("airknobdusk.png", 100,100,100,100,callback)
-- dial_idnuit = dial_add("airknobnuit.png", 100,100,100,100,callback)
-- dial_idjour = dial_add("airknobjour.png", 100,100,100,100,callback)

 function new_light_FSX(tension,light,ambiance)
 local panel_lighted= nil
 panel_lighted= tension>14 and light
 img_visible(D_mask,panel_lighted == false and ambiance==1)
 img_visible(K_mask,panel_lighted == false and ambiance==2)
 img_visible(N_mask,panel_lighted == false and ambiance==3)
 -- visible(dial_idnuit,panel_lighted == false and ambiance==3)
 -- visible(dial_iddusk,panel_lighted == false and ambiance==2)
 -- visible(dial_idjour,panel_lighted == false and ambiance==1)
end



fsx_variable_subscribe("ELECTRICAL MAIN BUS VOLTAGE","Volts","LIGHT PANEL","Bool" ,"TIME OF DAY","Enum",new_light_FSX)

---------- Gestion des vibrations aiguille
function vibrate(soundrpm)

   if soundrpm<0.1 then
   vibrationlvl=0
   else vibrationlvl=soundrpm
   end
end
function vibrate_xp(rpm)

   if rpm<0.1 then
   vibrationlvl=0
   else vibrationlvl=rpm
   end
end

function timer_callback() -- function called every 40 mseconds,
   rand=-rand -- offset value of the needle, alternatively to the left or to the right
   --setting up of the amplitude of vibrations depending of the % of sound produced, since engien vibration is not reliable (Change val values to taste!)
   if vibrationlvl>vibmax then  -- high rpm, small amplitude
      val=valmax
   elseif vibrationlvl>vibmid then -- medium range rpm, larger amplitude of needle movements
      val=valmid
   elseif vibrationlvl>viblow then --slow rpm, smaller amplitude of needle movements
          val=vallow
   else -- engine stopped, no needle movements
         val=0
    end
   
    needlepos=needleairspeed+(rand*val) -- calculation of the needle movement
      img_rotate(img_neddle, needlepos*320/220 - 38)
end

function PT_airspeed(airspeed)
    -- rotate the needle only if airspeed is above 25kts
   needleairspeed = var_cap(airspeed, 25, 260)
end

xpl_dataref_subscribe("sim/cockpit2/gauges/indicators/airspeed_kts_pilot", "FLOAT", PT_airspeed)

fsx_variable_subscribe("AIRSPEED INDICATED", "knots", PT_airspeed)
-- init the needle
fsx_variable_subscribe("GENERAL ENG COMBUSTION SOUND PERCENT:1","percent",vibrate)
-- init the needle
PT_airspeed(0)

timer_start(0,frequency,timer_callback)


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: Air Manager- Aiguilles vibrantes

Messagede algue14 » Sam 26 Aoû 2017 18:34

Eh ben y'a un vent de création qui souffle en ce moment. rigolus
moi, je ne suis pas hélices, mais je suppose que ça devrait intéresser du monde.
A+

Alain
Avatar de l’utilisateur
algue14
 
Messages: 1626
Inscription: 20/04/09
Localisation: Caen ; Normandie

Re: Air Manager- Aiguilles vibrantes

Messagede arcc » Sam 26 Aoû 2017 19:37

Intéressé que oui. Je ne sais pas si ca vibre sur un Twin (je n'arrive pas à trouver une video avec des gros plan dans le cockpit)
Mais si on minimise l'effet.
Maintenant intergrer ca dans mes jauges ca va etre une autre paire de manches.

En tout cas merci Jacques.

Christian
Un ancien sous-marinier qui a pris de la hauteur.
Avatar de l’utilisateur
arcc
 
Messages: 715
Inscription: 16/12/13
Localisation: La ou fini la terre (Finistere)

Re: Air Manager- Aiguilles vibrantes

Messagede tabar57 » Sam 26 Aoû 2017 19:49

Bonjour,

Oui , beau projet chouettedoights
Faut que je vois si çà vibre aussi sur Beechcraft, mais pour çà faut que je me repenche sur l'install d'Air manager murrouge

En tous cas merci à Jacques pour ces idées innovantes

Cordialement

Bernard
Mon blog de construction : http://tabar57.blog4ever.com
Hémicockpit de Beechcraft B200 ( de FlightOne ) P3DV4.5 et 2 PC en réseau W7 64 bits et W10, cartes OC et FDbus, vibreur et yoke rdf de BFFsimulation, météo réelle asp4
Avatar de l’utilisateur
tabar57
 
Messages: 3651
Inscription: 29/12/10
Localisation: Dans ma cabine en Lorraine

Re: Air Manager- Aiguilles vibrantes

Messagede JacquesZ » Dim 27 Aoû 2017 01:25

Content que ça vous plaise!
Je pense que je vais intégrer ce bout de code dans mon panel Baron, car si sur le Beech200 je ne sais pas, sur les bimoteurs légers assez anciens, les vibrations des instruments moteur sont importantes, en particulier PA at RPM hélice.

Sur le Piper Séminole sur lequel j'ai passé mon renouvellement MEP la semaine dernière, les aiguilles doubles de la PA et RPM bougent tellement qu'on ne peut synchroniser les hélices qu'à l'oreille seulement.

Le code n'est pas très compliqué à adapter sur des jauges existantes, il faut juste rajouter le timer et la fonction de vibration, et ensuite sortir la ligne qui fait tourner l'aiguille (img_rotate) de la fonction initiale qui gère la vitesse, pour la coller dans la nouvelle fonction de vibration

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: Air Manager- Aiguilles vibrantes

Messagede arcc » Lun 28 Aoû 2017 12:06

J'ai réussi à faire vibrer l'aiguille de ma jauge "AirSpeed" spécial Twin. Merci Jacques.
Mais la ou ca se complique pour moi, c'est avec les jauges qui font déjà appel à un "timer" pour bouger doucement l'aiguille. Je ne sais pas si c'est compatible.

Quand tu auras un peu de temps et si tu veux bien, tu jetteras un œil.

A+
Christian
Fichiers joints
829d1450-cb01-460c-88e5-def9dad73e68.zip
(982.76 Kio) Téléchargé 479 fois
Un ancien sous-marinier qui a pris de la hauteur.
Avatar de l’utilisateur
arcc
 
Messages: 715
Inscription: 16/12/13
Localisation: La ou fini la terre (Finistere)

Re: Air Manager- Aiguilles vibrantes

Messagede JacquesZ » Lun 28 Aoû 2017 14:15

Bravo Christian, beau boulot! Les vibrations, même légères, ajoutent une petite touche de réalisme, je trouve.
Ça doit être faisable à priori, les timers sous AM sont indépendants et déclenchent les évènements de manière asynchrone.
Évidemment, trop d' appels de fonction toutes les 20msec risquent de mettre l'interpréteur Lua à genoux, mais avec nos processeurs modernes, j'ai pas trop de soucis, encore plus si AM est déporté.
Mais pour des Jauges complexes genre le HSI, je ne m'y risquerait pas.

Passes moi une de tes jauges qui ont déjà un timer, j'y jetterai un peu il si j'ai le temps

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: Air Manager- Aiguilles vibrantes

Messagede arcc » Lun 28 Aoû 2017 15:57

Merci Jacques

J'en ai mise une juste au dessus dans mon message. merci affiche

A+
Christian
Un ancien sous-marinier qui a pris de la hauteur.
Avatar de l’utilisateur
arcc
 
Messages: 715
Inscription: 16/12/13
Localisation: La ou fini la terre (Finistere)

Re: Air Manager- Aiguilles vibrantes

Messagede JacquesZ » Lun 28 Aoû 2017 17:55

Je rentre de Vol en PA-28 Arrow III et du coup j'ai observé les aiguilles:
En croisière L'indicateur de vitesse bouge, avec une fréquence plus basse que prévu.
- L'altimètre vibre également (grande aiguille)
- L'horizon vibre légèrement (la partie centrale) de haut en bas
- Côté instrument moteur, la PA vibre très fortement (+/- 2 pouces), mais curieusement, l'aiguille du Fuel Flow sur la même jauge ne bouge pas.
- Les RPM vibrent très peu.
Les autres instruments vibrent très légèrement.

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

Suivante

Retourner vers LUA, Linda, Macros & gauges Air Manager





Qui est en ligne

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