Curs per a professors d’Introducció a LEGO® Mindstorms NXT i EV3

(versió 4.5)

 

UNITAT 3. Sensors, condicions i bucles: la presa de decisions.

 

En aquesta tercera unitat didàctica s’estudiaran els diferents tipus de sensors, el concepte de llindar i el seu calibratge, la bifurcació o “Switch”, el bucle o “Loop” i arrancar processos en paral·lel o desdoblament de la biga de seqüència “Sequence Beam”.

 

L’exercici incremental consisteix en arribar al final de la gàbia, però primer utilitzant el sensor de rotació intern de cada motor i després, “llegint” l’entorn mitjançant només el sensor de llum, no es permeten rotacions fixes, només il·limitades.

 

Una mica de teoria

 

Els sensors són els dispositius que informen i comuniquen el robot amb el “món real”. A nivell general, es pot afirmar que la intel·ligència d’un robot està íntimament lligada al número de sensors que conté. Quan més sensors tingui un robot, més intel·ligent pot arribar a ser, sempre i quan els sensors estiguin correctament gestionats pel programari, altrament seran inútils.

 

Cal explicar, sensor a sensor, la seva utilitat, i podem preguntar als alumnes on han vist cada tipus de sensor i per a què creuen que pot ser útil:

- El sensor de llum pot mesurar la llum de l’ambient o pot emetre una llum i mesurar la llum reflectida, la qual cosa permetrà diferenciar el color de les superfícies que mesura.

- El sensor de so mesura la intensitat del so.

- El sensor de contacte o tàctil detecta si s’està realitzant pressió sobre el seu extrem.

- El sensor ultrasònic permet esbrinar la distància a la que es troba un objecte (com fan els dofins i els ratpenats).

 

Un altre sensor molt important és el sensor de rotacions intern que porten incorporat els motors. Aquest sensor mesura el número de rotacions que fa cada roda i és el dispositiu que permet realitzar moviments amb precisió. Una part dels exercicis serà replicar els exercicis anteriors però utilitzant el sensor de rotacions intern del motor de forma explícita.

 

Un cop el robot és capaç de llegir les mesures de cada sensor, aquest haurà de prendre decisions en funció d’aquestes mesures. Per això el programari proporciona diferents blocs que permeten, per exemple, esperar a que es compleixi un temps o una mesura determinada d’un sensor (bloc “Wait” o esperar), repetir una acció un cert número de vegades o durant un termini de temps determinat o en funció de la lectura d’un sensor (bloc “Loop” o bucle), o bifurcar el programa si es compleix una mesura o condició específica (bloc “Switch” o bifurcació), etc.

 

Es diu que la intel·ligència d’un robot és directament proporcional al número de sensors que és capaç de gestionar. Els següents vídeos il·lustren diferents temes actuals de recerca en l’àmbit de la neurociència i aplicacions robòtiques que posen de manifest la importància de la utilització de sensors. És interesant demanar als alumnes què en pensen de cada vídeo, quins avantatges i desavantatges veuen en cada cas, i quina creuen que és la motivació de la recerca. En el cas del primer vídeo mostren una certa aversió, donat que l’estudi del control del vol d’un escarabat gegant, deixant a part l’implant neural, pot portar, en el futur, a controlar animals i potser homes per realitzar tasques fins i tot contra la seva pròpia voluntat, però també pot ajudar, com en el cas del segon vídeo, a utilitzar robots intel·ligents per suplantar extremitats amputades a pacients que han sofert algun accident. Potser en el futur, els homes decidiran lliurement substituir les seves pròpies extremitats, o part d’elles, per altres robòtiques més eficients i amb més funcionalitats que les originals...

 

Descripción: http://www.technologyreview.com/files/23514/cyborg_x220.jpg

Vídeo L’Escarabat Teledirigit de l’Exèrcit i article, 29 de gener de 2009

El vol d’un insecte pot controlar-se sense fils a través d’un implant neural.

 

Vídeo Màquines Biològiques i article, 24 de febrer de 2009

Les noves interfícies de Michel Maharbiz entre màquines i sistemes vius pot donar origen a una nova generació de dispositius cyborg.

 

Vídeo Pacients Assagen una Pròtesi Avançada de Braç i article, 10 de febrer de 2009

Una nova tècnica quirúrgica, desenvolupada per científics a l’Institut de Rehabilitació de Chicago, permet als pacients que han perdut braços utilitzar els senyals dels nervis residuals per controlar una pròtesi. Aquest vídeo mostra tres pacients assajant un prototipus de pròtesi desenvolupat per DARPA. Els pacients poden realitzar tasques complexes, incloent-hi aixecar una tassa, agafar una galeta sense trencar-la, i posar una cullera dins d’una tassa.

 

 

El tercer vídeo mostra un robot quirúrgic que permet realitzar operacions menys incisives i molt més precises que les operacions tradicionals de laparoscòpia, la qual cosa permet que els pacients es recuperin molt més ràpidament. En la imatge i en el vídeo es pot veure com el cirurgià acciona amb els seus dits una sèrie de palanques i botons al mateix temps que observa una imatge tridimensional ampliada de l’operació quirúrgica que li proporciona el robot.

 

Vídeo Lent Ascens del robot Quirúrgic, article i fotos, 24 de mars de 2010

Cirurgians de l’Hospital Infantil de Boston reparen un ronyó obstruït utilitzant el robot quirúrgic Da Vinci. Els procediments dirigits robòticament són comuns, però els cirurgians diuen que la tecnologia no evoluciona prou ràpidament.

 

Unitat 3 exercici 1: Desplaçament endavant i/o enrere per tornar al lloc d’origen utilitzant el sensor de rotacions i el bloc “Motor” o “Move” amb durada il·limitada.

 

Per tal de començar a utilitzar sensors, és important observar que els blocs de sensors llegeixen les mesures que prenen els diferents tipus de sensors. A més, també són capaços de comparar aquesta mesura amb una altra de prefixada i informar del resultat de la comparació (veritat o fals), com veurem més endavant. Per tant, els blocs de sensors no permeten, per sí sols, que el robot prengui cap decisió, només informen de les lectures dels sensors, i necessitem utilitzar els blocs de flux de dades associats a qualsevol sensor, si volem que el robot pregui decisions en funció de la lectura dels sensors.

 

Per començar aquesta unitat didàctica, utilitzarem només el sensor de rotacions intern de cada motor associat a un bloc “Wait” o esperar per tal de controlar el moviment del robot. Pararem els motors quan el bloc “Esperar” hagi determinat que han passat el número de rotacions o graus de gir desitjats.

                                                 

Fer un programa nou, per exemple “u3ex1.rbt”, i afegir un bloc “Motor” pel port B i un altre pel C (per defecte la durada és il·limitada). Seguidament afegir un bloc “Wait” associat al sensor de rotacions del motor B i posar 2 rotacions. Finalment afegir dos blocs “Motor”, un per a cada port, per parar els dos motors.

 

 

 

Com podem veure, el bloc “Wait” no passarà a la següent instrucció del programa fins que (“Until”) les rotacions d’aquest motor siguin superiors a 2.

                                                                 

Perquè no cal posar un segon sensor de rotacions pel motor C? No cal, perquè els motors funcionen en paral·lel per a que el robot es desplaci en línia recta. Deixar que els alumnes experimentin amb els atributs del bloc. Especialment, veure l’efecte de canviar l’atribut “Control” del bloc “Wait” i posar-lo a temps, “Time”, per veure el seu efecte.

 

Fer el mateix exercici amb el bloc “Move” (tenir cura en modificar la durada a il·limitada). Encara que el bloc Move no pugui frenar els motors, tal com hem vist en la unitat didàctica anterior, per coherència podem realitzar l’exercici.

 

 

Malauradament, si necessitem frenar els motors hem d’utilitzar blocs Motor explícitament, tal com hem mencionat anteriorment.

 

 

Replicar l’exercici anterior, però utilitzant només el sensor de rotacions intern i el bloc “Motor”. Fer que el robot vagi endavant i torni enrere a la mateixa posició de sortida. Deixar que els alumnes ho intentin i vegin què han de modificar per a que el programa funcioni correctament.

 

Una solució és copiar els 5 blocs anteriors i modificar la direcció de rotació dels motors B i C per que el robot torni a la posició de sortida marxa enrere.

 

Què passa si no es canvia la direcció de rotació del sensor de rotació intern del motor B del segon bloc? Si no es canvia la direcció de rotació d’aquest bloc, el programa un cop ha frenat els motors i inverteix el seu sentit de rotació, el segon bloc “Wait” és ignorat ja que mai es podrà complir la condició establerta i torna a frenar els motors. L’efecte és que els dos motors finals no tenen temps d’actuar i el robot va endavant i para un cop ha realitzat les rotacions sol·licitades.

 

Un cop aconseguim que el robot torni enrere, per què aquest no para a la mateixa posició de sortida, tot i que el número de rotacions és el mateix? Aquest efecte té a veure amb el fet que el sensor de rotacions intern de cada motor acumula les rotacions realitzades. Per tant, per tornar al lloc de sortida en la direcció oposada cal fer un número de rotacions diferent que a l’anada. Per tal d’obviar aquest problema, la solució és reiniciar el sensor de rotacions intern tot just després de frenar els motors B i C. Així, podem utilitzar el mateix número de rotacions que a l’anada per tornar al mateix lloc de sortida. Utilitzarem el bloc “Rotation Sensor” o sensor de rotacions per tal de reiniciar aquest sensor.

 

L’atribut “Action” o acció del bloc “Rotation Sensor” ha de ser “Reset” o reiniciar.

 

El programa final serà el següent (el podem repetir amb el bloc “Move”):

 

 

Seguidament podem fer girar el robot sobre la roda de la dreta, és a dir parant el motor B i després sobre el seu propi eix. Quins canvis haurem de fer al programa per aconseguir el mateix efecte que en l’exercici anterior? El punt crític és ubicar correctament el bloc “Rotation Sensor” amb el reinici del motor B. Els alumnes poden fer varies proves barrejant blocs “Motor”, blocs “Move” (amb durada il·limitada i/o amb rotacions) i blocs “Rotation Sensor” quan calgui, per controlar els moviments del robot.

 

En el cas de realitzar un gir sobre l’eix del robot per tornar al lloc de sortida, mitjançant un bloc ”Rotation Sensor” per controlar el gir, cal utilitzar graus en comptes de rotacions (1 rotació = 360 graus) per obtenir la precisió de gir necessària.

 

Exercici utilitzant blocs “Motor” amb gir sobre eix controlat amb el sensor de rotacions

 

El gir sobre eix es controla directament amb graus de gir dels motors

 

Exercici utilitzant blocs “Move” amb gir sobre eix controlat amb el sensor de rotacions

 

El gir sobre eix es controla directament amb graus de gir dels motors

 

Finalment, per completar aquest exercici podem utilitzar la possibilitat que permet el programari de realitzar vàries tasques alhora o en paral·lel, desdoblant la biga de seqüència o “Sequence Beam”. Per exemple, podem utilitzar aquesta opció per realitzar el gir sobre eix.

 

Suggeriment: Per desdoblar la biga de seqüència, cal ubicar els blocs que volem desdoblar al lloc desitjat (els blocs apareixeran amb color més clar, ja que no estaran connectats) i prémer la tecla de majúscules (veurem que el ratolí canvia de icona), fer clic sobre el punt de la biga de seqüència que es vol desdoblar, deixar de prémer la tecla de majúscules i arrossegar el ratolí a l’inici del bloc que es vol connectar (podem anar fent clic sobre els punts de la graella on volem que es recolzi la biga de seqüència).

 

   és equivalent a

 

   o encara millor a

 

 

