Android 7.1 OS okostelefonnal vezérelt Arduino alapú mobil robot Szerző neve
Konzulens
Kerezsi Csaba Mérnök informatikus Debreceni Egyetem, InformatikaiKar Debrecen, Magyarország
[email protected]
Erdei Timotei István Villamosmérnöki és Mechatronikai Tanszék Debreceni Egyetem, Műszaki Kar Debrecen, Magyarország
[email protected] deb.hu
Absztrakt— Az Arduino egyszerű programozhatóságának, könnyű beszerezhetőségének és árának köszönhetően széles körben elterjedt eszköz szerte a világon sok mérnök és fejlesztő körében. Megjelenése óta nagyon sok fajta elektronikai projektben használták az elektronika vezérlésére, manapság már hétköznapi elektromos eszközök automatizálására, irányítására is használható a kisebb egyszerűbb eszközök vezérlésre mellett. A projektben egy olyan DC motorral meghajtott háromkerekű robot került megtervezésre valamint megépítésre, amelyet Arduino áramkör vezérel. A Bluetooth modul és az okostelefonon lévő applikáció segítségével pedig vezeték nélkül irányítható. Kulcsszavak—Arduino; Bluetooth; HC-06; okostelefon; RemoteXY; DC motor; L293D; Fritzing
I.
BEVEZETŐ
2002–ben az olaszországi Ivrea egyetem tanárának, Massimo Banzinak, mint több másik kollegájának a BASIC nyelvvel kódolt Stamp mikrokontrollert kellet használnia projektjei megvalósítására, amivel két fő gondja is akadt. Először is néhány projekt megvalósításához nem biztosított elegendő számítási kapacitást, valamint eléggé drága volt. Eközben egyik ismerőse az MIT-ról kifejlesztett egy „Processing” nevű nyelvet, ami sokkal felhasználóbarátabb volt [1]. Ennek hatására kezdett el fejleszteni csapatával egy mikrokontrollert vezérlő nyílt forráskódú szoftvert és vele egy olcsó, használatra kész áramkört. 2005-ben, először 300 diák tesztelte le, majd miután több érdekes projekt is megszületett, egyre több ember ismerte meg az Arduinot, ami mára az egész világon elterjedt, több mint 10 000 000 példányt adtak el, és megannyi más elektronikai komponens is megjelent hozzá, amivel még tovább lehet bővíteni a mikrokontroller képességeit [2]. II.
robotnak is rendelkezni kell olyan eszközzel, ami képes kapcsolatot teremteni az okostelefonnal. Erre a célra egy HC06 modul lett kiválasztva. A HC-06 Bluetooth modul egy könnyen használható Bluetooth SPP (Serial Port Protocol) modul, transzparens vezeték nélküli, soros kapcsolat létrehozására tervezve. Ez a soros portú Bluetooth modul teljesen kvalifikált Bluetooth V2.0+EDR (Enhanced Data Rate) 3Mbps moduláció, teljes 2.4GHz rádió adó-vevővel és alapsávval. CSR Blue core 04-External single chip Bluetooth rendszert használ, CMOS technológiával és AFH-val (Adaptive Frequency Hopping Feature) [3]. Másik fő elem az egész robot váza, amin elhelyezkedik a többi alkatrész. Ez a kerekkel és a DC motorokkal együtt, praktikusan egy közös KIT-ben is kapható, így ilyen módon lett beszerezve. Az áramkör megvalósításához szükség volt jumper kábelekre, az elem csatlakozási kábeleire, továbbá egy próbapanelre is, amelyből egy mini méretű lett választva, hiszen ez is elég volt az áramkör megvalósításához, továbbá könnyen elfért a kocsin. Ezen kívül az áramellátás biztosítását kellett megoldani, ami pedig két darab 9 voltos elemmel lett megoldva. Utolsó sorban egy okostelefonra volt szükség, ami már adott volt. 1. ábra: A projekthez szükséges alkatrészek
TERVEZÉSI SZEMPONTOK
Minden projekt első lépése a szükséges eszközök meghatározása, majd beszerzése. A fő, központi eszköz az Arduino UNO R3, ami USB kábellel együtt lett beszerezve. A motor vezérléséhez lehet használni Shieldeket vagy motor vezérlő chipet. Ehhez a projekthez egy L293D motor vezérlő chip lett felhasználva. A bluetooth kapcsolat létrehozás ához a
Forrás: tervező által létrehozott tartalom
III.
AZ ÁRAMKÖR MEGTERVEZÉSE
Miután meg lettek határozva a projekt megvalósításához szükséges eszközök, meg lehetett tervezni a projekt áramkörét. Az áramkör megtervezéséhez megfelelő program a Fritzing [4] volt, ami egy ingyenes letölthető, nyílt forráskódú szoftver, ami számos típusú, fajtájú Arduino eszköz szimulálását támogatja. Az itt elkészített áramkörhöz lehet írni programkódot is és az egész projektet akár más felhasználókkal is meg lehet osztani.
A legdrágább összetevő a kocsi váza, kerekei és motorjai voltak, mivel egyben voltak rendelve, önmagában az Arduino UNO került a legtöbbe. A legolcsóbb alkatrész, amit be kellett szerezni, az L293D motor vezérlő chip lett volna, ám ezeket a chipeket ötös készletben lehetett kapni, így ténylegesen a legolcsóbb eszköz a próbapanel volt.
Egyetlen problémája az volt, hogy a HC-06 Bluetooth modult nem támogatta csak a HC-05 típusút, de a különbség szerencsére csak annyi a két típus között, hogy a HC-05 típusnak kettővel több lába van, viszont, ha ezt a két lábat nem kötjük be sehova a szimulációban, akkor a HC-05 úgy viselkedik, mint a HC-06 modul.
Első lépésként csavarok segítségével rá lett erősítve a két darab DC motor a kocsi alapjára.
V.
ALKATRÉSZEK ÖSSZESZERELÉSE
3. ábra: DC motorok felerősítése az alapra
2. ábra: Fritzing programmal készített áramköri rajz
Forrás: tervező által létrehozott tartalom
Ezt követően az első kerék távtartóinak felcsavarozására került sor, hogy az első kerék egy szintben legyen a két nagyon hátsókerékkel. Majd a távtartókra lett erősítve az elülső kerék. Forrás: tervező által létrehozott tartalom
IV.
4. ábra: Az elülső kerék felszerelése
ALKATRÉSZEK BESZERZÉSE
Az alkatrészek Európa, helyett, Kínából kerültek megrendelésre. A kínai megrendelésnek előnye az volt az európai megrendeléssel szemben, hogy olcsóbban hozzá lehetett jutni a kívánt alkatrészeknek, viszont a másik oldalról nézve, így pár héttel később kerültek kiszállításra, mintha Európából lettek volna rendelve [1. TÁBLÁZAT]. 1.
T ÁBLÁZAT ALKAT RÉSZEK ÉRT ÉKÉNEK ARÁNYA EU ár
CN ár
Megtakarítás
Arduino UNO + USB kábel
2 348 Ft 1 790 Ft
558 Ft
Bluetooth HC-06
1 464 Ft
986 Ft
478 Ft
948 Ft
787 Ft
161 Ft
3 092 Ft 2 261 Ft
831 Ft
L293D chip Váz + motor + kerekek Próbapanel 9V e lem kábelei Jumper kábelek Ö sszesen:
479 Ft
502 Ft
1 744 Ft 1 155 Ft
981 Ft
589 Ft
744 Ft
628 Ft
11 949 Ft 8 202 Ft
1 372 Ft
3 747 Ft
Forrás: tervező által létrehozott tartalom
Miután a DC motorok és az elülső kerék felcsavarozása is megtörtént már csak a hátsó kerekek alapra való helyezése maradt hátra, így elkészült az egész kocsi alapja.
2. 5. ábra: Az elkészült váz
Forrás: tervező által létrehozott tartalom
Ezek után lehet foglalkozni az áramkör megépítésével, melynek első lépése az, hogy el lett helyezve a mini próbapanelen az L293D motorvezérlő chip. Az L293D egy dual H-bridge, melyre azért van szükség, mert alapból az Arduino által generált PWM jellel csak egy irányba lehet meghajtani a motort. A H-bridge 4 áramköri megszakítót tartalmaz, melyeknek segítségével a feszültség polaritását lehet változtatni, így a DC motor az óramutató járásával megegyezően, illetve ellentétesen is tud forogni, magyarul az elkészült kocsi ennek köszönhetően tud majd előre és hátra is menni [5].
Pin szám 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
T ÁBLÁZAT L293D PINJEI [6] Funkció
Né v
Enable pin for Motor 1; active high Input 1 for Motor 1 Output 1 for Motor 1 Ground (0V) Ground (0V) Output 2 for Motor 1 Input 2 for Motor 1 Supply voltage for Motors; 9-12V (up to 36V) Enable pin for Motor 2; active high Input 1 for Motor 1 Output 1 for Motor 1 Ground (0V) Ground (0V) Output 2 for Motor 1 Input2 for Motor 1 Supply voltage; 5V (up to 36V)
Enable 1,2 Input 1 Output 1 Ground Ground Output 2 Input 2 Vcc 2 Enable 3,4 Input 3 Output 3 Ground Ground Output 4 Input 4 Vcc 1
7. ábra: A motor vezérlő pinjeinek bekötése
6. ábra: A motorvezérlő chip elhelyezése
Forrás: tervező által létrehozott tartalom
A pineket és azok funkcióit tartalmazó táblázat [2. TÁBLÁZAT] áttanulmányozása után az L293D motorvezérlő pinjeit beköthető a megfelelő helyekre. Maguk a DC motorok is ilyenkor kerülnek csatlakoztatásra, figyelve arra, hogy ha nem egyformán van bekötve a két motor egymással ellentétes irányban is mehet egyszerre, ezzel a kocsi egyhelyben forgását eredményezve. Ilyenkor már rá lehet helyezni az eddig meglévő áramkört a kocsi vázára.
Forrás: tervező által létrehozott tartalom
A következő lépés a földelések és az 5V „megosztása” volt, mivel ezeket több helyen is szükséges volt használni. Majd ezt követte a 9V-os elem beiktatása az áramkörbe, valamint a HC-06 Bluetooth modul is ekkor lett beleépítve. A Bluetooth modulnál felmerült egy olyan probléma, hogy a Bluetooth modul 3.3V-tal működik, viszont az Arduino UNO 5V pinjére van rákötve. Ennek ellenére megfelelően működik, a DC-DC konvertálás, és az RX és TX (soros kommunikációs
portok) fordított bekötésével, viszont az eszköz hoss zabb élettartama érdekében nem árt ezt az értéket korlátozni [7].
meghatározó tulajdonsága, amivel egy teljesen egyedi grafikus felhasználói interfészt lehet alkotni.
8. ábra: Az elem és a bluetooth modul csatlakoztatása
10. ábra: A grafikus felhasználói interfész szerkesztése
Forrás: tervező által létrehozott tartalom
Az alkatrészek összeszerelésének legutolsó lépése az Arduinot működtető elem hozzácsatolása, valamint az összes kocsi vázán lévő alkatrésznek a vázra való rögzítése, annak érdekében, hogy ne húzódjon szét sehol az áramkör a működés közben. Legfőképpen a DC motorok kábeleinek érintkezéseit kell a lehető legnagyobb gondossággal rögzíteni. 9. ábra: A teljesen összeszerelt kocsi
Forrás: tervező által létrehozott tartalom
Miután kielégítő végeredményt sikerült alkotni be kell állítani, hogy milyen típusú kapcsolaton keresztül kell elérni, milyen típusú eszközt, milyen típusú modul segítségével, valamint milyen fejlesztői környezetre legyen generálva a grafikus felhasználói interfész programkódja. Konkrétan ebben a projektben Bluetooth kapcsolaton keresztül kell elérni egy Arduino UNO-t, HC-06 Bluetooth modul segítségével és Arduino kompatibilisan. 11. ábra: Megfelelő komponensek kiválasztása
Forrás: tervező által létrehozott tartalom
VI.
INTERFACE MEGALKOTÁSA
Az Arduino robot és az okostelefon kapcsolatát a RemoteXY nevű ingyenes applikációval lehetett megvalósítani, mely többek között az Arduino számára biztosít kapcsolatot az okostelefonon lévő applikáció segítségével Bluetooth vagy akár Wi-Fi kapcsolaton keresztül is robot kocsik vagy smart home vezérlésére. Az első lépés a weboldalra történő regisztráció, melyhez elegendő egy e-mail cím és egy jelszó. Ezt követően lehet belépni és el lehet kezdeni a grafikus felület szerkesztését. A szerkesztőben ki lehet választani a projekthez szükséges komponenseket, majd a komponensek tetszőleges elhelyezése után beállítható azok színe, mérete, címkéje, valamint egyéb
Forrás: tervező által létrehozott tartalom
Ezek után a weboldalon már csak pár lépés marad hátra. Először a weboldal legenerálja a programkódot, amit le kell tölteni majd később megnyitható az Arduino IDE-ben. Továbbá le kell tölteni a RemoteXY könyvtárat, majd installálni kell az Arduino IDE-hez oly módon, hogy a letöltött könyvtárat be kell másolni az Arduino IDE libraries nevü könyvtárába. Végül le kell tölteni a kívánt mobil eszközre a RemoteXY ingyenes applikációt, ami az PlayStore-ból vagy
AppStore-ból. Itt meg kell jegyezni, hogy az olyan mobil eszközök, melyeken iOS fut, jelenleg nem támogatják a HC06 modullal való kapcsolatot. VII.
PROGRAMKÓD ÍRÁSA
12. ábra: RemoteXY által generált kódrészlet
Forrás: tervező által létrehozott tartalom
Az egész Arduino programkód vázát már a RemoteXY weboldalon megszerkesztett grafikus felhasználói interfész miatt legenerált forráskód képezi. Ebben a legenerált kódrészletben található például a kapcsolódás mód beállítása, ami ugye soros kapcsolat, mivel a HC-06 Bluetooth modul ezt használja. Ezen kívül hozzá kellett rendelni a megfelelő neveket a megfelelő soros pinekhez (2,3), valamint beállítani a kapcsolat sebességét, ami jelen esetben 9600bit/s értéket kapott. Továbbá ebben a kódrészletben került meghívás ra a korábban telepített, működéshez kiemelten fontos RemoteXY könyvtár is. Első tényleges programozási lépésként definiálni kellett az összes további Arduinon lévő pint, ami még szerepet játs zik az áramkörben felépítésében. A switch pint, a jobb motor két digitális és PWM pinjét, majd a bal motor két digitális pinjét és PWM pinjét. Mivel a jobb és bal motorokhoz több pin is tartozik, a további egyszerűsítés végett külön jobb és bal motor nevű tömbökbe lehet ezeket a paramétereket tárolni. A pinek elnevezésével és tömbösítésével egyszerűbben, átláthatóbban lehet hivatkozni rájuk a programkód további részeiben.
Ezután következik az Arduino programkód egyik nagyon fontos része. Létre kell hozni egy eljárást, ami ebben a projektben a Wheel nevet kapta. Az eljárás két paramétert kap meg. Az első paraméterérként az eljárás megkap egy tömb mutatót, ami vagy a korábban létrehozott bal motor vagy a jobb motor pinjeinek paramétereit tartartalmazza. Második paraméterként pedig egy v értéket kap az eljárás mely értéknek meghatározásának módjára a programkód később következő részében derül majd fény. Az eljárás magjában először is a v értékét korlátok közé kell szorítani. Ha a v értéke nagyobb mint 100, akkor az érték 100-ra, ha kisebb, mint -100, akkor -100-ra. Ezekre a korlátozáskora azért van szükség mert a maximum érték a digitális jelnél, a később következő analogWrite paraméterénél 255 csak kisebb lehet. Ezt követi háromdarab „if” ág, ami az egyik oldalon lévő kerék háromfajta működését fogja jelképezni. Ha az érték nagyobb mint 0, akkor motor[0], azaz a jobb motorhoz tartozó 8-as pin vagy a bal motorhoz tartozó 6-os pin kap feszültséget, míg a motor[1], azaz a jobb motor 9es pinje vagy a bal motor 7-es pinje nem kap. Ebben az esetben a motor előre fogja forgatni a kerekeket. A második „if” ág azt az esetet vizsgálja mikor a v értéke kisebb, mint 0, azaz negatív. Ilyenkor a fentebb említett, motor[0]-hoz tartozó pinek nem kapnak feszültséget és a motor[1]-hez tartozó pinek kapnak. Ennek hatására fogja a motor a kereket hátrafele meghajtani. Figyelni kell arra, hogy ekkor az analogWrite második paraméternél a v negatív önmagában negatív érték, így még külön negálni kell az értéket ahhoz, hogy pozitív érték legyen és ezáltal meghajtsa a motort. Az utolsó ág azzal az esettel foglalkozik, amikor se nem nagyobb 0-nál és se nem kisebb 0-nál az érték, azaz a v pontosan 0. Ez az az állapot mikor a motor egyáltalán nem kap energiát, így a hozzá tartozó kerék nem forog. 14. ábra: A motor irányítását végző eljárás
13. ábra: Pinek definiálása
Forrás: tervező által létrehozott tartalom
Forrás: tervező által létrehozott tartalom
A programkód utolsó két része a setup, valamint a loop rész. A setup egy inicializáló rész, ami mindig egyszer fut le. A legtöbb esetben, mint ebben a projektben is a pin módok kerülnek beállításra, mindegyik outputként. A loop részben pedig folyamatosan ismétlődő utasítások találhatóak. A RemoteXY megnézi, hogy a grafikus felhasználói interfészen
be van a kapcsolva a gomb, és ha igen, akkor a PIN_SWITCH_1-et magas értékre állítja. Továbbá a joystick kordinátáit is ez a rész figyeli folyamatosan és továbbítja a jobb, illetve a bal kerék paramétereit a korábban megírt Wheel eljáráshoz.
Az okostelefon ezután csatlakozik az Arduinohoz a mellékelt ábrán szemléltetett módon. Maga a grafikus felhasználói interfész is ilyenkor kerül át a telefonra, mivel az alapból az Arduinon található. 17. ábra: RemoteXY működését bemutató folyamatábra
15. ábra: A kód setup() és loop() részei
Forrás: remotexy.com/en/help Forrás: tervező által létrehozott tartalom
VIII. ÖSSZEHANGOLÁS A projekt utolsó teendője az okostelefon és az kocsi összehangolása volt. Miután a megfelelő COM porttal az USB kábelen keresztül rá lett téve a lefordított programkód az Arduino UNO-ra, már csak áram alá kellett helyezni. Ezután az okostelefonon kellett elindítani a RemoteXY alkalmazást, majd kiválasztani a csatlakozási típust, és várni, hogy az okostelefon felismerje a 30 láb közelben tartózkodó kocsi jelét. Ezt követően párosítani kellett az eszközöket az alapértelmezett 1234 kóddal. 16. ábra: A Bluetooth-szal összehangolt okostelefon
IX.
A kocsi összeszerelése, távvezérlése sikeresen megvalósításra került, mely így Bluetooth kapcsolaton keresztül 30 láb hatótávolságon belül irányítható kétféle módon. A kétféle irányítás tesztelése után az a következtetés vonható le, hogy a giroszkópos irányítás nagyon precíz mozdulatokat igényel, ahhoz, hogy a kocsit magabiztosan lehessen irányítani, így tanácsos a kézi vezérlést alkalmazni. X. [1]
[2] [3]
[4] [5] [6]
[7]
Forrás: tervező által létrehozott tartalom
ÖSSZEFOGLALÁS
HIVATKOZÁSOK
John, (2017, Apr 26). Story and History of Development of Arduino [Online]. Available: http://www.circuitstoday.com/story-and-history-ofdevelopment -of-arduino Vikram Puri, Anand Nayyar, Dac-Nhuong Le, „Handbook of ArduinoT echnical and Practice,” Scholar Press, 2017. George IPAT E, Gheorghe Voicu, Gabriel Alexandru Constantin, Filip Ilie, Paule T udor, „RESEARCH ON WIRELESSLY CONT ROLLED CONVEYOR BELT WITH ANDROID APPLICATION,” Conference on T hermal Equipment, Renewable Energy and Rural Development, 2016. Fritzing, (2017, Apr 29). [Online]. Avalable: http://fritzing.org/download/ Petru Livinti, Mazen Ghandour, „PWM control of a DC motor used to drive a conveyor belt,” Procedia Engineering, 2015. Kushagara, (2017, May 10). L293D [Online]. Available: https://www.engineersgarage.com/electronic-components/l293d-motordriver-ic M. T odica, „Controlling Arduino with Blynk via Bluetooth,” 2016.