0% au considerat acest document util (0 voturi)
63 vizualizări219 pagini

1 Programare Roboti

Documentul detaliază platforma Open Roberta Lab, care permite utilizatorilor să învețe programarea prin utilizarea roboților și a limbajului NEPO. Acesta include informații despre meniurile platformei, funcționalitățile simulatorului și structura limbajului NEPO, care facilitează programarea prin blocuri grafice. De asemenea, sunt prezentate lecții și materiale didactice pentru robotică competițională și utilizarea altor medii de programare precum Greenfoot, Alice 3 și Scratch.

Încărcat de

mihaela bujor
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
63 vizualizări219 pagini

1 Programare Roboti

Documentul detaliază platforma Open Roberta Lab, care permite utilizatorilor să învețe programarea prin utilizarea roboților și a limbajului NEPO. Acesta include informații despre meniurile platformei, funcționalitățile simulatorului și structura limbajului NEPO, care facilitează programarea prin blocuri grafice. De asemenea, sunt prezentate lecții și materiale didactice pentru robotică competițională și utilizarea altor medii de programare precum Greenfoot, Alice 3 și Scratch.

Încărcat de

mihaela bujor
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd

CUPRINS

PARTEA 1 OPENROBERTA SI NEPO

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

[Link] OPEN ROBERTA LAB

Meniurile platformei OPEN ROBERTA LAB

Fereastra principală conține în stânga sus 6 meniuri:

• Edit • Help • Gallery


• Robots • User • Language
HELP GALLERY

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

Dacă faceți clic pe acest submeniu, robotul execută programul.


Programul și configurația robotului vor fi trimise la serverele
Open Roberta Lab unde este compilat și trimis robotului.
Robotul rulează programul imediat ce este complet transferat.
Dacă robotul real este conectat, va primi un mesaj direct.

RUN IN SIMULATION

Această comandă pornește programul în mediul de simulare.


Programul va fi trimis la simulator și poate fi executat cu
butonul de pornire al simulării. Configurația robotului este o
configurație standard.

.. NEW ...

Creați un nou program. Dacă programul actual a fost modificat,


va exista un avertisment că ar trebui să salvați modificările.

MY PROGRAMS ...

Afișează toate programele salvate. Pentru aceasta, trebuie


să vă conectați la meniul user sau să creați un nou cont de
utilizator cu new.

EXAMPLE PROGRAMS ...


SAVE
Oferă exemple model pentru primele programe.
Dacă programul a primit deja
un nume cu save as, se vor salva
SHOW CODE modificările programului. Aceeași
funcționalitate este disponibilă
O fereastră de coduri va fi rulată pentru a afișa codul Java care utilizând butonul din colțul din
a fost generat din programul cu blocuri. dreapta jos al ecranului.

CREATE PROGRAM LINK SAVE AS ...

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.

Meniul Robots comută între simulatoarele diferitelor tipuri de roboţi.

WEDO EV3

MICROBIT CALLIOPE

HELP MENU

Meniul Ajutor trimite spre Open Roberta Wiki. În plus, sunt


disponibile următoarele submeniuri suplimentare:

GENERAL HELP

Aceasta este o legătură directă în wiki-ul Open


Roberta, care oferă toată informația referitoare la
proiect și programarea cu NEPO.

FAQ

Întrebări frecvente și răspunsuri la acestea.

ABOUT

Aici puteți găsi câteva informații despre proiectul


Open Roberta și despre Institutul Fraunhofer IAIS.

Dacă faceți clic pe acest submeniu, se va


LOGGING afișa din nou mesajul de întâmpinare.
Aici sunt prezentate cele mai recente
Afișarea tuturor acțiunilor efectuate în cadrul informaţii despre ultima versiune a
platformei Open Roberta Lab. platformei Open Roberta Lab.

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

Șterge contul de utilizator și toate programele NEPO stocate.

STATE INFORMATION

Afișează câteva informații de stare, cum ar fi numele de utilizator, numele programului,


numele de configurare a robotului și modul de utilizare.

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

GALERIA OPEN ROBERTA LAB

Î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ă.

Pentru a folosi un program din Galerie,


utilizatorii - conectați sau nu – pot da dublu clic
pe programul ales și apoi pot vizualiza, schimba
sau descărca conținutul.

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.

Când dați clic pe butonul de pornire a simulării pentru a rula un program în


mediul de simulare, fereastra de afișare se modifică ca în figura de mai jos.

În panoul din stânga este Panoul drept arată robotul 2D în


afișată o parte a programului. mediul selectat în prezent.

În colțul din stânga jos există câteva


butoane pentru a controla simularea.

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.

WORLD ROBOT OLYMPIAD SCENE SIMPLE SCENE DRAWING SCENE

RESCUE SCENE ROBERTA SCENE MATH SCENE

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.

AFIŞARE DATE SENZORI

În funcţie de mediul în simulare senzorii au valori diferite:

DRAWING SCENE WORLD ROBOT OLYMPIAD SCENE

ÎNCĂRCARE SCENE PROPRII

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

ROBOŢI EV3 BRICK-UL EV3 CU


MOTOARE ŞI SENZORI

Setul EV3 include următorii senzori pentru robotul 3D:

Tactil - determină contactul cu suprafața


Ultrasonic - măsoară distanța față de suprafețele din apropiere
Culoare - determină culoarea și măsoară intensitatea culorii
Giroscopic - determină rotația robotului
Infraroșu - determină semnalele telecomenzii IR

SENZOR TACTIL SENZOR SENZOR DE SENZOR SENZOR


ULTRASONIC CULOARE GIROSCOPIC INFRAROȘU

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

II. Limbajul NEPO


NEPO (New Easy Programming Online) este un limbaj de programare
din cadrul platformei Open Roberta Lab care utilizează biblioteca Blockly
la care au fost adăugate funcționalități suplimentare și îmbunătățiri,
adaptate pentru Open Roberta Lab. Paradigma de programare a NEPO
este inspirată de Scratch de la Massachusetts Institute of Technology.

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.

Conectorul de secvență este un triunghi în partea de jos a


blocului și acest triunghi va deveni galben imediat ce un bloc
adecvat este în imediata apropiere, după cum puteţi vedea în
imaginea alăturată.

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

Prin clic dreapta pe un bloc, poate fi deschis un meniu


contextual. Utilizând meniul, pot fi efectuate mai multe
acțiuni:

Duplicare (copiază blocul și parametrii de intrare conectați)


Adaugă comentariu (adaugă un comentariu la acest bloc)
Intrări inline (modifică aspectul blocului)
Restrângeți blocul (minimizează blocul)
Dezactivați blocul (dezactivează blocul astfel încât acesta să
nu fie executat)
Ștergeți 3 Blocuri (șterge blocurile selectate și pe toate cele
blocate)

CONECTORI NEPO DE INTRARE/IEȘIRE

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:

Mișcare Conducere Afişare Sunete Lumini

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:

1. CATEGORIA ACȚIUNE (ACTION)

SOLUŢIE

TEME DE DISCUŢII:

Prin ce se aseamănă blocurile drive şi turn?

Prin ce se diferă blocurile drive şi turn?

Care este intervalul de valori pentru un unghi?

1. 2. ANA ARE MERE


Realizaţi un program care va afișa “Ana are mere” pe ecranul robotului. Folosiţi blocurile pentru controlul
afişajului şi brick-ul robotului EV3.

25
Resurse necesare:

1. CATEGORIA ACȚIUNE (ACTION)

SOLUŢIE

TEME DE DISCUŢII:

Care sunt elementele


blocului Show text?

1.3. CÂNTECEL

Folosind blocurile , şi brick-ul


Robotului EV3, realizaţi un program care va afișa şi cânta gama.
Resurse necesare:

1. CATEGORIA ACȚIUNE (ACTION)

SOLUŢIE

26
1.4. AVERTIZARE

Folosind blocul care controlează lumina de stare , realizaţi un program care să


facă robotul să emită semnale luminoase atunci când se deplasează.
Resurse necesare:

1. CATEGORIA ACȚIUNE (ACTION)

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:

1. CATEGORIA ACȚIUNE (ACTION)

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.

CATEGORIA ACȚIUNE (ACTION)


Categoria Control include blocuri cu care secvența programului poate fi controlată.

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.

» Prima destinaţie va fi obstacolul


» A doua destinaţie va fi P1.
» Ultima destinaţie va fi P2.
» Enumeraţi paşii pentru a ajunge la fiecare destinaţie şi resursele de
care aveţi nevoie.

CATEGORIA LOGIC

Cu blocurile logice puteți crea condiții. Cu această condiție puteți interconecta stări, valori și evenimente
între ele.

BLOCUL COMPARĂ BLOCUL ŞI/SAU BLOCUL TEST