En la segona opció cal recordar de-seleccionar “Wait for Completion” pel bloc del motor B. En canvi en la primera opció, cal seleccionar-lo per tal de que aquest pugui frenar, un cop finalitzades les rotacions, ja que tots dos motors actuaran alhora.

 

 

 

Coneixements adquirits: Control amb precisió del funcionament del sensor de rotació intern dels motors, el seu reinici, la barreja d’aquest amb els blocs “Motor” i “Move”, i la possibilitat de desdoblar la biga de seqüència per realitzar vàries tasques a l’hora.

 

Suggeriment: Sempre que es pugui és recomanable evitar el desdoblament de la biga de seqüència, per minimitzar problemes de compilació del programa, especialment quan s’insereixen nous blocs davant del desdoblament. En aquests casos el programa no desplaça correctament els blocs desdoblats i pot generar problemes de compilació.

 

Si cal desdoblar la biga de seqüència i cal inserir un nou bloc davant del desdoblament, és recomanable, primer, seleccionar tots els blocs desdoblats i desplaçar-los fora de la biga desdoblada, i després inserir el nou bloc, per finalment ubicar correctament els blocs desplaçats, i desdoblar i connectar correctament la biga de seqüència.

 

De forma similar, si el programa és massa llarg i volem desplaçar una seqüència de blocs en la part inferior, per imprimir millor el programa, caldrà procedir tal com s’ha explicat anteriorment. Un cop els blocs estan al lloc desitjat aleshores es procedirà a connectar l’extrem final de la biga de seqüència inicial a l’extrem inicial de la biga final. Sovint, alguns blocs queden desconnectats i només cal seleccionar-los per tornar-los a connectar.

 

Exercici incremental 2: Arribar al final de la gàbia utilitzant només el sensor de rotacions intern d’un motor.

 

L’exercici es pot repetir amb blocs “Motor”, blocs “Move”, blocs “Rotation Sensor” i una combinació de tots aquests, per entendre l’efecte de cadascun d’ells i la correcta ubicació del reinici del sensor de rotació. En l’exemple següent, només les rotacions dels motors que fan avançar el robot es controlen amb el sensor de rotacions intern.

 

 

Es pot realitzar una segona versió on el gir sobre eix també es controli mitjançant el sensor de rotacions intern d’un motor. Què caldrà afegir i/o modificar al programa? Cal fixar-se bé on afegir un nou reinici del sensor de rotacions intern del motor supervisat, és a dir, just després de parar els motors i abans de realitzar el gir. A més, caldrà que els motors tinguin una durada il·limitada.

 

Unitat 3 exercici 2: Desplaçament endavant i/o enrere per tornar al lloc d’origen utilitzant els altres sensors i el bloc “Motor” o “Move” amb durada il·limitada.

 

Per entendre bé com funciona un sensor i com aquest es comunica amb el maó intel·ligent del robot, primer cal explicar els conceptes de llindar i calibratge.

 

Una mica de teoria

 

Abans de començar l’exercici amb els diferents sensors, cal explicar el concepte de llindar. Un exemple molt senzill és utilitzar la porta de l’aula, de tal manera que segons on ens posem estarem dins o fora de l’aula. Però si ens posem just al mig de la porta, on serem? Doncs serem al llindar de la porta que separa la part de dins de la part de fora...

 

Per exemple, imaginem-nos que volem classificar els alumnes de la classe separant els baixos dels alts. Una forma de fer-ho és agafar l’alumne més baix i el més alt, traçar dues línies a la pissarra amb les seves alçades i preguntar on hem de traçar la línia que separarà els alumnes baixos dels alts? Dit d’una altra manera, com podem calcular el llindar que marca la diferència entre una persona baixa i una alta? Senzillament sumant les dues mesures i dividint el resultat per 2, és a dir, (A+B) / 2, el que s’anomena mitjana aritmètica entre dues mesures.

 

També podem calcular la mitjana aritmètica de l’alçada dels alumnes de la classe, la qual cosa es faria sumant totes les alçades dels alumnes i dividint pel número d’alumnes, i ens donaria un resultat una mica diferent, perquè? Quan s’aplica aquest concepte? Podem també afegir diferents pesos a les diferents mesures..., com ho hauríem de fer?

 

Per calcular el llindar entre dues mesures d’un sensor farem exactament el mateix, però primer cal esbrinar els valors de lectura dels sensors que volem diferenciar. Es pot consultar la guia d’usuari per veure en detall com podem observar dinàmicament les lectures d’un sensor, directament en la CPU del robot, també anomenada “Intelligent Brick” o maó intel·ligent, mitjançant el menú “View” i triant el sensor i el port desitjats. Aquest procés permet, per exemple, llegir els valors de lectura del sensor de llum (“light sensor”) quan el posem a sobre de colors diferents, o llegir el nivell de so (“sound sensor”), o la distància a la que es troba un objecte davant del sensor ultrasònic (“ultrasonic sensor”), la qual cosa cal fer per calcular el llindar entre diferents mesures i utilitzar-lo en el programa, abans d’executar-lo en el robot.

 

Una altre aspecte important dels sensors és el seu calibratge. Per defecte els sensors ja venen calibrats, però en algunes ocasions pot ser necessari calibrar els sensors per una situació especial. És a dir, per obtenir un rang més gran de valors entre dues mesures específiques (la mínima i la màxima). Per exemple, entre dos colors relativament propers, o en una habitació amb poca llum, potser que el calibratge de fàbrica del sensor de llum no permeti establir el llindar apropiat per diferenciar-los. En aquest cas, es pot realitzar un calibratge específic per tal d’augmentar el rang de valors entre les dues mesures de llum mínima i màxima, per establir el llindar apropiat. La guia d’usuari explica com realitzar aquest procés, que en principi no hauria de ser necessari per realitzar els exercicis d’aquest curs.

 

Suggeriment: Cal tenir en compte que el calibratge d’un sensor no es realitza per port, sinó per sensor, és a dir, afectarà a tots els sensors del mateix tipus connectats al mateix “maó intel·ligent”, independentment del port al que estiguin associats.

 

Tal com hem fet amb l’exercici anterior, fer un programa nou, per exemple “u3ex2.rbt”, i afegir un bloc “Move” (també podem utilitzar dos blocs “Motor”) pels ports B i C i posar durada il·limitada. Seguidament afegir un bloc “Wait” associat al sensor de llum (en comptes del sensor de rotacions del motor B). Finalment afegir un altre bloc “Move” per parar els dos motors. L’objectiu és que el robot vagi endavant i pari en detectar la línia negra del tauler.

 

 o millor

 

 si volem frenar el robot

 

 

Cal observar que per defecte el sensor de llum utilitza le port 3 amb un llindar de llum inferior a 50 i amb la funció de generar llum, que en aquest cas és necessària per “llegir” la intensitat de la llum reflectida pel sensor i poder parar el robot al arribar a la línia negra. És a dir, el bloc “Wait” esperarà a que el sensor de llum detecti que la llum reflectida sigui inferior a 50 per continuar el programa i, per tant, parar els motors. Per aquest exemple, el llindar inferior a 50 és suficient per diferenciar el blanc del taulell del negre de la línia. Podem assajar altres valors per aquest llindar del sensor de llum.

 

Aquest petit exemple serà molt important per entendre bé els exercicis següents.

 

Suggeriment: Podem observar que els motors utilitzen els ports A, B i C, i en canvi els sensors utilitzen els ports 1, 2, 3 i 4.

 

Podem repetir el mateix exercici amb la resta de sensors.

 

 

 

