mBot

A robotok programozása talán a leglátványosabb, és számos lehetőség közül válogathatunk. Ez az oldal az mBot robot programozását mutatja be.

Bevezető

Blokk programozható robotok

Az alábbi lehetőségek közül válogathatunk:

  • LEGO Mindstorms: valószínűleg ez a legáltalánosabb megoldás, melyben magát a robotot is mi magunk építhetjük meg. A legnagyobb hátránya az ára: az alapcsomag is több mint százezer forint, egy-egy kiegészítő szenzor pedig több tízezer forintba is kerülhet. Anyagi okok miatt egyelőre ezzel nincs tapasztalatunk, viszont kiváló magyar nyelvű összefoglaló olvasható itt: http://www.hdidakt.hu/adat/dw_anyagok/dw_74.pdf.
  • mBot: közösségi finanszírozással megvalósult, kifejezetten gyerekek számára gyártott programozható robot. A Scratch-ben megszokott módon, blokkok segítségével tudjuk programozni. Arduino alapú. Az ára 100$ körül mozog, így elérhetőnek mondható az átlagember számára is. (Vigyázzunk, hogy a Makeblock termékét vásároljuk, és ne csábuljunk el egy olcsóbb,mBot-ra hasonlító, lent részletezett klónnak.) A kiegészítők pár dollárért megvásárolhatók, ill. ajánlott a 30$-ért beszerezhető, "Makeblock 94010 Electronic Add-on Pack for Starter Robot Kit" keresőkulccsal megtalálható csomag beszerzése, amely néhány hasznos szenzor és egy 4 szegmenses kijelző mellett tartalmaz egy RJ25-ös adaptert, melynek segítségével a natív Arduino érzékelőket is rá tudjuk kapcsolni.
  • Egyéb Makeblock termékek:
    • Codey Rocky: mBlock 5-tel programozható, sok szenzort tartalmaz, ára kb. 120$.
    • Airblock: programozható drón, ára kb. 260$.
  • mBot klónok: ezek hasonlítanak az eredet mBotra, valamelyest olcsóbbak is annál:
    • QBot: a leírás szerint a Scratch alapú WeMake rendszerrel programozható. Távirányítója nincs, de van rajta 2 mátrix LED. Az ára írás pillanatában 60$.
    • XKBot: megtévesztésig hasonlít az mBot-ra, viszont csak egy saját, kizárólag Androidon futó, és kizárólag kínai nyelvű szoftverrel programozható, de azt is csak elvileg, mert a gyakorlatban nálam folyton elszállt. Az ára 55$, de sajnos kidobott pénz.
    • Wuli: WALL-E-ra hasonlító robot, XR Scratch nevű rendszerrel programozható. Ára 80$.
    • LOBOT: micro:bit alapú robot, ez tehát a micro:bit-tel programozható, a Scratch-csel nem. Ára 57$.
    • micro:bit alapú másik robot távirányítóval: 80$.
  • MITU Builder: a robotot itt is mi magunk állíthatjuk össze egy közel ezer darabos, LEGO-kompatibilis építőkockákból. Ez már jóval olcsóbb, mint a LEGO Mindstorms, elérhető árú. Igen látványos az, ahogy két keréken, beépített giroszkóp segítségével egyensúlyoz, ugyanakkor ez hátránya is: az egyensúlyozás miatt lehetetlen a precíz mozgatása. Programozni egy Androidos alkalmazással lehet, amely hasonló utasításokat tartalmaz, mint a Scratch, viszont nagyon nehézkes a felülete, nagyobb programokat nemigazán tudunk vele készíteni. Alapértelmezésben van benne pár szenzor (a már említett giroszkóp mellett van benne hang- és fényérzékelő), és hangot is tud kiadni. Lehet hozzá vásárolni színérzékelőt, és a specifikációban ultrahangos távolságérzékelőről is szó van, ezt a kiegészítőt viszont még nem gyártotta le a gyártó. Egyéb kiegészítőkről nincs szó. Vélemény: nem sok hiányzik ahhoz, hogy igazán hasznos kis robot legyen. Kellene egy jobban használható, lehetőleg PC-s, mBlock-hoz hasonló programozói felület, jó lenne, ha kompatibilis lenne az Arduino-s kiegészítőkkel, valamint lenne egy harmadik támasztéka, ill. ha létezne hozzá ultrahangos távolságérzékelő, akkor felülről kompatibilis lenne az mBot-tal, és használhatóság szempontjából megközelítené s LEGO Mindstorms-t (feltehetőleg ez volt a cél). Jelen állapotában viszont oktatásra sajnos csak nagyon korlátozottan alkalmas.

Fő funkciók

Mindegyik robot tudása más és már, viszont számos közös elem van köztük. A leggyakoribbakat igyekszem bemutatni.

  • Távirányító: a robotok mindegyike valami módon irányítható. Ez történhet mobil alkalmazás segítségével (tipikusan bluetooth-on keresztül) vagy távirányítóval (leggyakrabban infravörös (IR) technológiával), esetleg mindkettővel. Ez mindegyik robot jellemzője.
  • Pályabejáró: az egyszerűbb robotokat csak saját mobilos alkalmazással tudjuk kezelni, ezeknél viszont szinte minden esetben létezik ún. pályabejáró mód: a képernyőre rárajzoljuk, hogy milyen utat szeretnénk bejáratni a robotunkkal, és az bejárja.
  • Vonalkövető: a vonalkövető funkció egy általános és igen látványos elem, melyet a legtöbb robot tudja. Ebben van környezet érzékelés (a robot "látja" a követendő vonalat), valamint némi intelligencia is.
  • Akadályelkerülő: a legtöbb robot tartalmaz ultrahangos távolságérzékelőt, ráadásul mivel ez két szemre hasonlít leginkább, a robotokat úgy építik fel, mintha ez lenne a "szeme". Az akadályelkerülő módban a robot (látszólag) össze-vissza halad, miközben elkerüli az akadályokat.
  • Programozási mód: a leghasznosabb módja a robotnak egyértelműen a programozhatóság. Itt bukik ki a legnagyobb különbség az olcsóbb és drágább eszközök között: az előbbieket tipikusan csak a saját okostelefonos vagy tabletes alkalmazással lehet programozni, igen korlátozott mértékben, kissé nehézkesen, míg az utóbbiakat általában személyi számítógépen futó keretrendszerben tudjuk programozni, és általában a lehetőségek tárháza (pl. az utasításkészlet, a program lehetséges hossza, a fejlesztői környezet) is nagyobb, jobb. Az alábbi fejezet erről szól.

Programozási alapelvek

A felsorolt robotok szinte mindegyikének saját programozási rendszere van, az alapelvek viszont mindegyiknél azonosak. Ezek összefoglalása található ebben az alfejezetben.

Belépési pont

Mindegyik programrészlet lefutásának van egy kiváltó oka. Ez lehet pl. az, hogy felkapcsoltuk a robotot (ez a leggyakoribb), de bizonyos események bekövetkezte is (pl. ez üzenet érkezése, egy nyomógomb lenyomása stb.). A LEGO nem támogatja a közvetlen üzenet vezérlést, más rendszerek kisebb-nagyobb mértékben igen.

Vezérlő utasítások

Mindegyik programozási nyelv tartalmaz vezérlő utasításokat. A feltételkezelés a legalapvetőbb programozási struktúra; nélküle nem számítógép a számítógép, ill. fordítva: a feltételkezelés képessége teszi számítógéppé a számítógépet. A másik gyakori struktúra a ciklus, ami a háttérben vissza van vezetve a feltételkezelésre. A ciklus adott utasítások ismétlését jelenti. Többféle ciklus létezik: végtelen, fix hosszúságú, adott feltétel bekövetkeztéig futó stb.

Kimenetek

Mindegyik robotnak vannak kimenetei, melyek közül a leggyakoribbak az alábbiak:

  • Lámpa: általában LED. Leggyakrabban tesztelési céllal használjuk, leginkább hogy meggyőződjünk arról, hogy valóban működik a programunk.
  • Motor: a legtöbb robotban legalább két motor található: az egyik az egyik kereket forgatja, a másik a másikat. Ha egyforma sebességgel forog mindkét motor előre, akkor a robot egyenletesen halad előre. Ha az egyik előre halad, a másik hátra, akkor a robot megfordul a saját tengelye körül. Ha az egyik áll, a másik mozog, akkor kört ír le. Ha mindkettő előre mozog, de eltérő sebességgel, akkor kanyarodik. Tolatni pedig úgy tudunk, hogy minkét motort hátrafelé mozgatjuk. A robotok mozgatása annyira alapvető, hogy általában az alap mozgatásoknak külön utasításokat hoztak létre, de végső soron minden mozgás forma visszavezethető a két motor megfelelő forgatására.
  • Kijelző: a legtöbb robot nem tartalmaz kijelzőt, de egy 4 számjegyes kijelző többnyire elérhető áron megvásárolható. Néhány típushoz egyszerűbb grafikus képernyőt is be tudunk szerezni. Információ kiírására használhatjuk.
  • Hang lejátszó: a legtöbb robot képes valamiféle hangot kiadni, egyszerű dallamokat lejátszani.

Bemenetek

Érzékelőknek vagy szenzoroknak is hívjuk őket (angolul a sensor szó érzékelőt jelent). Az alábbi bemenetek vannak jelen legtöbb robotnál:

  • Nyomógomb: valamiféle nyomógomb a legtöbb roboton található. Általában tesztelési céllal szoktuk használni: ha (feltétel!) be van nyomva, akkor hajtson végre valamilyen műveletet.
  • Infravörös (IR) érzékelő: a legtöbb robothoz adnak távirányítót, amelyek tipikusan infravörös jelet sugároznak, és ezt a robot megfelelő érzékelője érzékeli. Tipikus felhasználása tehát a távirányítás: egy végtelen ciklusban figyeljük a bejövő jeleket, és a beérkező jeltől függően hajt végre műveleteket a robot, pl. mozog adott irányba.
  • Ultrahangos távolság érzékelő: segítségével a legközelebbi akadály távolságát kapjuk meg, a legtöbb esetben centiméterben. Tipikus felhasználása: ha a robot túl közel ért egy akadályhoz (pl. a távolság kisebb mint 10 cm), akkor álljon meg vagy forduljon el. Működési elve a következő: a robot egyik "szeme" az emberi fül számára nem hallható, magas frekvenciájú (kb. 20000 Hz) hangot bocsát ki, ami a legközelebbi akadályról visszapattan, és ezt a másik "szeme" érzékeli. A jel kibocsátása és megérkezése között eltelt idő, valamint a hangsebesség (340 m/s) segítéségével meg lehet határozni az akadály távolságát.
  • Vonalkövető: a legtöbb roboton alul találunk két színérzékelőt, ami feketét és fehéret tud érzékelni, és ezek segítségével tudunk olyan programot készíteni, amely a beolvasott értékeket felhasználva kormányozza a robotot.
  • Fényerő érzékelő: a környezet fényerejét tudjuk ennek segítségével beolvasni.
  • Rádiójelek, bluetooth: ez is felfoghatóak egyfajta érzékelőkként, hiszen bemenő jeleket kapunk a segítségükkel. A lehetőségek szinte végtelen tárháza nyílik meg ennek segítségével előttünk: segítségével tudunk kommunikálni telefonnal, tablettel, számítógéppel, más robotokkal stb.
  • Környezet érzékelők: hőmérséklet, páratartalom, légnyomás, mágneses érerősség stb.

Még nagyon sokféle érzékelő létezik; a fent felsoroltak a leggyakoribbak. Általában a beolvasott értékek függvényében hajtunk végre műveleteket.

Változók és műveletek

A programozási rendszerek mindegyike tartalmaz valamiféle változót, ahova adatok kerülnek, és ez alól a robotok sem kivételek. A gyerekek száméra készített, blokkok segítségével programozható robotokban általában a szokásos programozási nyelvekben fellelhető típusoknak csak egy része található meg, melyek a következők: szám, szöveg, logikai, ill. a felsorolt típusokból álló listák. Általában a szenzorokból beolvasott értékeket szoktuk változóba menteni, ahonnan később kiolvassuk, és a beolvasott értéktől függően hajtunk végre műveleteket. (Megjegyzés: a LEGO Mindstorms-ban ritkábban kell használnunk a változókat, mivel a programozási környezet lehetővé teszi az azonnali felhasználást, a háttérben viszont ott is minden bizonnyal ideglenes változók tömkelege jön létre.)

A változókkal különféle műveleteket tudunk végrehajtani, típustól függően:

  • Számok: a szokásos matematikai műveletek: összeadás, kivonás, szorzás, osztás, egész számok esetén maradékos osztás, hatványozás, gyökvonás, szögfüggvények stb. A számokat össze tudjuk hasonlítani egy másik számmal. A legtöbb esetben létezik véletlen szám generátor is.
  • Szöveg: össze lehet egymást kapcsolni, a szöveg egy részét (akár adott pozíción található betűt) kiolvasni, azt megváltoztatni stb.
  • Logikai: a legtöbb rendszer támogatja az olyan alapvető logikai műveleteket, mint a logika és, logikai vagy, logikai kizáró vagy, logikai negáció stb.
  • Listák: a legtöbb rendszer támogatja az olyan alapvető lista műveleteket, mint a lista feltöltése, adott elem lekérdezése, módosítása, elem beszúrása a végére stb.

Blokkok

A legtöbb robot lehetővé teszi saját blokkok létrehozását. Többnyire ezt a haladó műveletek között helyezkedik el. Egy blokk tetszőleges számú utasítást tartalmazhat. Olyan utasításokból érdemes blokkot készíteni, amelyet több helyről használunk. A szöveges programozási nyelvekben a blokk megfelelője az eljárás vagy függvény, ami alapvető programozási komponensnek számít szinte mindegyik programozási nyelvben, így - habár a használata kezdetben talán nem egyértelmű - előbb-utóbb érdemes ezzel a lehetőséggel is megismerkedni.

Haladó utasítások

Szinte minden robot esetén elkülönítenek olyan utasításokat, amelyeket csak a haladóknak szánnak. Általában ide tartoznak a fájl műveletek végrehajtása, rádiójelek küldése és fogadása stb. A legtöbb robot lehetővé teszi azt, hogy több szál is fusson egyszerre (ami a gyakorlatban általában szimulált többszálúságot jelent); ez is felfogható egyfajta haladó technikának.

mBot Beállítások

mbot.jpg

Az mBot robotot programozni grafikusan a mBlock rendszerrel lehetséges, ami a http://www.mblock.cc/software/ oldalról letölthető személyi számítógépre és mobilalkalmazásként is. Ez a rendszer Scratch alapokon nyugszik, valójában annak Arduino alapú kiterjesztése. (Megjegyzés: az írás pillanatában a szoftvernek két fő változata van: a 3-as és az 5-ös. Az 5-ös verziót nem sikerült működésre bírnom, így javaslom a 3-as verzió használatát, pl ezt: https://dl.makeblock.com/mBlock_win_V3.4.12.exe.)

Miután összeszereltük a robotot, feltelepítettük a programot tegyük a következőt:
*Telepítsük a meghajtót: Connect → Install Arduino Driver

  • Kapcsoljuk be ezt: Boards → mBot (mCore)
  • Extensions → Makeblock
  • Kapcsoljuk be a robotot, és kapcsoljuk rá a számítógépre az USB kábellel
  • Kapcsolódjunk a robotra: Connect → Serial Port → COM8 (ez a végén eltérhet)
  • Készítsük el első programunkat. A Robots szekcióban az mBot Program a fő belépési pont. A set led on board a roboton levő lámpákat kapcsolja be; első programunknak ez megfelel.
elso.png
  • Jobb kattintás a programon → upload to arduino.
  • Itt megjelenik a generált kód; standard Arduino C++ kód készül.
  • Kattintsunk az Upload to Arduino gombra. Ha minden jól ment, a két első lámpa most pirosan világít.

Alap példaprogramok találhatóak itt: http://www.mblock.cc/example/introduction/.

Alapértelmezésben az alábbi érzékelők állnak rendelkezésre:

  • fényérzékelő magára a lapra integrálva,
  • vonalkövető a 2-es számú porton,
  • ultrahangos távolság érzékelő a 3-as számú porton,
  • infravörös távirányító érzékelő,
  • infravörös hullámok segítéségével tudnak a robotok üzenetet küldeni-fogadni,
  • van rajta egy nyomógomb, amit érzékel, ha lenyomunk.

Viszont igen sok egyéb külső érzékelőt tudunk rácsatlakoztatni; egyrészt olyanokat, amelyekre alapból fel van készítve a keretrendszer, másrészt olyanokat is, melyekre még nincs.

Alapfunkciók

Távirányítós kisautó

Első „igazi” programunkban távirányítani fogjuk a robotot. A program a következőképpen működik: ha a felfele gomb megnyomását érzékeli a robot (IR remote ↑ pressed), akkor előre indul (run forward at speed 100; túl alacsony sebességet ne adjunk, mert nem indul el; alacsony sebességet csak magasabb sebességről képes elérni lassítva, de nem nulláról gyorsítva), majd megvárjuk, hogy ne legyen megnyomva. Hasonlóan működik a le, a balra és a jobbra gomb lenyomásának érzékelése is. Ha nincs gomb lenyomva, akkor a robot megáll. A kód az alábbi:

taviranyitas.png

Vonalkövető

A legegyszerűbb vonalkövető ezen az oldalon van leírva: http://www.mblock.cc/example/primary-line-patroling-program/. Működését a következő táblázat foglalja össze:

Bal oldali érzékelő Jobb oldali érzékelő Cselekedet
fekete fekete előre halad
fekete fehér balra fordul
fehér fekete jobbra fordul
fehér fehér hátra halad

A fenti oldalról másolt kódrészlet az alábbi:

vonalkoveto_egyszeru.png

Habár ez egyszerű és végső soron működik, működése igen „darabos”: gyakran előre-hátra megy. Ezt fogjuk most feljavítani, a következőképpen:

Bal oldali érzékelő Jobb oldali érzékelő Cselekedet
fekete fekete előre halad
fekete fehér előre halad, de egy változóban eltárolja, hogy majd balra kell fordulni
fehér fekete előre halad, de egy változóban eltárolja, hogy majd jobbra kell fordulni
fehér fehér a változóban eltárolt érték szerint cselekszik: fordul balra vagy jobbra

Ezen kívül az alábbi programozási trükköket is alkalmazzuk:

  • Megvárjuk, amíg a felhasználó elengedi a nyomógombot; amíg a gombot nyomva tartja, nem indul a program.
  • Először elmentjük az állapotot, és csak utána cselekszünk, hogy egy interáción belül ne fordulhasson elő az, hogy cselekszünk valamint, majd azonnal egy másvalamit.
  • Az iteráció végén várunk egy rövid ideig, annak érdekében, hogy minél gördülékenyebb legyen.

A program ugyan összetettebb lett (ne felejtsük létrehozni a mode és direction változókat), viszont az eredmény is látványosabb:

vonalkoveto.png

Akadályelkerülő

Ebben a programban a roboton található távolságérzékelő segítségével valósítjuk meg az akadályelkerülőt: a robot előre halad, és ha a közelében akadály van, akkor elfordul.
A programot ez alapján készítjük el: http://www.mblock.cc/example/avoid-barriers/.

akadalyelkerulo.png

Hang lejátszás

A robotra rá van építve egy hangszóró. Most megvalósítjuk a Boci, boci, tarka népszerű gyerekdal lejátszását:

bociboci.png

Belső fényérzékelő

A roboton található egy fényérzékelő, és ezt fogjuk felhasználni a következő programunkhoz, amely megszámolna, hogy hányszor takartuk el a robotot, majd a nyomógomb megnyomásával annyi hangot ad ki. Ez egyben nullázza a számlálót, és ha ismét megnyomjuk, akkor az azóta eltelt időben bekövetkezett eltakarásokat mutatja meg.

Az egész egy végtelen ciklusba kerül. Szükség van egy belső ciklusra, amely az eltakarásokat számolja, és figyeli a nyomógombot is. Ehhez szükség van egy változóra, amely értékét a belső ciklus elején teszteljük. A változó neve legyen ez: stop, és alapértelmezett értéke legyen 0.. Valamint szükség van egy számlálóra is (counter nevű változó). Ha a felhasználó megnyomja a gombot, akkor a számlálóban levő értéknek megfelelő számú hangot ad ki. Teszt jelleggel adjunk neki ideiglenesen egy nullánál nagyobb értéket az elején, amit majd ne felejtsük el visszaállítani. Programunk pillanatnyilag az alábbi; próbáljuk ki:

fenyerzekelo_kezdeti.png

Most minden gombnyomásra öt hangot ad ki. A számlálót most állítsuk 0-ra az elején, és valósítsuk meg a tényleges számolást. Az ötlet az alábbi: felveszünk egy újabb változót, (state) amelyben azt tároljuk, hogy éppen milyen állapotban vagyunk: normál fény (1) vagy eltakarás (0). Alapértelmezésben normál fényt feltételezünk. Átlagos nappali szoba fénynél ez egy 1000 körüli érték, de sötétebb szobában ez lényegesen alacsonyabb is lehet. Emiatt nem abszolút értékekkel dolgozunk, hanem az elején megnézzük a pillanatnyi fényerőt; ha jelentősen lecsökkent az értéke (pl. legalább 200 egységnyivel), akkor azt tekintjük letakarásnak, és ha visszanő (pl. a mért érték 100 egységnyivel csökkentett értéke fölé), akkor az a felemelés. Vegyük figyelembe, hogy egyrészt a két érték között kell egy nagyobb sáv, hogy a letakarás során a minimális hullámzások ne befolyásolják a számolást, másrészt a másik ellenőrzésnél nem mehetünk fel egészen a korábbi értékig, mert pl. egy pillanatnyi borulás vagy árnyék is befolyásolná az eredményt. A módszer megvalósításához hozzunk létre egy újabb változót (light), és a belső ciklus előtt adjuk neki értékül a pillanatnyi fényerősséget. Tehát ha felemelt státuszban vagyunk, akkor azt figyeljük, hogy eléggé lecsökkent-e a fényerő, ha meg letakart státuszban, akkor azt, hogy eléggé kivilágosodott-e; ez utóbbi esetben növeljük a számlálót. Valósítsuk meg a vázolt logikát! A végeredmény az alábbi:

fenyerzekelo.png

Kiegészítők

Az alábbi kiegészítők nem részei az alapkészletnek, de elérhető áron megvásárolhatóak. Ezeket a kiegészítőket az mBot gyártója, a Makeblock gyártja.

Joystick

joystick.jpg

A külön megvásárolható joystickot kapcsoljuk egy hosszabb RJ25-ös kábellel a 4-es portra. Valósítsuk meg a robot irányítását a joystickkal! Alapvetően a fel-le mozgatással (y koordináta) lehet előre ill. hátra mozgatni, balra-jobbra mozgatással (x koordináta) pedig balra és jobbra forgatni, néhány apróságot viszont figyelembe kell vennünk ahhoz, hogy a programunk tényleg úgy működjön, ahogy szeretnénk.

  • A joystick értéktartománya a tapasztalatok alapján kb. -500-tól 500-ig terjed, így osztanunk kell kettővel ahhoz, hogy a robot sebesség megfelelő legyen.
  • Minimális x ill. y kitérés még alapállapotban is van, viszont fontos, hogy egyértelmű utasítást adjunk a robotnak. A példában ha az oldalirányú kitérés kicsi, akkor előre-hátra megy, egyébként forog.
  • Fontos, hogy ha mindkét érték bizonyos szint alatt van, akkor állítsuk le a motort. Ha mondjuk üres állapotban az y érték mondjuk 4, akkor megpróbál 2 sebességgel előre menni, ami nem fog ugyanis sikerülni, viszont halk „nyöszörgést” hallatszik az autóból.

A végeredmény az alábbi:

joystick-program.png

Hőmérséklet kijelzése

Ebben a feladatban két, külön megvásárolható érzékelővel is megismerkedünk: a vízálló DS18B20 jelű hőmérővel és egy 4 számjegyet kiírni képes 7 szegmenses kijelzővel. Ehhez egy ún. RJ25-ös adapterre is szükség van.

kijelzo.jpghomero.jpgadapter.jpg

A kijelzőt kapcsoljuk rá egy RJ25-ös kábellel az 1-es portra, és csavarokkal erősítsük rá a robot hátuljára. A hőmérőt kapcsoljuk rá az RJ25 adapter első nyílására (slot 1), azt pedig kapcsoljuk a robot 4-es portjára.

A programban végtelen ciklusban kiírjuk az 1-es portra kapcsolt kijelzőre a 4-as port 1-es nyílására kapcsolt hőmérő által érzékelt hőmérsékletet. A villogás megakadályozása érdekében érdemes egy rövid szünetet tenni két kiírás közé.

homero.png

Teszteléskor leheljünk rá a hőmérőre, és figyeljük meg a hőmérséklet növekedést a kijelzőn.

Potenciométer

A potenciométer (más néven feszöltségosztó) egy szintén külön megvásárolható elem. Ez a gyakorlatban egy csavar, mellyel a héttrében különböző felszültségeket tudunk létrehozni, így információt küldve a robotnak.

pot.jpg

A potenciométer 0-tól kb. 1000-ig ad ki értéket. A programunkban kiírjuk a kijelzőre a mért értéket (ha fel van szerelve a 4 számjegyű kijelző), a mért értéktől függő erősséggel világítunk a fedélzeti LED-ekkel, valamint egy bizonyos értéken felül adott frekvenciájú hangot adunk ki. Mivel a potenciométer tartománya kb. 0-1000, a LED-eké pedig 0-255, a mért értéket 4-gyel osztjuk. A program az alábbi:

pot.png

Fényjáték

Külső ún. RGB LED-et is szerelhetünk a robotra. Kettő ilyen már található a fedélzeten. Jellegzetessége, hogy háromféle szín megadásával (Red = piros, Green = zöld, Blue = kék) megadásával tetszőleges színt „kikeverhetünk.”

rgb.jpg

A külső RGB LED-et kapcsoljuk egy RJ25-ös kábel segítségével a 4-es portra. Az alábbi programmal fényjátékot valósíthatunk meg. Kísérletezzünk bátran!

fenyjatek.png

Mozgásérzékelés

A külön megvásárolható ún. PIR érzékelő a következőképpen néz ki:

pir.jpg

A PIR a Passive Infrared Sensor (passzív infravörös szenzor) rövidítése, és mozgást képes érzékelni. Ezt egy RJ25-ös kábel segítségével csatlakoztassuk a 4-es portra, és készítsünk egy rendőrautós projektet! Ha a mozgásérzékelő mozgást érzékel, azaz betörő van a lakásban, akkor felváltva villogjon a fedélzeti LED pirossal és kékkel, és közben szirénázzon, mint egy rendőrautó, míg ha nincs mozgás érzékelve, akkor a megnyugtató zöld színnel világítson az autó, mivel nincs betörő.

pir.png

Külső fényérzékelő

A belső mellé külső fényérzékelő is vásárolható a robothoz:

fenyerzekelo.jpg

Példaprogramunkban kiírjuk az érzékelt adatot:

fenyerzekelo_kulso.png

El lehet játszani azzal, hogy pontosan melyik része érzékeli a fényt.

Natív Arduino érzékelők

Ebben a fejezetben olyan projekteket vizsgálunk meg, melynek során a robotra általános Arduino-s érzékelőket kapcsolunk. Ezek tehát külső érzékelők, melyeket nem az mBot gyártója gyártotta, ezzel valójában jelentősen kiszélesítve a lehetőségeket.

Hőmérséklet és páratartalom érzékelés

Ebben a példában a példában a DHT11 kódú hőmérséklet és páratartalom érzékelőt kapcsoljuk rá a robotra, és páratartalmat mérünk vele, amit idáig még nem tettünk.

DHT11.jpg

A páratartalom érzékelőt kössük rá a már bemutatott RJ25 adapter SLOT2 oldalára a következőképpen:

  • Az érzékelő mínusz lábát kössük az adapter GND jelzésű lábára.
  • Az érzékelő középső lábát kössük az adapter VCC lábára.
  • Az érzékelő S-sel jelzett lábát kössük az adapter S2 lábára.

Végül az RJ25-ös adaptert kapcsoljuk rá a robot 4-es portjára egy RJ25-ös kábel segítségével. A programban kiírjuk a kijelzőre a mért értéket:

para.png

Leheljünk az érzékelőre! Ha mindent jól csináltunk, akkor 90 feletti értékre kell, hogy felszökjön a mért érték, majd fokozatosan csökkennie kell.

Ütközés érzékelés

Ehhez a projekthez meg kell vásárolnunk egy Arduino-s ütközés érzékelőt. Keressünk rá a crash sensor vagy collision sensor kulcsszóra. Az ára 100-200 Ft közötti. Majd a következő kapcsolást alakítsuk ki:

  • Az RJ25-ös adaptert csavarozzuk a robot hátuljára, mégpedig úgy, hogy felül legyen az RJ25 kimenet, és az egyik fele lógjon túl a roboton (tehát a legszélső lyukba csavarjuk a csavart úgy, hogy a másik fele kilóg). Célszerűen legyen belül. Elvileg mindegy, melyik felére helyezzük; én hátulról nézve) a jobb oldali felére tettem.
  • Erre csavarozzuk az ütközés érzékelt úgy, hogy az ütközés érzékelő leghátul legyen, függőlegesen. (Emiatt kellett a robothoz úgy csavaroznunk, hogy kilógjon.) Ehhez a kicsi, vastag csavar nem volt megfelelő, a nagy hosszút kellett felhasználni. Tehát a kialakítás olyan, hogy ha tolatva nekimegy valaminek, akkor az ütközés érzékelő ezt érzékeli.
  • Kössük össze az ütközés érzékelőt az RJ25 adapterrel. Valószínűleg nincs jelentősége; én a SLOT2-re kötöttem rá. Ehhez 3 darab anya-anya kábelre van szükség. Az RJ25 adapter hátoldalán látható, hogy melyik kimenet micsoda. Ennek megfelelően kössük össze az alábbi módon:
    • Ütközés érzékelő OUT - RJ25 S2
    • Ütközés érzékelő VCC - RJ25 VCC
    • Ütközés érzékelő GND - RJ25 GND
  • Az RJ25 átalakítóba helyezzünk bele egy RJ25-ös kábelt, melynek a másik végét kapcsoljuk a robot 4-es portjára.

A programban touch sensor-ként érjük el az ütközésérzékelőt, viszont az elvárthoz képest fordítva működik: akkor ad igazat, ha nincs ütközés, és akkor hamisat, ha van ütközés. Töltsük fel a következő kódot:

utkozes.png

Távirányítóval tudjuk hátrafelé indítani ill. megállítani. (A többi irányt is leprogramozhatjuk, viszont most csak a tolatásos ütközésre vagyunk kíváncsikat.) Ha tolatva beleütközik valamive, akkor mintegy rugalmas ütközést szimulálva elindul előre.

A teszteléshez töltsük fel a programot, helyezzük a robotot egy olyan helyre, hogy tolatva egyenesen nekimenjen egy egyértelmű akadálynak (pl. falnak), majd a lefelé nyíllal indítsuk el a robotot hátramenetbe. Ha mindent jól csináltunk, akkor az ütközés hatására elindul a robot előre.

Adatkapcsolatok

Kapcsolat a robot és a számítógép között

A robotot össze lehet kapcsolni a számítógéppel vezeték nélkül. Az egyéni célra gyártott robot Bluetooth-on keresztül kapcsolódik, az oktatási céllal gyártottak pedig 2.4G-n keresztül. Itt most a Bluetooth-os verziót nézzük meg.

Lépések:

  • Ha már korábban kapcsolódtunk, szükség lehet annak törlésére: Connect → Bluetooth → Clear Bluetooth, ill. ez esetben operációs rendszer szinten is törölnünk kell a Makeblcok nevű kapcsolatot.
  • Először kapcsolódjunk hagyományosan soros porton keresztül (COMx), és töltsük fel a firmware-t (Connect → Upgrade Firmware). (Ha van rajta saját program, akkor ezt meg kell tenni.)
  • Válasszuk le az USB kábelt. Kapcsoljuk be a számítógépünkön a Bluetooth-t, ha még nincs bekapcsolva. Majd párosítsuk a két Bluethooth eszközt: az mBot-ot és a számítógépet: Connect → Bluetooth → Discover. Itt a számítógépen, operációs rendszer szinten (tehát az mBlock-on kívül) megkérdezi (valószínűleg a háttérben), hogy megfelelő-e a szám, amit kiír az mBot. Az mBot nem ír ki semmit, de fogadjuk el.
  • Az mBlock-on belül megjelenik az mBot MAC száma, arra kattintsunk. A már egyszer összepárosított mBot-ra a Connect → Bluetooth → Makeblock (MAC szám) tudunk csatlakozni.
  • A sikeres kapcsolódást az mBot melletti zöld karika mutatja.

Próbáljuk ki egy egyszerű programmal: zászlóra kattintáskor kapcsolja be a LED-eket:

setledfrompc.png

Ha ez működik, akkor próbáljuk meg kiolvasni egy szenzor, jelen esetben a fényérzékelő értékét, és azt folyamatosan megjeleníteni. Ehhez hozzunk létre egy változót (fényérzékelés esetén pl. light névvel), legyen látható, és készítsük el az alábbi programot:

lightsensortopc.png

Indítsuk el. Az alapértelmezett érték ezer körüli. Most takarjuk el a robotot, és azt fogjuk látni, hogy az érték lecsökken. Ezzel azt is tudjuk ellenőrizni, hogy milyen érzékelőink vannak és hol.

Végül készítsünk egy látványos és „értelmes” játékot: a számítógép billentyűzetén található nyilak segítségével fogjuk arányítani a robotot! Készítsük el az alábbit:

szamitogepkapcsolat.png

Próbáljuk ki!

Kapcsolat a robot és az okostelefon között

A robot és az okostelefon összekapcsolásának lehetőségeiről ezen az oldalon olvashatunk.

Kapcsolat két robot között

Két robot tud egymással kommunikálni: infravörös rádiójeleket küldenek és fogadnak. Az alábbi példában a küldő robot a vonalkövetőjének az értékét küldi tizedmásodpercenként:

kapcsolat_kuldo.png

A fogadó a felületi LED-eket állítja be a fogadott érték szerint:

kapcsolat_fogado.png

A tapasztalat során kiderült fontos dolgok:

  • A C++ erősen típusos nyelv, így minden változónak típusa lesz. Egy változó típusa az első értékadáskor dől el. Például a küldő programban a linefollower típusa double, mivel a vonalkövető számot ad vissza.
  • A küldött üzenetek típusa szöveges. Sajnos a rendszer nem jelez problémát akkor, ha közvetlenül a vonalkövető értékét szeretnénk elküldeni, viszont hibás működést eredményez.
  • A küldéskor nem szabad idézőjelbe tenni a szöveget. Ha úgy teszünk, akkor az C fordítási hibát okoz, a hibaüzenet viszont nem sokat segít a hiba felderítésében.
  • Fogadáskor a fogadott üzenet ellenőrzésekor viszont a szokásos módszertől eltérően kötelező a zárójel használata.
  • Ha két üzenet küldése közé nem teszünk szünetet, akkor pár másodperces működést követően instabillá válik a rendszer.
  • A rádiójelek hatótávolsága rövid; a két robotnak közel kell lenniük egymáshoz, és közvetlenül egymásra kell látniuk ahhoz, hogy az üzenet átmenjen.

A fenti program a tapasztalat szerint stabilan működik.

Új Hozzászólás Hozzáadása
vagy Bejelentkezés Wikidot felhasználóként
(will not be published)
- +
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License