Bluetooth kommunikációval megvalósított Android alapú mobil jármű Szerző neve
Konzulens
Mércse Attila Debreceni Egyetem, Informatika Kar 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 egyre fejlettebb világban mindennapossá vált az emberi életet körülvevő mikrokontrollerek használata. Ugyan ipari szintű alkalmazása régebbre nyúlik vissza, manapság a hétköznapi ember mindennapjaiban is jelen van. Az Arduino egy nyílt forráskódú hardver, ami széles körben elterjedt az egyszerű programozhatósága, és költséghatékonysága miatt. Projektemben egy Arduino UNO panel felhasználásával egy kétkerék-meghajtású jármű került megtervezésre és megépítésre, mely Bluetooth összeköttetéssel – egy előzetes alkalmazás telepítése után – Android rendszert futtató okostelefonról vezérelhető. A projekt végrehajtásához szükséges eszközök külföldi forrásból származnak. Kulcsszavak—Arduino Bluetooth; 2WD; DC
UNO;
Android;
távvezérlés;
BEVEZETŐ
I.
Az Ipar 4.0 fő célkitűzései közé tartozik a rugalmas egyedi gyártás gazdaságossá tétele, az erőforrások hatékony felhasználása, az ergonomikus gyártás, valamint az ügyfelek és üzleti partnerek dinamikus bevonása az értékteremtési láncba. E jövőkép technológiai keretfeltételeit a Dolgok Internetje biztosítja. Ebben a globális hálózatban informatikai eszközökkel kiegészített fizikai rendszerek, azaz beágyazott hardverrel és szoftverrel ellátott intelligens tárgyak kommunikálnak egymással. Ez a jelenség az elkövetkező években egyre nagyobb szerephez jut az ipari gyártás területén. A gyárautomatizálás eddigi elektrotechnikán alapuló és hierarchikus felépítése a jövőben egyre inkább az okos gyárhálózatok és egymással kommunikáló gyártóberendezések irányába tolódik el [2]. 1. ábra: Az internetre csatlakozott eszközök évenkénti növekedése, előrejelzése
Az internet elterjedésének köszönhetően a programozási nyelvek tanulása nagyon könnyeddé vált az ember számára. Emellett az egyre költséghatékonyabban és egyszerűen beszerezhető programozható hardverek elterjedése nagy szerepet játszott abban, hogy otthon elkészíthető eszközök jöjjenek létre. Az Arduino panel megjelenése, valamint a hozzátartozó Arduino IDE fejlesztőkörnyezet nagy teret adott a hardveres programozás iránt érdeklődőknek. Utóbbi segítségével a számítógépen írható és tesztelhető az eszközre szánt programkód, majd USB kábeles kapcsolat létrejötte után feltölthető a megírt kódhalmaz. II.
IPAR 4.0
Az Ipar 4.0 koncepció hajtómotorja a gazdaság és a társadalom egyre gyorsuló digitalizálódása. Ennek alapját digitális hálózatba kapcsolt intelligens rendszerek alkotják, amelyek segítségével túlnyomórészt önszerveződő gyártás válik lehetségessé: az emberek, a gépek, a berendezések, a logisztika és a termékek kölcsönösen kommunikálnak egymással.
Forrás: BI Intelligence Estimates [9]
III.
TERVEZÉSI SZEMPONTOK
A projekt megalkotását a programozási ismeretek megszerzése előzte meg. Az egyetemi oktatás a projekt megkezdése előtt C, C# és Java nyelven történő programozási ismereteket adott. Kihasználva az internet adta lehetőségeket, könnyedé vált a hasznos információk megszerzése az adott eszközzel kapcsolatban is, ezzel elősegítve az Arduino UNO
panel felprogramozását. A projekthez hozzátartoznak a panelhez köthető modulok, melyek elengedhetetlenek voltak a projektben szereplő jármű megfelelő működéséhez. Ezek ismertetése később kerül kifejtésre. 2. ábra: Az Arduino fejlesztőkörnyezete
IV.
A JÁRMŰ FELÉPÍTÉSE
A kétkerék-meghajtású jármű testét egy 20 centiméter hosszúságú műanyag lap adja. Aljára szerelt két DC motor felelős a meghajtásért, melyen egy-egy sárga színű, műanyag, gumival felszerelt kerék található. Megfelelő működésükhöz két darab PWM vezérlésű H-híd felelős, amely ugyanúgy az a jármű teste alatt helyezkedik el. A stabilitásért egy harmadik, szabadon forgó kisebb műanyag kerék funkcionál, ami az eszköz végében helyezkedik el. A jármű testét adó műanyag lap tetején helyezkedik el közvetlenül az összeköttetésért felelős műanyag próbapanel. Ennek végében a tápellátásért felelős hordozható, külső akkumulátor került rögzítésre. Ezen körülbelül 45 fokos szögben támaszkodva a programozható panel található. Az ultrahangos távolságmérő szenzor a test elején, a bluetooth kapcsolatért felelős modul pedig a szerkezet elejére, a távolságmérő szenzor mögé került. V.
A RDUINO SZOFT VER BEMUT AT ÁSA
A program megnyitásakor egy üres programkód látható az alapértelmezettként kisméretű ablakban. Forrás: A tervező által létrehozott tartalom
4. ábra: Az Arduino fejlesztőkörnyezete
A tervezés egyik legfontosabb része a jármű meghajtását képező program megírása volt, melyhez az Arduino által fejlesztett Arduino IDE[1] szoftver került felhasználásra. A program egyik előnye, hogy a hardverre történő feltöltés nélkül is tesztelhető a megírt programkód, ezzel megkerülve a helytelen kód feltöltését. 3. ábra: A kész projekt
Forrás: A tervező által létrehozott tartalom
Forrás: tervezők által létrehozott tartalom
A felső sávban helyezkednek el a gyorsgombok, melyek segítségével egy gombnyomás alatt végezhetőek el az adott funkciók. Az Ellenőrzés a megírt programkódot futtatja le, és ellenőrzi helyességét, azaz hogy a hardverre feltölthető állapotban van-e az adott kód. Ha ez helyesen lefutott, akkor a második gyorsgombbal USB kábeles összeköttetést követően feltölthető az adott eszközre a programkód. A következő három négyzetben található az ’Új’, ’Megnyitás’ valamint a ’Mentés’ funkció. Az ’Új’ gomb megnyomásával egy üres programkód kerül megnyitásra egy új ablakban. A ’Megnyitás’ alatt már meglévő projekt tallózható be, és tovább szerkeszthető, vagy feltölthető az Arduino eszközre a kódhalmaz. A ’Mentés’ gomb a projekt mentésére szolgál,
amely .ino formátumban kerül tárolásra. A projekt minden egyes Arduinora történő feltöltés során mentésre kerül. A szoftver jobb felső sarkában elhelyezkedő ’Soros Monitor’ gomb egy terminál ablakot nyit meg, amely az Arduino által küldött soros adatokat jeleníti meg. Mielőtt az Arduino panel használatára kerül a sor, szükséges az Eszközök/Alaplap legördülő menüjében az Arduino alaplapok közül a használt típust kiválasztani. Ezzel még nincs vége, ugyanis az Eszközök/Port almenüben a megfelelő COM port kiválasztása is szükségeltetik. Ezek megléte elegendő ahhoz, hogy megfelelő kommunikáció történjen a számítógép, és a mikrovezérlő között. VI.
PROGRAMNYELV ISMERT ET ÉSE
Az Arduino egy egyszerű elektronikus áramkörön [11] és egy szoftverfejlesztő környezetén alapuló nyílt (physical computing) platform. Az Arduino programozási nyelve a C alapokon nyugvó C++ implementáció. Az Arduino interaktív tárgyak készítésére használható, számtalan kapcsolót vagy szenzort bemenetként olvasva; lámpák, motorok és egyéb kimenetek kimeríthetetlen választékát képes vezérelni. Az Arduino projektek állhatnak önmagukban, vagy különböző számítógépes programokkal kommunikációval elkészítve. Az Arduino programozási nyelv szerkezete igen egyszerű. A program két fő részből áll, ezek szintaktikája a következő: void setup() { statements; } void loop() { statements; }
void setup() { pinMode(pin, OUTPUT); }
A setup() funkcióhívás után a loop() következik a programban. Ez a programrész az Arduino áramkört működteti, válaszol a külső kérésekre, interakciót hajt végre. void loop(){ digitalWrite(pin, HIGH); delay(l000); digitalWrite(pin, LOW); delay(l000); }
A főprogramban a pin (kiválasztott chipkivezetés) magas állapotba kerül, majd a program vár 1000 msec időt. Ezután a chip kivezetése alacsony szintbe vált, majd újra 1000 msec várakozás következik. És utána ez ismétlődik újra meg újra.[2] Az Android platform abból a célból született, hogy egységes nyílt forrású operációs rendszere legyen a mobil eszközöknek (és itt elsősorban az okostelefon kategóriát kell érteni, mintsem egyszerű mobiltelefonokat). Az elképzelés alapja egy Linux alapú operációs rendszer volt, amelyet úgy alakítanak át, hogy képes legyen problémák nélkül kezelni a mobil eszközök integrált hardvereit, mint például az érintőképernyő, WiFi, HSDPA, Bluetooth. Az első lépéseknél nem volt szó Java nyelvről, azonban a Google 2005 júliusában megvásárolta az Android nevű céget, és új irányt adott a fejlesztésnek: a Linux kernel fölé egy virtuális gép került, amely a felhasználói felület kezeléséért és az alkalmazások futtatásáért felelős. 5. ábra: Az Android rendszert használók növekedése 2010 -2013 között
Ahol a setup() az előkészítést, alapbeállítások inicializálását írja le, míg a loop() a tényleges művelet-végrehajtó, futó rész. Mindkét funkcióra szükség van a programok működéséhez. A setup() funkcionális rész a változók deklarálását tartalmazza, melyet a program legelején kell megtenni. Ez az első funkcióhívás, mely lefut a program elején, de csak egyetlen egyszer és csak ekkor. Itt kell meghatározni például az egyes chip lábak irányát (pinMode utasítás) vagy például a soros kommunikációt inicializálni. A loop() funkció a következő, melyben a felsorolt utasítások folyamatosan ismétlődnek - bemenetek olvasása, kimenetek beállítása, stb. Ez a funkció az Arduino programmagja. A setup() funkció a program indulásakor egyetlen egyszer fut le. Itt kerül a programba például a kivezetések inicializálása, a soros port kezelése. A programba mindenképp be kell illeszteni ezt a funkcióhívást, még ha semmit sem végzünk benne - akkor is! A programban a pin (chip láb) kimenetként kerül beállításra.
Forrás: Gartner [8]
Ez nem ment egyik napról a másikra, és a Google az első évben igen csöndesen dolgozott, 2007 elején kezdtek kiszivárogni olyan hírek, hogy a Google belép a mobil piacra. Az iparági pletykák végül igaznak bizonyultak, bár sok esetben túlzó állításokat és rémhíreket lehetett olvasni a híroldalakon. 2007. november 5-én az Open Handset Alliance bejelentette az Android platformot, kiknek tagjai között több tucat mobil technológiában érdekelt céget megtalálunk, akik érdekeltek egy szabad és nyílt forrású platform bevezetésében.
Napjainkra az Android platform iránt a mobiltelefon és a Tablet gyártók izgalmát leszámítva nagy érdeklődés mutatkozik a gépjárművek fedélzeti számítógépét és navigációját szállító cégek, illetve az ipari automatizálás irányából is, hiszen minden olyan helyen kényelmes az Android, ahol alapvetően kicsi a kijelző, limitáltak az erőforrások és az adatbevitel nem egérrel és/vagy billentyűzettel történik [3]. VII.
könnyedén felhasználható projektekhez. A hat darab láb közül 4 helyre köthető a két motor pozitív és negatív szála. Ezek a nyáklapon A1-B1, valamint A2-B2 jelöléssel láthatóak. A maradék két hely a VCC és a GND. Ezen keresztül kapja a feszültséget a motorvezérlő. Ha feszültség alá kerül, egy piros színű SMD led jelzi a használónak, hogy az eszköz aktív, működőképes. 7. ábra: L9110S DC léptető motor vezérlő H-híd
ESZKÖZÖK ISMERT ET ÉSE
A projektben szereplő eszközök közül a legfontosabb a működésért szolgáló Arduino UNO panel, ami egy Atmega328P mikrovezérlőre épül. Egy 32 lábú chip, mely közül 20 darab láb input/output-ként funkcionál. Ebből 6 darab láb használható analóg bemenetnek. A nyáklapon 4 db furat található, ami a lap rögzítését segíti elő, így könnyedén fixálható. Az eszközön található egy USB Type B csatlakozó, melyen keresztül történik a tápellátás, valamint az adatok ezen keresztül tölthetőek fel a mikrovezérlőre. 6. ábra: Arduino UNO R3 – Atmega328P mikrovezérlővel Forrás: PCB board [1]
A távvezérlést a PmodBT2 perifériás modul valósítja meg, RN-42 mikrochip segítségével. Ez a kis teljesítményű, Bluetooth 2.1/2.0/1.2/1.0 támogatottságú interfész 128 bites titkosítása biztonságos kommunikációt szolgáltat. Az modul iPhone, iPad és iPod Touch készülékekkel is kompatibilis. Ez a tulajdonság kedvező, hiszen számtalan bluetooth eszköz nem képes iOS rendszert futtató készülékekkel kommunikálni. A PmodBT2 UART segítségével kommunikál, és 12 lábat tartalmaz, amelyeket az alábbi ábra mutatja. 8. ábra: RN-42 mikro vezérlő lábkiosztása
Forrás: Arduino UNO [10]
A tápellátás egy külön csatlakozóval is megoldható, ilyenkor adatátvitel nem lehetséges a számítógépről, csupán az ajánlott 5 voltos feszültség alá helyezhető az eszköz. Miután áram alá került, a nyákon található ON felirat melllett egy piros színű SMD led folyamatos világítása jelzi az aktív működést. A bal felső sarokban elhelyezkedő piros gomb megnyomása újraindítja az eszközt. Az Arduino UNO maximum 5 voltos tápfeszülséget képes leadni, ezzel üzemelthetőek a hozzákapcsolt áramkörök. A jármű két kerekét két darab DC motor hajtja meg. Ezek verzérléséért egy L9110S típúsú H-híd szolgál. TTL szintű vezérlést igényel. A motorokat egy-egy IC vezérli. 5 volttól 12 voltig terjedhet a meghajtható motorok áramfelvétele, valamint 800 mA áramerősség leadására képes. Az Arduinoval teljesen kompatibilis, ennek köszönhetően
Forrás: DIGILENT PmodBT 2™ Reference Manual [12]
Jumperek alkalmazásával 4 lehetséges mód alkalmazható, melyek rövidzár esetén lesznek aktívak. Így tehát a 4 féle mód közül lehetőség van az alapértelmezett beállítások visszaállítására, automatikus felderítésére és párosításra,
automatikus csatlakozásra, valamint 9600-as jelarányú kommunikációra. A projektben a felsorolásban legutóbb szereplő módban kerül felhasználásra. TABLE I. JUMPEREK ÉS FUNKCIÓJUK Jumpe r
Description
JP1 (PIO4)
Factory Default
JP2 (PIO3)
Auto Discovery/Pairing
JP3 (PIO6) JP4 (PIO7)
Auto Connect Baud Rate Setting 9600
Projekt utolsó eleme az ultrahangos távolságmérő szenzor. A szenzor Trigger lábán egy 10us -os High (5V) jelet kell adni a mérés megkezdéséhez. A modul automatikusan kiküld nyolc 40 kHz.es négyszög alakú impulzust és automatikusan felismeri a visszaverődött jelet. Az echo láb HIGH állásba billen, és addig marad ebben az állapotban, amíg érzékeli a hang visszaverődését. Amint a visszaverődött jel vételre került, az echo láb LOW állásba kerül. Ez az időtartam kerül mérésre a távolság meghatározásához. A mérés eredménye a mérendő távolság kétszeresének megtételéhez szükséges idő lesz, mert az ultrahang a modul adójától eljut a tárgyig, majd onnan visszaverődve tér vissza a modul vevő szenzoráig.[4] VIII. PROGRAM MEGÍRÁSA Az eszközök beszerzése és bekötése után a program megírása következett az Arduino IDE[1] szoftverben. A program a <SoftwareSerial.h> könyvtár behívásával kezd. A SoftwareSerial könyvtár – ahogy a neve is sugallja – azért került kifejlesztésre hogy a feldolgozóegység terhére a többi digitális csatornán is létre lehessen hozni soros kommunikációs felületeket. Segítségével egyszerre lehetséges a kapcsolódás a számítógéphez és más soros eszközökhöz, kijelzőkhöz, digitális szenzorokhoz, vagy kialakítható soros hálózatot több Arduino között. A szoftveres portok maximális sebessége is 115200 baud lehet, ráadásul megváltoztatható a jel polaritása, ami szélesíti a kompatibilis egységek spektrumát, azonban több port létrehozása esetén az ad atok egyidejű fogadása nem lehetséges.[5] A következő sorban a TX és az RX láb kiosztása következik Az RX az adatok vételéért felel, míg a TX az adatok adását jelenti. Ezt követően a függvények - melyek majd a motor forgatásáért felelnek -, és a lábkiosztások deklarálása következett. Azaz létrejöttek az irányításért felelős függvények, deklarálva lett az ultrahangos távolságmérő szenzor echo és trig lábaihoz tartozó PIN száma, valamint hogy a motorok lábai melyik PIN-hez tartoznak. Ha ezek megtörténtek, a program belép a setup() függvénybe. Ez a függvény csak egyszer fut le a program működése során. A programkódban itt a lábak kimenetre való beállítása történik a pinMode() utasítással. A setup() függvény után a program belép a loop() függvénybe, és folyamatosan ismétlődik, amíg a panel feszültség alatt van. Először a távolságmérő konfigurálása zajlik, és beállításra kerül, hogy a távolságmérő ha 15 centimétertől kisebb értéket mér, állítsa meg a
motorforgatást. A szenzornak 150ms-os késleltetés lett beállítva, ami azt jelenti, hogy ennyi időközönként hajt végre újabb mérés a szenzort. A program soros porton keresztül megkap egy karaktert, amit egy switch elágaztató utasítás dönt el, hogy milyen parancsot kapjon a jármű. A kifejezés a program esetében az input lesz, majd a felírás sorrendjében összehasonlítja a case ágak értékeivel. Ha egyezést talált, akkor végrehajtódik a már megírt függvény, valamint a break utasítással kilép az elágaztató utasításból. Ezek a függvények motorok forgatását szabályozzák, és az alábbiak szerint működnek: Példaként az előremenet kerül leírásra. A program megkapja a az ’1’ karaktert, amely élesíti az előremenet függvényt. A függvényben az M1 és M2 motor egyik lába digitalWrite() utasítással HIGH állapotba kerül, azaz 5V-os feszültséget kap, és forgásnak indul a motor. IX.
A JÁRMŰ MŰKÖDÉSE
Az eszköz a feszültség alá helyezése után egyből bekapcsol, a modulok, szenzorok aktiválódnak. A bluetooth modulon az aktivitást jelző állandó piros fényű led világítása mellett, egy sárga színű led villogása figyelhető meg. Ezzel a modul azt jelzi, hogy nincs kapcsolat egy bluetooth eszközzel sem, és a várja a párosítást. Az okostelefonon a bluetooth bekapcsolását követően az elérhető eszközök között megtalálható az Arduino-hoz kapcsolt RN42-1515 nevezetű modul. Az eszköz párosítása során egy jelszót kér az okostelefonon, ami az alapértelmezettként beállított ’1234’ számsorozat. Ekkor megtörtént az két eszköz párosítása. A jármű irányítása a Google Play áruházban megtalálható Arduino bluetooth controller[6] nevezetű Androidos applikációval valósítható meg. Az alkalmazás megnyitásakor, ha az Androidos eszközön a bluetooth kikapcsolt állapotban van, a program értesítést küld az alkalmazáson keresztül, hogy beszeretné kapcsolni azt. Ekkor a kilistázódik a párosított eszközök neve, közte a már előzőleg párosított RN42-1515 is. Rányomva négy féle mód választható. A Controller módra nyomva az alkalmazás kapcsolódik az eszközhöz. 9. ábra: A jármű irányítását végző applikáció
Forrás: Arduino bluetooth controller [7]
Az applikációban szereplő gomboknak elsőként értéket kell adni. Ez a jobb felső sarokban található fogaskerékre való koppintás után valósítható meg. Az Arduino panelre írt programban az előremenetel az ’1’ parancs küldésével, a
hátramenetel a ’2’, a balra kanyarodás a ’3’, illetve a jobbra kanyarodás a ’4’ paranccsal működik. Ezen kívül a ’0’ parancs a teljesen leállítja a motorok forgását, így a jármű megáll. Ezeket a megfelelő gombokra állítva az eszköz könnyedén irányítható. A parancsokat az alkalmazás bluetooth kapcsolaton keresztül elküldi az Arduinohoz csatlakoztatott bluetooth vevőnek, amely felfogja, és az Arduino programban megírtak szerint jár el. Az applikációban lehetőség nyílik terminál ablakon keresztül is parancsokat adni. Ilyenkor billentyűzetről megkapva a megfelelő karaktert, végrehajtódik a függvény.
Az applikáció alábbi funkcióit használva, lehetőség nyílik a jármű távirányítására a bluetooth kapcsolat hatótávolságán belül. Ha az applikáció elveszíti a jelet, a motor meghajtása megszűnik. X.
ÖSSZEGZÉS
A projektben szereplő jármű megépítése, felprogramozása megvalósításra került. Az eszköz képes bluetooth kapcsolaton keresztül kommunikálni mobileszközzel, és ezáltal távirányítható. XI.
10. ábra: Az alkalmazás terminál ablaka [1]
HIVATKOZÁSOK
Arduino, (2017.March.17). [Online]. Avalable: https://www.arduino.cc/en/main/software [2] IPAR 4.0 - MIT TAKAR A FOGALOM, (2017.March.24). [Online]. Avalable: https://www.lapphungaria.lappgroup.com/aktualis/ipar40/ipar-40-mit-takar-a-fogalom.html [3] Brian W. Evans, R. Cseh, „Arduino Programozási Kézikönyv," (2011.) [4] Android, (2017.04.29). [Online]. Available: http://androidinfo.hu/android-2/ [5] Ultrahangos távolságmérő Raspberry PI-hez + ajándék extrák, (2017.April.15). [Online]. Available: https://www.rpibolt.hu/termek/ultrahangos_tavolsagmero_raspberry_pihez__ajandek_extrak.html [6] Fizikai számítástechnika: elektronikai alapok és Arduino programozás (2017.04.23). [Online]. Available: http://www.tankonyvtar.hu/hu/tartalom/tamop412A/2011 0010_harsanyi_fizikai_szamitastechnika/ch13s02.html [7] Arduino bluetooth controller, (2017.05.17 ). [Online]. Available: https://play.google.com/store/apps/details?id=com.giumig.apps.bluetoot hserialmonitor&hl=hu [8] Gartner, (2017.05.17). [Online]. Available: http://www.gartner.com/technology/home.jsp [9] BI Intelligence Estimates, (2017.05.18). [Online]. Available: http://www.businessinsider.com/intelligence/bi-intelligence-all-accessmembership [10] Arduino UNO, (2017.05.18). [Online]. Available: https://www.arduino.cc/en/Main/ArduinoBoardUno [11] PCB Board, (2017.05.19). [Online]. Available: http://www.ebay.com/ [12] DIGILENT PmodBT2™ Reference Manual, (2017.05.19). [Online]. Available: https://reference.digilentinc.com/pmod/pmod/bt2/ref_manual
Forrás: Arduino bluetooth control [7]