BLOCUL NEGAŢIE BLOCUL ADEVĂRAT/FALS BLOCUL NULL

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:

• Realizaţi un program care va face robotul să se deplaseze 50 cm. Folosiţi blocul:

CATEGORIA MATEMATICĂ (MATH)

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

În modul Expert din limbajul NEPO sunt disponibile următoarele blocuri:

FUNCȚIE MATEMATICĂ SCHIMBAȚI CU X

FUNCȚIA TRIGONOMETRICĂ RESTUL

CONSTANTE ROTUNJIRE

NUMĂRUL PROPRIETĂȚII LISTA DE EVALUARE

32
CONSTRÂNGEȚI

FRACȚIUNE ALEATORIE

ALEATORIU ÎNTREG

ACTIVITĂȚI PRACTICE

4.1. NUMERE ALEATOARE


Generaţi numere aleatoare de la 1 la 100.
Folosiţi blocurile:

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:

Robotul trebuie să parcurgă distanța exactă de 56,57 cm cu un unghi de 45 °.


Cum ajungem la distanța de 56,57 cm? Pentru a afla distanţa pe care trebuie să o parcurgă robotul,
folosim teorema lui Pitagora c2= a² + b² pentru a = 40 și b = 40.
Deoarece nu există nici un bloc matematic pentru rădăcină pătrată, vom folosi funcția exponent cu
parametrul 0,5: c = (a² + b²) 0,5.

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

Blocurile de text efectuează operații simple pe șiruri de text.


ÎNCEPĂTOR EXPERT

CREAȚI TEXT (BLOC EXPERT)


TEXT

ADĂUGAȚI TEXT (BLOC EXPERT)

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

• Afișați pe ecranul EV3 tabelul de adevăr pentru operatorul OR:


True Or True = True
True Or False = True
False Or True = True
False Or False = False

CATEGORIA VARIABILE (VARIABLES)

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:

SETEAZĂ VARIABILĂ OBȚINE VARIABILĂ

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.

CATEGORIA LISTE (LIST)

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

CATEGORIA FUNCŢII (FUNCTIONS)

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.

CATEGORIA MESAJE (MESSAGES)

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.

Bună! Sunt Roberta și-ți


voi arăta cum să faci
primul program folosind Utilizarea unui mediu de programare pentru implementarea
senzori. algoritmilor

Utilizarea unui mediu virtual pentru programarea de roboți cu scop


didactic, vizualizarea și utilizarea valorilor citite de senzori ai robotului
virtual (de exemplu senzor ultrasonic pentru detectarea obstacolelor,
senzor de culoare, senzor de presiune, microfon, senzor infraroșu,
senzor giroscopic, busolă etc.)

CATEGORIA SENZORI (SENSORS)

OPEN ROBERTA LAB conține blocuri pentru următorii senzori:


» senzor de atingere
» senzor de culoare/lumina
» senzor ultrasonic
» senzor de infraroșu
» senzor de rotație (codificator motor)
» giroscopic
» butoane
» timer

39
CATEGORIA CULORI (COLORS)

Categoria culori oferă blocurile de culoare necesare senzorului de culoare.

Senzorul de culoare/lumină

Cu blocul se poate transmite unui alt bloc


care este culoarea senzorului. În plus, acest bloc oferă în meniul drop-down setările lumină (light), RGB și
lumina ambientală (ambient light).

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.

În modul RGB, senzorul de lumină emite lumină


roșie, verde și albastră și măsoară lumina reflectată
corespunzătoare componentelor roșu, verde și
albastru pe o scară de la 0 la 100 pentru fiecare
culoare. Se întoarce o listă cu trei numere.

Senzorul tactil/de atingere

Cu blocul senzor tactil/de atingere puteți transmite unui alt bloc


valori dacă senzorul tactil este apăsat sau nu. Acest bloc returnează
valorile logice true dacă e în modul apăsat sau false dacă nu e
apăsat. Acest bloc poate fi utilizat numai împreună cu un alt bloc
care necesită o valoare logică ca parametru de intrare, de exemplu
împreună cu blocul dacă da...atunci.

În mediul OPEN Roberta LAB senzorul tactil este apăsat dacă


întâlneşte un obstacol. În fiecare scenă, marginea este un obstacol
fix, pătratul albastru din Simple şi Drawing Scene este un obstacol mobil ce poate fi deplasat prin drag
and drop.

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

11.2. Afişează pe ecranul robotului culorile pe care le recunoaşte senzorul de culoare.

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

LECŢIA URMĂRIREA LINIEI


Obiectivele lecției
La sfârșitul lecției elevii vor ști:

TEME DE DISCUŢII: • să cunoască modul în care oamenii și roboții se deplasează de-a


lungul unei linii
Cum se deplasează oamenii • să programeze un robot să urmeze o linie utilizând senzorul de
pe o cărare. Preferă să meargă culoare
pe mijlocul drumului? De ce? • să programeze un robot să urmeze o linie utilizând senzorul de
lumină
Răspunsuri sugerate: pentru • să programeze un robot să urmeze o linie până când un senzor este
că ei pot vedea înainte, activat
întreaga linie, ambele părți
ale drumului și direcția spre Dacă vreţi ca robotul din imaginea alăturată să urmărească
care au plecat. linia utilizând senzorul de culoare ce comenzi îi puteți da?

Cum se deplasează un robot Sugestie:


pe un traseu marcat cu o [Link]ă robotul ”vede” culoarea neagră, să meargă drept.
culoare? Cum poate identifica 2. Dacă robotul ”vede” culoarea albă, să întoarcă la stânga
traseul? pentru a reveni la linie.

Sugestia este valabilă pentru robotul din imaginea alăturată?


Care sunt paşii pe care robotul trebuie să-i urmeze pentru a păstra traseul precizat?
Sugestie:
Deoarece linia are o grosime, putem programa robotul să urmeze linia astfel încât atunci când
senzorul “vede” alb, robotul face o întoarcere (o rotire cu o roată oprită) spre negru și atunci
când “vede” negru face o întoarcere spre alb. Acest algoritm este numit “urmărirea liniei în
două etape” deoarece are doar două acțiuni. În plus, demonstrează modul în care combinația
mișcărilor locale (spre dreapta sau spre stânga), conduce la o mișcare globală cu un sens foarte
special, în acest caz urmărirea liniei.

ACTIVITATE PRACTICĂ
Programați robotul să se deplaseze pe un traseu dat.

44
Resurse necesare:

REZOLVARE

SOLUŢIE 1 Programul pentru urmărirea liniei utilizând senzorul de culoare

SOLUŢIE 2 Programul pentru urmărirea liniei utilizând senzorul de lumină

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?

LECŢIA SENZORUL TACTIL

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

Programați robotul să pornească la atingere şi să se oprească la detectarea culorii roşii.

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.

LECŢIA SENZORUL ULTRASONIC

Obiectivele lecției
La sfârșitul lecției elevii vor ști:

• să utilizeze senzorul cu ultrasunete pentru a program robotul să păstreze distanţă față de un


obstacol
• să optimizeze codul

TEME DE DISCUŢII:
Daţi exemple de utilizare a senzorului ultrasonic în viaţa reală.

Sugestii:

Detectează sticlele care sunt


prea înalte sau prea mici, sau
CONTROLUL CALITĂȚII
care sunt căzute pe o bandă
transportoare.

Detectează nivelul de umplere a


CONTROLUL NIVELULUI unui bazin de la câţiva milimetri
până la 6 metri.

Verifică dacă lăzile sunt pline


CONTROLUL ÎNCĂRCĂRII sau goale, sau dacă sticlele de
ÎN LADĂ plastic sunt goale pe o bandă
transportoare.

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.

Este important ca pe parcursul desfăşurării activităţii la clasă profesorul să:

• evalueze performanța elevilor în fiecare etapă a procesului


• observe comportamentul, reacțiile și strategiile elevilor
• ofere feedback constructiv pentru a ajuta fiecare elev să progreseze
• adreseze întrebări elevilor despre ceea ce intenţionează să pună în practică
• să ofere feedback la nivel de grup, când elevii lucrează în echipe
• încurajeze elevii să-şi expună ideile utilizând texte, clipuri video, imagini, schițe sau alte medii creative
• ofere fiecărui elev libertatea de a-şi alege modalităţile de exprimare

SISTEMUL DE MEDALII:

Elevul are puţine cunoştinţe teoretice, nu are capacitatea de a explica


coerent o soluţie sau de a pune în practică ceea ce ştie.
MEDALIE DE BRONZ

Elevul este capabil să prezinte numai cunoștințe de bază (de ex.,


elemente de vocabular) dar nu poate aplica sau transmite mai departe
ceea ce a învăţat.
MEDALIE DE ARGINT

Elevul are un nivel de cunoştinţe care îi permit să înțeleagă conținuturile


