Učenje programiranja programiranjem robota i igara

saida

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:

  1. programiranjem robota i
  2. 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:

clip_image003 clip_image005 clip_image007 clip_image009

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.

clip_image011UltraSonic Sensor clip_image013Light Sensor clip_image015Sound Sensor

clip_image017Touch Sensor clip_image0193 Servo Motors clip_image021NXT 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-Gclip_image023

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.

 

clip_image024Svaki 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.

clip_image026

 

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.

clip_image027

clip_image028

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.
clip_image029

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.

clip_image031

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

clip_image032
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

clip_image033

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:
clip_image034

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).

clip_image035

Konfiguracija bloka

clip_image036

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

clip_image037

1. Sadržaj koji će se pokazati na zaslonu.
2. Klikom se otvara mogućnost povezivanja s drugim blokovima (data hub).

Konfiguracija bloka

clip_image038

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.clip_image040

 

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.

clip_image041

Pogledajte i – video Grananje u našem razredu.

clip_image043


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.

clip_image044

Pogledajte kako ovaj primjer izgleda u stvarnosti – video Ponavljanje.

 

Programiranje robota u C++-u

clip_image045

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

Oglasi

O autoru Pogled kroz prozor

Digitalni časopis za obrazovne stručnjake, pišu ga učitelji i nastavnici.
Ovaj unos je objavljen u Uncategorized. Bookmarkirajte stalnu vezu.