Hirdetés

Számítógépről irányított kamerás robot

Szoftver

Hogyan is kezdődött

A suliban Pascalt tanultunk három évig, most adatbázisokkal és PHP-vel foglalkozunk. Ezek közül egyik sem fogott meg túlságosan. Persze a Pascal tökéletes volt, hogy a programozás alapelveit elsajátítsam és kialakítsak egy bizonyos szintű algoritmikus gondolkodásmódot. Az Arduinoval a CanSat projektünk miatt kerültem kapcsolatba, mondhatni szerelem volt első látásra.

Az, hogy felhasználói felülettel ellátott programokat is kéne írni, csak jóval később, 2013 tavaszán fordult meg a fejemben, ekkor találtam rá a Visual C#-ra. Azért választottam ezt, mert a szintaxisa jóval közelebb állt a már ismert Arduino nyelvhez, mint a Visual C++-nak, amelyet ugyancsak fontolgattam. Azt hiszem, nem jártam rosszul vele.

Hirdetés

Számítógép felőli oldal

A gépen egy általam fejlesztett (nagyon jól hangzik) alkalmazás fut. Ezt a Microsoft Visual Studio Express-ében írtam, Visual C# nyelven. A futtatáshoz a minimális rendszerkövetelmény a .NET keretrendszer 4.5-ös verziójának jelenléte a gépen. A videóban már részletesen bemutatásra került, úgyhogy nem hiszem, hogy a használata túl sok extra magyarázatra szorulna. Nyomom a nyilakat és megy a tank, ennyi.

Van viszont pár szó, amit a "motorháztető alatti" működésről érdemes megemlíteni. Az egész elve nagyon egyszerű. Fogok egy Timert, amely minden 20 milliszekundumban (azaz másodpercenként 50-szer) leellenőrzi, hogy éppen melyik nyilat tartom lenyomva (egyszerre kettővel is elboldogul) és azt, hogy a sebességszabályzó csúszka milyen értéket mutat. Ezután előállít egy kétjegyű számot, amelynek első számjegye az az iránynak megfelelő kód (8 lehetséges irány van, logikusan 1-től 8-ig számozva vagy a STOP, ami 0) a második számjegy meg a sebesség (1 és 9 között).

Iránykódok:
FORWARD 1 //előre
BACKWARD 2 //hátra
RIGHT 3 //helyben forgás
LEFT 4 //helyben forgás
FWD_RIGHT 5 //egyszerre előre és jobbra
FWD_LEFT 6 //egyszerre előre és balra
BWD_RIGHT 7 //egyszerre hátra és jobbra
BWD_LEFT 8 //egyszerre hátra és balra
STOP 0 //egyértelmű

Tehát ha a tank parancsként pl. 17-et kap, akkor előre megy 7-es sebességgel. Gondolom eddig érthető, úgyhogy erről ennyit. Ahhoz, hogy az egész működjön, a Windowsban létre kell hozni egy virtuális soros portot a gép Bluetooth adaptere és a roboté között, ehhez tudunk majd csatlakozni az én applikációmban.

A felhasználói felületet nagyon egyszerű összelegózni, hála a Visual Studio-nak, azonban nincsen beépített modul, ami kezelni tudná a szabványos MJPEG videofolyamokat (ilyet állít elő az előbb is említett IP Webcam applikáció a telefonon). Egy ilyen feldolgozó algoritmust megírni még fényévekre áll az én tudásomtól, így felhasználtam egy már megírt és tökéletesen működő verziót, amely itt érhető el.

Említettem a cikkem elején, hogy milyen jó dolog az objektumorientált programozás. Ennek főleg itt láttam hasznát, mert fogalmam sincs, hogy hogyan működik ez az MJPEG dekóder, de mindössze pár sor egyszerű kód hozzáadásával már működött is a programom.

A program alaphelyzetben.

Arduino felőli oldal

A tanknak már egyszerű dolga van. 10 milliszekundumonként ellenőrzi, hogy jött-e új parancs, és ennek megfelelően állítja a motorok sebességét. Ez a legérdekesebb dolog, mert a motorok tápfeszültsége állandó, tehát annak változtatásával nem lehet sebességet változtatni. Szerencsére pont ilyen esetekre találták ki a PWM (Pulse Width Modulation) technikát, amelyet az Arduino mikroprocesszora is támogat.

Ennek lényege, hogy a tápot magas frekvencián szaggatja, így a motoroknak tehetetlenségük miatt nincs idejük leállni, mielőtt jön az újabb impulzus. Attól függően változik a forgási sebesség, hogy milyen hosszúak az impulzusok. Az Arduino 8 bites PWM-et tud generálni, azaz a motorok sebességét egy 0-tól 255-ig terjedő skálán tudom szabályozni.

PWM

A cikk még nem ért véget, kérlek, lapozz!

Azóta történt

Előzmények