și conceptele noi prezentate. Poate să pună în practică ceea ce a învăţat.
Nu poate să extindă raționamentul la o problemă nouă.
MEDALIE DE AUR

Elevul înțelege conținutul și conceptele prezentate, poate realiza sarcina


de lucru, poate sintetiza și aplica conceptele și în alte situații.
MEDALIE DE PLATINĂ

ÎNŢELEGEREA CERINŢELOR

52
IDENTIFICAREA RESURSELOR

PROGRAMAREA SOLUŢIEI

VERIFICAREA SOLUŢIEI

53
VERIFICAREA SOLUŢIEI

ÎNVĂŢAREA PRIN JOC

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

ORGANIZAREA UNUI CONCURS

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:

• Fiecare echipă trebuie să studieze cu atenţie regulamentul jocului.


• Fiecare echipă va avea un antrenor: elev de liceu, student sau profesor.
• Contestarea acordării punctajelor se face conform regulamentului. (Învăţaţi elevii să se comporte
politicos.)
• Terenul de joc din concurs este întotdeauna puţin diferit de cel pe care v-aţi antrenat (pot
interveni factori ambientali precum zgomot, lumină, etc.), de aceea toate concursurile prevăd o
etapă preliminară de programare şi testare a robotului pe suprafața de concurs.

54
Termeni utilizaţi în concursurile de robotică

Misiunea este o cerință pe care robotul o va îndeplini pentru acumularea de puncte.


Meciul este o sesiune de întreceri. Într-un turneu, două echipe vor concura simultan într-un meci. Există
întreceri în care concurează câte 2 echipe împotriva altor 2. Premiul este dat celui cu cele mai multe
meciuri câştigate.
Suprafaţa de joc (scena) este un spaţiu amenajat pentru desfăşurarea meciurilor. Aceasta include
suprafaţa de joc (ex. masă, ring), pereții interiori, marginile și obstacolele. În interiorul fiecărei scene
există o bază.
Baza este locul din care robotul începe fiecare meci și zona în care concurenții pot atinge robotul fără
penalizare.
Standul este locul unde echipa poate depozita şi asambla piesele pentru o anumită misiune.
Puteţi studia, ca model, concursurile existente în spaţiul competiţional românesc pentru a vă inspira în
realizarea propriului concurs.

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.

Concursul RoboSmart Junior

Misiune: Realizaţi un tur de circuit fără erori.


Scenă:

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.

COMPETIȚII DE ROBOTICĂ ORGANIZATE ÎN ROMÂNIA

FIRST® LEGO® League

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 Robotics OlympiadTM

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

PROF BUJOR MARIA MIHAELA

Componentele scenriului unui joc


C:\Program Files
Descarc un joc
[Link]

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

Pot schimba obiectul


Cu dublu click pe ele vedem codul
Il inchid programul

C:\Program Files\Greenfoot\scenarios\stride\pengu
Pot vedea si continutul claselor care pot fi contruite in dreamwever
Run

Sau executie pas cu pas

Cu dublu click aflu detaliu despre obiect


Package greenfoot

Class World
[Link]

[Link]

public abstract class World


extends [Link]

Class Actor
[Link]

[Link]

public abstract class Actor


extends [Link]
avem mai multi actori in scena

norul care se misca pe orizontal

Vedem codul java de inceput al clasei scene

// WARNING: This file is auto-generated and any changes to it will be overwritten

import [Link].*;

import greenfoot.*;

/**

* This is the whole scene. It creates and contains the objects that are in it.

*/

public class Scene extends World


{

/**

*/

public Scene()

super(750, 500, 1);

addObject( new Cliff(false), 85, 441);

addObject( new Cliff(true), 665, 441);

addObject( new Cloud(), 369, 315);

addObject( new Pengu(), 66, 244);

Clasa cliff
Esc
// WARNING: This file is auto-generated and any changes to it will be overwritten

import [Link].*;

import greenfoot.*;

/**

* It's just a cliff.

*/

public class Cliff extends Actor

/**

* Default consrtuctor - nothign to do

*/

public Cliff()

/**
* Create a horizontally mirrored cliff face.

*/

public Cliff(boolean flip)

if (flip) {

getImage().mirrorHorizontally();

/**

* Act: nothing to do here (the cliff does not do anything)

*/

public void act()

/* nothing to do*/

Se inchide fiecare pagina

Dublu click pe el sa vedem sursa


// WARNING: This file is auto-generated and any changes to it will be overwritten

import [Link].*;

import greenfoot.*;

/**

* A cloud that moves back and forth between two defined points.

*/

public class Cloud extends Actor

private int speed = 4;

private int leftTurn = 270;

private int rightTurn = 480;

/**

* Move in the direction we are currently moving in. Turn if we reach a turning point.

*/

public void act()

{
setLocation(getX() + speed, getY());

Actor actor = getOneIntersectingObject(null);

if (actor != null) {

[Link]([Link]() + speed, [Link]());

if (atTurningPoint()) {

speed = - speed;

/**

* Test if we are at one of the turning points.

*/

public boolean atTurningPoint()

return getX() <= leftTurn || getX() >= rightTurn;

Dublu click pe el sa I introcuc clasa

Click sa I vad importul de biblioteci


Deci

Am initializat numar de sarituri


Esc

Pot introduce comenzi din dreapta


Miscarea se face prin functie sau procedura numita metoda

Dublu click pe ea sa I vedem continutul sau

// WARNING: This file is auto-generated and any changes to it will be overwritten

import [Link].*;

import greenfoot.*;
/**

* A little penguin that wants to get to the other side.

*/

public class Pengu extends Mover

private static final int jumpStrength = 16;

/**

* Check keyboard input and react accordingly.

*/

public void act()

checkKeys();

checkFall();

/**

*/

private void checkKeys()

if ([Link]("left")) {

setImage("[Link]");

moveLeft();

if ([Link]("right")) {

setImage("[Link]");

moveRight();
}

if ([Link]("space")) {

if (onGround()) {

jump();

/**

* Start a jump action.

*/

private void jump()

setVSpeed( - jumpStrength);

fall();

/**

* Check whether we are falling. If so, fall. If we're on ground, stop the fall.

*/

private void checkFall()

if (onGround()) {

setVSpeed(0);

else {

fall();

}
}

Declar metodele

Creez calasa cu costante


Pot vedea codul
Deschiderea celorlate fisiere din aplicatie
Da o eroare dar o salvez altfel
Apas close

Imaginile din desen se salveaza aici

Aplicatia 2

COPIEZ AICI SCENARIILE din directorul unde s a instalat softul


Procedurile aferente fiecarui buton de mai sus ,cu dublu click pe ele se vede continutul

import greenfoot.*;

public class Credits extends World

{
public Credits()

super(800, 550, 1);

public void act()

String key = [Link]();

if("enter".equals(key))

[Link](new Startscreen());

import greenfoot.*;

public class EndWorld extends World

public EndWorld(boolean won)

super(800, 550, 1);

if(won)

addObject(new Endgood(), 400, 200);

else

addObject(new Endbad(), 400, 200);


}

addObject(new Back(), 400, 400);

public void act()

String key = [Link]();

if("enter".equals(key))

[Link](new Startscreen());

import greenfoot.*;

public class How extends World

public How()

super(800, 550, 1);

public void act()

String key = [Link]();

if("enter".equals(key))

{
[Link](new Startscreen());

import greenfoot.*;

public class MyWorld extends World

int timer, newtime, suntimer, timeprogress;

Actor dia, progress;

int dias;

boolean dead = false;

int[] spiderlogs = new int[8];

public MyWorld()

super(800, 550, 1);

addObject(new shop(), 350, 40);

showText("100", 350, 90);

addObject(new redshop(), 450, 40);

showText("300", 450, 90);

addObject(new greenshop(), 550, 40);

showText("500", 550, 90);

addObject(new minershop(), 650, 40);

showText("50", 650, 90);

progress = new progress();

addObject(progress, 400, 525);


[Link]().scale(700, 25);

showText("Progress", 400, 525);

timer = 250 + [Link](200); //250

newtime = 400;

suntimer = [Link](100);

dias = 0;

timeprogress = 0;

[Link](45);

public void act()

timer--;

suntimer--;

timeprogress++;

[Link]().setColor([Link]);

[Link]().fillRect(0, 0, (int)(timeprogress/10), 50);

showText("Diamonds: " + dias, 200, 50);

if(!dead)

if(timer < 0 && timeprogress < 7000)

int y = [Link](8) * 50 + 125;

Actor zomb;
if(timeprogress >= 3000)

if(timeprogress >= 5000)

if([Link](5) == 1)

addObject(new Spiderpink(), 750, y);

else if([Link](2) == 1)

zomb = new Spiderblue();

addObject(new Spiderblue(), 750, y);

else

zomb = new Spiderblack();

addObject(new Spiderblack(), 750, y);

else if([Link](2) == 1)

zomb = new Spiderblue();

addObject(new Spiderblue(), 750, y);

else

zomb = new Spiderblack();

addObject(new Spiderblack(), 750, y);

}
}

else

zomb = new Spiderblack();

addObject(new Spiderblack(), 750, y);

y = (y-125)/50;

spiderlogs[y] = spiderlogs[y] + 1;

timer = newtime;

if(newtime > 60)

newtime -= 20;

else

if(newtime > 40)

newtime--;

if(suntimer < 0)

addObject(new dia(), [Link](800), [Link](500));

suntimer = [Link](100) + 100;

if(timeprogress > 7000 && checkwon())

{
[Link](new EndWorld(true));

public void clickeddia()

dias += 25;

public int getdias()

return dias;

public void setsol(int costs)

dias -= costs;

public boolean gibdead()

return dead;

public boolean checkwon()

for(int i = 0; i < 8; i++)


{

if(spiderlogs[i] != 0)

return false;

return true;

import greenfoot.*;

public class Startscreen extends World

int auswahl;

boolean pushed;

public Startscreen()

super(800, 550, 1);

[Link](50);

auswahl = 1;

pushed = true;

public void act()

String key = [Link]();

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

import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**

* Write a description of class Back here.

* @author (your name)

* @version (a version number or a date)

*/

public class Back extends Actor

{
/**

* Act - do whatever the Back wants to do. This method is called whenever

* the 'Act' or 'Run' button gets pressed in the environment.

*/

public void act()

import greenfoot.*;

public class Endbad extends Actor

public void Endbad()

getImage().scale(800, 550);

import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

public class Endgood extends Actor

public void Endgood()

getImage().scale(800, 550);

}
SPIDER

import greenfoot.*;

import [Link].*;

public class Spider extends Actor

int leben, speed;

boolean start;

Actor healthbar;

double scale;

public Spider()

leben = 100;

public void setup()

getImage().scale(50, 50);

start = false;

healthbar = new healthbar();


scale = 1/(double)(leben);

public void loop()

if(!start)

getWorld().addObject(healthbar, getX(), getY() - 20);

[Link]().drawRect(0, 0, 69, 6);

[Link]().setColor([Link]);

[Link]().fillRect(1, 1, 68, 5);

start = !start;

if(!getWorldOfType([Link]).gibdead())

move(-speed);

if(getX() < 49)

[Link](new EndWorld(false));

Actor hit = getOneIntersectingObject([Link]);

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();

[Link]( getX() , getY() - 20);

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;

public void changehealthbar()

if(leben > 0)

[Link]().clear();

[Link]().setColor([Link]);

[Link]().drawRect(0, 0, 69, 6);

[Link]().setColor([Link]);

[Link]().fillRect(1, 1, (int)(68 * scale * leben), 5);

//[Link]().scale((int)(70 * scale * leben + 1), 7);

import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

public class Spiderblack extends Spider

public Spiderblack()

leben = 100;

setup();

speed = 1;

}
public void act()

loop();

import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

public class Spiderblue extends Spider

public Spiderblue()

leben = 100;

setup();

speed = 3;

public void act()

loop();

import greenfoot.*;

public class Spiderpink extends Spider

public Spiderpink()

{
leben = 200;

setup();

speed = 2;

public void act()

loop();

import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

public class cooldown extends Actor

public cooldown()

GreenfootImage image = getImage();

[Link](7, 70);

[Link]();

[Link]([Link]);
setRotation(180);

import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

public class dia extends Actor

int timer;

public dia()

getImage().scale(50, 50);

timer = 150;

public void act()

timer--;

setLocation(getX(), getY() + 1);

if([Link](this) && timer > 1)

getWorldOfType([Link]).clickeddia();

getWorld().removeObject(this);

if(timer < 0)

getWorld().removeObject(this);

}
}

import greenfoot.*;

public class egg extends Actor

public egg()

public void loop()

if(!getWorldOfType([Link]).gibdead())

setLocation(getX() + 5, getY());

if(getX() > 790)

getWorld().removeObject(this);

import greenfoot.*;
public class greenegg extends egg

public greenegg()

getImage().scale(50, 50);

public void act()

loop();

import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

public class redegg extends egg

public redegg()

getImage().scale(50, 50);

public void act()

loop();

import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)


public class whiteegg extends egg

public whiteegg()

getImage().scale(50, 50);

public void act()

loop();

import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

public class healthbar extends Actor

public healthbar()

{
GreenfootImage image = getImage();

getImage().scale(70, 7);

[Link]();

[Link]([Link]);

import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

public class progress extends Actor

public progress()

getImage().scale(1, 25);

public void act()

// Add your action code here.

import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

public class shooter extends Actor

boolean pressed;

int timer, oldtimer, y;

public shooter()

{
timer = 70;

setup();

public void act()

place();

shoot(new whiteegg());

public void setup()

getImage().scale(50, 50);

pressed = false;

oldtimer = timer;

public void place()

MouseInfo mouse = [Link]();

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

public void shoot(Actor egg)

if(pressed)

if(getWorldOfType([Link]).spiderlogs[y] > 0)

timer --;

if(timer < 0 && !getWorldOfType([Link]).gibdead())

timer = oldtimer;

getWorld().addObject(egg, getX(), getY());

public int calcX(MouseInfo mouse)

int x = [Link]();

int y = [Link]();
if(y > 100 && x > 50 && y < 500)

return (int)[Link](x / 50) * 50 + 25;

else

return x;

public int calcY(MouseInfo mouse)

int y = [Link]();

int x = [Link]();

if(y > 100 && x > 50 && y < 500)

return (int)[Link](y / 50) * 50 + 25;

else

return y;

}
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

public class greenshooter extends shooter

public greenshooter()

timer = 30;

setup();

public void act()

place();

shoot(new greenegg());

import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

public class miner extends shooter

int timer;

public miner()
{

setup();

timer = 100;

public void act()

place();

timer--;

if(timer < 0)

//getWorld().addObject(new dia(), getX(), getY());

getWorldOfType([Link]).clickeddia();

timer = 100;

import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

public class redshooter extends shooter

public redshooter()

timer = 70;

setup();

public void act()

{
place();

shoot(new redegg());

import greenfoot.*;

public class shop extends Actor

MouseInfo mouse;

int cooldown, oldcooldown;

double scale;

Actor display;

boolean start;

public shop()

oldcooldown = 100;

setup();

public void act()

loop(new shooter(), 100);

public void setup()

scale = 1/(double)(oldcooldown);

getImage().scale(60, 60);
mouse = [Link]();

cooldown = 0;

display = new cooldown();

start = false;

public void loop(Actor buyedshooter, int costs)

if(!start)

start = true;

getWorld().addObject(display, getX() + 40, getY());

[Link]().clear();

[Link]().fillRect(0, 0, 6,(int)(70 * scale * cooldown));

[Link]().drawRect(0,0,6,69);

if(cooldown > 0)

cooldown--;

mouse = [Link]();

if([Link](this) && getWorldOfType([Link]).getdias() >= costs &&


cooldown <= 0)

getWorld().addObject(buyedshooter, [Link](), [Link]());

getWorldOfType([Link]).setsol(costs);
cooldown = oldcooldown;

import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

public class greenshop extends shop

public greenshop()

cooldown = 100;

setup();

public void act()

loop(new greenshooter(), 500);

import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

public class minershop extends shop

{
public minershop()

oldcooldown = 350;

setup();

public void act()

loop(new miner(), 50);

import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

public class redshop extends shop

public redshop()

setup();

public void act()

loop(new redshooter(), 300);

APAS ENTER SI SE VA EXECUTA


CU ENTER SE REIA
DIRECTORUL care contine datele
Programare cu alice 3
File save as
Setup scene
Trag cu mouseul personajul si click dreapta
SCRATCH
Aleg personajul
Dublu click pe cod sa ruleze si pe steag
Ma repet
In fereasra din dreapta se executa
Tinand apasat butonul stang al mouseului pot sa l mut in alta pozitie
Blocurile se muta tinand butonul stang apasat pe ele
Fundalul
Stergerea unui bloc cu click dreapta
Adaug fundalul de desfaurare
Stergem blocurile de comanda

Click dreapta i zona lor


Click pe obiectul care se misca
Dublu click cu mouseul im cerculet ca sa modific numerele
Click pe el sa l pun in scena
Click pentru a schimba costumul
Ca sa sterg un bloc il trec deoparte click dreapta si delete
Click pe personajul schimbat din dreapta

Stergerea personajului primcipal


Apas tasta spatiu
Tinand butonul stang apasat pe personaj putem sa il mutam
Clic pe fereastra cu sageata

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

S-ar putea să vă placă și