Per defecte el sensor de so utilitza el port 2 amb un llindar superior a 50. Deixar que els alumnes facin proves amb el llindar (encara que faran molt de xivarri) i que comprovin que el robot pararà quan el nivell de so sigui superior o inferior al llindar especificat.

 

 

 

Per defecte el sensor ultrasònic utilitza el port 4 amb un llindar inferior a 50 polsades o 127 centímetres. Deixar que els alumnes facin proves amb altres llindars. Cal tenir en compte que el sensor ultrasònic té un angle de lectura relativament obert, per tant, els objectes laterals o les persones pròximes, poden distorsionar les lectures.

 

 

 

Finalment, respecte del sensor de tacte, contacte o tàctil, podem veure que per defecte utilitza el port 1 amb l’opció de l’acció “Pressed”, és a dir pressionat. Això vol dir que el robot pararà quan el sensor de tacte estigui pressionat. El sensor de tacte, no té llindars, només es pot activar mitjançant 3 opcions: “Pressed” o pressionat per activar-lo al ser pressionat, “Released” o alliberat per activar-lo després de ser alliberat, o “Bumped” per activar-lo al ser pressionat i immediatament (0,5 segons) alliberat.

 

Coneixements adquirits: Coneixement dels sensors bàsics (llum, so, ultrasònic i contacte), del càlcul dels seus llindars, si cal, del seu calibratge específic, i de com s’utilitzen per controlar el flux de la biga de seqüència.

 

Exercici incremental 3: Arribar al final de la gàbia utilitzant només el sensor de llum associat al bloc esperar.

 

Per realitzar aquest exercici, una bona pràctica és copiar l’exercici incremental 2 i esbrinar quins blocs s’han de substituir (els del sensor de rotacions) per a que el mateix programa funcioni, però només amb el sensor de llum. Podem utilitzar blocs “Move” i blocs “Motor” pels girs sobre eix. Deixar que els alumnes facin proves i esbrinin com resoldre els problemes que es van trobant, observant el que fa el robot i depurant el codi del seu programa (en anglès “debugging” vol dir el procés metòdic per trobar i reduir el número de “bugs” o defectes d’un programa informàtic).

 

Suggeriment: El procés de depuració d’un programa és una activitat que comporta un alt nivell pedagògic, i si es realitza en grup pot ser realment molt útil i apropiada. Trobar un defecte en un programa implica entendre la seva lògica, per tant, per sí mateix ja és un molt bon exercici. Per una altra banda, és una activitat molt útil per dinamitzar la classe, fent que alumnes més avançats depurin el programa defectuós d’altres alumnes, potser més retardats en la realització d’un mateix exercici. El professor pot intervenir ressaltant els aspectes més importants que es van mencionant, els punts de la lògica de cada discurs que es van assumint i demanant a la resta del grup si estan d’acord o no amb cada intervenció.

 

 

És interessant observar que el robot amb el sensor de llum no pot sobrepassar les línies intermèdies i para al trobar la primera, ja que el llindar és inferior a 50. Per tal de sobrepassar aquestes línies intermèdies, una opció és utilitzar un bloc “Move” amb unes poques rotacions (0,5) per sobrepassar-la. Una altra opció és invertir el llindar per fer que el robot pari al trobar la superfície blanca. Pot ser interessant discutir aquestes alternatives amb els alumnes i fer-los trobar situacions on una sigui millor o més adient que l’altra. Per exemple, quan la línia negra és relativament prima, utilitzar rotacions potser una solució més simple, com en aquest cas. Però, si la línia negra té gruixos més grans i fins i tot variables, aleshores la segona opció pot ser una millor solució, ja que és més genèrica. Si els patrons de línies es mantenen, sempre funcionarà, encara que variïn els gruixos de les línies o superfícies.

 

Finalment, constatar que abans de sobrepassar una línia intermèdia i just després d’arribar a una línia negra de límit, no cal frenar el robot. Amb això aconseguim que el moviment del robot sigui lineal i suau.

 

