Realisztikus műszerfal illesztése az OMSI2 rendszeréhez

A meglévő hardware eszközök fejlesztési lehetőségei, módosítások, illetve új eszközök bevezetése
Avatar
csegebiga
Pákabűvész
Hozzászólások: 236
Csatlakozott: 2015. március 27. péntek, 21:27

Realisztikus műszerfal illesztése az OMSI2 rendszeréhez

HozzászólásSzerző: csegebiga » 2017. november 1. szerda, 10:35

Sziasztok!
Létezik ez az OMnibusz SImulator nevü program, amiben (mily meglepő!) buszokat lehet vezetni. Óriási netes tábora lett a rendszernek, mert nem csak az előre elkészített pályákon és buszokkal lehet játszani, hanem teljesen újakat is lehet kreálni.
Így a német játékhoz készültek Ikarus buszok illetve magyar pályák is.
És ami érdekesebb: elvetemült buszrajongók elkezdtek műszerfalat, komplett vezetőfülkét készíteni. A TeCsőn lehet látni egy-két kisérletet ezekre (keresés az 'omsi dashboard' kifejezésre)
Itt jövök én a képbe: egy barátom elkezdett összerakni egy Ikarus Z60 busz pilótafülkét, és nekem szólt; ugyan már, kössem össze a számítógéppel a szörnyét.
Kivezettünk minden műszert, lámpát, nyomógombot, kapcsolót a műszerfalból egy helyre, és...
A rendszer úgylett megírva, hogy egy segédprogram segítségével a belső műszerfal változókat soros porton kiküldi a külvilágnak.
Itt egy Mega fogadja, és villogtatja a lámpákat, forgatja a műszerek szervóit. Ez a rész az izoláció és a feszültség illesztések kivételével megoldottnak látszik. Asztalon már működik.
A kormány, a pedál egy force-feedbackos kormányból jön. Ez rendben is lenne.
A gondom a beviteli résszel van.
Eredetileg egy szilikon billentyűzet elektronikáját használtuk volna fel úgy, hogy a megfelelő kapcsoló behúz egy relét, aminek a záróérintkezője lezár egy mátrixpontot a billentyűzparancsnak megfelelő helyen. Ez megfelelő is a nyomógombok esetében, hiszen nyomom-elengedem, nincs gond. A probléma a kapcsolók kezelésénél keletkezik; bekapcsolom, 'nyomva marad, fogja a mátrixot a kikapcsolásig. És mivel nem egy kapcsoló van a műszerfalon, előbb-utóbb a billentyűzet elektronikája besokall.
Arról nem is beszélve, hogy van olyan kapcsoló, amit a szoftverben másik billentyűvel kéne kikapcsolni. Pl index, sebváltó, fényszóró.
Tehát a sima billentyűzet elektronika nem teljesen jó.
Ekkor ugrott be, hogy mintha bizonyos Arduino paneleleket rá lehetne bírni billentyűzet emulációra. Utánakeresvén ezeket említik: Micro, Due, Leonardo. Hogy ezek olyan beépített usb csatolóval rendelkeznek, ami tudja magát billentyűzetnek is hazudni.
Láttam a Dueből Mega méretű és portszámú verziót is, az már csak elég lenne az összes kezelőszerv gépbe vitelére.

Mit gondoltok, melyik kivitelt ajánlanátok, melyik szerezhető be egyszerűbben?

15 nyomógomb és 10 kapcsoló állapotának vizsgálatára mit érdemes alkalmazni?
Folyamatos pollingot, szoftveres pergésmentesítéssel?
Megszakítást 15 bemenet felfutására/lefutására?
A 'Nagyok' ezt hogyan csinálják? ;)

Avatar
csegebiga
Pákabűvész
Hozzászólások: 236
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Realisztikus műszerfal illesztése az OMSI2 rendszeréhez

HozzászólásSzerző: csegebiga » 2017. november 1. szerda, 11:59

TeCső videók: https://www.youtube.com/results?search_query=omsi+dashboard
a műszerfal:
muszerfal1.png
Nincs meg a kellő jogosultságod a hozzászóláshoz csatolt állományok megtekintéséhez.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9757
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: Realisztikus műszerfal illesztése az OMSI2 rendszeréhez

HozzászólásSzerző: Robert » 2017. november 1. szerda, 19:24

A Due esetén a 3.3V-os a rendszer, míg Mega/Leonardo esetén 5V!

Tipp1:
A gomb/kapcsolófigyelési trükk:
- Int alapon + prellmenteítés HW/SW módon,
- Polling alapon + prellmentesítés
és a tadaaaam....
- Timer alapon.

Trükk: a Timer 1 vagy timer 2 megszakítást 5 msecre beállítod.
Minden 5 msec-ben van egy TimerInterruptod, ahol az alprogram
- kiolvassa a kapcsoló/nyomógomb/stb állapott és
- ha LOW, akkor előzőszámlálóértéke-1 kivéve, ha 0 volt
- ha HIGH, akkor előzőszámlálóértéke+1, kivéve ha max. érték (általában ez 5 vagy 10)

Bárhol a programban ha az adott gomb értéke:
0 - stabil LOW,
Maxérték - stabil high
1...maxérték-1 közt - éppen prelleg/beáll....

A gomb beállási értéke: maxérték * timer periódus.


