Uvod
Učenike koji nisu skloni rješavanju matematičkih problema nije lako motivirati i naučiti programirati. Učenje programiranja zahtijeva sposobnost dekompozicije stvarnog problema i stvaranje općeg (apstraktnog) modela njegovog rješenja.
Zatim slijedi pisanje rješenja, odnosno kôda programa u nekom programskom jeziku. Pisanje kôda programa je za učenike naporan i demotivirajući posao jer ih najmanja pogreška u pisanju dovodi do neuspjeha.
Budući da je u učenju programiranja važnije stvoriti rješenje nego napisati kôd programa, učenje programiranja bi se trebalo temeljiti na postupku koji će učenike što više osloboditi od pisanja koda, a što bolje naučiti stvarati apstraktne modele rješenja. Uz to je važno da se stvoreno rješenje može učenicima prikazati brzo i jednostavno. U ovom projektu prikazana su dva primjera takvog učenja programiranja:
- programiranjem robota i
- programiranjem igara.
Cilj primjera (projekta) je istražiti i proizvesti metodologiju učenja programiranja pomoću edukacijskih robota.
Ostali ciljevi su:
- izraditi metodički priručnik za podučavanje programiranja korištenjem alata za programiranje igara i robota,
- učenicima omogućiti učenje programiranja kroz izradu praktičnih radova uz korištenje različitih uređaja (mobilnih telefona, web kamera, Bluetootha i sl.).
1. UČENJE OSNOVA PROGRAMIRANJA PROGRAMIRANJEM ROBOTA LEGO MINDSTORMS
Izgled i dijelovi robota
Standardni paket za rad s robotom sadrži dijelove od kojih se mogu složiti četiri različita tipa robota. To su:
Alpha Rex RoboArm TriBot Spike
Svaki tip u primjeni ima svoje prednosti i nedostatke pa tako Alpha Rex najviše troši baterije, ali ima ljudski oblik, RoboArm nije pokretan, Spike je spor. Meni je osobno najdraži TriBot jer je mobilan, brz i može uzimati i nositi različite predmete.
Robot je opremljen s četiri senzora, tri motora i jednom središnjom jedinicom koja upravlja robotom.
UltraSonic Sensor
Light Sensor
Sound Sensor
Touch Sensor
3 Servo Motors
NXT Brick
Tehničke karakteristike NXT Brick jedinice su:
- 32-bit ARM7 mikrokontroler,
- 256 KB FLASH, 64 KB RAM,
- 8-bit AVR mikrokontroler,
- 4 Kbytes FLASH, 512 Byte RAM,
- Bluetooth veza (Bluetooth Class II V2.0 compliant)
USB port (12 Mbit/s), - 4 ulazna porta, 6-kablova (uključuje IEC 61158 Type 4/EN 50 170 compliant expansion port),
- 3 izlazna porta, 6-kablova,
- 100 x 64 pixel LCD graphical display,
- Loudspeaker – 8 kHz kvaliteta zvuka. Zvučni kanal s 8-bit rezolucijom i raspon od 2 do16 KHz,
- Napajanje: 6 AA baterija.
Programsko okruženje NXT-G
Program Lego Mindstorms NXT, kao i većina današnjih programa, ima grafičko sučelje. Međutim, osim sučelja, program sadrži i grafičke naredbe za programiranje. Način na koji se programira sličan je crtanju blok-dijagrama: ne utipkava se tekst programa, već se postupkom miša „povuci i ispusti“, grafički blokovi s lijeve strane zaslona slažu u dijagram (program) s desne strane zaslona.
Može se reći da istovremeno crtamo blok-dijagram i pišemo program.
Svaki funkcijski blok, koji se nalazi s lijeve strane, ima svoju funkcionalnost koja se može namještati pomoću različitih parametara. Kombiniranjem funkcijskih blokova u dijagram može se izraditi bilo koji program.
Uobičajeni blokovi koji se koriste za izradu programa su:
- blok za pokretanje robota Move,
- blok za rad sa senzorom zvuka Sound,
- blok za prikaz teksta na zaslonu robota Display,
- blokovi za rad sa senzorom dodira Touch,
- blok za rad s petljama Loops,
- blok za rad s naredbama grananja Switch.
Sljedeća slika prikazuje izgled spomenutih blokova.
Preuzimanje i pokretanje programa u robotu
Kada se u računalu napravi program, on se USB kabelom ili Bluetooth vezom prenese u robot pomoću klika na ikonu Download i Run.
Veza robota s računalom i raspoloživa memorija robota može se provjeriti u NXT prozoru koji se otvara klikom na ikonu NXT window.
U sljedećem primjeru je vidljivo da je dostupna veza USB kabelom i Bluetoothom, s tim da je robot trenutno povezan s računalom Bluetooth vezom uz pomoć Bluetooth adaptera.
U memoriju robota može se smjestiti nekoliko programa koji se mogu izvršiti naknadno.
Učenje osnovnih algoritamskih konstrukata slijed, grananje i ponavljanje u programu NXT
Programiranje je proces stvaranje računalnog programa koji sadrži naredbe nekog programskog jezika u svrhu rješavanja određenog problema. Problem se uvijek prvo apstraktno riješi, tj. stvori se ideja za njegovo rješenje koja se sastoji od niza malih koraka.Takvo rešenje predstavljeno nizom koraka zovemo algoritam.
Algoritam se tada može predstaviti (napisati) u tekstualnom obliku (riječima) ili grafički. Tekstualno predstavljen algoritam zove se pseudo kôd, a grafički blok-dijagram.
Postoji niz metoda pisanja programa. Najčešća s kojoj započinjemo učenje programiranja je strukturno programiranje. Strukturno programiranje za stvaranje programske strukture koristi tri osnovna algoritamska konstrukta:
– slijed ili sekvencu,
– grananje i/ili
– ponavljanje.
Nabrojani konstrukti se mogu međusobno kombinirati na različite načine te se tako stvaraju manje ili više složeni algoritmi.
Cilj strukturnog programiranja je poboljšati čitljivost programa koliko je god moguće, eliminirati uporabu skokova u programu te poboljšati kvalitetu programiranja.
Kako se može programirati u programu NXT, pogledajte u primjerima u nastavku.
U ovom primjeru program se sastoji od pet naredbi poredanih u slijed, a priča glasi ovako:
Robot se kreće ravno 2 sekunde, zatim se zaustavi i kaže "Have A Nice Day", zatim na svom zaslonu pokaže Smile i nastavi se kretati još 2 sekunde.
Program za napisani scenarij izgleda ovako:
Pogledajte kako robot izvodi ovaj program u razredu – video Slijed.
Objasnimo naredbe u programu
1. Move block
Aktivnosti bloka:
– pokretanje motora: jednog (A), dva (A i B) ili sva tri motora (A, B i C),
– čekanje druge aktivnosti (next action),
– prikazivanje različitih vrijednosti (brzina, smjer, trajanje….).
Dijelovi bloka
1. Oznaka porta kojim se upravlja. U ovom primjeru su to port A i B. Ako pretpostavimo da su na te portove spojeni motori kotača robota, tada će ovaj programski blok pokrenuti robota.
2. Pokazuje smjer gibanja robota.
3. Pokazuje trenutnu snagu motora.
4. Pokazuje interval trajanja aktivnosti bloka. Mogu se odabrati: stupnjevi, rotacija ili sekunde.
Konfiguracija bloka
1. Mjesto na kojemu se označi motor kojim želimo upravljati (u ovom primjeru A i B).
2. Smjer gibanja ili zaustavljanje motora.
3. Klizač za zakretanje robota ulijevo ili udesno.
4. Podešavanje snage motora.
5. Trajanje aktivnosti, na primjer, gibanja robota. Može se namjestiti kao rotacija, trajanje u zadanom vremenu ili stupnjevi.
6. Odabir sljedeće aktivnosti. Najbolje je odabrati Brake kako bi se robot odmah zaustavio.
7. Povratne informacije o bloku.
2. Sound block
Aktivnost bloka:
– reprodukcija zvuka.
Dijelovi bloka:
1. Odabir načina reprodukcije zvuka (iz datoteke) ili proizvodnjom vlastitog.
2. Kontrola pokretanja ili zaustavljanja zvuka.
3. Podešavanje volumena zvuka.
4. Mogućnost povezivanja s drugim blokovima (data hub).
Konfiguracija bloka
1. Odabir načina reprodukcije zvuka (iz datoteke ili vlastiti).
2. Kontrole pokretanje ili zaustavljanja zvuka.
3. Podešavanje jačine zvuka.
4. Odabir mogućnosti da se reprodukcija zvuka ponavlja.
5. Odabir sadržaja zvučne datoteke.
6. Odabir vremena trajanja izvoženja sadržaja odabrane datoteke.
3. Display block
Aktivnost bloka
– prikaz teksta ili slike na zaslonu robota.
Dijelovi bloka
1. Sadržaj koji će se pokazati na zaslonu.
2. Klikom se otvara mogućnost povezivanja s drugim blokovima (data hub).
Konfiguracija bloka
1. Odabir akcije koja će se pojaviti na zaslonu robota (slika, tekst ili crtež).
2. Brisanje prethodnog sadržaja (ako je Clear uključeno).
3. Odabir datoteke s grafičkim sadržajem.
4. Pregled ispisa na zaslonu.
Postoji još niz drugih naredbi, ali s ovih nekoliko moguće je slagati jednostavne i zanimljive programe koji sadrže niz slijednih naredbi.
Kao što ste vjerojatno primijetili, parametri pojedinih naredbi se unose u za to predviđene prozore, namještaju na klizaču, unose u polja te za svaki parametar postoji grafička ikona na bloku naredbe.
Grananje u programu podrazumijeva postojanje uvjeta. Ovisno o tome je li uvjet ispunjen ili ne, odvijaju se drugačije radnje koje vode program u različitim smjerovima. Grananje grafički možemo prikazati kao na slici:
Kako to izgleda u priči s robotom?
Otprilike ovako: Robot se kreće prema naprijed 3 sekunde, zatim stane i osluškuje. Ako nešto čuje (pozdrav, pjesmu, pljesak…), tada otvori i zatvori kliješta, a ako ništa ne čuje, nastavi se kretati prema naprijed još 3 sekunde.
Pogledajte i – video Grananje u našem razredu.
Ponavljanje je algoritamski konstrukt u kojem se jedna ili više naredbi ponavljaju zadani broj puta. Ovisno gdje se uvjet ili brojač ponavljanja nalazi, razlikujemo nekoliko vrsti petlji. Na primjer, FOR petlju možemo prikazati kao na slici.
Naredbe unutar petlje ponavljaju se K puta. X je početna, a Y krajnja vrijednost od K.
Najčešće je u svakom sljedećem prolazu kroz petlju K veći za 1, mada se po potrebi može uvećavati i za drugačiju vrijednost (za 2, 3, 4 ili za bilo koji drugi broj).
Pogledajmo kako petlja izgleda u programu NXT.
Robot se kreće prema naprijed 3 sekunde, zatim stane i počne otvarati i zatvarati kliješta. U naredbi za ponavljanje zadano je da to napravi četiri puta. U istoj naredbi mogu se postavljati logički ili brojčani uvjeti, a moguće je i stanje na senzoru definirati uvjetom.
Pogledajte kako ovaj primjer izgleda u stvarnosti – video Ponavljanje.
Programiranje robota u C++-u
Lego Mindstorms robot se može programirati i u programskom jeziku C++. Od raspoloživih besplatnih alata za programiranje može se koristiti Visual C++ 2008 Express Edition ili Dev C++.
Programiranje u C++ je namijenjeno starijim učenicima koji imaju predznanje programiranja u C++ te razumiju osnovne principe objektnog programiranja.
U nastavku je primjer jednog glavnog (main) programa u kojem robot uzima loptu, a s računalom je povezan Bluetooth vezom.
Primjer glavnog programa
#include <cstdlib>
#include <iostream>
#include <string>
#include "serial.hpp"
#include "motor.hpp"
#include "sensor.hpp"
Serial bluetooth;
Motor motorA = Motor(0,&bluetooth);
Motor motorB = Motor(1,&bluetooth);
Motor motorC = Motor(2,&bluetooth);
Sensor touch = Sensor(0,&bluetooth);
using namespace std;
int main(int argc, char *argv[ ]){
if(bluetooth.connect("COM6")){
cout << "Connection OK!" << endl;
motorC.on(10);
Sleep(3000);
motorC.stop();
touch.type_and_mode(TOUCH,BOOL_MODE);
motorA.on(50);
motorB.on(50);
while(touch.read()==0){
//Wait
}
motorA.stop();
motorB.stop();
motorC.on(-10);
Sleep(3000);
motorC.stop();
}
else{
cout << "Connection not OK!" << endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}
Važno je naglasiti da je za rad s robotom u C++ potrebno preuzeti i koristiti biblioteku funkcija za rad s Bluetoothom, Bluetooth C++ library.
Umjesto zaključka mišljenja učenika:
Filip, 2. E1
Lego robot me odmah privukao jer radi pomoću blokova (slika) i time programiranje čini jednostavnijim i zanimljivijim. Jednostavnim klikom miša možemo napraviti robota tako da se pokrene, pokaže oznaku na svom zaslonu, nešto kaže i još mnogo drugih stvari. Naravno, nije sve tako jednostavno. Ima i složenijih programa koji zahtijevaju bolje poznavanje programa i mogućnosti robota. Mi smo krenuli od jednostavnih naredbi: move, display, sound pa na rad sa senzorima: touch, light, time, sound sve do obavljanja više radnji odjednom. NXT program je zabavan način programiranja.
Matija, 2. E1
Rad s NXT programom mi se svidio zato što nije teško programirati. To je za mene bila prava zabava jer svaki put kada bismo napravili vježbu, dobro bismo se nasmijaliJ . Sjećam se kada je jedan učenik stavio robotu preveliku brzinu za otvaranje kliješta pa se cijeli robot raspao. Time želim reći da svaki put kad napravimo vježbu (i onda kada mislimo da sve radi dobro), moramo sve provjeriti još jednom. Najteže mi je bilo na početku, ali kasnije, kada sam naučio raditi s programom, sve je postalo igra. Na kraju, svim korisnica robota poželio bih sreću i zabavu u radu!
Literatura
- Ander’s MindStorm page: Blueooth C++ library;
http://www.norgesgade14.dk/bluetoothlibrary.php - Osnove programiranja, ŽTŠ Zagreb: http://ss-zagreb-550.skole.t-com.hr/osnove/
- Osnove programiranja u C++, ŽTŠ Zagreb: http://ss-zagreb-550.skole.t-com.hr/C++/
- S. Deljac: Kako provoditi školske projekte: http://pil2.mscommunity.net/Portals/0/sadrzaj/skolski/index.html
- preuzeto 06. ožujka 2009.
- Jarrod Holingwoth: Borland C+ Builder 6 Developers Guide. 2003.
- Brian W. Keringhan: C Programming Language. 1988.