Suggeriment: Si un programa és molt llarg, per facilitar la lectura, a més de poder desplaçar blocs a la part inferior de la pantalla i connectar-los a la biga de seqüència, tal com s’ha comentat anteriorment, podem utilitzar la lupa de la pestanya de la part inferior dreta de la pantalla per desplaçar el programa. La pestanya de l’interrogant facilita una descripció simple d’ajuda i conté el lligam a l’ajuda detallada i específica. Per facilitar la comprensió del programa, especialment en el futur quan haurem oblidat l’exercici, podem afegir comentaris de text, com en aquest exemple.

 

En la següent imatge que mostra una captura de pantalla, podem veure el programa anterior però sense desplaçaments de codi. A la part inferior dreta podem observar el requadre amb una lupa que permet veure la llargada total del programa i desplaçar la part visible del programa, que apareix en color blanc, al lloc on volem treballar.

 

 

Coneixements adquirits: L’alumne ja és capaç de programar el robot de forma autònoma per a que aquest realitzi moviments tenint en compte el seu entorn i prenent decisions, encara que aquestes siguin senzilles.

 

Unitat 3 exercici 3: El bloc “Loop” o bucle: desplaçaments repetitius endavant i/o enrere per tornar al lloc d’origen utilitzant sensors i el bloc “Motor” o “Move” amb durada il·limitada.

 

Quan una acció o grup d’accions s’ha de repetir vàries vegades, en comptes de copiar el codi i enganxar-lo tantes vagades com sigui necessari, podem utilitzar el bloc “Loop” o bucle. El bucle té unes avantatges importants. Per una banda fa que el codi sigui més compacte i llegible, al compilar ocupa menys espai, i permet realitzar accions repetitives que de no existir no serien possibles, com per exemple repetir 300 vegades una acció.

 

Un bon exercici és fer que el robot vagi endavant i torni enrere moltes vegades. Els alumnes veuran que molt aviat, al compilar el programa i bolcar-lo al maó intel·ligent, el sistema es quedarà sense memòria. Com podem realitzar aquest exercici?

 

Fer un programa nou, per exemple “u3ex3.rbt”, afegir un bloc “Loop” o bucle i, dins del bucle, afegir dos blocs “Move” (també podem utilitzar 4 blocs “Motor”) pels ports B i C amb una durada de tres rotacions, un per anar endavant i l’altre per tornar enrere. Veurem que per defecte el control del bloc del bucle selecciona “Forever” o “sempre”. Modificarem aquesta selecció posant l’opció “Count” o “comptar” per triar el número de vegades que volem repetir el contingut del bucle, o l’opció “Time” o “temps” per repetir-les durant un temps determinat, expressat en segons. Deixar que els alumnes facin diferents proves.

 

 amb Count = 50

 

 amb Seconds = 45

                  

Seguidament podem passar el control del bucle a un sensor i estudiar el comportament del robot. Es poden fer vàries proves amb els diferents sensors. Un bon exercici és repetir l’exercici 2 anterior, però substituint el bloc “Wait” pel bloc “Loop” controlat pel sensor de llum (recordar modificar la durada a il·limitada i frenar els motors a la sortida del bucle utilitzant blocs Motor i no Move).

 

 o millor

 

 

Pararà el robot si no afegim blocs per frenar els motors? El robot pararà, però sense frenar els motors, per tant, no tindrà precisió d’aturada.

 

Ara podem plantejar el repte de fer que el robot, de forma indefinida o per sempre, vagi endavant fins que un sensor detecti un llindar (per exemple, fins que el sensor de contacte estigui pressionat) i tornar enrere fins que un altre sensor detecti un altre llindar (per exemple, el sensor ultrasònic detecti un obstacle proper). Amb aquest exemple veurem la possibilitat que ofereix el programari de niar bucles, uns dins dels altres.

 

 

