Cessna 172 cockpit otthon

Építsünk szimulátort

Építsünk szimulátort

A gyújtáskapcsoló - digitális vagy analóg?

2018. október 27. - C172Peti

Felmerült a kérdés, hogy az 5 állású gyújtáskapcsoló hogy kerüljön megvalósításra. Két lehetőség van: szerzünk egy 5 állású forgó kapcsolót (például egy ilyet) és 5 bemenetét "kapcsoljuk" az Arduinónak, vagy használunk egy potmétert és egyetlen bemeneten analóg jelként dolgozzuk fel. Ha a végeredmény jobban érdekel a részleteknél, itt egy videó a tesztelésről:

 

Digitális megoldás

Az Arduino digitális bemenetéről még nem sokat írtam. A digitális lábakról két állapotot olvashatunk le: LOW vagy HIGH. Amikor 5V-ot kapcsolunk a lábra, értelemszerűen akkor HIGH, amikor leföldeljük a lábat, akkor LOW. Természetesen van hibahatár, szóval a "közel föld" és az 5V közeli feszültségek már stabil állapotot eredményeznek. A legegyszerűbb dolog, ha a kapcsolóval földet kapcsolunk rá. Ehhez annyit kell tennünk, hogy a kapcsoló egyik végét az Arduino föld lábára, míg a kapcsoló másik végét a digitális bemenetre kötjük. Ha a kapcsoló BE van kapcsolva, akkor földet kap a bemenet, tehát LOW lesz az értéke a programunkban.

Mi van akkor, ha a kapcsolót kikapcsoljuk? Ekkor sem az 5V sem a föld nem jut el a bemenetre. Mi lesz ekkor a digitális láb értéke?

Ahogy az Arduino leírása mondja: bármi lehet, ez egy instabil állapot. Pánikra semmi ok, erre való az úgynevezett PULL UP regiszter. Ez annyit tesz, hogy a digitális lábat mindig felhúzza 5V-ra, kivéve, amikor mi földeljük azt. Egy áramkörrel mi is megoldhatjuk, mindössze annyi a teendő, hogy egy ellenállást kötünk a digitális bemenet és az 5V láb közé. Ilyenkor stabilan kapja a láb az 5 voltot, viszont ha leföldeljük a kapcsolóval, akkor ott a föld jelenik meg. Úgy gondolom felesleges plusz áramkört építeni, ha programból megoldható ez. Célszerűen a setup() -ban meg kell mondanunk, hogy a digitális lábat bemenetként szeretnénk használni és kérjük a PULL UP regisztert is hozzá. Például a 2-es digitális lábat így lehet beállítani:

pinMode(2, INPUT_PULLUP);

Az Arduino programunkban már csak annyi teendőnk van, hogy hozzárendeljük ezeket az állapotokat a Joystick valamelyik gombjához.

A Joystick könyvtár két funkcióját fogom erre használni: a gomb lenyomása és a gomb felengedése. Ehhez meg kell jegyeznünk, hogy melyik gomb, milyen állapotban volt előzőleg. Itt egy minta mire gondolok:

for (int i = 2; i<=6; i++ ) {
  if ( digitalRead(i) == LOW ) { //ON
    if (!button[i-2]) {
      Joystick.pressButton(i-2);
      button[i-2] = true;
    }
  } else { //OFF
    if (button[i-2]) {
    Joystick.releaseButton(i-2);
    button[i-2] = false;
    }
  }
}

Az Arduino digitálsi bemenetei közül a 2,3,4,5,6-osakat használjuk, erre szolgál a ciklusunk. Beolvassuk a láb értékét.

Amennyiben ez LOW, a kapcsoló BE van kapcsolva. Megnézzük, hogy a hozzákapcsolt Joystick nyomógomb előző állapota mi volt. Ha eddig az még nem volt lenyomva, akkor megnyomjuk a gombot és megjegyezzük magunknak, hogy mostmár le van nyomva. Ha a nyomógomb előző állapota már lenyomott volt, akkor nincs teendőnk, hiszen még mindig le van nyomva.

Amennyiben ez az érték HIGH, a kapcsoló ki van kapcsolva. Az előző logikához hasonlóan megnézzük, hogy a kapcsolódó nyomógomb előző állapota mi volt és ennek megfelelően felengedjük a gombot, vagy nem teszünk semmit.

Ezzel kész is a digitális kapcsolónk Joystick nyomógombbá alakítása.

Analóg megoldás

Jelenleg ezzel semmi dolgom, az előző postban leírt tengelyt simán használhatjuk - itt annyi történik, hogy beolvassuk az analóg láb értékét és beállítjuk a Joystick egyik tengelyére. Majd a szimulátorban megoldjuk, hogy a magnetost vezérelje.

FSX SE beállítások - FSUIPC - A2A C172

Az FSX által adott alap beállítási lehetőség itt már kevés, használnunk kell az FSUIPC-t. Úgy gondolom, hogy aki picit is komolyabban szimulátorozik, már tudja mi ez és mi mindenre jó, így az FSUIPC-ről külön most nem sokat írnék. Továbbra is az A2A C172 modelljén fogom tesztelni.Először a digitális verziót állítom be, azaz a kapcsolós megoldást. Ez viszonylag egyszerű, FSUIPC-ben a Buttons+Switches tabon kapcsolok a beállítandó állapotra (ezáltal lenyomok a Joystickomon egy gombot), majd beállítom, hogy az akció a Magneto1 Set legyen, paraméterként pedig 0-4-ig rendre a magnetos állapotoknak megfelelően. Amire figyeljünk, a 4-es lesz az indítózás. Itt pipáljuk be a Control to repeat while held checkboxot, hogy az indítózás addig tartson, ameddig ott tartjuk a majdani kulcsunkat.

 fsx se fsuipc digital magneto settings

Ez utána már pazarul működik is a szimulátorban, most jöhet az analóg verzió.

Itt már picit játszani kell. Szintén az FSUIPC-t használom, most az Axis Assignment tabra van szükségünk. 

fsx se fsuipc analog magneto settings

Ez annyiban különbözik a kapcsolós verziótól, hogy itt tartományokat kell beállítani. Beállítunk From-To értékeket. Kiválasztjuk a Magneto1 Set eseményt és paraméterhez beírjuk 0-4-ig a megfelelő számot. Az ismétlésre szolgáló checkboxot a 4-es (indítózás) esetben célszerű bepipálni.

Igazából első gondolatra mindegy melyik verziót használjuk, mindkettő jól működik. Az analóg nekem még mindig jobban tetszik, mert az csak egy bemeneti lábat vesz el az Arduinótól. Itt viszont valamilyen kapcsoló mechanikát kellene legyártani, hogy "kattanjon" amikor a potit a megfelelő állapotba tekerjük. Ez egy forgó kapcsolónál már eleve meg van oldva. 

Első körben megpróbálok a forgó kapcsolóra alapozni, aztán meglátjuk hogy lehetne azzal megoldani, hogy 5 láb helyett csak egyet vigyen el a baordunkról. 

A bejegyzés trackback címe:

https://repszim.blog.hu/api/trackback/id/tr7014315615

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása