Bányai Júlia Gimnázium. Kecskemét. Kutatási beszámoló,

Hasonló dokumentumok
6000 Kecskemét Nyíri út 11. Telefon: 76/ ; Fax: 76/ Gyakorló feladatok

SZERZŐ: Kiss Róbert. Oldal1

SZERZŐ: Kiss Róbert. Oldal1

A LEGO Mindstorms EV3 programozása

A foglalkozás céljának eléréséhez a következő tevékenységeket végezzük el:

Bányai Júlia Gimnázium. Kecskemét. Kutatási beszámoló,

VERSENYFELHÍVÁS. A verseny célja:

A FOGLAKOZÁS ADATAI: SZERZŐ. Kiss Róbert. Körhinta A FOGLALKOZÁS CÍME A FOGLALKOZÁS RÖVID

kodolosuli.hu: Interaktív, programozást tanító portál BALLA TAMÁS, DR. KIRÁLY SÁNDOR NETWORKSHOP 2017, SZEGED

Korszerű információs technológiák

A tanulók gyűjtsenek saját tapasztalatot az adott szenzorral mérhető tartomány határairól.

A LEGO-MINDSTORM ALKALMAZÁSA A MECHATRONIKAOKTATÁSBAN

Robotkéz. Évfolyam: 9. Iskola: Bányai Júlia Gimnázium, 6000 Kecskemét, nyíri u. 11.

Neumann János Számítógép-tudományi Társaság Programozás, robotprogramozás szakkör Három félév 3 * 8 foglalkozás

IV. LEGO Robotprogramozó Országos Csapatverseny

VI. Robotprogramozó Országos Csapatverseny Döntő versenyfeladatok. 5. évfolyam

nagyoknak kicsiknek SKOLÁBA ISKOLÁBA ISKOLÁBA ISKOLÁ PROGRAMOZÁS ROBOTIKA BEHOZZUK A ZÖLD ENERGIÁKAT AZ OSZTÁLYTERMEKBE

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Occam 1. Készítette: Szabó Éva

VI. Robotprogramozó Országos Csapatverseny évfolyam

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Fizikai mérések Arduino-val

Webprogramozás szakkör

DIGITÁLIS KÖRNYEZET FEJLESZTÉSE A SZOLNOKI TANKERÜLETI KÖZPONT INTÉZMÉNYEIBEN EFOP

Különös közzétételi lista a nevelési oktatási intézmények részére. Szilvási Általános Iskola

INFORMATIKAI ALAPISMERETEK

1. Egyszerű (primitív) típusok. 2. Referencia típusok

Programozással ismerkedőknek ajánlom. SZERZŐ: Szilágyi Csilla. Oldal1

IKT-MŰHELY A PROGRAMOZÁS TANÍTÁSA ÉS ONLINE FELADATLAPOK KÉSZÍTÉSE N O V E M B E R 1 9.

Mintavételes szabályozás mikrovezérlő segítségével

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Programozási segédlet

sallang avagy Fordítótervezés dióhéjban Sallai Gyula

A B C NXT A B C. Szolga 1. Szolga 3. NXT. Szolga 2.

Bevezetés a programozásba

SZENZORMODUL ILLESZTÉSE LEGO NXT PLATFORMHOZ. Készítette: Horváth András MSc Önálló laboratórium 2 Konzulens: Orosz György

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

Különös közzétételi lista a nevelési oktatási intézmények részére

Iman 3.0 szoftverdokumentáció

MAGYAR NYELVŰ LEÍRÁS

A PR verziójának új funkciói HU

Feladataink, kötelességeink, önkéntes és szabadidős tevékenységeink elvégzése, a közösségi életformák gyakorlása döntések sorozatából tevődik össze.

Felvételi tematika INFORMATIKA

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

2017. november Jánossy Zsolt Budapesti POK Digitális Pedagógiai Módszertani Központ

LabVIEW példák és bemutatók KÉSZÍTETTE: DR. FÜVESI VIKTOR

SZAKDOLGOZAT. Kiss Albert

Kiss Róbert Badó Zsolt. Egyszerű robotika. A Mindstorms NXT robotok programozásának alapjai

3. A DIGILENT BASYS 2 FEJLESZTŐLAP LEÍRÁSA

A évi Országos kompetenciamérés értékelése iskolánkban

... S n. A párhuzamos programszerkezet két vagy több folyamatot tartalmaz, melyek egymással közös változó segítségével kommunikálnak.

A könyvben található mintafeladatok LabVIEW programnyelvben megírt változatai elérhetőek lesznek az NI Mentor Program közösségi portálon, a

TIOP / A

Java programozási nyelv

VIII. Robotprogramozó Országos Csapatverseny Regionális versenyfeladatok évfolyam

Leképezések. Leképezések tulajdonságai. Számosságok.

Arduino, programozás, elektronika egy út az ismeretek integrált felhasználásához

MEDITOR 5 KLÓN telepítési segédlete

BASH script programozás II. Vezérlési szerkezetek

Advisor Master. GE Interlogix Magyarország Kft.

Intégro CLIA. A klímavezérlő számítógép általános ismertetése

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

Területi elemzések. Budapest, április

USB adatgyűjtő eszközök és programozásuk Mérő- és adatgyűjtő rendszerek

Programozási nyelvek a közoktatásban alapfogalmak I. előadás

Az újmédia alkalmazásának lehetőségei a tanulás-tanítás különböző színterein - osztálytermi interakciók

HÁZI FELADAT PROGRAMOZÁS I. évf. Fizikus BSc. 2009/2010. I. félév

Kommunikáció az EuroProt-IED multifunkcionális készülékekkel

Procontrol Device Detector. Felhasználói leírás

Természetismeret. 1. A természettudományos nevelés folyamatában történő kompetenciafejlesztés lehetőségei az alsó tagozaton.

Szoftvertervezés és -fejlesztés I.

Hardver leíró nyelvek (HDL)

MATEMATIKA 1-2. ÉVFOLYAM

MATEMATIKA 1-2. ÉVFOLYAM

OOP. Alapelvek Elek Tibor

Különös közzétételi lista Görgetegi Általános Iskola

A PROGRAMOZÁS ALAPJAI 3. Készítette: Vénné Meskó Katalin

BEVEZETŐ. Grúber György igazgató

HELYI TANTERV / INFORMATIKA

Újhartyáni Német Nemzetiségi Általános Iskola IKT helyzetelemzés

16. modul: ALGEBRAI AZONOSSÁGOK

A foglalkozás végére a tanulók bepillantást nyernek a programozásba, ismeretei bővülnek a színekről és hangokról.

6. fejezet: Ciklusok

ROBOTIKA SZAKKÖRI BESZÁMOLÓ 2013/14. TANÉV IV. NEGYEDÉV

INFORMATIKAI ALAPISMERETEK

Kameleon Light Bootloader használati útmutató

Számítógép architektúra

13. óra op. rendszer ECDL alapok

1. Alapok. #!/bin/bash

Programozási nyelvek 6. előadás

Rubin SPIRIT TEST. Rubin firmware-ek és hardverek tesztelése esettanulmány V1.0. Készítette: Hajnali Krisztián Jóváhagyta: Varga József

TANULÁSMÓDSZERTAN 5 6. évfolyam

INFORMATIKAI ALAPISMERETEK

Mindenki abból a három tantárgyból tesz szigorlatot, amelyet hallgatott.

A C# programozási nyelv alapjai

Világos?! (Nem csak) egy természettudományos projekt története. Jánossy Zsolt Gödöllői Török Ignác Gimnázium IPET

S z á m í t ó g é p e s a l a p i s m e r e t e k

7. fejezet: Mutatók és tömbök

Programozásban kezdőknek ajánlom. SZERZŐ: Szilágyi Csilla. Oldal1

Megyeri Úti Általános Iskola 2019/2020

Átírás:

Bányai Júlia Gimnázium Kecskemét Kutatási beszámoló, a SZTE TTIK Kutatóiskola pályázatán elnyert támogatási összeg felhasználásáról és a megvalósult kutatási programról 2007/2008-as tanév A KUTATÁSI BESZÁMOLÓT KÉSZÍTETTE: Kiss Róbert a kutatási program középiskolai felelőse, matematika-kémia-számítástechnika szakos tanár A KUTATÁSI PROGRAM TÉMAVEZETŐJE A TTIK RÉSZÉRŐL: Dr. Mester Gyula Főiskolai tanár

Tartalomjegyzék Bevezető... 3 A megvalósult kutatási program... 5 A támogatási összeg felhasználása...5 A kutatási program felépítése...5 A kutatás tartalmi felépítése és a célok megvalósulása... 7 A LEGO Mindstorms NXT... 10 Programkörnyezetek... 15 A grafikus programozási környezet...15 A karakteres programozási környezet...18 Elkészített programok... 20 1. programcsoport a feltételes elágazás használata, képernyőkezelés (robot LCD), egyszerű végtelen ciklusok használata...20 2. programcsoport ciklusok és elágazások együttes használata, szenzorkezelés...23 3. programcsoport útvonalkövetés...29 4. programcsoport több szálú programozás multitask...31 5. programcsoport robotok közötti kommunikáció bloetooth-on keresztül...34 6. programcsoport speciális robotok Sumo harcosok...37 7. programcsoport speciális robotok lift...42 8. programcsoport speciális robotok szkenner...44 Összegzés... 46 További tervek... 48 1. melléklet: Eszközvásárlási igazolás... 49 2. melléklet: A résztvevők névsora... 50 I. kategória (6-8. évfolyam)...50 II. kategória (8-11. évfolyam)...50 3. melléklet: A kutatási program foglalkozásainak tematikus listája... 51 I. kategória (6-8. évfolyam)...51 II. kategória (8-11. évfolyam)...51 4. melléklet: A sumo robot verseny szabályjegyzéke... 52 5. melléklet: A DVD tartalma... 53-2 -