Recordar que si realment volem frenar els motors cal utilitzar explícitament blocs Motor i no Move. En aquest cas no és important ja que el moviment endavant i enrere està encadenat.

Exercici incremental 4: Arribar al final de la gàbia utilitzant només el sensor de llum associat al bloc bucle.

 

Per realitzar aquest exercici, podem copiar i modificar l’exercici incremental 3 anterior.

 

 

Coneixements adquirits: Hem vist com el bloc bucle permet repetir accions, compactar el codi del programa i fer-lo més “llegible”. A més, quan el bucle s’associa a un sensor, podem controlar l’execució del seu contingut fins que el sensor s’activa o desactiva mitjançant el llindar. Només falta estudiar l’últim tipus de control que té el bucle, el control lògic, que abordarem en la unitat didàctica 5.

 

Però, el bucle no és suficient per tal de poder controlar l’execució d’un programa segons diferents condicions d’un entorn. A més de poder realitzar bucles, per a que el robot pugui prendre decisions segons si es compleix una condició o una altra, necessitem la possibilitat de realitzar bifurcacions en el codi del seu programa. Això és el que fa el bloc “Switch” o bifurcació, permet realitzar un conjunt determinat de tasques si es compleix una condició o un altre conjunt, si aquesta condició no es compleix (o es compleix una altra condició diferent a l’anterior). Per poder realitzar aquests conjunts de tasques diferents, el bloc bifurcació desdobla la biga de seqüència, en el seu interior. Com el bloc bucle, el bloc bifurcació es pot associar a un sensor o, com veurem més endavant, a un control de valor que pot ser lògic, numèric o de text.

 

Unitat 3 exercici 4: El bloc “Switch” o bifurcació: desplaçaments repetitius endavant i/o enrere per tornar al lloc d’origen utilitzant el bloc bifurcació associat al sensor de contacte i el bloc “Motor” o “Move” amb durada il·limitada.

 

Crear un nou programa, per exemple “u3ex4.rbt”, per fer que el robot vagi endavant un cert número de rotacions si es manté pressionat el sensor de contacte, o vagi enrere si no s’activa.

 

 

Observar que per a que el robot vagi endavant, cal pressionar el sensor de contacte abans d’arrancar el programa. És important que els alumnes facin vàries proves per entendre correctament el funcionament de la bifurcació associada al sensor de contacte.

 

Per fer l’exercici més interessant, el podem posar dins d’un bucle (amb control de temps per que pugui parar). Què passarà si ho fem? Observar que quan el sensor es manté pressionat el robot va endavant i quan no s’activa va enrere, o en sentit contrari. Aquesta és una bona oportunitat per fer proves amb les tres opcions o accions que permet el sensor de contacte. Podem substituir el sensor de contacte pel sensor de llum i fer que el robot vagi endavant al trobar una base de color blanc o anar enrere si la base és de color negre, etc.

 

 

Podem acabar l’exercici amb una versió una mica diferent, on podem fer que el robot, “per sempre”, surti d’una línia negra i vagi endavant fins trobar una segona línia negra i, aleshores, faci un gir sobre eix i torni a la línia negra inicial de la posició de sortida. Quan pararà el robot? Què vol dir parar el robot? No pararà mai, sinó fem que el control del bucle sigui per temps. En la unitat didàctica 5 veurem com fer-lo parar, és a dir fer-lo sortir del bucle segons la lectura d’un sensor, per exemple.

 

 

Coneixements adquirits: Amb aquesta unitat didàctica l’alumne ha aprés a controlar el moviment del robot de diferents formes, mitjançant els blocs “Motor” i “Move”, i amb una bifurcació controlada per un sensor ubicada dins d’un bucle.

 

 

 

Creative Commons License

Curs d'introducció a LEGO® Mindstorms NXT i EV3 by Josep Maria Fargas is licensed under a Creative Commons Reconocimiento-No comercial-Compartir bajo la misma licencia 3.0 España License.

Permissions beyond the scope of this license may be available at www.bogatech.org.