Cessna 172 cockpit otthon

Építsünk szimulátort

Arduino Micro - USB Joystick

2018. október 22. - C172Peti

Összraktam egy Arduino - Joystickot, amit a Windows felismer és pazarul kezel, ennek a (meglepően gyors) tesztnek a folyamatát írom most le.

arduino micro joystick

Mindez egy rövid videóban: 

 Szükséges hardver:

  1. Arduino Leonardo vagy Micro
  2. 10K potméter (lehet ez 20k, 100k is)
  3. breadboard
  4. vezetékek
  5. Micróhoz általában külön kell USB kábelt szerezni, a Leonardóhoz szoktak adni

Szükséges szoftver:

  1. Arduino IDE - ArduinoJoystickLibrary-vel

Hardver

Pakoljuk össze a hardvert először. Ha Arduino Micro lett a választás, a breadbordon helyezzük el. Szúrjuk le a potmétert, egy kis breadboardon még pont elfér a Micro mellett.  

A poti egyik szélső lábát kössük össze az Arduino föld (GND) lábával, a másik szélső lába menjen az Arduino 5V-ot leadó lábára (VCC), a poti középső lábát pedig az Arduino A0 lábával.

Kész is a hardver! Már csak egy USB kábel kell és dughatjuk a gépre.

Szoftver

Indítsuk el az Arduino fejlesztő környezetét. Egyből egy üres vázlattal kezd, innen törölhetünk mindent, nem sok kódra van szükségünk.

Javaslom, hogy mielőtt belevágunk a világmegváltó programozásba, mindig állítsuk be, hogy milyen eszközre fejlesztünk. Ezt a Tools/Board menüpontban tehetjük meg. Kilistázza a lehetséges Arduino boardokat, válaszzuk ki a sajátunkat. Ha már rádugtuk a gépre, akkor a Tools/Port menüpontnál meg is fog jelenni a COM port, ahova csatlakozik az Arduinónk. Válasszuk ki!

... és akkor jöhet a programozós rész ...

Programozzunk

Egy nagyon egyszerű programmal kezdünk, csak lássuk végre működni :)

A feladata a programnak annyi, hogy az USB-n rádugott számítógépnek azt mondja magáról, hogy ő egy Joystick, és az egyik tengelyének az értékét úgy változtassa, ahogy tekerjük a potit (pl tolóerőt adunk a gépünknek). Picit visszafogjuk a 16Mhz-es kütyünket és teszünk bele egy korlátot, hogy 25ms várakozásokkal küldje csak a gépnek a tolóerőkarunk aktuális pozícióját. Ez azt jelenti, hogy másodpercenként 40szer fogja ellenőrizni, hogy hol áll a potméter és elküldeni azt a gép felé.

Meg kell mondanunk a program elején, hogy használni akarjuk a Joystick libraryt. Aztán példányosítunk egy Joystickot, majd beállítunk néhány változót, amit arra fogunk használni, hogy ne folyamatosan, csak 25 ezredmásodpercenként küldjünk adatot. Ez így néz ki:

#include "Joystick.h"

Joystick_ Joystick;

const unsigned long cycleDelta = 25;
unsigned long nextTime = 0;

Most jön a setup(). Erről azt kell tudni, hogy egyetlen egyszer fut le, amikor elindult az Arduino (amikor áramot kap, inicializálja magát és meghívja ezt a funkciót). Itt végzünk el minden olyan beállítást, ami ahhoz szükséges, hogy a programunk ciklikusan tudjon utána futni. 

Itt beállítjuk, hogy a Throttle tengely értékkészlete 0-1023 tartományban lesz. Egyszerűen azért ez az intervallum, mert amikor az Arduino A0 lábáról analóg értéket olvasunk be, pont ezt a tartományt kapjuk vissza. 0 jelenti, hogy a potméter az egyik végállásáig van tekerve, 1023 pedig azt, hogy a másik végállásig.

Ahogy ezt beállítottuk, "megkérjük" az Arduinót, hogy mesélje el a gépnek, ő valójában egy Joystick.

void setup() {

  Joystick.setThrottleRange(0, 1023);

  //auto send mode false
  Joystick.begin(false);
}

Ez után jön a loop(). Ez a programunk vezérlője voltaképpen. Ez futkározik körbe-körbe mindaddig, amíg az Arduino áramot kap. Voltaképp itt kell a logikát lefejlesztenünk.

A ciklusban mindig kiszámoljuk, mi az a következő időpont (25ms-el később), amikor megint küldeni kell adatot a gépnek (nextTime). Minden egyes ciklusban ellenőrizzük, hogy eltelt-e már 25ms. Ha eltelt, akkor beállítjuk a tolóerőt arra az értékre, ahol épp áll a potméter, ami az A0-s lábra van kötve és elküldjük a joystick aktuális állapotát.

void loop() {

  if (millis() >= nextTime) {

    Joystick.setThrottle(analogRead(A0));

    Joystick.sendState();

    nextTime = millis() + cycleDelta;
  }

}

Ezek után nincs más hátra, mint a szerkesztő mező felett található "jobbra nyíl" megnyomásával feltöltjük az Arduinóra a programot. A sikeres feltöltés után a kütyü újraindul és a Windows örömmel értesít minket, hogy egy új játékvezérlő lett csatlakoztatva.

Nyissuk meg az USB Játékvezérlőket nagyszerű windowsunkban, tulajdonságokra kattintva látjuk is, hogy mennyi tengellyel és nyomógombbal rendelkezik.

A potmétert tekergetve pedig észrevehetjük ahogy a Throttle tengely értéke pontosan a poti állapotát adja vissza.

Ennyi az egész, csináltunk egy saját USB Joystickot, semmi sem állíthat meg minket, hogy egy teljes szimulátort építsünk! :)

 

A bejegyzés trackback címe:

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

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.