Tipp2:
- A bemenetek esetén a felhúzóellenállás _külső_ is legyen!
- Kimenetként a terhelés max 10mA. A hibakeresés miatt shieldpanel amin minden lábon ott van a 0.5mA-es nagyfényű LED a helyi hibakereséshez!
- A USB emuláció billentyűzet _és_ sorosport is. Azaz a soros felületen át lehet _terminálemulátorral_ konfigurálni és tesztelni a holmit! Miközben billentyűzet is...
http://www.tavir.hu - a gazda :)

Avatar
csegebiga
Pákabűvész
Hozzászólások: 236
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Realisztikus műszerfal illesztése az OMSI2 rendszeréhez

HozzászólásSzerző: csegebiga » 2017. november 1. szerda, 21:33

A kimeneteket egy Megán át vezéreljük.
A kimenetek optokapukon keresztül mennek, tehát egy (infra)LED terheli a portokat. Utána relépanel kapcsolja a lámpákat 24V-on.
A műszerek ugyanígy PWM jelet kapnak optokapun keresztül.
Utána FETes vezérlés dolgozik 0-24V között.
Ez a része már megyeget az asztalon.

A bemenettel van gondom.
Az egy másik panel lenne. Az a kérdés, melyikre lenne szükség?
Ez a bemenetek számától függ. Nagyon úgy néz ki, nem ùsszuk meg a DueR3-at

Az, hogy a DueR3 3.3V-os nem okozna gondot, hisz a 24V-os relék záróérintkezőin kívül csak a pc USB portjával lesz kapcsolatban.
(És a felhúzóellenállásokkal persze)
Galvanikusan a pc el van választva a busztól. Pont azért, hogy a 24V be ne kerüljön a PCbe.

Ezt a megszakításos- timeres dolgot holnap megnézem.
Lesznek még kérdéseim :)
A USB emuláció billentyűzet _és_ sorosport is. Azaz a soros felületen át lehet _terminálemulátorral_ konfigurálni és tesztelni a holmit! Miközben billentyűzet is...

Ez azt jelenti, hogy egyszerre működhet billenyűzetként és nézhetem a serial monitoron a debug infokat?

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9757
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: Realisztikus műszerfal illesztése az OMSI2 rendszeréhez

HozzászólásSzerző: Robert » 2017. november 2. csütörtök, 4:28

Én lehet inkább Leonardo és I2C bővítőchipekkel oldanám meg (MCP23017-essel).
Az MCP tud gombnyomás bevitelre INT-et generálni :) És maradnék az 5V-os rendszerben innentől...


Igen, a holmi több eszközként jelenik meg. Bill + sorosport. (Tipp: Itt a sorosport megnyitásakor _nincs_ resetelés, mint a normal USBillesztő+AVR panelek esetén! De ha billentyűzet, akkor annyiból hülyén jön ki, hogy soros ablak ha nyitva van, akkor képes belegépelni....)
http://www.tavir.hu - a gazda :)

vargham
Tranzisztorgyógyász
Hozzászólások: 157
Csatlakozott: 2014. január 8. szerda, 8:32
Kapcsolat:

Re: Realisztikus műszerfal illesztése az OMSI2 rendszeréhez

HozzászólásSzerző: vargham » 2017. november 2. csütörtök, 7:12

> Itt a sorosport megnyitásakor _nincs_ resetelés, mint a normal USBillesztő+AVR panelek esetén
Ott is el lehet kerülni. Csak olyan terminál programot kell használni, amiben állítható a DTR csatlakozáskori állapota (LOW vagy HIGH).

Avatar
csegebiga
Pákabűvész
Hozzászólások: 236
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Realisztikus műszerfal illesztése az OMSI2 rendszeréhez

HozzászólásSzerző: csegebiga » 2017. november 11. szombat, 20:29

Megvan az első sikerélményem a témával kapcsolatban :)
Végül egy Due-t sikerült szerezni, és hosszas ismerkedés után ezt a programot sikerült elindítanom,

Kód: Egész kijelölése

#include "Keyboard.h"

void setup() {
  Keyboard.begin();
  delay(10000);
  Keyboard.press(KEY_LEFT_GUI);
  Keyboard.press('r');
  delay(100);
  Keyboard.releaseAll();
  delay(500);
  Keyboard.print("notepad.exe");
  Keyboard.press(KEY_RETURN);
  delay(100);
  Keyboard.releaseAll();
  delay(2000);
  Keyboard.print("Hello World");
  Keyboard.press(KEY_RETURN);
  delay(100);
  Keyboard.releaseAll();
}

void loop() {
  // put your main code here, to run repeatedly:
 }

És működik! :)
Lenyomja a Win+R-t, bepötyögi, hogy "notepad.exe", és nyom egy ENTERt
Ezután a notepadba beírja az üzenetet.


A dolog buktatói a következők voltak:
    Csak a nativ USB aljzat hajlandó kbd-ként viselkedni
    Kell neki egy RESET, hogy elinduljon
    A loop() ba berakott keypessek eléggé megbolygatják a program módosítását :)

most kezdődik az interruptos programozás.
Valahol olvastam, hogy a Due tud minden lábára beállított interruptot kezelni.

Ezt próbálta-e már valaki?
Hogy 16 digit (pl D22-D37) láb CHANGE eseményére állít megszakítást?
fojt.köv


Vissza: “Hardware javaslatok”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég