1 Programare Roboti
1 Programare Roboti
DESPRE PROIECT 5
SCOPUL PROIECTULUI 5
OBIECTIVE DE ÎNVĂȚARE 5
SUPORTUL DE CURS 6
[Link] OPEN ROBERTA LAB 11
Meniurile platformei OPEN ROBERTA LAB 12
Simulatorul OPEN ROBERTA SIM 16
II. LIMBAJUL NEPO 21
Categorii de blocuri 24
Categoria Acțiune (Action) 24
Categoria Control 28
Categoria Logic 31
Categoria Matematică (Math) 32
Categoria Text 35
Categoria Variabile (Variables) 36
Categoria Liste (List) 37
Categoria Funcţii (Functions) 38
Categoria Mesaje (Messages) 39
Categoria Senzori (Sensors) 39
Categoria Culori (Colors) 40
[Link]ŢII 43
Lecţia Urmărirea liniei 44
Lecţia Senzorul tactil 46
Lecţia Senzorul ultrasonic 47
IV. MATERIALE DIDACTICE 51
V. ROBOTICA COMPETIŢIONALĂ 59
Competiții de robotică organizate în România 60
Despre Asociația E-Civis 63
Despre autor 64
INDEX 67
PARTEA 2 greenfoot
PARTEA 3 PROGRAMAREA CU alice 3
PARTEA 4 PROGRAMAREA CU SCRATCH
3
CAPITOLUL 1
PLATFORMA
OPEN ROBERTA LAB
Utilizarea unui mediu de programare pentru implementarea
algoritmilor
Bună! Sunt Roberta și-ți
voi arăta cum să înveți Explorarea elementelor de interfață ale unui mediu de programare în
jucându-te cu roboți.
scopul identificării principalelor facilităţi ale acestuia
ROBOTS USER
EDIT LANGUAGE
EDIT
Acest element cuprinde un meniu în care veți găsi tot ce puteți face cu programul OPEN ROBERTA LAB:
creare proiect, export/import proiect, exemple, vizualizare cod sursă etc. În plus, puteți alege blocurile
NEPO pe care doriți să le programați, de exemplu, blocuri pentru începători sau blocuri pentru experţi.
12
RUN ON ROBOT
RUN IN SIMULATION
.. NEW ...
MY PROGRAMS ...
Generează link-ul programului curent. Îl poți partaja sau include Programul e salvat cu un nume nou.
în alte pagini web.
EXPORT PROGRAM
Utilizarea comenzii export este folosită pentru a stoca programul curent pe un dispozitiv de stocare local.
Codul XML generat va fi stocat în folderul dorit. Acest lucru este întotdeauna util dacă cloudul Open
Roberta nu este disponibil.
13
IMPORT PROGRAM
Comanda import este utilă pentru restaurarea unui program stocat pe un dispozitiv de stocare local.
WEDO EV3
MICROBIT CALLIOPE
HELP MENU
GENERAL HELP
FAQ
ABOUT
14
USER
Utilizând acest element de meniu, vă puteți administra contul de utilizator în cadrul Open Roberta Lab.
Pentru aceasta puteți utiliza următoarele submeniuri:
LOGIN
Realizează conectarea la un cont de utilizator existent. Dacă nu aveți un cont de utilizator, veți
găsi un buton pentru a vă crea unul nou.
LOGOUT
Închide contul de utilizator, dar puteți încă programa și executa programe NEPO pe robot.
CHANGE
Modifică unele dintre datele contului de utilizator, cum ar fi numele de utilizator, numele
afișat, adresa de e-mail sau parola.
DELETE USER
STATE INFORMATION
LANGUAGE MENU
Laboratorul Open Roberta este tradus în mai multe limbi. Puteţi să alegeți limba în care va fi afișat
programul apăsând butonul .Informațiile de ajutor sunt disponibile în prezent numai în limba engleză
și în limba germană.
Începând cu versiunea 2.3.0, Galeria este disponibilă permițând publicarea programelor într-o bibliotecă
educaţională. Utilizatorii conectați cu un cont pot face acest lucru făcând clic pe “editați” din bara de
meniu, urmat de un clic pe punctul de meniu “programele mele”. La următoarea vizualizare a programelor
salvate online, trebuie doar să facă clic pe pictograma galerie din partea dreaptă.
15
Simulatorul OPEN ROBERTA SIM
Mediul de simulare Open Roberta permite testarea programelor. Acest lucru este foarte util dacă nu
există un robot real la îndemână.
Programele OPEN Roberta pot fi rulate pe roboți reali sau în mediul de simulare. În simulare este disponibil
un model simplu de robot 2D.
Mediul de simulare pentru robotul 2D va fi afișat făcând clic pe butonul
SIM din dreapta mediului de programare. Același buton SIM poate fi
utilizat pentru a închide mediul de simulare. În mediul de simulare există mai
puține blocuri de programare executabile decât în mediul EV3. Acest lucru se
datorează modelului robot simplu disponibil în prezent în mediul de simulare.
BUTOANELE DE CONTROL ÎN OPEN ROBERA SIM În colțul din stânga jos al ferestrei de
simulare există câteva butoane pentru
a controla simularea robotului într-un
anumit mediu definit de o imagine numită
scenă. Butoanele disponibile în mediul de
simulare sunt diferite în funcţie de tipul
ÎNCĂRCARE SCENĂ PROPRIE de robot selectat dintre cei prevăzuţi în
AFIȘARE DATE SENZORI mediul Open Roberta Lab.
AFIȘARE ECRAN BRICK EV3
SCHIMBĂ SCENA Imaginea alăturată prezintă butoanele
START PROGRAM disponibile pentru modelul EV3.
16
PORNIREA UNUI PROGRAM PE ROBOT
Pentru a verifica un program, faceți clic pe butonul de pornire din colțul din dreapta jos al ecranului
sau EDIT - RUN.
Codul va fi compilat și trimis către robot pentru a fi executat. Veți primi un mesaj pe prima linie din
fereastra Open Roberta care vă anunţă când robotul va începe să execute programul.
SCHIMBĂ SCENA
Mediul de simulare poate fi schimbat. Există 6 medii standard prezentate în imaginile de mai jos, la
care se pot adăuga medii personalizate adăugate de utilizator.
Schimbarea scenei poate fi realizată când simulatorul este activat, fie folosind butonul din stânga sus
din ferestrei principale, fie folosind butonul din bara ce apare în simulator în stânga jos.
17
BRICK-UL ROBOTULUI EV3
Făcând clic pe butonul din mediul de simulare, se va afișa brick-ul robotului. Toate
butoanele programabile ale brick-ului pot fi accesate cu mouse-ul. Lumina de stare a
unui EV3 poate fi verde, portocalie sau roșie.
Folosind butonul de încărcare, utilizatorul poate adăuga scene proprii, realizate cu diferite editoare
grafice, în lista scenelor standard.
Exemple de scene personalizate:
18
ROBOTUL 2D ROBERTA EV3
Robotul 2D Roberta EV3 este format din următoarele componente ce pot fi utilizate în programele de
simulare:
SENZOR ULTRASONIC
SETĂRI ROBOT 2D COMPATIBILE
CU ROBOTUL EV3
SENZOR DE CULOARE
BARIERĂ ULTRASONICĂ
LED
SENZOR TACTIL
ROATĂ + MOTOR
DISTANȚA MINIMĂ
2 roți alimentate de motoare; 1 led care poate afișa lumină roșie, portocalie sau verde; 1 senzor
de culoare pentru detectarea culorilor pe sol; 1 senzor ultrasonic în față; 1 senzor tactil integrat
în bara de protecție
ROBOTUL 3D EV3
19
CAPITOLUL 2
LIMBAJUL
NEPO
Utilizarea unui mediu de programare pentru implementarea
algoritmilor
Bună! Sunt Roberta și-ți
voi arăta cum să faci Aplicarea etapelor pentru dezvoltarea unei aplicații folosind un mediu
primul program.
de programare: editare cod sursă, compilare, executare, testare și
depanare prin analogie cu mediile interactive care utilizează blocuri
grafice
Un bloc NEPO reprezintă și încorporează o anumită funcționalitate a robotului. Blocuri sunt organizate pe
categorii, în funcţie de acţiunile pe care le pot programa, de exemplu senzori. Blocurile sunt interconectate
și vor fi executate de robot conform ordinii lor, începând cu blocul start. Acest principiu se numește
programare secvențială.
În programarea cu NEPO, fiecare program începe cu blocul start. Acest bloc este adăugat întotdeauna în
mod implicit în spațiul de lucru Open Roberta Lab. Primul bloc pe care îl veți executa este conectat cu
conectorul de secvență al blocului start.
BLOCURILE NEPO
Open Roberta Lab oferă două opțiuni atunci când selectează blocurile existente: Începător și Expert.
Modul Începător este cel implicit. Această categorie include 8 blocuri care sunt cele mai importante
pentru programarea unui robot. Modul Expert include în plus trei categorii de blocuri: “Liste”, “Funcții”
și “Mesaje”.
22
MENIUL CONTEXTUAL
Conectorul permite blocurilor NEPO să fie inserate în alte blocuri. În total, există șase tipuri de intrări și
ieșiri în cadrul NEPO. Aceste tipuri pot avea următoarele culori:
23
PARAMETRII
Valorile pot fi transferate de la un bloc la altul. Tipul valorii transferate poate fi identificat de conectorul
unui bloc. În capitolul Categorii de blocuri puteți vedea diferitele valori pe care un bloc le poate avea.
Blocurile pot fi conectate numai când culorile conectorului de intrare și ieșire se potrivesc. Un bloc poate,
de asemenea, să treacă opțional o valoare (numai una) unui alt bloc. Aceste blocuri au conectorii de
ieșire coloraţi.
O caracteristică specială a blocurilor de senzori în comparație cu blocurile de acțiune este faptul că multe
blocuri de senzori returnează o valoare. Tipul de valoare returnat de un bloc de senzor corespunde culorii
conectorului.
ACTIVITATE PRACTICĂ
În funcţie de culoarea conectorilor, precizaţi tipurile de intrări/ieșiri pentru blocurile de mai jos.
Categorii de blocuri
CATEGORIA ACȚIUNE (ACTION)
Categoria Actiune conține blocurile care efectuează o acțiune asupra robotului LEGO MINDSTORMS EV3:
• Blocuri pentru controlul motoarelor
• Blocuri pentru a controla afișajul
• Blocuri pentru a controla lumina de stare
• Blocuri pentru a controla difuzorul
24
În modul expert, categoria Acțiune este împărțită în următoarele subcategorii:
ACTIVITĂȚI PRACTICE
1.1. PĂTRAT
Realizaţi un program care va face ca robotul să traseze un pă[Link]ţi blocurile pentru controlul
motoarelor:
și
Resurse necesare:
SOLUŢIE
TEME DE DISCUŢII:
25
Resurse necesare:
SOLUŢIE
TEME DE DISCUŢII:
1.3. CÂNTECEL
SOLUŢIE
26
1.4. AVERTIZARE
SOLUŢIE
1.5. CERC
Folosind blocul care controlează roţile, realizaţi un program care să facă robotul să deseneze un cerc.
Resurse necesare:
SOLUŢIE
27
APLICAŢII PROPUSE
• Realizaţi un program care va face ca robotul să emită semnale luminoase şi acustice când se
deplasează, ca o mașină de pompieri.
• Realizaţi un program care deplasează robotul în cerc pentru a desena o floare.
• Realizaţi un program care deplasează robotul pentru a desena un fluture.
ACTIVITĂȚI PRACTICE
2.1. PĂTRAT
Realizaţi un program care va face ca robotul să traseze un pătrat cu un număr minim de blocuri. Folosiţi
blocurile , și
Resurse necesare:
2. CATEGORIA CONTROL
SOLUŢIE
28
2.2. STEA
Realizaţi un program care va face ca robotul să traseze desenul din imaginea alăturată.
Folosiţi blocurile:
Resurse necesare:
2. CATEGORIA CONTROL
SOLUŢIE
2.3. ROMB
Realizaţi un program care va face robotul să traseze un romb ca în imaginea alăturată.
Folosiţi blocurile:
Resurse necesare:
29
2. CATEGORIA CONTROL
SOLUŢIE
2.4 VIRAJE
Dacă un traseu are curbe, robotul trebuie să vireze la stânga sau la dreapta. Pentru simularea virajelor,
în exemplul de mai jos se folosesc două blocuri corespunzătoare celor două roți în vederea setării
parametrilor motoarelor asociate acestora. Motoarele standard în EV3 sunt notate cu B și C.
Folosiţi blocurile:
și
Resurse necesare:
2. CATEGORIA CONTROL
SOLUŢIE
30
APLICAŢII PROPUSE
• Realizaţi un program care va face robotul să meargă pe traseul din imaginea de mai jos,
scena Roberta.
CATEGORIA LOGIC
Cu blocurile logice puteți crea condiții. Cu această condiție puteți interconecta stări, valori și evenimente
între ele.
ACTIVITĂȚI PRACTICE
3.1. COMPARĂ
Realizaţi un program care va face robotul să înainteze până când se apasă tasta Enter.
Folosiţi blocurile:
Resurse necesare:
31
3. CATEGORIA LOGIC
SOLUŢIE
APLICAŢII PROPUSE
• Realizaţi un program care va face robotul să se rotească în cerc până când se apasă tasta ESC.
• Realizaţi un program care va face robotul să se deplaseze 5 secunde. Folosiţi blocul:
Folosind blocurile matematice, utilizatorul poate genera expresii, calcula valori, valida date și seta o
valoare implicită. În limbajul NEPO sunt disponibile următoarele blocuri matematice în modul Începător:
PARAMETRU DE CALCULAT
CONSTANTE ROTUNJIRE
32
CONSTRÂNGEȚI
FRACȚIUNE ALEATORIE
ALEATORIU ÎNTREG
ACTIVITĂȚI PRACTICE
Resurse necesare:
4. CATEGORIA MATH
SOLUŢIE
4.2. BISECTOARE
Realizaţi un program care va face ca robotul să traseze o linie de la (0,0) la poziția (40, 40).
Folosiţi blocurile:
33
Resurse necesare:
Folosim blocul calcul pentru a aduna, ridica la putere şi pentru a extrage rădăcina
pătrată: ((40²) + (40²) 0,5) = 56,57.
4. CATEGORIA MATH
SOLUŢIE
4.3. ROMB
Realizaţi un program care va face robotul să traseze un romb cu diagonalele egale cu
120 cm, ca în imaginea alăturată.
Folosiţi blocurile:
Resurse necesare:
34
4. CATEGORIA MATH
SOLUŢIE
Folosind calculul matematic vom obține o soluție îmbunătățită față de soluția 2.3 obținută prin încercări.
APLICAŢII PROPUSE
• Generaţi 15 numere aleatoare de la 301 la 400 şi afişaţi-le câte 5 pe linie. Explicaţi rolul
și valorile parametrilor din blocul random. Enumeraţi blocurile pe care le folosiţi şi rolul
acestora. Prezentaţi rezultatul în faţa colegilor.
• Desenaţi un brad. Explicaţi paşii pe care robotul îi are de urmat. Enumeraţi blocurile pe care
le folosiţi şi rolul acestora. Prezentaţi rezultatul în faţa colegilor.
• Care dintre soluțiile următoare credeți că ar fi mai simplă pentru realizarea programului?
1. Desenăm 3 triunghiuri de laturi diferite.
2. Desenăm conturul bradului după ce am calculat laturile și unghiurile.
CATEGORIA TEXT
ACTIVITĂȚI PRACTICE
TEXT COMPUS
Realizaţi un program în care un mesaj e compus din text, număr şi culoare.
Folosiţi blocurile:
35
Resurse necesare:
Pot fi realizate texte combinând orice tip de dată din lista de mai jos:
» Valoarea logică (albastru deschis)
» Număr (albastru închis)
» String / Text (verde)
» Culoare (galben)
» Listă (purpuriu)
APLICAŢII PROPUSE
• Afișați pe ecranul EV3 tabelul de adevăr pentru operatorul AND:
True And True = True
True And False = False
False And True = False
False And False = False
Blocurile Variabile sunt folosite pentru a crea variabile utilizate în programele NEPO ca parametrii în
blocurile condiţionale sau repetitive. Pentru a crea o variabilă, faceţi clic pe semnul + din blocul start.
Fiecare variabilă trebuie creată înainte de a fi utilizată. Fiecare variabilă trebuie să aibă un nume și un tip
ce poate fi număr, boolean, șir, culoare, conexiune, listă. În numele variabilei nu sunt permise caracterele
speciale și semnul spațiu. În limbajul NEPO sunt disponibile pentru categoria variabile următoarele
blocuri:
36
ACTIVITĂȚI PRACTICE
6.1. OBSTACOL
Realizaţi un program care va face ca robotul să se întoarcă cu 180 grade la X cm distanţa faţă de locul de
plecare, unde X este un număr cuprins între 25 şi 70.
Folosiţi blocurile:
Resurse necesare:
SOLUŢIE
APLICAŢII PROPUSE
• Realizaţi un program care va afișa pe ecranul Ev3 tabla înmulțirii cu X, unde X este un
număr cuprins între 1 și 9.
• Realizaţi un program care va afișa pe ecranul Ev3 aria pătratului cu latura X, unde X este
un număr cuprins între 20 și 100.
• Realizaţi un program care va afișa X cercuri de rază R, unde X este un număr cuprins între
1 și 9 și R un număr cuprins între 1 și 100.
O listă este o secvență de date de același tip într-o succesiune fixă. Cu blocul liste din NEPO se pot realiza
variabile de tip listă ce pot conține numere, texte, boolean, culori și conexiune, imagini.
37
ACTIVITĂȚI PRACTICE
7.1. SUMA
Realizaţi un program care va calcula suma numerelor dintr-o listă dată.
Folosiţi blocurile:
Resurse necesare:
7. CATEGORIA LISTE
SOLUŢIE
APLICAŢII PROPUSE
• Realizaţi un program care să calculeze suma numerele dintr-o listă de 3 variabile a, b, c.
• Afișați culorile dintr-o listă de culori.
• Verificați dacă culoarea RED este prima într-o listă de culori.
• Creați o variabilă de tip listă și afișați pe ecranul EV3 valorile din lista numerică.
Cu blocurile Funcții puteți crea programe complexe mai ușor de citit. NEPO oferă câteva blocuri de funcții:
38
În exemplul de mai jos funcția suma calculează suma a două variabile a și b.
Doi roboți EV3 pot schimba mesaje. Este necesar ca Bluetooth să fie activat pe roboții EV3 participanți.
Unul dintre roboții implicați stabilește conexiunea cu celălalt robot (bloc expert: se conectează la numele
robotului).
Celălalt robot așteaptă un apel de conectare (bloc expert: așteptați conexiunea). Aceasta funcționează
similar cu apelurile telefonice: un apelant formează numărul unui partener de comunicare. Când este
stabilită conexiunea, roboții pot schimba mesaje în ambele direcții.
39
CATEGORIA CULORI (COLORS)
Senzorul de culoare/lumină
Aceste trei setări suplimentare transmit toate aceleași date de tip numeric.
Valorile numerice sunt între 0 (negru) și 100 (alb). Cu aceste setări diferite,
acest bloc poate fi configurat în funcție de cerințele specifice.
În modul color, senzorul emite lumină și detectează culoarea de bază de
sub senzor. Recunoaște 7 culori (negru - BLACK, maro - BROWN, albastru
- BLUE, verde - GREEN, galben - YELLOW, roșu - RED, alb - WHITE) și fără
culoare - GRAY.
În modul lumină, senzorul emite lumină prin LED-ul său roșu și măsoară intensitatea luminii reflectate pe
o scară de la 0 la 100, (0 = foarte întunecată și 100 = foarte luminoasă).
În modul lumină ambientală se utilizează aceeași scală (0-100) ca în modul lumină. În imaginea alăturată
se măsoară lumina ambientală care este percepută de senzor.
40
Senzorul ultrasonic
Cu blocul obține distanța/prezența se transmite unui alt bloc distanța măsurată de senzorul ultrasonic.
Distanţa este transmisă ca un număr, în cm.
În plus, acest bloc poate fi setat la “prezență” din meniul derulant. Această setare poate verifica dacă
un alt senzor ultrasonic este activ. Această setare este specifică valorii logice true dacă un alt senzor
ultrasonic este prezent sau false dacă niciun alt senzor ultrasunet nu este prezent.
Dacă valoarea nu a fost trimisă de propriul senzor ultrasonic, poate duce la măsurători eronate. Dacă
a fost selectat “distanța”, un număr care indică distanța în cm dintre senzorul ultrasonic și obstacol, se
transmite unui alt bloc.
ACTIVITĂȚI PRACTICE
11.1. Realizaţi un program care face ca robotul să emită un semnal sonor la întâlnirea unui obstacol.
SOLUŢIE
SOLUŢIE
11.3. Realizaţi un program care afişează imaginea flowers până când senzorul tactil este apăsat. După ce
s-a oprit robotul, pe ecran să apară imaginea eyes open.
SOLUŢIE
41
11.4. Realizaţi un program care, utilizând senzorul de culoare, să deplaseze robotul până la o linie verde.
SOLUŢIE
TEME DE DISCUŢII:
APLICAŢII PROPUSE
• La întâlnirea unui obstacol robotul să Puteți căuta mai mult de o culoare cu senzorul de
emită un semnal sonor. culori?
• Robotul să se oprească când senzorul
cu ultrasunete este la 20 cm distanță Puteți identifica obiecte folosind senzorul
de un obstacol. ultrasonic?
42
CAPITOLUL 3
LECȚII
Utilizarea unui mediu de programare pentru implementarea
algoritmilor
Bună! Sunt Roberta și-ți
voi arăta cum să faci
primul program pentru Elaborarea codului sursă pentru controlul robotului didactic virtual prin
un concurs utilizarea și interpretarea datelor primite de la senzorii acestuia: evitarea
obstacolelor, menținerea echilibrului, reacții specifice la detectarea
luminii sau a identificării unui traseu marcat etc.
III. Lecţii
ACTIVITATE PRACTICĂ
Programați robotul să se deplaseze pe un traseu dat.
44
Resurse necesare:
REZOLVARE
SOLUŢIE 3 Programul pentru urmărirea liniei până când un senzor este activat
45
SOLUŢIE 4 Programul optimizat cu variabile
APLICAŢII PROPUSE
• Programaţi un robot să urmeze o linie pe o anumită distanță.
• Programaţi un robot să urmeze o linie până la tastarea ESC.
• Programați robotul să se oprească exact la a treia linie din imaginea alăturată.
Trebuie să utilizați o buclă și un senzor! Ce senzor veți folosi?
Obiectivele lecției
La sfârșitul lecției elevii vor ști: TEME DE DISCUŢII:
• să programeze un robot să urmeze o linie utilizând senzorul Când ai putea folosi senzorul
tactil tactil?
• să programeze un robot să urmeze o linie utilizând blocul
aşteaptă (Wait)
Comanda cea mai utilizată a senzorului este de amortizare. Amortizoarele sunt cele mai simple modalităţi
de a interacţiona cu mediul înconjurător; ele permit robotului să detecteze obstacolele în momentul în
care le ating, aceştia schimbându-şi orientarea corespunzător. Senzorul tactil poate avea trei aplicaţii:
apăsat, eliberat sau de amortizare.
În OPEN ROBERTA LAB senzorul este practic ca un întrerupător True / False. Este util pentru programarea
mișcării până când senzorul de atingere este apăsat / eliberat. De exemplu, dacă puneți un senzor tactil în
fața robotului, îl puteți opri din mișcare. De asemenea, puteți porni sau opri programul când este apăsat
un senzor tactil.
ACTIVITĂȚI PRACTICE
46
Resurse necesare:
REZOLVARE
Obstacol pentru ca senzorul tactil
să fie apăsat la Start.
APLICAŢII PROPUSE
• Programați robotul să se miște până când atinge un obstacol, apoi să se întoarcă și să
pornească la dreapta cu 90 de grade.
Obiectivele lecției
La sfârșitul lecției elevii vor ști:
TEME DE DISCUŢII:
Daţi exemple de utilizare a senzorului ultrasonic în viaţa reală.
Sugestii:
47
Senzorul ultrasonic permite robotului să detecteze obiecte. El mai poate fi folosit pentru a evita obstacole,
să măsoare distanţe şi să detecteze mişcarea.
ACTIVITĂȚI PRACTICE
Scrieţi un program pentru un robot care, folosind un senzor ultrasonic, să se întoarcă cu 180 de grade
dacă este la 30 cm distanță faţă de un obstacol.
Resurse necesare:
REZOLVARE
O problemă clasică de concurs în care este folosit senzorul ultrasonic este deplasarea constantă a
robotului la o anumită distanţă faţă de un perete. Pentru a realiza această cerinţă vom folosi un robot pe
care senzorul ultrasonic să fie amplasat lateral.
APLICAŢII PROPUSE
• Citiţi programul de mai jos şi precizaţi reacţiile robotului.
48
• Scrieţi un program pentru un robot care urmează paşii de
mai jos:
» Pleacă de la START
» Mergi spre Nord și atinge peretele Roteşte spre Vest și
NU atinge peretele.
» Mergi spre Sud și NU atinge peretele.
» Roteşte și mergi la peretele din Vest.
» Roteşte și mergi la STOP.
49
CAPITOLUL 4
MATERIALE
DIDACTICE
IV. Materiale didactice
Învățarea orientată spre probleme nu are legătură cu succesul sau eșecul. Este vorba despre a fi activ
învățând, construind și testând continuu ideile. Acest lucru trebuie înţeles şi exersat de elevi.
SISTEMUL DE MEDALII:
ÎNŢELEGEREA CERINŢELOR
52
IDENTIFICAREA RESURSELOR
PROGRAMAREA SOLUŢIEI
VERIFICAREA SOLUŢIEI
53
VERIFICAREA SOLUŢIEI
Învăţarea prin intermediul roboţilor este un mijloc de dobândire şi utilizare a cunoştinţelor prin acţiune,
este o activitate de gândire orientată spre soluționarea unor probleme, spre găsirea căilor în vederea
depăşirii unor obstacole, stimulează procesul de instruire, îl adânceşte şi-l ameliorează. Învăţarea cu
roboţi oferă un cadru propice pentru învăţarea activă, participativă, stimulând în acelaşi timp iniţiativa şi
creativitatea elevilor.
Învăţarea cu roboţi se poate concretiza în activităţi competiţionale concepute pentru grupe de elevi
sau individual. În timpul jocului fiecare elev acţionează în ritmul său şi rezolvă sarcina prin mijloacele
operaţionale de care dispune. Ca urmare, învăţarea prin intermediul roboţilor activează elevii în procesul
instructiv-educativ şi, în aceeaşi măsură, vizează pe fiecare elev în parte, asigurând astfel un învăţământ
diferenţiat.
Pe de altă parte, întrecerea este condiţionată de procesul de instruire, calitatea şi rezultatele fiind
determinate de o bună pregătire anterioară.
Evaluarea finală a modului de robotică se poate realiza prin organizarea unui miniconcurs. Este de
preferat ca în organizarea acestuia, să fie implicaţi elevii în stabilirea misiunii, realizarea scenei, a spaţiului
de concurs, în stabilirea regulamentului.
Fiecare concurs are un regulament propriu în funcţie de obiectivele propuse, de categoriile de vârstă ale
concurenților, de tipurile de roboţi folosiţi, tipurile de probleme rezolvate, etc.
În vederea participării la un concurs de robotică, pregătirea echipei trebuie să se facă având în vedere
următoarele elemente:
54
Termeni utilizaţi în concursurile de robotică
ACTIVITĂȚI PRACTICE
Studiați concursurile RoboSmart Junior și Concursul FIRST 2016, prezentate mai jos. Comentați
diferențele și asemănările dintre misiunile celor două concursuri. Enunțați o misiune pentru un concurs
nou. Desenați scena pentru misiunea enunțată mai sus. Stabiliți un regulament pentru misiunea enunțată.
Dați un nume concursului vostru.
Regulament:
» Fiecare echipă are la dispoziție 5 încercări cronometrate dintre care se ia cel mai bun timp obținut.
» Fiecare echipă are la dispoziție 30 de minute pentru a pregăti programul pentru testele oficiale, după
care echipele se vor prezenta la baza. În timpul testelor oficiale, echipele au dreptul să optimizeze
programul până sunt chemate la pistă.
» Dacă robotul pierde linia, acesta trebuie să reia singur traseul dintr-un punct atins anterior sau chiar
din punctul de unde a pierdut linia. Dacă nu poate relua singur traseul, atunci punctul în care a pierdut
linia este considerat cel mai înaintat punct în care a ajuns robotul.
» La un test oficial, fiecare echipă are dreptul la 2 încercă[Link]ă robotul nu ajunge la capăt din 2
încercări atunci este notat cel mai înaintat punct în care a ajuns la acel test.
» La finalul fiecărui test oficial echipele au la dispoziție 10 minute pentru a face optimizări la program.
55
CAPITOLUL 5
ROBOTICA
COMPETIȚIONALĂ
V. Robotica competiţională
În acest moment, robotica competiţională este practicată în cluburi, cercuri, palate, centre de excelență,
ONG-uri. Activitatea competiţională presupune cunoştinţe aprofundate, soluţii inovative, multe ore de
muncă, teste încercări. Competiţiile recunoscute de MEN în calendarele competiţionale preuniversitare
şi universitare sunt pentru toate categoriile de vârstă (sub 12 ani, 13-15 ani, 16-19 ani, peste 19 ani).
De regulă, la începutul anului competiţional se anunţă o temă, o problemă pentru care o echipă se
pregăteşte pe tot parcursul anului. Temele variază de la întrecerile clasice precum urmărirea liniei, labirint
cu linii, labirint cu pereţi, Sumo, LaserMaxx (plasarea a patru roboţi autonomi pe un ring circular, unde
scopul este evitarea ieşirii din teren şi lovirea cu laserul a adversarilor) până la teme tehnice, ecologice,
sociale.
FIRST® LEGO® League este un program dedicat copiilor și tinerilor (9 - 16 ani), ce are ca scop introducerea
acestora în lumea fascinantă a ştiinţei şi tehnologiei, prin intermediul unei abordări sportive.
Obiectivele FIRST® LEGO® League sunt de a entuziasma copiii și tinerii cu privire la stiința și tehnologie,
familiariza participanții cu ideea de spirit de echipă, încuraja copiii și tinerii să rezolve sarcini complexe
într-un mod creativ.
Componenta de baza a FIRST® LEGO® League este reprezentată de un turneu de robotica organizat într-o
atmosferă veselă, în cadrul căruia copiii și tinerii (12 – 19 ani) sunt provocați să rezolve o “misiune”
complicată, cu ajutorul unui robot. Copiii, organizaţi în echipe, vor cerceta un subiect dat, vor planifica
şi realiza programarea şi testarea unui robot autonom pentru a rezolva misiunea dată. Echipele FIRST®
LEGO® League au posibilitatea de a experimenta toate etapele din cadrul procesului de dezvoltare al
unui produs real: rezolvarea unei probleme sub presiunea timpului, cu resurse insuficiente și a unor
concurenţi necunoscuţ[Link] are și etapă internațională.
[Link]
World Robot OlympiadTM este un concurs dedicat ştiinţei şi tehnicii, care doreşte antrenarea unui număr
cât mai mare de tineri din întreaga lume, cu scopul de a le stimula şi dezvolta creativitatea şi spiritul
inovativ. WRO este o competiție pentru echipe. Pentru a participa la fiecare Categorie din competiție
elevii trebuie să lucreze în echipe. O echipă este formată dintr-un antrenor și doi sau trei membri.
Obiective
• Furnizează elevilor, cu vârste de până la 19 ani, oportunitatea de a-şi extinde orizonturile prin
intermediul sistemelor robotice existente în şcoli;
• Introducerea conceptului de ştiinţe moderne în activităţile curriculare din instituţiile de
invăţământ;
• Oferă oportunitatea de a promova gândirea creativă, de a îmbunătăţi abilităţile de comunicare,
de a consolida capacitatea de a dobândi noi cunoştinţe, cele mai relevante pentru educaţie;
• Reunește tineri din întreaga lume cu scopul de a le dezvolta creativitatea şi abilităţile practice;
60
Programare in java cu greenfoot
Dublu click pe el
Daca apare eraoare
Si
Apare pagina principala de creare a interfetei
Crearea claselor
Fundalul cuclick dreapta
Deschiderea unuia facut
Crearea unei clase
Import clase
C:\Program Files\Greenfoot\scenarios\stride\pengu
Pot vedea si continutul claselor care pot fi contruite in dreamwever
Run
Class World
[Link]
[Link]
Class Actor
[Link]
[Link]
import [Link].*;
import greenfoot.*;
/**
* This is the whole scene. It creates and contains the objects that are in it.
*/
/**
*/
public Scene()
Clasa cliff
Esc
// WARNING: This file is auto-generated and any changes to it will be overwritten
import [Link].*;
import greenfoot.*;
/**
*/
/**
*/
public Cliff()
/**
* Create a horizontally mirrored cliff face.
*/
if (flip) {
getImage().mirrorHorizontally();
/**
*/
/* nothing to do*/
import [Link].*;
import greenfoot.*;
/**
* A cloud that moves back and forth between two defined points.
*/
/**
* Move in the direction we are currently moving in. Turn if we reach a turning point.
*/
{
setLocation(getX() + speed, getY());
if (actor != null) {
if (atTurningPoint()) {
speed = - speed;
/**
*/
import [Link].*;
import greenfoot.*;
/**
*/
/**
*/
checkKeys();
checkFall();
/**
*/
if ([Link]("left")) {
setImage("[Link]");
moveLeft();
if ([Link]("right")) {
setImage("[Link]");
moveRight();
}
if ([Link]("space")) {
if (onGround()) {
jump();
/**
*/
setVSpeed( - jumpStrength);
fall();
/**
* Check whether we are falling. If so, fall. If we're on ground, stop the fall.
*/
if (onGround()) {
setVSpeed(0);
else {
fall();
}
}
Declar metodele
Aplicatia 2
import greenfoot.*;
{
public Credits()
if("enter".equals(key))
[Link](new Startscreen());
import greenfoot.*;
if(won)
else
if("enter".equals(key))
[Link](new Startscreen());
import greenfoot.*;
public How()
if("enter".equals(key))
{
[Link](new Startscreen());
import greenfoot.*;
int dias;
public MyWorld()
newtime = 400;
suntimer = [Link](100);
dias = 0;
timeprogress = 0;
[Link](45);
timer--;
suntimer--;
timeprogress++;
[Link]().setColor([Link]);
if(!dead)
Actor zomb;
if(timeprogress >= 3000)
if([Link](5) == 1)
else if([Link](2) == 1)
else
else if([Link](2) == 1)
else
}
}
else
y = (y-125)/50;
spiderlogs[y] = spiderlogs[y] + 1;
timer = newtime;
newtime -= 20;
else
newtime--;
if(suntimer < 0)
{
[Link](new EndWorld(true));
dias += 25;
return dias;
dias -= costs;
return dead;
if(spiderlogs[i] != 0)
return false;
return true;
import greenfoot.*;
int auswahl;
boolean pushed;
public Startscreen()
[Link](50);
auswahl = 1;
pushed = true;
if(("s".equals(key) || "down".equals(key)))
{
if(auswahl == 3)
auswahl = 1;
else
auswahl++;
setBackground("start"+auswahl+".png");
pushed = true;
if("w".equals(key) || "down".equals(key))
if(auswahl == 1)
auswahl = 3;
else
auswahl--;
setBackground("start"+auswahl+".png");
pushed = true;
if("enter".equals(key))
{
switch(auswahl)
case 1:
[Link](new MyWorld());
break;
case 2:
[Link](new How());
break;
case 3:
[Link](new Credits());
break;
Sectiunea actor
/**
*/
{
/**
* Act - do whatever the Back wants to do. This method is called whenever
*/
import greenfoot.*;
getImage().scale(800, 550);
getImage().scale(800, 550);
}
SPIDER
import greenfoot.*;
import [Link].*;
boolean start;
Actor healthbar;
double scale;
public Spider()
leben = 100;
getImage().scale(50, 50);
start = false;
if(!start)
[Link]().setColor([Link]);
start = !start;
if(!getWorldOfType([Link]).gibdead())
move(-speed);
[Link](new EndWorld(false));
if(isTouching([Link]))
leben -= 25;
getWorld().removeObject(hit);
changehealthbar();
if(isTouching([Link]))
leben -= 34;
getWorld().removeObject(hit);
changehealthbar();
if(isTouching([Link]))
leben -= 20;
getWorld().removeObject(hit);
changehealthbar();
if(leben <= 0)
int y = (getY()-125)/50;
getWorldOfType([Link]).spiderlogs[y] = getWorldOfType([Link]).spiderlogs[y] -
1;
getWorld().removeObject(healthbar);
getWorld().removeObject(this);
}
public int health()
return leben;
if(leben > 0)
[Link]().clear();
[Link]().setColor([Link]);
[Link]().setColor([Link]);
public Spiderblack()
leben = 100;
setup();
speed = 1;
}
public void act()
loop();
public Spiderblue()
leben = 100;
setup();
speed = 3;
loop();
import greenfoot.*;
public Spiderpink()
{
leben = 200;
setup();
speed = 2;
loop();
public cooldown()
[Link](7, 70);
[Link]();
[Link]([Link]);
setRotation(180);
int timer;
public dia()
getImage().scale(50, 50);
timer = 150;
timer--;
getWorldOfType([Link]).clickeddia();
getWorld().removeObject(this);
if(timer < 0)
getWorld().removeObject(this);
}
}
import greenfoot.*;
public egg()
if(!getWorldOfType([Link]).gibdead())
setLocation(getX() + 5, getY());
getWorld().removeObject(this);
import greenfoot.*;
public class greenegg extends egg
public greenegg()
getImage().scale(50, 50);
loop();
public redegg()
getImage().scale(50, 50);
loop();
public whiteegg()
getImage().scale(50, 50);
loop();
public healthbar()
{
GreenfootImage image = getImage();
getImage().scale(70, 7);
[Link]();
[Link]([Link]);
public progress()
getImage().scale(1, 25);
boolean pressed;
public shooter()
{
timer = 70;
setup();
place();
shoot(new whiteegg());
getImage().scale(50, 50);
pressed = false;
oldtimer = timer;
if(mouse != null)
if([Link]() == 1 && [Link]() > 100 && [Link]() > 50 && [Link]() < 500)
if(getOneIntersectingObject([Link]) == null)
pressed = true;
y = (getY()-125)/50;
}
}
if(!pressed)
setLocation(calcX(mouse), calcY(mouse));
if(pressed)
if(getWorldOfType([Link]).spiderlogs[y] > 0)
timer --;
timer = oldtimer;
int x = [Link]();
int y = [Link]();
if(y > 100 && x > 50 && y < 500)
else
return x;
int y = [Link]();
int x = [Link]();
else
return y;
}
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
public greenshooter()
timer = 30;
setup();
place();
shoot(new greenegg());
int timer;
public miner()
{
setup();
timer = 100;
place();
timer--;
if(timer < 0)
getWorldOfType([Link]).clickeddia();
timer = 100;
public redshooter()
timer = 70;
setup();
{
place();
shoot(new redegg());
import greenfoot.*;
MouseInfo mouse;
double scale;
Actor display;
boolean start;
public shop()
oldcooldown = 100;
setup();
scale = 1/(double)(oldcooldown);
getImage().scale(60, 60);
mouse = [Link]();
cooldown = 0;
start = false;
if(!start)
start = true;
[Link]().clear();
[Link]().drawRect(0,0,6,69);
if(cooldown > 0)
cooldown--;
mouse = [Link]();
getWorldOfType([Link]).setsol(costs);
cooldown = oldcooldown;
public greenshop()
cooldown = 100;
setup();
{
public minershop()
oldcooldown = 350;
setup();
public redshop()
setup();
Tinem butonu stang apasat si fara sa i dam drumul tragem comanda in fereastra din stanga
Apas sageata de pe tastatura in dreapta si se deplaseaza
Schimbam cu minus deplasarea pentru stanga
Fundalul
Apas pe tasta inainte si inapoi si asa se deplaseaza personajul
Prin tinere apasata a mouseului pe comada o deplasez
Clickul pe desen si se animeaza
Click pe steguletul de susu al meniului
Shcimb pozitia tinand butonul stang apasat ca sa mut comanda
Click pe obiect si va efectua sunetele si redimensionarea