1.2.3. fejezet, Ultrahangos és infra távolságmérés

Célja ennek a kapcsolásnak, hogy az előző nyomógombos vezérlést felváltsa ultrahangos méréssel, és az Euro Track Simulator 2-ben vezérelje a kamionsofőr látómezőjét.

A kamion szimulátorban több funkció billentyűzettel vezérelhető. Ahhoz, hogy egy egy monitoros megjelenítés mellett sávváltáskor, kanyarodáskor körbe tudjon nézni a vezető, a billentyűzetre kell koncentrálnia, ami eltereli a figyelmét a vezetésről. Ezért olyan egyszerű megoldást kerestem, amivel kisebb figyelemelvonással lehet vezérelni a játékot, vagyis ne kelljen kis gombok megtalálására koncentrálni vezetés közben.

Több lehetséges megoldás közül (nagyobb nyomógombok, közelítés érzékelők, színszenzor) az ultrahangos távolságmérést választottam, ami tökéletesen alkalmas és gazdaságos megoldás. Az érzékelő területe sokkal nagyobb, mint a nyomógomb, így a tekintetet nem kell levenni a monitorról. További előnye, hogy analóg bemenő jelként is használható, akár egy egér, iránytű vagy giroszkóp.

Megvalósítás

Megvalósítás során egy Arduino Nano vezérlőt használtam, és annak USB soros portját a PC-vel történő kommunikációra. Mivel a Nano nem képes billentyűzetként és egérként megjelenni (HID eszközként) a PC csatlakozók között, ezért szoftveresen kellett emulálni a gombnyomást vagy egérmozgást. A program Java nyelven készült, több platformon működik az AWT csomag Robot komponensével (forráskód itt).

Az Arduino projekt egyszerű. Egy rövid (10 mikro szekundum) ultrahang kibocsátást követően várunk a visszhangra, és megmérjük a közben eltelt időt. Ennek a felét szorozzuk a hang terjedési sebességével, és máris megkapjuk a távolságot centiméterben. A mérés pontosságát befolyásolja a hőmérséklet is, erről olvashatsz a Wikipedia oldalon.

char TRIGGERPIN=5;
char ECHOPIN=6;
 
void setup() {
  Serial.begin(9600);
  pinMode(TRIGGERPIN,OUTPUT); 
  pinMode(ECHOPIN,INPUT);
}
 
void loop() {
    long duration, distance;
    digitalWrite(TRIGGERPIN,LOW);
    delayMicroseconds(3);
    digitalWrite(TRIGGERPIN,HIGH);
    delayMicroseconds(12);
    digitalWrite(TRIGGERPIN,LOW);
    duration = pulseIn(ECHOPIN,HIGH);
    distance = 10 * duration / 58.2;
    Serial.print("distance:");
    Serial.print(distance);
    Serial.println(" cm");
    delay(1500);
}

Ezt az értéket beolvassuk az USB soros porton, amit az arduino felé nyitunk, és máris kész a vezérlő projektünk.

Összeszerelve:

Hasonló projektek: