See site in english Voir le site en francais
Website skin:
home  download  forum  link  contact

Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length

Author Topic: Le tableau de bord de Nerofox  (Read 40014 times)

0 Members and 1 Guest are viewing this topic.

Offline nerofox

  • Sr. Member
  • ****
  • Posts: 366
  • Country: France fr
  • Karma: 23
29 September 2014, 12:46:37
Bonjour à la communauté, avec tout ce qui se passe avec arduino tout sa j'ai enfin la possibilité et les moyens de me lancer dans l'élaboration d'un tableau de bord (pas un cockpit non plus )   :hot:

L'idée

Je ne souhaite pas reproduire l'intérieur d'une fusée connue ou quoi que ce soit, j'adore le réalisme des systèmes du DGIV et je compte bien m'en inspirer, en effet mon tableau de bord gérera plusieurs besoins séparés en 4 panels :
1. Panel de navigation. :wor:
2. Panel de gestion de l'alimentation du vaisseau et hydraulique.
3. Panel de gestion des réservoirs de carburant.
4. Panel de gestion des systèmes de survie.

Le nombre de fonction sera assez important selon moi :
- 25 interrupteurs.
- 8 afficheurs 7 segments.
- 2 petits écrans LCD.
- 9 boutons poussoir (pour les auto pilotes basiques et autre).
- 46 LEDs.
- clé de contact, écran pour MFD, manette de vole, 3 manettes des gaz.
etc...

Mon but étant de reproduire le plus fidèlement possible les conditions de survie fictive du DGIV dans un tableau de bord réel.

Le fonctionnement

Alors bien entendu les choses se compliquent quand on veut interfacer toutes les fonctions possibles d'orbiter avec arduino, la simulation utilisera un DG1 de base mais le tableau de bord et mon programme ajoutera du réalisme avec des systèmes supplémentaires.
Absolument tout le tableau de bord sera gérée par mon programme personnelle que j'aurais codé :bug:, que j'ai nommé PIGOU (Programme Informatique de Gestion d'Orbiter Unifié)  :badfinger:

Voici un schéma de fonctionnement global que je vais mettre en place :

- Arduino mega pour gérer l'électronique commandé par le programme PIGOU.
- PIGOU est le gestionnaire de tout le système, c'est le cerveau du tableau de bord, ce programme organise les informations et agis selon les entrées des arduino et les sortis obtenu par les scripts lua.
- Mysql sera le gestionnaire des données reçu et envoyé de PIGOU et lua, en gros il fait le lien entre PIGOU et les scripts LUA.
- Les scripts LUA font l'interaction entre la base de données et orbiter, elle récupère les informations utile du simulateur et les enregistres dans la base de données, également elle exécute les commandes programmée de PIGOU sur Orbiter.

je ne vous raconte pas le casse tête que sa va être  :wall:

Démonstration :

Rien que pour vous j'ai fais un mini tp utilisant tout sa pour un exemple bien précis, le but est d'afficher les niveaux de carburant des réservoirs du vaisseau sur un petit écran LCD, en pressant le bouton physique on effectue le ravitaillement des réservoirs  :eek:
http://www.dailymotion.com/video/x26tp4w_test-arduino-orbiter-reservoir-lcd_videogames

Source du TP :

Pour ceux qui souhaite se baser sur mon code pour leur projet personnelle :

Arduino, affichage des deux réservoirs via la port COM :

Code: [Select]
#include "Wire.h"
#include "LiquidCrystal_I2C.h"

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); 
String donne = "";
int nb = 0;
boolean mode = true;

const int led_verte = 3;
const int bouton = 2;
int etatbouton;


void setup()
{
  //prepparation du bouton + led
  pinMode(led_verte, OUTPUT);
  pinMode(bouton, INPUT);
  digitalWrite(bouton, HIGH);
  digitalWrite(led_verte, HIGH);

  //demarrage du port série
  Serial.begin(9600);

  //mise en place de l'affichae main
  lcd.begin(16, 2);
  lcd.setCursor(0,0);
  lcd.print("Main : ");

  //mise en place de l'affichage RCS
  lcd.setCursor(0,1);
  lcd.print("RCS : ");
}

void loop()
{
  etatbouton = digitalRead(bouton);
  if (etatbouton == HIGH) {
    digitalWrite(led_verte, HIGH);
    Serial.print("0");
  }
  else
  {
    //bouton appuyé
    digitalWrite(led_verte, LOW);
    Serial.print("1");
  }
}

//fonction qui transforme certain caractères dec en ascii
String ascii(int arg_dec) {

  if (arg_dec == 48) return "0";
  if (arg_dec == 49) return "1";
  if (arg_dec == 50) return "2";
  if (arg_dec == 51) return "3";
  if (arg_dec == 52) return "4";
  if (arg_dec == 53) return "5";
  if (arg_dec == 54) return "6";
  if (arg_dec == 55) return "7";
  if (arg_dec == 56) return "8";
  if (arg_dec == 57) return "9";

  if (arg_dec == 97) return "a";
  if (arg_dec == 98) return "b";
  if (arg_dec == 99) return "c";
  if (arg_dec == 100) return "d";
  if (arg_dec == 109) return "m";
  if (arg_dec == 114) return "r";

}

void serialEvent() //se déclenche quand le port série reçois une données
{

  donne = "";
  nb = 0;

  //mose main, la données atterit d'abord sur le compteurs du réservoir principal
  if (mode == true) {

    while (Serial.available() > 0)
    {
      lcd.setCursor(8,0);
      donne = donne + ascii(Serial.read());
      nb = nb + 1;
    }
    if (nb == 1) donne = "0000" + donne;
    if (nb == 2) donne = "000" + donne;
    if (nb == 3) donne = "00" + donne;
    if (nb == 4) donne = "0" + donne;
    lcd.print(donne);
    mode = false;

  }
  else
  {

    //mose rcs, la données atterit ensuite sur le compteurs du RCS puis on repart au main
    while (Serial.available() > 0)
    {
      lcd.setCursor(8,1);
      donne = donne + ascii(Serial.read());
      nb = nb + 1;
    }
    if (nb == 1) donne = "0000" + donne;
    if (nb == 2) donne = "000" + donne;
    if (nb == 3) donne = "00" + donne;
    if (nb == 4) donne = "0" + donne;
    lcd.print(donne);
    mode = true;

  }

}

Lua, récupération des données puis enregistrement sur Mysql + récupération de la commande du ravitaillement pour effectuer celui ci :

Code: [Select]
-- Mise en place des constances
v = vessel.get_interface('GL-01')
h1 = v:get_propellanthandle(0) --réservoir principal
h2 = v:get_propellanthandle(1) --réservoir RCS

-- Mise en place du SQL
require "luasql.odbc"
mysql = luasql.odbc()
sql = mysql:connect("BDD","root","5pcr12v6")
sql:setautocommit(true)

local boucle = true
repeat

-- récupération de la masse des jauges de carburant
masse0 = v:get_propellantmass(h1)
masse1 = v:get_propellantmass(h2)
--envois de l'information à la BDD
sql:execute("UPDATE orbiter SET carburant0 = "..masse0..", carburant1 = "..masse1.." where id =1")

--récupération de la commande de ravitaillement des réservoirs
cursor = sql:execute("SELECT ordre FROM commande WHERE id = 1")
cmd = cursor:fetch("commande")
cursor:close()

--si la commande est sur 1 alors on remplie
if cmd == true then
--remplissage si le réservoir est inférieur a sont max
if v:get_propellantmass(h1) < 12900 then
v:set_propellantmass(h1, v:get_propellantmass(h1) + 20)
end
if v:get_propellantmass(h1) < 600 then
v:set_propellantmass(h2, v:get_propellantmass(h2) + 10)
end

--réquilibrage des taux max au cas ou que sa dépasse
if v:get_propellantmass(h1) > 12900 then
v:set_propellantmass(h1, 12900)
end
if v:get_propellantmass(h1) > 600 then
v:set_propellantmass(h2, 600)
end
end

--message
--oapi.dbg_out("Main : "..masse0.." RCS : "..masse1)
proc.wait_simdt(0.5)

until boucle == false

Dans ce contexte PIGOU se contente juste de effectuer la liaison série avec l'arduino pour l'enregistrement des informations dans Mysql.

En bref :

Mille excuses pour les fautes éventuelles  :badsmile:
Je vous tiens au courant sur l’avancé du projet, si vous avez des questions n'hésitez pas  :love:





Offline SCEtoAUX

  • 35,579 ft/s
  • Legend
  • ******
  • Posts: 1052
  • Country: Canada ca
  • Karma: 61
  • You are GO to continue powered descent
Reply #1 - 29 September 2014, 14:10:48
eh ben, c'est très interessant comme projet  :wor:
j'adore quand il a plein de boutons
juste comme ça, il y a un moyens d'afficher les réserve de carbu sous forme de graphique sur l'écran LCD ?


Conrad: I got three fuel cell lights, an AC bus light, a fuel cell disconnect, ACbus overload 1 & 2, Main Bus A & B out.
Carr: 12, Houston. Try SCE to auxiliary. Over.
Conrad: Try FCE to Auxiliary? What the hell is that? NCE to auxiliary..?
Carr: SCE ! SCE to Auxiliary!

Offline nerofox

  • Sr. Member
  • ****
  • Posts: 366
  • Country: France fr
  • Karma: 23
Reply #2 - 29 September 2014, 14:42:57
eh ben, c'est très interessant comme projet  :wor:
j'adore quand il a plein de boutons
juste comme ça, il y a un moyens d'afficher les réserve de carbu sous forme de graphique sur l'écran LCD ?



Bien entendu mais c'est plus complexe, puis il te faut un autre type d'écran LCD, âpres sa dépend le type de graphique que tu veux obtenir ^^


Offline antoo

  • Legend
  • ******
  • Posts: 3659
  • Country: France fr
  • Karma: 179
  • MSFS ❤️
Reply #3 - 29 September 2014, 23:26:32
Génial! Bon courage en tout cas. Hâte de voir les premiers résultats!

---------------------------------------------------------------------------------------------------
"ET C´EST PARTI!!" Youri Gagarine au lancement de vostok 1 le 12 avril 1961

Offline jacquesmomo

  • Le budget !!!
  • Legend
  • ******
  • Posts: 7448
  • Country: France fr
  • Karma: 610
  • Plus on rate, plus on a de chances de réussir !..
Reply #4 - 29 September 2014, 23:31:31
je ne vous raconte pas le casse tête que sa va être
Eh bien...  :trucdeouf: bon courage...

Mes add-ons sont là !

Offline nerofox

  • Sr. Member
  • ****
  • Posts: 366
  • Country: France fr
  • Karma: 23
Reply #5 - 29 September 2014, 23:38:48
Merci encore, je prendrais le temps qu'il faut ^^
Si possible je posterai l’avance du projet


Offline Mars Bleu

  • Hero Member
  • *****
  • Posts: 638
  • Karma: 33
Reply #6 - 01 October 2014, 13:10:59
J'avais fait des études de faisabilité (cf le fil http://orbiter.dansteph.com/forum/index.php?topic=12877.0 )
en échangeant principalement avec Hysot et Antoo. (Mention spéciale à Nulentout qui est un sacré bidouilleur
au sens le plus noble du terme.)
Depuis, j'ai entamé l'assemblage du premier sous-ensemble concernant le traitement des raccourcis claviers.
Pas encore de mise sous tension pour essai, car je dois encore déterminer les dimensions du pupitre qui
accueillera l'ensemble des commandes et des afficheurs.
L'aspect modulaire est pour moi une ligne de conduite, ce qui me donne la possibilité de reconfigurer
l'ensemble selon les possibilités.
Je finis le dessin du pupitre, et j'uploaderai des photos pour vous montrer où j'en suis.

Bravo Nerofox pour ton fil que je vais suivre de près. Il répond déjà au problème de la gestion des carburants
qu'on ne peut pas traiter avec des raccourcis clavier.

Mars Bleu


Offline nerofox

  • Sr. Member
  • ****
  • Posts: 366
  • Country: France fr
  • Karma: 23
Reply #7 - 01 October 2014, 14:44:12
C'est mon objectif premier, ne pas dépendre des raccourcis clavier qui sont limité et ne permette pas de faire tout ce que l'on souhaite sur le simulateur.

Pour la saisie clavier si mon arduino détecte une touche appuyé (par exemple le cas du train d'atterrissage) il envois l'information a PIGOU qui lui même enregistre sa dans Mysql, ensuite lua récupère l'information et utilise la commande suivante pour envoyé la touche G a orbiter :
v:send_bufferedkey(keycode)

ou keycode est le code clavier de la touche G, donc pour mon exemple on obtiens :
v:send_bufferedkey(OAPI_KEY.G)

Voici la liste complete des touches du clavier, j'ai récupéré sa dans la doc d'orbiter :
Code: [Select]
Used to identify keyboard events for panels and MFDs.

OAPI_KEY.ESCAPE "Esc"
OAPI_KEY.1 "1"
OAPI_KEY.2 "2"
OAPI_KEY.3 "3"
OAPI_KEY.4 "4"
OAPI_KEY.5 "5"
OAPI_KEY.6 "6"
OAPI_KEY.7 "7"
OAPI_KEY.8 "8"
OAPI_KEY.9 "9"
OAPI_KEY.0 "0"
OAPI_KEY.MINUS "-" on main keypad
OAPI_KEY.EQUALS "=" on main keypad
OAPI_KEY.BACK Backspace
OAPI_KEY.TAB Tab key
OAPI_KEY.Q "Q"
OAPI_KEY.W "W"
OAPI_KEY.E "E"
OAPI_KEY.R "R"
OAPI_KEY.T "T"
OAPI_KEY.Y "Y"
OAPI_KEY.U "U"
OAPI_KEY.I "I"
OAPI_KEY.O "O"
OAPI_KEY.P "P"
OAPI_KEY.LBRACKET "["
OAPI_KEY.RBRACKET "]"
OAPI_KEY.RETURN Enter key on main keypad
OAPI_KEY.LCONTROL Left control key
OAPI_KEY.A "A"
OAPI_KEY.S "S"
OAPI_KEY.D "D"
OAPI_KEY.F "F"
OAPI_KEY.G "G"
OAPI_KEY.H "H"
OAPI_KEY.J "J"
OAPI_KEY.K "K"
OAPI_KEY.L "L"
OAPI_KEY.SEMICOLON ";"
OAPI_KEY.APOSTROPHE "'"
OAPI_KEY.GRAVE "`"
OAPI_KEY.LSHIFT Left Shift key
OAPI_KEY.BACKSLASH "\"
OAPI_KEY.Z "Z"
OAPI_KEY.X "X"
OAPI_KEY.C "C"
OAPI_KEY.V "V"
OAPI_KEY.B "B"
OAPI_KEY.N "N"
OAPI_KEY.M "M"
OAPI_KEY.COMMA ","
OAPI_KEY.PERIOD "."
OAPI_KEY.SLASH "/"
OAPI_KEY.RSHIFT Right shift key
OAPI_KEY.MULTIPLY "*" on numeric keypad
OAPI_KEY.LALT Left Alt key
OAPI_KEY.SPACE Space bar
OAPI_KEY.CAPITAL Caps lock key
OAPI_KEY.F1 F1 function key
OAPI_KEY.F2 F2 function key
OAPI_KEY.F3 F3 function key
OAPI_KEY.F4 F4 function key
OAPI_KEY.F5 F5 function key
OAPI_KEY.F6 F6 function key
OAPI_KEY.F7 F7 function key
OAPI_KEY.F8 F8 function key
OAPI_KEY.F9 F9 function key
OAPI_KEY.F10 F10 function key
OAPI_KEY.NUMLOCK Num lock key
OAPI_KEY.SCROLL Scroll lock key
OAPI_KEY.NUMPAD7 "7" on numeric keypad
OAPI_KEY.NUMPAD8 "8" on numeric keypad
OAPI_KEY.NUMPAD9 "9" on numeric keypad
OAPI_KEY.SUBTRACT "-" on numeric keypad
OAPI_KEY.NUMPAD4 "4" on numeric keypad
OAPI_KEY.NUMPAD5 "5" on numeric keypad
OAPI_KEY.NUMPAD6 "6" on numeric keypad
OAPI_KEY.ADD "+" on numeric keypad
OAPI_KEY.NUMPAD1 "1" on numeric keypad
OAPI_KEY.NUMPAD2 "2" on numeric keypad
OAPI_KEY.NUMPAD3 "3" on numeric keypad
OAPI_KEY.NUMPAD0 "0" on numeric keypad
OAPI_KEY.DECIMAL "." on numeric keypad
OAPI_KEY.OEM_102 "|", "<", ">" on UK/German keyboards
OAPI_KEY.F11 F11 function key
OAPI_KEY.F12 F12 function key
OAPI_KEY.NUMPADENTER Enter key on numeric keypad
OAPI_KEY.RCONTROL Right Control key
OAPI_KEY.DIVIDE "/" on numeric keypad
OAPI_KEY.RALT Right Alt key
OAPI_KEY.HOME Home key on cursor keypad
OAPI_KEY.UP Up-arrow on cursor keypad
OAPI_KEY.PRIOR PgUp on cursor keypad
OAPI_KEY.LEFT Left-arrow on cursor keypad
OAPI_KEY.RIGHT Right-arrow on cursor keypad
OAPI_KEY.END End key on cursor keypad
OAPI_KEY.DOWN Down-arrow on cursor keypad
OAPI_KEY.NEXT PgDn on cursor keypad
OAPI_KEY.INSERT Insert key on cursor keypad
OAPI_KEY.DELETE Delete key on cursor keypad


Offline nulentout

  • Legend
  • ******
  • Posts: 3356
  • Country: France fr
  • Karma: 242
Reply #8 - 02 October 2014, 09:28:40
Bonjour les copains,
Pas le temps ce jour de vous blablater longuement, je vais donc faire court ... ce qui me changera ! :)
Ton projet est séduisant, mais il va falloir optimiser le code.
Je n'ai pas le temps de créer la fonction sur mon Arduino, mais celle que tu utilises pour convertir les décimaux en ASCII n'est pas idéale. La suite de if pour chaque caractère est pénalisante.
Il est préférable de procéder par "calcul". Passer de minuscule à majuscule consiste à inverser le bit n°5, ou si tu préfère ajouter ou retrancher 32 au code ASCII. Coder un F par exemple consiste à utiliser le code ASCII du A et ajouter 6, c'est à dire le décalage entre 70 et 65 le code du A. Idem pour les chiffres. En résumé ta procédure commence par regarder si c'est un chiffre, une minuscule ou une majuscule : 3 tests. A chaque test un calcul de transposition. Seules les ponctuations seront traitées cas par cas.
Ayant déjà réalisé un tableau de bord qui comporte plus de 200 "boutons", je suis arrivé assez rapidement à la conclusion qu'il est préférable d'associer plusieurs processeurs plutôt qu'un seul plus puissant. Au minimum deux. Un qui va gérer tout ce qui n'est pas prioritaire comme allumer l'APU ou sortir le train. Mais les commandes de vol doivent absolument passer avant tout le reste. Donc le manche, le moteur orbital et les RCS doivent à mon avis être gérés à part, par un Arduino dédié qui dialogue avec un deuxième plus général. C'est le général qui interface la ligne série, mais c'est le "secondaire" qui gère tes mini manches. A mon sens le moteur Orbital se pilote par un "clavier" et de la programmation : Durée et amplitude de la poussée, Ullage, heure exacte d'allumage. L'orientation du vaisseau aussi peut être confiée aux systèmes de bord. Mais le mode manuel devrait utiliser deux joystick. Un pour les rotations, un pour les translation et en simultané. C'est Arduino qui basculera les modes "en temps partagé".
JE RÉSUME : Donner des idées c'est facile, les concrétiser est une autre affaire ... mais aussi c'est là que le défi prend tout son sel.
Reste que tu sembles avoir abordé le projet du bon coté, surtout quand tu dis : j'y mettrai le temps qu'il faut. C'est là un gage de réussite, ne pas se sentir pressé et accepter d'étaler dans le temps.
Je ne te souhaite pas bonne chance, car je sais que ta réussite n'aura rien avoir avec "du pot". Par contre, je te souhaite ténacité et courage, car par moment les difficultés peuvent tempérer l’enthousiasme. C'est précisément dans ce cas qu'il faut faire face ... et surtout demander aux copains.
Et vla, j'ai encore blablaté !

La sagesse est un trésor ... tellement bien caché.

Offline nerofox

  • Sr. Member
  • ****
  • Posts: 366
  • Country: France fr
  • Karma: 23
Reply #9 - 02 October 2014, 12:32:59
Belle façon de pensée nulentout, il est évident que cela va demander du temps, de la persévérance et de l'argent qui plus est, les manettes des gaz ainsi que le joystick sont appart des arduinos, il seront gérer en parallèle du reste du tableau de bord c'était déjà prévus :)
oh que oui le code doit être optimiser mais je préfère d'abord rendre tout cela fonctionnel avant de l'optimiser et corriger les bugs.

Pour la gestion il y aura minimum 2 arduinos, un pour les entrées et un pour les sortis, la gestion en sera pas moins gérable.


Offline Mars Bleu

  • Hero Member
  • *****
  • Posts: 638
  • Karma: 33
Reply #10 - 02 October 2014, 18:08:51
Nulentout, tu parles d'or. De mon côté, j'avais aussi pensé à plusieurs
arduino gérant chacune un ensemble de fonctions.
As tu un topic parlant de ta réalisation de tableau de bord?
@nerofox, j'ai hâte de voir la suite.


Offline nulentout

  • Legend
  • ******
  • Posts: 3356
  • Country: France fr
  • Karma: 242
Reply #11 - 04 October 2014, 21:36:03
Non, par de sujet. j'avais à l'époque où j'ai présenté mon T.B. de créer un sujet sur lequel nous aurions débattu des problèmes rencontrés par certains, et des solutions trouvés par d'autres, mais il n'y a pas eu de suite.

Entre autre vous pouvez voir mon T.B. sur le lien :
http://orbiter.dansteph.com/forum/index.php?topic=2469.0

« Last Edit: 04 October 2014, 21:47:17 by nulentout »
La sagesse est un trésor ... tellement bien caché.

Offline Mars Bleu

  • Hero Member
  • *****
  • Posts: 638
  • Karma: 33
Reply #12 - 05 October 2014, 19:25:54
Quote
Nulentout:
Entre autre vous pouvez voir mon T.B. sur le lien :
http://orbiter.dansteph.com/forum/index.php?topic=2469.0

Oui, oui, c'est très intéressant par là. J'ai tout lu et relu, car plus on a d'infos,
mieux ça vaut.

De mon côté, je suis en train d'organiser sur mon logiciel de dessin favori ma planche de bord. J'ai d'abord élaboré
des mini tableaux de fonction, et j'essaie de faire tenir le tout dans un espace raisonnable,
et qui essaie d'être ergonomique.

Voici par exemple l'ensemble de la commande des auxiliaires liés au fonctionnement de l'APU

Et ici, la commande des pilotes auto:

Là, le display O2 et Coolant:

J'en ai pas mal à juxtaposer, et à arranger les uns par rapport aux autres.


Dans l'élaboration de certains modules de commande, je vais avoir besoin de bargraph à 7, 9 ou 13 LED.
Ça n'existe pas, mais j'ai quelques idées à mettre en pratique.

Mars Bleu



« Last Edit: 05 October 2014, 19:33:17 by Mars Bleu »

Offline jacquesmomo

  • Le budget !!!
  • Legend
  • ******
  • Posts: 7448
  • Country: France fr
  • Karma: 610
  • Plus on rate, plus on a de chances de réussir !..
Reply #13 - 05 October 2014, 23:43:47
J'aime bien le look.... :explique:

Mes add-ons sont là !

Offline Mars Bleu

  • Hero Member
  • *****
  • Posts: 638
  • Karma: 33
Reply #14 - 06 October 2014, 08:30:07
Merci, Jacquesmomo!
J'avais en tête le look "aéro", mais je trouve que ça se rapproche
d'un PCP de sous-marin...
Peut-être qu'avec le rétroéclairage des labels, ça ferait mieux.


Offline nulentout

  • Legend
  • ******
  • Posts: 3356
  • Country: France fr
  • Karma: 242
Reply #15 - 06 October 2014, 09:59:40
Si tous ces composants sont de type électronique et non des simulation sur écrans vidéo, pour les barregraphes avec un grand nombre de LEDs rectangulaires, j'ai résolu ça sur mon T.B.
Il me sera éventuellement possible de te donner les schémas électroniques. Comme ils fonctionnent avec une tension analogique, ils ne consomment qu'une seule sortie analogique sur le processeur.
Pour le codage sur Arduino d'un bouton rotatif numérique ou d'un joystick : Idem.
Amicalement : Nulentout.

La sagesse est un trésor ... tellement bien caché.

Offline Mars Bleu

  • Hero Member
  • *****
  • Posts: 638
  • Karma: 33
Reply #16 - 06 October 2014, 23:20:09
Oui, je prévois des bargraph à LED (jusqu'à 20 LED pour les jauges de carburant). J'ai
vu que ça se pilotait avec des comparateurs réunis dans LM3914N. Est-ce par cette
technique que tu as procédé? De toutes façons, les schémas électroniques m'intéressent.

Sinon, j'avais aussi pensé à utiliser des registres à décalage SIPO tant pour les bargraphs
que pour les afficheurs 7 segments.

Le codage d'un bouton rotatif ou d'un joystick m'intéresse également: pour la "warpology",
j'ai dessiné ceci:

Mais il serait plus élégant d'avoir un bouton rotatif à 8 positions distinctes.


Offline nulentout

  • Legend
  • ******
  • Posts: 3356
  • Country: France fr
  • Karma: 242
Reply #17 - 07 October 2014, 10:49:01
Coucou les copains,
Pour le schéma du barregraphe c'est un peu compliqué car je dois faire des recherches et scanner mes écrits.
Pour le bouton rotatif dans Arduino, tu vas sur
http://forum.arduino.cc/index.php?PHPSESSID=tp6h0iavcvh067tftraq2uphb0&topic=254693.0
Tu télécharges le fichier.PDF que j'ai proposé en ligne. C'est un document dans lequel je détaille une foule de petits systèmes que j'ai expérimenté sur Arduino. Tu y trouveras la mise en service d'un bouton rotatif numérisé, le matriçage d'un clavier, l'utilisation des moteurs pas à pas, des afficheurs à cristaux liquides et bien d'autres choses. Naturellement, plus avant dans la discution je fournis les programmes.

La sagesse est un trésor ... tellement bien caché.

Offline nulentout

  • Legend
  • ******
  • Posts: 3356
  • Country: France fr
  • Karma: 242
Reply #18 - 07 October 2014, 12:32:30
Coucouroucoucou ... c'est encore Môamoa.
C'est au sujet du barregraphe à LED. J'ai mis en ligne mes deux schémas et je peux donc les proposer ici à Mars Bleu.

Le schéma de base est le suivant :


Seule la Fig.1 est significative sur ce dessin. La déviation à pleine échelle est obtenue à +1,5Vcc ce qui est bien plus sensible que nécessaire. La sortie analogique d'un Arduino étant de 0 à +5Vcc il faudra atténuer avec deux résistances. De plus, Arduino fournit une fausse sortie analogique, car c'est de la PWM. Il faudra donc ajouter aux deux résistances d'atténuation un condensateur pour "lisser" l'onde rectangulaire de la PWM.
Au signal d'entrée en tension continue, tu observes que je superpose une petite tension sinusoïdale alternative à travers les deux résistances de 1Mohm. Le but est le suivant :
Le LM3914 est un circuit numérique qui fonctionne en "tout ou rien". Le moindre que l'on transite à travers un seuil, la diode supérieure s'allume ou s’éteint entièrement. Avec cette superposition d'une très faible tension alternative, on obtient un effet d'allumage progressif. La rampe devient "analogique".
Le LM3914 peut traiter 10 diodes LED. Si tu veux en mettre plus, on peut chainer plusieurs de ces circuits. Comme je désirais une rampe très étalée de 30 LED, j'ai opté pour le schéma suivant :



Avec ce schéma on chaine trois circuits, mais il est évident que tu peux te limiter à deux pour tes 20 LED.
Le principe est le même, seule la tension en entrée pour engendrer la déviation pleine échelle change. Mais même avec trois circuits en cascade on reste encore très largement dans les possibilités des sorties analogiques d'un Arduino.

En espérant que ces quelques explications te faciliteront tes choix.  :salut:

P.S : SIOUPLÉ, filez-moi plein plein plein de Karmas, car ya Momo qui en a déjà 50 lui.  :why:

La sagesse est un trésor ... tellement bien caché.

Offline jacquesmomo

  • Le budget !!!
  • Legend
  • ******
  • Posts: 7448
  • Country: France fr
  • Karma: 610
  • Plus on rate, plus on a de chances de réussir !..
Reply #19 - 07 October 2014, 12:51:42
je viens de t'en donner 1, nous sommes presque à égalité....

MAINTENANT ça va être LA GUERRE aux Karmas...

Mes add-ons sont là !

Offline Mars Bleu

  • Hero Member
  • *****
  • Posts: 638
  • Karma: 33
Reply #20 - 07 October 2014, 20:21:48
Alors là, Nulentout, c'est magnifique, ce que tu as posté. Avec tout ça, ça va être facile de jouer
avec les bargraph. Mercimerci.

Finalement, c'est simple de mettre en cascade le LM3914, avec des résistances en pont
diviseur qui effectuent le décalage de référence. Plutôt que de mettre des résistances fixes,
n'y aurait-il pas avantage à mettre des résistances variables genre trimmer multitour?

Tout ça mérite un karma. Voilààà.

Et pi, pour pas faire de jaloux, un pour jacquesmomo. Làààà.

Bon, je retourne à mes dessins  de tableau de bord.


Offline nulentout

  • Legend
  • ******
  • Posts: 3356
  • Country: France fr
  • Karma: 242
Reply #21 - 08 October 2014, 19:47:13
Hooo NNNNOOOONNN, pas des karmas à Momo !  :wall:
Pour les ajustements de précision avec potentiomètre multitours c'est franchement inutile. Avec des résistances actuelles à 5% c'est largement suffisant. Personnellement, sur le tableau de bord j'avais opté pour la statégie suivante :
1) Un petit barregraphe à 10 LED dédié à la charge de batterie.
2) Un deuxième " " " pour le pas hélice et la gestion des génératrices électriques et des batteries.
3) Un grand barregraphe "central" sur le T.B. avec 30 LED très visuel. Au moyen d'un commutateur je peux envoyer sur ce
    dernier au choix une foule de paramètres : Température moteur, les paramètres des deux petits
    barregraphes, l'état des compensateurs etc.
Je résume : Deux informations de tailles réduites mais permanentes et une rampe très détaillé pouvant afficher tout ce que je veux.
Sur les deux barregraphes de 10 LED, en fait j'utilise un barregraphe monobloc du commerce. L'un des deux est totalement rouge, mais l'autre a un secteur vert, une secteur jaune, un secteur rouge. La grande rampe lumineuse utilise des LED indépendantes rectangulaires plates. Naturellement on retrouve des secteurs de couleur. Les trois LED centrales sont vertes. Les trois du bas et les deux du haut sont rouges, les autres jaunes. Le pilote est ainsi aidé par le rouge pour moteur froid, moteur chaud etc. La zone centrale est un guide pour les compensateurs.
Bref, on peut faire ce que l'on veut. La meilleure idée, sur ce schéma, c'est la superposition d'une tension sinus pour rentre la transition progressive, visuellement c'est très révélateur de l'évolution du phénomène surveillé.

La sagesse est un trésor ... tellement bien caché.

Offline Mars Bleu

  • Hero Member
  • *****
  • Posts: 638
  • Karma: 33
Reply #22 - 08 October 2014, 23:45:16
Très ergonomique, l'idée du coup d’œil général peu détaillé, et la
possibilité de focaliser sur tel ou tel paramètre.

OK pour les résistances qui au final sont relativement précises.

Pour la tension sinus, on peut la générer avec quelques portes.
logiques montées en oscillateur?


Offline nulentout

  • Legend
  • ******
  • Posts: 3356
  • Country: France fr
  • Karma: 242
Reply #23 - 09 October 2014, 08:42:29
NAN ... par définition la logique fonctionne en tout ou rien. Pour ma part, l'alimentation étant de type "Découpage" et non un schéma du genre transformateur, redresseur, lissage et régulation avec composants discrets, j'ai été obligé de générer du sinus "en local". Dans ce but, un NE555 est utilisé en générateur de signal carré à 140Hz. ce signal est utilisé pour générer sur mon tableau de bord le bruit discret de la pompe de gavage. C'est ce signal carré qui filtré par un amplificateur opérationnel 741 donne du sinusoïdal presque pur. Comme le 741 impose du +12Vcc et du -12Vcc j'ai utilisé un petit pavé électronique spécialisé qui génère ces deux tensions à partir du +5Vcc.

La sagesse est un trésor ... tellement bien caché.

Offline Mars Bleu

  • Hero Member
  • *****
  • Posts: 638
  • Karma: 33
Reply #24 - 09 October 2014, 22:47:15
Heu, oui, c'est vrai, la logique fonctionne en tout ou rien, tu as raison, Nulentout.
Faut filtrer un signal pour le "sinusoïder".