Bevezető Problémamegoldás, kreativitás, algoritmikus gondolkodás olyan összetett képességeket, ismereteket magában foglaló fogalmak, amelyek fejlesztése nemcsak oktatási szempontból fontos és szükséges. A közoktatás dokumentumaiban (pl. kerettanterv, érettségi követelmények) a kisiskolás kortól jelenik meg az algoritmikus gondolkodás fejlesztése mint cél. Több kutatásban kereszttantervi kompetenciákként említett elemek is besorolhatók a fenti kategóriák valamelyikébe. A tantárgyak rendszerén átívelő fejlesztési feladatról van szó, amely elsősorban a matematika és az informatika rendszereiben jelenik meg legdominánsabban. Jogos elvárás az informatika tantárgytól, hogy az IKT eszközhasználat fejlesztésével a hétköznapi technikai vívmányokat intelligensen használni tudó diákok kerüljenek a felsőoktatásba, a munkaerőpiacra. Az informatika oktatását olyan kettősség jellemzi, amely egyrészt a felhasználói szintű számítógép-használat általános fejlesztését tekinti célnak, másrészt sokkal szűkebb kör számára lehetőséget nyújt a programozói tudás elmélyítésére. Ez utóbbi tudásterületben rejlő lehetőség kiaknázása a szaktanárok innovatív hozzáállásától is függ. A hagyományos eszközökben rejlő lehetőségek magas absztrakciós szintjük folytán nem fejtenek ki kellő motivációs hatást, amely a kompetenciák fejlesztéséhez elengedhetetlen tényező. A folyamatosan és rohamosan fejlődő informatikai eszközök lehetővé teszik az oktatás megújulását. Szaktanári tapasztalatokra épülő és kutatási eredményekkel alátámasztott megállapítások, hogy a kisiskolás korban használt informatikai algoritmus-leíró nyelvek és szoftverek (pl. LOGO) egyszerűségük és kézzelfogható vizuális kimenetük révén megfelelő motivációs hatást fejtenek ki, amely visszahat az oktatási folyamatra. Így az 5-7. évfolyamon gyakorlatilag játékos formában lehet egymásba ágyazott iterációkat, paraméterezett eljárásokat tanítani. A későbbi évfolyamokon preferált programozási nyelvek (pascal, c++, c#) és környezet absztrakt nyelvi elemei és szintaxisa sokkal nehezebben sajátítható el és ezt még fokozza a jobbára monitoron megjelenő karakteres kimenetek kevésbé motiváló hatása. Hosszabb tanulási és gyakorlási folyamat végén lehet eljutni olyan feladatok megoldásáig, amelyek a hétköznapi élethez közelebb álló problémák megoldását teszik lehetővé. Az informatikai eszközök manapság leginkább kihasznált tulajdonsága, hogy a külvilág folyamataira, a környezet eseményeire reagálva képesek tevékenységek végzésére. Mindez nehezen jeleníthető meg ezekben a programkörnyezetekben középiskolában is érthető szinten. Pedig ezek az eszközök tennék lehetővé a programozási motiváció fenntartását és a modern programozási környezetek, technikák általános megismerését. A programírás során a kellően kitartó kiválasztottak általában egyszemélyes programozást folytatnak, amelyből hiányzik a kommunikáció mind programozói, mind eszközök közötti szinten. Ezeknek a problémáknak a kiküszöbölésére már közép- és általános iskolai szinten is használható informatikai eszközök állnak rendelkezésre. A cél tehát olyan informatikai eszközkörnyezet kialakítása, hogy az algoritmikus gondolkodás fejlesztése a programírás eszközeivel minél szélesebb diákpopuláció számára váljon hozzáférhetővé és motiválóvá. az absztrakt szintaktikájú programnyelvek helyett (életkortól függően) egyszerűbb grafikus (ikonvezérelt) nyelven lehessen az algoritmusokat fejleszteni. a gyakorlati élethez közeli problémaszituációk megoldásával, modellezésével ne legyen a programozás öncélú billentyűzetnyomogatás. a külvilággal való kommunikáció, a környezeti hatásokra való reagálás, mint programozási feladat épüljön be a oktatásba, így a tantárgyak közötti kereszttantervi kompetenciákat is erősítse. - 3 -

a problémamegoldásra épülő kreatív algoritmusok tervezése és megvalósítása kerüljön előtérbe. Az egyszemélyes programírás helyett a csapatmunka lehetőségei és technikái is épüljenek be az informatika oktatási rendszerébe. Megvalósítás lehetőségei A több innovációs nagydíjat nyert termék, az oktatás számára (is) kifejlesztett programozható LEGO robot (LEGO Mindstorms NXT) lehetővé teszi a programnyelvek szintaktikus elemeinek készségszintű elsajátítása mellett az egyéni kreativitás, és algoritmikus gondolkodás fejlesztését is. Kézzelfogható közelségbe hozza az absztrakt programozási algoritmusok tanítását, megértését, alkalmazását. A választható programkörnyezettől függően lehetőség nyílik olyan programkódolásra, amely absztrakciós szintje a diákok kognitív életkori sajátságaihoz illeszthető az ikonszerű elemekkel megvalósított programozástól a hagyományos programnyelvi szintaxisig. Problémaszituációs feladatok kitűzésével a problémamegoldó gondolkodás lépései kézzelfogható közelségbe hozhatók, és akár játékos formában fejleszthetők. A kitűzött probléma megoldására írt és optimalizált algoritmus helyességének ellenőrzésére közvetlen lehetőség nyílik, hiszen a robot azt végrehajtja. A paraméterek megváltoztatásával a mélyebb megértésre is lehetőség nyílik. A kitűzött probléma részekre bontása és vizsgálata a gondolkodási képességeket fejleszti és a megoldásban rejlő nagyfokú kreativitás egy új problémamegközelítési szemléletet ad. Az eszközök oktatásbeli elterjedése nagymértékben függ a tanárok innovációs hajlandóságától, hiszen publikált középiskolai szintű magyar nyelvű szakirodalom még kevés áll rendelkezésre. Az oktatásbeli elterjedése viszont a programozás tanítását-tanulását, az algoritmikus gondolkodás fejlesztését gyökeresen megváltoztathatja. - 4 -

A megvalósult kutatási program A támogatási összeg felhasználása A pályázatban leírtaknak megfelelően, a kapott 200 000 Ft támogatási összeget 3 db LEGO Mindstorms Education készlet beszerzésére használtuk (a számla fénymásolatát az 1. melléklet tartalmazza). A készletek január végén érkeztek meg. A megrendeléssel párhuzamosan megtörtén a diákok körében a tájékozódó helyzetfelmérés a tervezett szakkörök résztvevői létszámát tekintve. A jelentkezők száma jóval meghaladta a 3 db készlet nyújtotta lehetőségeket (30 fő feletti létszám). Ezért korábbi oktatási kapcsolatokat felhasználva további készleteket sikerült kölcsönbe egy féléves időtartamra beszerezni, így a tervek szerint a tanév második félévétől 10 db készlettel indulhattak a szakkörök (sajnos júniusban a készleteket vissza kellett adnunk ). A kutatási program felépítése A kutatási program a II. félév kezdetétől indult, tehát öt hónapon keresztül tartott (januárjúnius). Ebben az időintervallumban 52 naplóval dokumentált és kb. ugyanennyi írásban nem dokumentált szakköri óra zajlott le. A pályázatban leírtaknak megfelelően két életkori kategóriában kezdődtek a programozói szakkörök. I. kategória (16 fővel) 6-8. évfolyam, és II. kategória (17 fővel) 8-11. évfolyam tanulói számára. Az I. kategória esetében minden második héten két-két órában kedden délutánonként, míg a II. kategória esetében minden héten két-két órás időtartamban hétfőn délutánonként. A jelentkezők magas száma miatt péntek délutáni időpontban Bakk János kollégám (matematika-fizika szak) szintén tartott egy szakkört, ahol a téma iránt különösen érdeklődő tanulók mélyíthették el programozói tudásukat. Az Ő segítségével történt a programok és a megépített robotok fizikai hátterének optimalizálása (pl. mechanikai problémák megoldása). A szakkörökön résztvevők névsorát és évfolyamát a 2. melléklet, míg a szakköri foglalkozások időpontját és rövid tematikáját a 3. melléklet tartalmazza. Ezzel a szervezési formával sikerült elérni, hogy legfeljebb két tanuló osztozott egy roboton. Célkitűzések A kutatási programban néhány olyan csomóponti tartalmat fogalmaztunk meg, amely a pályázati időtartamot és a választott megvalósítási formát tekintve fél éves időtartamban reálisan keresztülvihető. Programozási alapok. Programkörnyezet ikonvezérelt/nyelvi szintaxisú (életkortól függően), a nyelv szintaktikai és szemantikai elemei. Kapcsolat a környezettel. Szenzorok használata, mért értékek értelmezése. Fényérzékelő, ultrahangos távolság érzékelő, ütközésérzékelő, hangérzékelő: útvonal-követési problémák, reagálás a környezeti hatásokra, adatgyűjtés a szenzorokon keresztül, paraméterektől függő viselkedési problémák (pl. szkennelés, ) Kommunikáció. egyszerű kéteszközös kommunikációra épülő játékok szimulációja (pl.: stratégia nélküli véletlen játékok, egyszerű stratégiát használó véges lépésszámú játékszimulációk, ), távvezérlés. - 5 -

Résztvevők köre Általános tapasztalat, hogy egy-egy előzetesen érdekesnek ítélhető szakkör esetén a jelentkezők kezdeti létszáma megfogyatkozik az idő előrehaladtával. Ezeknél a szakköröknél is volt ugyan mozgás, 3-4 tanuló tanév közben elmaradt, de helyettük érkeztek olyanok, akik kezdetben nem jelentkeztek. Az Ő bekapcsolódásuk nehezebben ment, de néhány diák segítővel sikerült megoldani. Leginkább a 6-7 és 9. évfolyamos tanulók alkották a szakkörök résztvevői létszámának zömét. A 6-7. évfolyamos korosztály az, amelyik legfogékonyabb a kreatív építést is igénylő játékosabb feladatokra, míg a Gimnáziumban a 9. évfolyamon fejeződik be az informatika tanórai keretek közötti oktatása, ezért azok, akik informatikai irányban szeretnének továbbtanulni a következő tanévektől, szakköri illetve fakultációs formában tanulhatják azt tovább. A kilencedik évfolyamon még nincs meg a szakkörökkel történő időbeli leterhelés, viszont az informatikai érdeklődés már kialakult. A két életkori kategória között nem mutatkozott különbség abban, hogy nem csak a programozás, hanem az építés is dominánsan jelentkezett a tevékenységi formák között. A motiváció fenntartása a félév során (február-június) végig sikerült. Ehhez arra volt szükség, hogy a száraz programozói ismeretek mellett olyan feladatok jelenjenek meg, amelyek kézzelfogható, látványos eredményt produkáltak. Ez természetes, hiszen a programozás elméletének ismerete csak szükséges feltétele a programozói tudásnak. Sok gyakorlás, a hibák folyamatos javítása nyújt készségszintű tudást. Ha a programozást éppen tanuló odahaza fut bele a programozási problémákba, hibákba és a megoldáson maga gondolkodik, akkor sokkal hatékonyabban tudja alkalmazni a megtanultakat, mintha a megoldásokat készen kapná. Ehhez persze először az ismereteket kell megtanulni, hogy rendelkezésre álljon egy olyan eszköztár, amelyet kreatívan lehet használni. Ennek a tanulásnak a megkönnyítését szolgálta a kézzelfogható látványos eredmény. Nehezítve azzal, hogy az eszköz csak erősen korlátozott ideig állt mindenki rendelkezésére, így a gyakorlás időtartama is rövid volt. Az ötödik évfolyamosok körében nem hirdettük meg a szakköri lehetőséget. Ennek oka, hogy az általános iskola alsó tagozatából bekerülő diákok nagyon heterogén informatikai tudással érkeznek a gimnáziumba. Vannak, akik szervezett keretek között itt találkoznak először a számítástechnikával, vagy ismereteik csupán az egérhasználat és az internet egyszerű böngészéséig terjed. A hatodik évfolyamosok már egy éves számítógéphasználati alapozással rendelkeznek, így az Ő informatikai tudásuk stabilabb, arra már lehet alapozni egy újszerű szoftver használatát. A 12. évfolyamosok az érettségi felkészülés utolsó szakaszába lépve kevesebb időt szánhatnak a szakköri munkára és a tanév is rövidebb számukra. Néhány fénykép segítségével talán érzékeltethető a szakkörökön folyó munka. - 6 -

1. ábra A szakköri foglalkozások hangulata. A kutatás tartalmi felépítése és a célok megvalósulása A gimnázium tanterve szerint az intézményben a programozásoktatás tanórai keretek között két évfolyamon jelenik meg fél-fél éven keresztül heti egy-egy órás órakeretben. Hatodik évfolyamon logo (Imagine) tanulnak a diákok, míg nyolcadik évfolyamon turbo pascalt. A logo programozás a bevezetőben is vázolt okok miatt megfelelő motivációt nyújt, azonban a tanári tapasztalataim alapján megállapíthatom, hogy a pascal nyelv oktatása nem nyújt sok sikerélményt tanári szempontból. Az életkori problémákkal terhelt (kamaszkor) nyolcadikos diákok nem éreznek kellő motivációt egy absztrakt nyelvi szintaxis és szemantika megtanulására. Az algoritmikus gondolkodás fejlesztése miatt azonban szükséges a zárt és kötött formájú algoritmusok megismertetése a tanulókkal. A problémát nem csak az absztrakció okozza, hanem az operátorok beszélt nyelvi és programozásbeli használata is, Elegendő a logikai operátorokra gondolni (és, vagy, kizáró vagy), a de Morgan féle azonosságokra nem is gondolva. A matematika ugyan precízen megfogalmazza a definíciókat, de ezek alkalmazása más területeken nehezen működik, hiszen a kulturális környezetből hozott beszélt nyelvi minták a helyes használat ellen hatnak. Ezért volt örömteli, hogy a szakkörökre jelentkezve az iskolai tanulópopuláció mintegy 7 %-a úgy döntött, hogy programozást tanulna. A szakkörök az életkori sajátságoknak megfelelően más-más struktúrával és programnyelvi háttérrel indultak. Az alacsonyabb életkori kategóriában grafikus programnyelvi háttérrel, aminek nem volt feltétele a gépelési tudás és kevesebb volt a szintaktikai tévesztés lehetősége, ami egyik akadálya a hatékony programozói kompetenciák kialakításának. A tanulók -7-

szakszókincse sem kialakult még. Ugyan a logo nyelvből a ciklus, a feltételes elágazás és a paraméterátadás fogalma ismert, de például változókkal, azok szerepével, típusaival nem találkoztak még a diákok. A logotól eltérő nyelvi szintaxis is szokatlanabb volt számukra. A magasabb életkori kategóriában egy karakteres C alapú programozási környezetet választottam, ezzel is elősegítve esetleg az emelt szintű érettségire készülést. A nyolcadik osztályban a turbo pascal alapjaival megismerkedett tanulók előtt sok programozásai fogalom ismert volt, de menet közben derült ki, hogy ezeket csak felületesen a ráismerés szintjén sikerül annak idején elsajátítaniuk. Ez nem meglepő, hiszen egy ideálisan 16 fős informatikai csoportban a programozás tanítása során két-három olyan tanuló van, aki egy fél éven keresztül követni tudja a tananyagot, és közülük sem mindenki érdeklődő. Ezért nem lehet nagyon komoly és mély tartalmakat tanítani. A C nyelv filozófiája sok tekintetben különbözik a középiskolákban preferált pascal nyelvétől (operátor és függvényszemlélet, kifejezések logikai és matematikai kiértékelési képessége, ), mégha az alapvető struktúrák csak szintaxisukban különböznek is. A 8-11. évfolyamosok esetében tehát a nyelv elemit is újra kellett tanítani. A fiatalabbak esetében a grafikus környezet nagyon könnyen tanulható így itt erre kevesebb időt kellett szánni. Mindkét szakkör esetében az első foglalkozásokra jellemző volt, hogy hirtelen szerettek volna a diákok mindent megtanulni, hogy látványos programokat tudjanak írni. Kevésbé voltak sikeresek azok az algoritmusok, amelyek ugyan programozástechnikai szempontból fontosak pl. megszámlálás algoritmusa, de látványelemeiket tekintve nem használták ki a robotok adta lehetőségeket. Nem hordozott kellő motivációt magában egy olyan feladat, hogy Az asztallapra felragasztott szigetelőszalag csíkok felett elhaladva a robot számolja meg, hogy hány csíkot ragasztottunk fel és ezt írja a képernyőjére.. Fontosabbnak éreztem a programozás megszerettetését, mint a programozási algoritmusok mechanikus gyakoroltatását. Hiszen 30 órás tanulás után úgysem lesz senkiből programozó, de ha megszereti és meglátja benne a szépséget, akkor nagyobb esélye van, így inkább olyan programok írására koncentráltunk, amelyek több látványelemet tartalmaznak. Ezeken keresztül próbáltuk a programozási elemeket és technikákat megismerni. A következő fejezetekben bemutatok néhány ilyet és próbálom azt is érzékeltetni, hogy mi benne az az elem, amely segíti a kompetenciák fejlesztését. Elsősorban a szenzorok használatával nyert információk feltételvezérlésekben történő használatát gyakoroltuk. Az első komolyabb program a színfüggetlen útvonalkövetés volt, egy szenzor használatával. Két fényérzékelőt használva az algoritmus elég egyszerű, de készletenként egy fényérzékelő állt rendelkezésre, így egy bonyolultabb algoritmust kellett kitalálni. A végső algoritmus ugyan nem nehéz, de maga az ötlet meglehetősen kreatív és a programozást most tanulóktól nem is várható el, hogy önállóan kitalálják. Miután átbeszéltük, megírtuk a programot és működött néhány más megközelítést, programozási ötletet használó változat is elkészült. A színfüggetlenség fontosságára a későbbiekben bemutatott példa elegendő volt és innentől kezdve a legtöbben ügyeltek arra, hogy programjaikban a lehető legkevesebb literális konstanst használjanak. Ha kikerülhető volt, akkor törekedtek az általános megoldásra. Újabb lökést adott programírásnak a bluetooth-os kommunikációval való megismerkedés. A távvezérlő egyszerű programjára négy-öt különböző változat is készült. A későbbiekben ezeket is bemutatom. A szakkör ezen stádiumában már a rendelkezésre álló 10 db robot is kevésnek bizonyult. Nem csak azért, mert a kommunikációhoz egy-egy tanulónak több is kellett volna, hanem mert a robotokat itt már átépítették. Kezdetben egy speciálisan megépített robottal kezdtük, amelyre minden típusú érzékelőből egyet-egyet felszereltünk, így a legtöbb programötlet megoldható volt vele. Később a folyamatos átépítések miatt már nem voltak alkalmasak minden feladat - 8 -

megoldására, de szétszedni nem lehetett, mert a bonyolultabb programok írása több szakköri foglalkozást is igénybe vett. Kevésbé volt sikeres a fájlkezelés. Nehezen működött és túlságosan bonyolultak voltak azok a feladatok, amelyeknél nem tűnt erőltetettnek a használat, de még mindig kellően látványosak voltak. Ezért ezt a részt nem erőltettem, úgy gondolom, hogy sokkal komolyabb programozói tudás szükséges ahhoz, hogy érdemes legyen a robotok kapcsán ezzel foglalkozni. A természettudományos mérések adatgyűjtéséhez lehetne használni, de a szűk időbeli korlátok miatt ezek kipróbálása későbbi időpontra halasztódott. Újabb motivációs lökést adott a szakkörnek a LEGO robot sumo verseny. Néhány internetről letöltött videó megtekintése után a lelkesedés óriási volt. Végül hét sumo robot készült el (az építésben, programozásban 16 tanuló vett részt), amelyek közül öt részt vett az országos versenyen júniusban. Közülük kettő egy II. és egy IV. helyezést ért el. A robotok tervezése és építése három-négy hétig tartott. A diákok hétvégére kölcsönözhették és hazavihették a robotjaikat, így hatékonyabb volt a munka. Komoly mérnöki teljesítmény fizikai kísérletek álltak a legtöbb munka mögött (súrlódás, súlypont, sebesség, nyomaték, fogaskerék áttételek, ). Sok-sok kísérlet és néhány nagyon kreatív ötlet (négy motor csatlakoztatása három portra és együttes vezérlése, erőkaros emelőrendszer, és programozása, ). Néhány építési és programozási ötletet a későbbiekben bemutatok. A kommunikációt kihasználó programok közül a kő-papír-olló játék robotos szimulációja mindenképpen említésre érdemes. Míg a távvezzérlőnél a kommunikáció egyirányú, a master küld jeleket a slave-nek, addig ebben az esetben kétirányú kommunikáció valósul meg, ami komoly szinkronizálási problémákat vetett fel. A programot ketten írták meg a II. kategória szakköri résztvevői közül. Sokkal hosszabb idejű programozói tanulás szükséges egy ilyen probléma megoldásához, de nagyon hasznos, hiszen a hálózatok működését a fellépő szinkronizációs problémákat ezen keresztül lehet igazán megérteni. Összességében a három kutatási csomópontban megfogalmazott célokat nagyrészt sikerült megvalósítani, de sokkal fontosabbnak érzem, hogy a programozás gyakorlati alkalmazhatóságát a képernyőn megjelenő karaktersorozatok felől sikerült a kézzelfogható és látványelemekkel tűzdelt irányba elvinni, ami jelentős motivációs lökést adhat a résztvevő tanulóknak. A szakkörökre jelentkezett és végig jelen lévő tanulók kb. 80 %-a aktívan kivette részét a programok tervezéséből, írásából. Azt gondolom, hogy a szakköröket folytatva már sokkal könnyebben vihetők el a mélyebb és összetettebb feladatok irányába. Ezt is bizonyítja, hogy 2008-ban a szakkörre járók közül 12 tanuló jelentkezett a nemzetközi fll robotprogramozó versenyre. A kutatás azt igazolta, hogy a programozás a választott eszköz használatával közel vihető a diákokhoz, már 12 éves kortól. Lehetőségként adódik, hogy az algoritmikus gondolkodás fejlesztésére a tanórai keretek közötti használatát is kipróbáljuk. Ez lehet egy új kutatási program része. A kutatási program során elvégzett munkáról, a kitűzött feladatokról és megoldásaikról a továbbiakban részletesen is beszámolok, természetesen a teljesség igénye nélkül. A bemutatott videók és programok a diákok munkái. Nem minden esetben tüntettem fel, hogy az adott programot ki írta. Ennek oka, hogy a szakkörön résztvevők valamennyien megírták. Abban az esetben, ha a programíró neve szerepel, akkor vagy olyan programról van szó, amelyet csak kevesen oldottak, meg vagy olyan ötletet tartalmaz, amely a tanuló saját gondolatára épül. De mindezek előtt a használt eszközök és a választott programozási környezetek rövid bemutatása következik. - 9 -

A LEGO Mindstorms NXT A LEGO cég által az oktatás számára is kifejlesztett Mindstorms NXT egy intelligens számítógép vezérlésű LEGO építőelem, a robot agya. A 2006-os nürnbergi játékkiállításon innovációs nagydíjat nyert termék, amely magyarországi kereskedelmi forgalomba 2007-től került. 2. ábra A LEGO Mindstorms oktatási készlet. A készlet legfontosabb eleme a programozható LEGO tégla (brick), amely egy 32 bites minikomputer, amelyhez a környezeti ingereket észlelő és azokra reagáló szenzorok és motorok csatlakoztathatók. Természetesen az eszközök összeépíthetők valamennyi létező LEGO elemmel, így olyan robotok építhetők, amelyek a programozásnak köszönhetően autonóm módon képesek viselkedni. Képesek kommunikálni minden bluetooth technikával ellátott eszközzel, így egymással, számítógépekkel, mobiltelefonokkal, PDA-kal, A programozásuknak megfelelően önálló döntéseket képesek hozni, ezért különösen alkalmasak az oktatás számára alsó-, közép-, és felsőfokú szinten az algoritmikus gondolkodás, kreativitás, programozói tudás, mérnöki kompetenciák fejlesztésére. Az oktatásbeli elterjedésüknek jelenleg három fő akadálya van. Egyrészt a kevés publicitás miatt kevesen ismerik, másrészt a tanári innováció hiánya, harmadrészt financiális tényezők. A következőkben a robot néhány technikai paraméterét mutatom be. - 10 -

A programozható tégla és a csatlakozási portjai, szenzorai A LEGO tégla csatlakozó portokkal rendelkezik, amelyekhez input és output szenzorok kapcsolhatók tetszőleges sorrendben. Output szenzorok csatlakozási portjai (A, B, C). Input szenzorok csatlakozási portjai (1, 2, 3, 4). 3. ábra A LEGO Mindstorms tégla, robot agya. 4. ábra A LEGO Mindstorms robot szenzorai. Három kimeneti port (A, B, C) és négy bementi port (1, 2, 3, 4) áll a rendelkezésre. Motorok: időben a robothoz. Kimeneti szenzorként interaktív szervomotorok építhetők a robothoz, illetve ledek. A motorok vezérlése történhet a tengelyük elfordulási szögének vagy a körülfordulások számának megadásával, 1 o -os pontossággal. Az adatfolyam kétirányú, mert le is kérdezhetők ugyanezek a működési paraméterek programból. Beépített szinkronizációt képes végezni, ha több motor csatlakozik egy Bemeneti szenzorok csatlakoztatására négy port áll a rendelkezésre. Ezekhez ütközésérzékelő, fényérzékelő, hangérzékelő és ultrahangos távolságérzékelő csatlakoztatható alapértelmezésben, de a fejlesztések folyamatosak, így további speciális szenzorok is beszerezhetők, pl. giroszkóp, hőmérsékletérzékelő, PH mérő, - 11 -

Érintés vagy ütközésérzékelő: Két állapotú kapcsolónak tekinthető. Ha valamilyen akadály benyomja vagy elengedi az érzékelő rugós gombját, akkor 1 vagy 0 (igaz/hamis) értéket képes továbbítani a program felé. Egyszerűen használható és feltételvezérlésre alkalmas eszköz. Hangérzékelő: A hangérzékelő érzékelni tudja a hozzá érkező hangnyomás decibeleket (db) és a korrigált decibeleket (dba). Az értékeket általában % skálán kaphatja meg a program és használhatja feltételvezérlésre. A szenzor pontossága és jelelkülönítési képessége kevésbé teszi lehetővé precíz vezérlésre. Fényérzékelő: Az érzékelő a világos és sötét közötti különbséget érzékeli, tehát a fényintenzitás mérhető vele. Nem a színeket különbözteti meg, hanem az adott felületről visszaverődő fény intenzitását számszerűsíti. Ezért a mért érték nem csak a felület színétől, hanem a fényviszonyoktól és a tükrözési sajátságoktól is függ. Gyakorlatilag % skálán kifejezhető szürkeárnyalatot képes mérni. Az egyik legtöbb funkció megvalósítására alkalmas szenzor. Ultrahangos távolságérzékelő: Ultrahangos technikával képes a távolságot mérni, a gyári adatok szerint 0-250 cm-es intervallumban, 3 cm-es pontossággal. A gyakorlatban a 10 cm-nél kisebb értékeket nagyon bizonytalanul méri. Ennek az egyik oka, hogy több mérés átlagolásával számítja ki a távolságot, ami lassúvá teszi, így gyors mozgás közben nehezebben, pontatlanabbul működik. Használhatók továbbá a korábbi (LEGO RCX) robotok szenzorai is, amelyekhez speciális illesztőkábel szükséges (szintén része az oktatási készletnek). Kommunikáció a számítógéppel és más eszközökkel Az adatok kábel nélküli továbbítására és fogadására kifejlesztett bluetooth technikát használva a LEGO tégla képes kommunikálni minden olyan eszközzel, amely ugyanezt a technikát képes használni, így a számítógéppel és más mobil eszközökkel (mobiltelefon, PDA, további LEGO téglák, ). Ha a megépített robotok egymás közötti kommunikációjáról van szó, akkor a kétirányú kapcsolat master-slave elvű. Egy master robothoz négy további slave kapcsolódhat. A slave robotok csak a masterrel tudnak kommunikálni, illetve a masteren keresztül egymással. A számítógéphez (ha nem alkalmas a bluetooth-os kommunikációra) USB porton keresztül is csatlakoztatható és a vezérlőprogramok áttöltése így is megvalósulhat. - 12 -

Programozás A LEGO tégla rendelkezik saját operációs rendszerrel (firmware), amelyet a flash típusú memóriájában a tápfeszültség (6 db 1,5 V-os AA elem, vagy akkumulátor) megszűnése után is képes megőrizni. A firmware frissíthető és mivel többféle is létezik, ezért cserélhető. A programozás megvalósítható a roboton is, de itt csak néhány utasítássorból álló egyszerű programok készíthetők a roboton található négy nyomógomb segítségével, egy listából kiválasztható ikonok sorba rendezésével az LCD képernyőn. A komplexebb programozás asztali, vagy hordozható számítógépen történik erre a célra fejlesztett célszoftverek segítségével. Az elkészült forrásnyelvű programból egy bájtkódot állít elő a számítógép, amelyet áttöltve a robot memóriájába, annak firmware-e képes értelmezni és a benne szereplő utasításokat végrehajtani. Többféle programnyelvi környezethez készült szoftver. A készlettel rendelkezésre bocsátott változat a LEGO és National Instruments cég fejlesztése és ikonok segítségével lehet a programrészeket összeállítani. Az ipari robotok LabVIEW programrendszeréhez hasonló felépítésű. Ezen kívül alapvetően karakteres programírást lehetővé tévő fejlesztőkörnyezetek is rendelkezésre állnak C, Java, VisualBasic, Pascal, nyelvi háttérrel. A kutatási program számára választott fejlesztőkörnyezetek részletesebb bemutatása a következő fejezetben olvasható. A programnyelvi környezetek sajátsága, hogy a magas szintű programnyelvek minden eszközét rendelkezésre bocsátják, így elméletileg bármilyen bonyolultságú program előállítható. Mindennek a robot hardver kiépítése szab csak határt. A LEGO robotok korábbi verziói Csupán érdekességként érdemes megemlíteni, hogy a LEGO cég Mindstorms NXT robotja a 3. generációt képviseli a cég robotika történelmében. Az első változat Spybotics névre hallgatott (~2000 körül került a kereskedelmi forgalomba). Szintén programozható microkomputert tartalmazott, viszont a szenzorai fixen beépítettek voltak. Két egyszerű kétirányú forgást megvalósító motor egy ütközésérzékelő és egy fényérzékelőt tartalmazott. A számítógéppel soros porton keresztül kommunikált, és infra távvezérlővel rendelkezett. 5. ábra A LEGO robotok első generációja (Spybotics). A második generációt a Mindstorms RCX képviselte. Ennek felépítése már hasonlított az NXT változathoz, de a kisebb memóriával, gyengébb processzorral, és szerényebb pontosságú szenzorokkal került forgalomba. A szenzorai cserélhetők voltak. Három output és három input porttal rendelkezett. A robotok képesek voltak egymással is kommunikálni IR porton keresztül. A számítógéppel a kapcsolatot szintén az infraporton keresztül valósították meg. Ennek nagy hátránya volt, hogy az üzenetszórás miatt egy teremben lévő összes IR porttal rendelkező robot vette az adást, így ha nem volt kellő árnyékolás, akkor átviteli folyamatban hibák léphettek fel. További nagy hátrányt jelentett, hogy az itt megjelent cserélhető firmwaret nem tartotta meg a robot a tápfeszültség megszűnésével (pl. ha lemerültek az elemei). Azt minden esetben újra kellett telepíteni (~3 perc alatt). - 13 -

6. ábra A LEGO robotok második generációja (Mindstorms RCX). Mindkét korábbi generációs változatról elmondható, hogy programozásuk többféle programnyelven is megvalósulhatott, az NXT-hez fejlesztett programozói környezetekhez hasonló szoftverekkel. A harmadik generációt képviseli a Mindstorms NXT, amelynél a korábbi hibákat sikerült javítani. Említésre érdemes, hogy a 2007-es piaci megjelenés alkalmával a szakértők a mérnök apukák játékának nevezték a terméket. Az elnevezés találó, hiszen bármennyire is igyekezett a LEGO cég, programozói tudás nélkül maga az eszköz csak díszként, érdekességként funkcionálhat, viszont az oktatásban való megjelenése olyan új motivációs lehetőséget hordoz, ami segíthetné a természettudományos képzés presztízsének növelését. - 14 -

Programkörnyezetek A szakköri munka során kétféle programkörnyezetet használtunk. A 6-8. évfolyam esetén a LEGO és National Instruments közös fejlesztéseként, egy LabVIEW alapokra épülő grafikus környezetet, a 8-11. évfolyam esetén Mark Overmars által elindított fejlesztés alapján a Bricx Command Center egy szabadon használható C alapú karakteres fejlesztőkörnyezetét. Mindkét esetben a LEGO téglán ugyanaz a firmware szükséges. A forrásnyelvű programból egy bytekódot állítanak elő a fejlesztőkörnyezetek, amely feltöltve a robotra végrehajtható. A grafikus programozási környezet A 6-8. évfolyam esetén a sikeres programozás egyik gátja, hogy az absztrakt programnyelv nyelvi környezte nagyon szorosan kötött. Tehát a definiált szintaxistól nem lehet eltérni, így a lassabb és bizonytalanabb gépelési tudás csak nagyon lassú és fáradtságos munkával eredményez hibamentes programot. Ehhez még hozzájárul az algoritmusok tervezésének informatikai absztrakciója. Ezért a grafikus környezet tűnik járható útnak, annak ellenére, hogy az így készült programok nagyobb méretűek, lassabban futnak és hiányoznak a nyelvből olyan függvények, amelyek a C nyelvű változatban megkönnyítik a programozást. A nagyobb méret és lassabb futási idő annak ellenére jelentkezik, hogy ugyanaz a firmware futtaja az elkészült bájtkódot. A grafikus környezetben ikonok reprezentálják a program objektumait, amelyek listából választhatók és húzással beilleszthetők a program megfelelő helyére. Az egyes objektumok tulajdonságai egyszerűen beállíthatók, kiválaszthatók a megjelenő paraméterlistából. Használható objektumok. Kiválasztott objektum a beillesztve a programba. Program munkaterülete. Objektumlisták. Paraméterlista. Program áttöltést vezérlő ikonok. 7. ábra A grafikus környezet. Néhány példa az ikonokra és azok paraméterezésére: - 15 -

1. Output szenzor (motor) Az ikon és a paraméterlista: 2. Input szenzor (ütközés érzékelő): 8. ábra Paraméterlista a motorok vezérlésére. 3. Változók: 9. ábra Paraméterlista az ütközésérzékelő vezérlésére. Háromféle változótípus közül lehet választani: szöveg (string), szám (egész) és logikai. Alapértelmezésben a fejlesztőkörnyezetben nincs lehetőség tömbök létrehozására, de az internetről szabadon letölthetők és importálhatók kiegészítő modulok, például a tömbök kezeléséhez is. A szám típusok közül csak előjeles egészek használhatók, de figyelembe véve a szenzorok pontosságát, ez elegendő is. Új változókat az Edit/Define Variables menüpontban lehet létrehozni. 4. Programvezérlő szerkezetek: Feltételes elágazásokat (if ( ) else ) az alábbi ikon segítségével lehet megvalósítani. A felső ágra helyezett ikonok igaz esetben, míg az alsó ágra helyezettek az egyébként esetben hajtódnak végre. Egymásba ágyazhatók. - 16 -

Igaz ág Egyébként ág 10. ábra Feltételes elágazás ikonja. Ciklusokat az alábbi ikon segítségével lehet létrehozni. Kétféle vezérlési lehetőségünk van a ciklusok esetében. A rendelkezésre álló operátorok, szenzorok és változók segítségével összeállított feltételtől függő, hátultesztelő ciklus (do while( )) és egy növekményes (for ( ) ) ciklus. 5. Operátorok 11. ábra A ciklusszervezés ikonja és paraméterezési lehetőségei. Alapértelmezésben rendelkezésre álló lehetőségek: matematikai (négy alapművelet), logikai (és, vagy, kizáró vagy, valamint a tagadás), relációs (kisebb, nagyobb, egyenlő) operátorok, valamint egy intervallum típusú tartalmazás vizsgálatot lehetővé tevő operátor. 6. Objektumok közötti paraméterátadás 12. ábra A használható operátorok ikonjai. Az egyes objektumok közötti paramétereket, értékeket a programban szintén egyszerűen, egérrel lehet megvalósítani. Az egyes objektumok rendelkeznek kimeneti és bemeneti csatlakozó pontokkal (nem minden esetben mindkettővel). Ezek összekötésével lehet az értékek átadását megvalósítani. - 17 -

13. ábra A motorok paraméterátadást lehetővé tevő csatlakozó pontjai. A tényleges paraméterátadási technikát a bemutatott mintapéldáknál fogom bemutatni. 7. Egyéb lehetőségek: Sok további alapértelmezett lehetőség és bővíthető modul áll a rendelkezésre. A teljesség igénye nélkül pl.: véletlenszám generátor, szám-szöveg konverziós függvény a robot LCD képernyőjére történő íráshoz, fájlkezelés, robotok közötti bluetooth kommunikációhoz üzenetküldési és fogadási objektumok, több szálon futó (multitask) programozás A karakteres programozási környezet A karakteres fejlesztőkörnyezet egy szabadon használható free és nyílt forráskódú programkörnyezet. A keretprogram állandósága mellett az előállított kódból bájtkódot generáló programrész egy fájl cseréjét jelenti csupán. Így a folyamatosan fejlesztett program állandósága és frissítése is megoldott. A problémát éppen a folyamatos fejlesztés miatt az jelenti, hogy a használható függvények köre is bővül, de néhány esetben a régiek szintaxisa (paraméterek sorrendje) megváltozott, amit a programdokumentáció (help) nem követett. A programozás során a C nyelv szintaxisa érvényes. include állományok, változók, tömbök, struktúrák, feltételes elágazások, ciklusok, operátorok, megszokott és speciális függvények, A kis és nagybetűket a program megkülönbözteti (mint a C alapú programok). Ez jelentősen megnövelheti eleinte a gépelési hibák számát. A keretprogram felépítése hasonlít más, komolyabb fejlesztőkörnyezetek felépítéséhez. Megjelenik a menüsor, a legfontosabb parancsikonok listája a szerkesztőterület és egy objektum tallózó panel. Szintaktikai hiba esetén a szerkesztőterület alján nyílik egy új ablakrész, ahol a hiba okára és helyéré történik utalás. A bájtkód előállítása előtt automatikusan lefut egy szintaktikai ellenőrzés, és addig nem lehet a programot áttölteni a robotra, amíg ez hibajelzést ad vissza (hiszen nem keletkezik bájtkód kimenetként). A szerkesztőterületen különböző automatikus színkiemelések segítik a szintaktikai ellenőrzést. Pl. literális konstansok piros színnel, egyéb konstansok zöld színnel, függvények nevei kék színnel. A nyelvben definiált konstanskészlet tartja a C-ből megszokott konvencionálisan nagybetűs írásmódot. - 18 -

Több száz olyan függvény áll a rendelkezésre, amelyek a szenzorok beállítását, használatát teszik lehetővé, a C-ben megszokott operátorok és vezérlési szerkezetek mellett. Szintaktikai ellenőrzés. Program feltöltés. Programkód terület. Kapcsolatjelző állapotsor. 14. ábra A karakteres fejlesztőkörnyezet. Sok olyan eszköz is a rendelkezésre áll, amely megkönnyíti a programfejlesztői munkát. A Tools menü néhány funkciója (a teljesség igénye nélkül): Vezérlés a számítógépről. Egyszerű zeneszerkesztő a robot speaker-éhez. Közvetlen vezérlés a számítógépről. Fájlkezelő, a roboton lévő programok manipulálására. A robot LCD képernyőjét jeleníti meg a monitoron. Hangfájlok robotra alkalmas konverziós lehetősége. Kapcsolat felépítése a számítógép és a robot között. Firmware csere. 15. ábra Néhány használható programozást segítő eszköz. - 19 -

Elkészített programok A szakkörökön sok programot írtunk. A felépítés általában az volt, hogy kezdetben a megoldandó probléma vázlata után a szükséges programozási eszközök bemutatása, majd a konkrét programírás következett. Az alapprogramokat általában minden résztvevő megírta. A diákok programozási tudásának növekedésével a differenciált programírás került előtérbe, vagyis általában két-három fős teamek dolgoztak egy-egy feladat, projekt megoldásán, megvalósításán sok esetben több szakköri foglalkozáson keresztül. Valamennyi elkészített program bemutatására nincs lehetőség, ezért a válogatás elég önkényes. Azokat mutatom be, amelyeket valamilyen pedagógia, vagy programírási szempontból fontosnak tartok. A bemutatott programoknál szerepel a feladatspecifikáció mellett a forráskód is (a legtöbb esetben). Nem minden esetben jelenik meg mindkét programozási környezetbeli megoldás. Van olyan eset, amelynél csak az egyik változat készült el (pl. bonyolultsága miatt), vagy speciális feladat esetén csak néhányan készítették el az adott projektet. A grafikus környezetben készült programok rbt kiterjesztésű állományai, valamint a C alapú programok nxt kiterjesztésű állományai megtalálhatók a mellékelt DVD-n. Ahol nincs feltüntetve a szerző (programozó) neve, ott a szakkörön megvalósított általános megoldást mutatom be (hangsúlyozva mellette a programozási, kompetenciafejlesztési célt). A legtöbb bemutatott programhoz készült videó, amely a működés eredményét szemlélteti. Ezek egy része a szakkörökön készült, más részük utólag, de valamennyi a megírt programok alapján (a szakkörön sok esetben sem lehetőség, sem idő nem volt a videók elkészítésére). A videókat a DVD melléklet szintén tartalmazza (mov, avi és wmv formátumban), de a wmv változatokat a jelen dokumentumba is belinkeltem. Ezek lejátszása a videóhivatkozáson történő ctrl+bal klikk segítségével történhet. A legegyszerűbb programokat (pl. egyszerű motorvezérlés, ) nem mutatom be, de az első foglalkozások ezekkel kezdődtek. A programokat tartalmuk, használt programozástechnikai eszközeik és bonyolultságuk alapján bontottam kategóriákra a pályázatban megfogalmazott csomópontokat figyelembe véve. 1. programcsoport a feltételes elágazás használata, képernyőkezelés (robot LCD), egyszerű végtelen ciklusok használata a) Egymásba ágyazott elágazásokra egy egyszerű példát mutatok be, amelynek az rbt változata készült el. A példa ugyan tartalmaz egy végtelen ciklust is, de ez a feladat szempontjából irreleváns. Feladatspecifikáció: Készítsünk programot, amelyet végrehajtva a robot véletlenszerűen sorsol 1 és 3 közötti számot és a kisorsolt számot kiírja az LCD képernyőjére és ki is mondja angolul. (megj.: Természetesen magyarul is kimondhatná, ehhez rögzíteni kellene a számjegyek hangalakját tartalmazó fájlokat például vaw formátumban, majd bricx programmal konvertálni őket.) - 20 -

Forráskód (rbt) - véletlen szám sorsolás (1-3) - tárolás a Seri nevű változóban - konvertálás karakterré - képernyőre íratás - 2 mp-es várakozás - ha a sorsolt szám 1, akkor a one hangállomány a speaker-re. 16. ábra Rbt programkód: beágyazott ha. Készítette: Benkő Emese 6. évfolyam. Pedagógiai, programozási funkció A programmal lehet szemléltetni az egyes objektumok közötti paraméterátadási lehetőségeket. A sárga színű vonalak a számok, a piros színűek a karakterek, a zöld színűek a logikai értéket jelölik. A keretprogram szintaktikai ellenőrzést is végrehajt. Csak abban az esetben megfelelő színű a vonal, ha az adott szituációban jó a változótípus. A képernyőre íratáshoz a szám tárolási formáját karakteres tárolásra kell átkonvertálni. A grafikus képen jól követhető a program elágazásainak működése, valamint programozástechnikai szempontból a használható változótípusok és azok tárolása közötti különbség is magyarázható. A diákok itt szembesülnek (6. évfolyam) először azzal, hogy az 1 jelentheti a számjegyet és egy karakter is, a tárolási formától függően, amit a programozó az alapján dönt el, hogy matematikai műveletet végez-e vele, vagy szöveges műveletet. b) Lottószámok sorosolása. A képernyőkezelésre és a változók dinamikus használatára vonatkozik a következő példa. Feladatspecifikáció: Készítsünk egy programot, amelyet végrehajtva a robot véletlenszerűen sorsol öt darab egész számot az 1-90 tartományból és egymás alatti sorokban kiírja őket az LCD képernyőjére. Az rbt programváltozatnál nem kell ellenőrizni, hogy kétszer ne sorsolja ki ugyanazt az értéket, az nxc változatnál igen. Forráskód (rbt) - ha a sorsolt szám nem 1, akkor újabb feltételvizsgálat - ha kettő, akkor a two hangállomány a speakerre - egyébként a three hangállomány 17. ábra Rbt forráskód: képernyőkezelés. - 21 -

Pedagógiai, programozási funkció A programban szerepel egy növekményes ciklus, amely ötször fut le. A ciklusváltozó értékének nyolccal történő szorzása határozza meg a kiírt szám képernyőn lévő helyének y koordinátáját. (Egy karakter 8 pixel magas. A 2. és az 5. ikon közötti sárga vonal a paraméterátadás.) A program nem figyel az azonos számok sorsolására. A ciklus lefutása után a program leáll és a képernyő törlődik, azért kell egy 6 mp-es várakozást beilleszteni, hogy a kiírt számok elolvashatók maradjanak. Forráskód (nxc) #include "NXCDefs.h" task main() int szamok[],vel,csere,cv; ArrayInit(szamok,0,90); for (cv=0;cv<90;cv++) szamok[cv]=cv+1; for (cv=0;cv<5;cv++) vel=random(90-cv); NumOut(10,10+8*cv,szamok[vel],false); csere=szamok[vel]; szamok[vel]=szamok[89-cv]; szamok[89-cv]=csere; Wait(6000); Programozási ötlet A program hasonló felépítésű, mint a grafikus változat. Ami miatt érdemes bemutatni, az az ötlet, amely ugyanazon szám kétszeri kihúzását meggátolja. A programírás során mikor ez a probléma jelentkezett, akkor szinte mindenki az if ( ) else szerkezettel próbálkozott. Volt akinek sikerült is. Viszont a fenti program ötlete olyan algoritmizálási kreativitást igényel, ami miatt érdemes volt megismerkedni vele. Egy 90 elemű tömböt (0-tól 89-ig indexelve) feltöltöttünk 1-től 90-ig a természetes számokkal. Amikor a program sorsolja az első számot, akkor nem a számot írjuk a képernyőre, hanem a neki megfelelő tömbelem tartalmát és a kiíratás után ki is cseréljük az aktuálisan utolsó tömbelemmel. A következő lépésnél már csak 89 szám közül sorsolunk és az újabb csere a most aktuális 89. elemmel történik (a 88-as indexű). A cv ciklusváltozóval szabályozzuk a sorsolás számtartományát és a csere helyét, valamint a képernyőre írás helyét is. A program akkor működik matematikailag helyesen, ha a kvázi véletlen számok valóban egyenletes eloszlással sorsolódnak. A program alkalmas a csere algoritmusának és a tömbök indexelési lehetőségeinek demonstrálására is. Különösen problémás a 0-tól kezdődő indexelés és számlálás megszokása. Meg kell jegyezni, hogy az algoritmus ötlet nem okozott osztatlan sikert. - 22 -

c) Egyszerű ciklus- és szenzorhasználatra vonatkozik a következő példa. Feladatspecifikáció: Írjunk olyan programot, amelyet végrehajtva a robot a hangérzékelő által mért értéket használva vezérli a motorjait. Minél hangosabb a mért hangintenzitás, annál gyorsabban pörög a robot. Forráskód (rbt) 18. ábra: Rbt forráskód: a mért hangintenzitás erősségétől függő sebességgel forog a robot. A program egyszerű, de igen látványos. Nagy tetszést aratott. Az elkészült videó nem adja vissza teljes egészében a látványt. Nehezen hallható a hangerő változása. Porog.wmv 2. programcsoport ciklusok és elágazások együttes használata, szenzorkezelés a) Számláló. Egyszerű ciklikus növekményes számlálás. Feladatspecifikáció: Írjunk olyan programot, amelyet végrehajtva a robot az ütközésérzékelő benyomására mindig eggyel nagyobb számot ír az LCD képernyőjére, 1-től kezdődően. Ha elérte a 10-et, akkor előröl kezdi a számolást (1-től). Forráskód (rbt) 19. ábra Rbt forráskód: egyesével számol10-ig ciklikusan maradékos osztással. - 23 -

Forráskód (nxc) #include "NXCDefs.h" task main() SetSensorTouch(IN_1); int szamol=1; while(true) if (Sensor(IN_1)) TexOut(10,10,szamol%10,true); szamol++; Pedagógiai, programozási funkció A grafikus programból hiányzik a maradékos osztás függvénye (modulo). Mivel a C nyelvű környezetben rendelkezésre áll a megfelelő operátor (%), ezért ez a program jóval egyszerűbb. A tanulók életkori sajátságainak megfelelően (6-8. évfolyam), a maradékos osztás matematikából ugyan megjelenik a tanórán, de nagyon nehéz az informatikai algoritmusokra mindezt átvinni. A fenti ábrán bemutatott rbt forráskód ezt használja ki. A szamol nevű változó értékét növeli eggyel, elosztja 10-el az eredményt. Mivel csak egész számokat kezel a program, ezért az osztás eredménye a hányados csonkolt, tizedesjegyek nélküli része. Ha ezt az eredményt megszorozzuk 10-el (osztóval) és kivonjuk az eredeti számból, akkor megkapjuk a maradékot. A 10-zel osztás eredményeként 0-9 közötti maradékot kapunk, ehhez egyet hozzáadva a kiíratandó szám 1-10 közötti. Bár az algoritmust sokan megértették és néhányan sikeresen rá is jöttek a maradékképzés technikájára az alapműveletek segítségével, de a feladatot a legtöbben más módon oldották meg. Ezek közül mutatok be kettőt. Az algoritmus a matematika tantárgyi kapcsolat miatt, azonban remélhetőleg segít a modulo fogalmának elmélyítésében. Forráskód (rbt) 20. ábra Rbt forráskód: egyesével számol 10-ig ciklikusan a változó újranullázásával. 21.ábra Rbt forráskód: egyesével számol 10-ig ciklikusan növekményes ciklussal. - 24 -

b) Akadálykerülés ütközésérzékelővel. Feladatspecifikáció: Írjunk olyan programot, amelyet végrehajtva a robot egy ütközésérzékelővel képes az akadályok észlelésére és kikerülésére. A robot halad előre és ha nekiütközik valaminek (az ütközésérzékelője jelzi), akkor tolat és fordul egy rövid ideig, majd ismét halad előre. Mindezt kikapcsolásig ismétli. Forráskód (rbt) 22. ábra Rbt forráskód: akadályfigyelés és kerülés ütközésérzékelővel. Pedagógiai, programozási funkció A program igen látványos, de ugyanakkor egyszerű, az első megírt programok egyike. A szintaxis alkalmas arra, hogy a többi érzékelőt használva is hasonló programokat tudjanak írni a tanulók önállóan, ahogy azt a következő példák mutatják. A feltételes elágazás fogalmának megértését szolgálja. c) Akadálykövetés ultrahangszenzorral. Feladatspecifikáció: Utkozkerul.wmv Írjunk olyan programot, amelyet végrehajtva a robot egy ultrahangszenzorral képes egy adott távolságon belül lévő akadály észlelésére és követésére. A robot egyenletes sebességgel forog és ha egy adott távolságon belül észlel valamit (az ultrahangszenzora jelzi), akkor elindul felé mindaddig, amíg az adott távolságon belül van az észlelt akadály. Ha elveszítette (kikerült az akadály a távolságon kívülre), akkor forog újra. Mindezt kikapcsolásig ismétli. - 25 -

Forráskód (rbt) 23. ábra Rbt forráskód: akadálykövetés ultrahangszenzorral. A program felépítése az előzőhöz hasonló. Távolságként 30 cm van beállítva. Az alábbi videó két robotváltozat esetében mutatja be a program működését. Ulrasensor.wmv d) Akadályészlelés fényérzékelővel konstansként megadott érték esetén és színfüggetlenül. Feladatspecifikáció: Írjunk programot, amelyet végrehajtva a robot fényérzékelő használatával az alap színétől jól megkülönböztethető színű felületnél megáll, tolat, fordul és tovább indul előre. Mindezt kikapcsolásig ismétli. Forráskód (rbt) Pedagógiai, programozási funkció 24. ábra Rbt forráskód: fényérzékelős akadályészlelés. A program előkészítéseként az alap (asztal) felületének színét a fényérzékelővel be kell mérni és ennek megfelelően a 3. portra csatlakoztatott fényérzékelő által vezérelt elágazás - 26 -

feltételeként ehhez viszonyítva (kisebb vagy nagyobb) eseteket lehet megkülönböztetni. Az alap mért színe és az akadály mért színe közötti értéknek legalább 3-4-gyel különbözni kell, a fényérzékelő bizonytalansága miatt. Az érzékelő által mért érték nem csak a színtől, hanem a fényviszonyoktól is függ. A program előnye, hogy látványosan lehet használni például arra, hogy a robot ne essen le az asztalról. Hátránya viszont, hogy nem veszi észre az alap színétől eltérő, de a beállított relációval ellenkező abszolút irányú akadályokat. Pl.: ha az alap mért színe 60, és feltételként azt állítottuk be, hogy 50-nél kisebb mért érték esetén forduljon meg, akkor az 50-nél nagyobb mért színű akadályok fölött áthalad, pl. 70-es értéken is, pedig ez is lényegesen eltér az alap színétől. Az alábbi három videó ezt szemlélteti. Asztal_2.wmv Asztal_1.wmv Asztal_3.wmv Fekete csíknál megfordul. Asztal szélén megfordul. Fehér csíkot nem látja. Forráskód (nxc) #include "NXCDefs.h" #define ERO 50 task main() SetSensorLight(IN_3); while (true) if (Sensor(IN_3)>50) OnFwd(OUT_BC,ERO); else OnRev(OUT_BC,ERO); Wait(1000); OnFwd(OUT_C,ERO); Wait(1000); OnFwd(OUT_BC,ERO); Pedagógiai, programozási funkció A videókon bemutatott példákkal egyszerűen szemléltethető, hogy a programon belül az elágazás feltételeként beállított határértéket nem érdemes konstansként megadni, hiszen a fény- vagy terepviszonyok változása használhatatlanná teszi a programot. Olyan algoritmust érdemes írni, amely színfüggetlenül képes a feladatot megoldani. Ehhez az szükséges, hogy kezdéskor a fényérzékelővel mintát kell venni az éppen érzékelt felület színéből és ezt egy változóban eltárolni. A későbbiek során az aktuális mért érték és az eltárolt érték különbsége abszolút értékben ha eltér egy adott tűréshatártól (a programokon belül ez az érték 5), akkor kell az elágazás különböző szálain szereplő utasításokat végrehajtani. Az első olyan program, amelyhez változót szükséges létrehozni. Az fiatalabb korosztály itt találkozott először a változó fogalmával. A grafikus programozási környezet alapértelmezésben nem tartalmaz abszolútérték függvényt, ezért ennek programozása külön problémát jelent. A megoldás során pl. a - 27 -