SlideShare une entreprise Scribd logo
1  sur  14
UNITAT 3. Sensors, condicions i bucles: la presa de decisions.<br /> <br />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”.<br /> <br />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.<br /> <br />Una mica de teoria<br /> <br />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.<br /> <br />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:<br />- 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.<br />- El sensor de so mesura la intensitat del so.<br />- El sensor de contacte o tàctil detecta si s’està realitzant pressió sobre el seu extrem.<br />- El sensor ultrasònic permet esbrinar la distància a la que es troba un objecte (com fan els dofins i els ratpenats).<br /> <br />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.<br /> <br />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 una mesura determinada d’un sensor (bloc “Wait” o esperar), bifurcar el programa si es compleixi una mesura o condició (bloc “Switch” o bifurcació), o repetir una acció un cert número de vegades o durant un termini de temps determinat (bloc “Loop” o bucle), etc.<br /> <br />Exercici 5: 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.<br /> <br />Per tal de controlar el moviment del robot utilitzarem només el sensor de rotacions intern de cada motor associat a un bloc “Wait” o esperar. Pararem els motors quan el bloc “Esperar” hagi determinat que han passat el número de rotacions o graus de gir desitjats.<br />                                                  <br />Fer un programa nou, per exemple “ex5.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. <br /> <br /> <br /> <br />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.<br />                                                                  <br />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.<br /> <br />Fer el mateix exercici amb el bloc “Move” (tenir cura en modificar la durada a il·limitada).<br /> <br /> <br />Replicar l’exercici 3 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.<br /> <br />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.<br /> <br />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.<br /> <br />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.<br /> <br />L’atribut “Action” o acció del bloc “Rotation Sensor” ha de ser “Reset” o reiniciar.<br /> <br />El programa final serà el següent (el podem repetir amb el bloc “Move”):<br /> <br /> <br />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 3 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.<br /> <br />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 per obtenir la precisió de gir necessària.<br /> <br />Exercici utilitzant blocs “Motor” amb gir sobre eix controlat amb el sensor de rotacions<br /> <br />El gir sobre eix es controla directament amb graus de gir dels motors<br /> <br />Exercici utilitzant blocs “Move” amb gir sobre eix controlat amb el sensor de rotacions<br /> <br />El gir sobre eix es controla directament amb graus de gir dels motors<br /> <br />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.<br /> <br />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).<br /> <br /> és equivalent a <br /> <br />En la segona opció cal recordar desseleccionar “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.<br /> <br /> <br /> <br />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.<br /> <br />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ó.<br /> <br />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.<br /> <br />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. <br /> <br />Exercici incremental 2: Arribar al final de la gàbia utilitzant només el sensor de rotacions intern d’un motor.<br /> <br />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.<br /> <br /> <br />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 que els motors tinguin una durada il·limitada.<br /> <br />Exercici 6: 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.<br /> <br />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.<br /> <br />Una mica de teoria<br /> <br />Abans de començar l’exercici amb els diferents sensors, cal explicar el concepte de llindar. Per exemple, una persona que mesuri 120 cm d’alçada (A) podem dir que és baixa, i si una altra mesura 180 cm (B) podem dir que és alta. 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 = 150 cm, en aquest cas.<br /> <br />Per calcular el llindar de dues mesures d’un sensor farem exactament el mateix. 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. Aquest procés permet, per exemple, establir el llindar entre dos colors pel sensor de llum (“light sensor”), o establir el llindar de so (“sound sensor”), o el llindar de proximitat pel sensor ultrasònic (“ultrasonic sensor”), la qual cosa cal fer per posar aquest llindar en el programa, abans d’executar-lo en el robot.<br /> <br />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.<br /> <br />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.<br /> <br />Tal com hem fet amb l’exercici 5, fer un programa nou, per exemple “ex6.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 al detectar la línia negra del tauler.<br /> <br /> <br /> <br />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.<br /> <br />Aquest petit exemple serà molt important per entendre bé els exercicis següents.<br /> <br />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.<br /> <br />Podem repetir el mateix exercici amb la resta de sensors.<br /> <br /> <br /> <br />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.<br /> <br /> <br /> <br />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.<br /> <br /> <br /> <br />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.<br /> <br />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.<br /> <br />Exercici incremental 3: Arribar al final de la gàbia utilitzant només el sensor de llum associat al bloc esperar.<br /> <br />Per realitzar aquest exercici, una bona pràctica és copiar l’exercici 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).<br /> <br />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 programari implica entendre la seva lògica, per tant, per se 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ó.<br /> <br /> <br />É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.<br /> <br />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.<br /> <br />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.<br /> <br />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.<br /> <br /> <br />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.<br /> <br />Exercici 7: 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.<br /> <br />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ó.<br /> <br />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?<br /> <br />Fer un programa nou, per exemple “ex7.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.<br /> <br /> amb Count = 50<br /> <br /> amb Seconds = 45<br />                   <br />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 6 anterior, però substituint el bloc “Wait” pel bloc “Loop” controlat pel sensor de llum (recordar de modificar la durada a il·limitada i frenar els motors a la sortida del bucle).<br /> <br /> <br />Pararà el robot si no afegim un bloc per frenar els motors? El robot pararà, però sense frenar els motors.<br /> <br />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.<br /> <br /> <br />Exercici incremental 4: Arribar al final de la gàbia utilitzant només el sensor de llum associat al bloc bucle.<br /> <br />Per realitzar aquest exercici, podem copiar i modificar l’exercici incremental 3 anterior.<br /> <br /> <br />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. Només falta estudiar l’últim tipus de control que té el bucle, el control lògic, que abordarem en la unitat didàctica següent.<br /> <br />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ó). Per poder realitzar aquests conjunts de tasques diferents, el bloc 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.<br /> <br />Exercici 8: 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.<br /> <br />Crear un nou programa, per exemple “ex8.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.<br /> <br /> <br />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.<br /> <br />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.<br /> <br /> <br />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 següent unitat didàctica veurem com fer-lo parar, és a dir fer-lo sortir del bucle segons la lectura d’un sensor, per exemple.<br /> <br /> <br />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.<br />Curs d'introducció a LEGO® Mindstorms NXT by José María Fargas Texidó is licensed under a Creative Commons Reconocimiento-No comercial-Compartir bajo la misma licencia 3.0 España License.<br />Permissions beyond the scope of this license may be available at www.bogatech.org.<br /> <br />
Exercici 2 lego
Exercici 2 lego
Exercici 2 lego
Exercici 2 lego
Exercici 2 lego
Exercici 2 lego
Exercici 2 lego
Exercici 2 lego
Exercici 2 lego
Exercici 2 lego
Exercici 2 lego
Exercici 2 lego
Exercici 2 lego

Contenu connexe

Similaire à Exercici 2 lego

Exercici 3 lego
Exercici 3 legoExercici 3 lego
Exercici 3 legoAvel·lí
 
Intro rob lego_mindstorm
Intro rob lego_mindstormIntro rob lego_mindstorm
Intro rob lego_mindstormEloy
 
Guia de posada en marxa ls maker v.2
Guia de posada en marxa   ls maker v.2Guia de posada en marxa   ls maker v.2
Guia de posada en marxa ls maker v.2La Salle
 
Control I RobòTica
Control I RobòTicaControl I RobòTica
Control I RobòTicaPedro Pablo
 
Lego mindstorm nxt alex sanchez
Lego mindstorm nxt alex sanchezLego mindstorm nxt alex sanchez
Lego mindstorm nxt alex sanchezAlex San
 
Automatisme i robòtica
Automatisme i robòticaAutomatisme i robòtica
Automatisme i robòticaBelen Diaz
 
Tecnoooo powerrrr
Tecnoooo powerrrrTecnoooo powerrrr
Tecnoooo powerrrrJoan Aleron
 

Similaire à Exercici 2 lego (10)

Exercici 3 lego
Exercici 3 legoExercici 3 lego
Exercici 3 lego
 
Intro rob lego_mindstorm
Intro rob lego_mindstormIntro rob lego_mindstorm
Intro rob lego_mindstorm
 
Guia de posada en marxa ls maker v.2
Guia de posada en marxa   ls maker v.2Guia de posada en marxa   ls maker v.2
Guia de posada en marxa ls maker v.2
 
5 marieta caçadora
5 marieta caçadora5 marieta caçadora
5 marieta caçadora
 
Control I RobòTica
Control I RobòTicaControl I RobòTica
Control I RobòTica
 
T5 marieta
T5 marietaT5 marieta
T5 marieta
 
Lego mindstorm nxt alex sanchez
Lego mindstorm nxt alex sanchezLego mindstorm nxt alex sanchez
Lego mindstorm nxt alex sanchez
 
Automatisme i robòtica
Automatisme i robòticaAutomatisme i robòtica
Automatisme i robòtica
 
Ri01
Ri01Ri01
Ri01
 
Tecnoooo powerrrr
Tecnoooo powerrrrTecnoooo powerrrr
Tecnoooo powerrrr
 

Plus de Avel·lí

Som Energia: El cooperativisme energètic: la resposta ciutadana
Som Energia: El cooperativisme energètic: la resposta ciutadanaSom Energia: El cooperativisme energètic: la resposta ciutadana
Som Energia: El cooperativisme energètic: la resposta ciutadanaAvel·lí
 
Som Energia: Autoconsum fotovoltaic
Som Energia: Autoconsum fotovoltaicSom Energia: Autoconsum fotovoltaic
Som Energia: Autoconsum fotovoltaicAvel·lí
 
Som Energia: 1r Congrés d'Energies Renovables i Sostenibilitat en Territoris ...
Som Energia: 1r Congrés d'Energies Renovables i Sostenibilitat en Territoris ...Som Energia: 1r Congrés d'Energies Renovables i Sostenibilitat en Territoris ...
Som Energia: 1r Congrés d'Energies Renovables i Sostenibilitat en Territoris ...Avel·lí
 
Esquela escola publica
Esquela escola publicaEsquela escola publica
Esquela escola publicaAvel·lí
 
Hay alternativas
Hay alternativasHay alternativas
Hay alternativasAvel·lí
 
Gnu ubuntu-facil-v4
Gnu ubuntu-facil-v4Gnu ubuntu-facil-v4
Gnu ubuntu-facil-v4Avel·lí
 
Ubunturef(esp) Comandos
Ubunturef(esp) ComandosUbunturef(esp) Comandos
Ubunturef(esp) ComandosAvel·lí
 
Softlibre enriquecido
Softlibre enriquecidoSoftlibre enriquecido
Softlibre enriquecidoAvel·lí
 
Manual desobediencia
Manual desobedienciaManual desobediencia
Manual desobedienciaAvel·lí
 
Programari lliure, societat lliure:
Programari lliure,  societat lliure:Programari lliure,  societat lliure:
Programari lliure, societat lliure:Avel·lí
 
Ebook openoffice 3-writer-calc-impress
Ebook openoffice 3-writer-calc-impressEbook openoffice 3-writer-calc-impress
Ebook openoffice 3-writer-calc-impressAvel·lí
 
Escola, salud i feina, 3a edició
Escola, salud i feina, 3a edicióEscola, salud i feina, 3a edició
Escola, salud i feina, 3a edicióAvel·lí
 
Cap09. Introducción a Linux Otras tareas elementales
Cap09. Introducción a Linux Otras tareas elementalesCap09. Introducción a Linux Otras tareas elementales
Cap09. Introducción a Linux Otras tareas elementalesAvel·lí
 
Cap04.Introducción a Linux El entorno de trabajo en Ubuntu
Cap04.Introducción a Linux El entorno de trabajo en UbuntuCap04.Introducción a Linux El entorno de trabajo en Ubuntu
Cap04.Introducción a Linux El entorno de trabajo en UbuntuAvel·lí
 
Cap07.Introducción a Linux Aplicaciones de red
Cap07.Introducción a Linux Aplicaciones de redCap07.Introducción a Linux Aplicaciones de red
Cap07.Introducción a Linux Aplicaciones de redAvel·lí
 

Plus de Avel·lí (20)

Som Energia: El cooperativisme energètic: la resposta ciutadana
Som Energia: El cooperativisme energètic: la resposta ciutadanaSom Energia: El cooperativisme energètic: la resposta ciutadana
Som Energia: El cooperativisme energètic: la resposta ciutadana
 
Som Energia: Autoconsum fotovoltaic
Som Energia: Autoconsum fotovoltaicSom Energia: Autoconsum fotovoltaic
Som Energia: Autoconsum fotovoltaic
 
Som Energia: 1r Congrés d'Energies Renovables i Sostenibilitat en Territoris ...
Som Energia: 1r Congrés d'Energies Renovables i Sostenibilitat en Territoris ...Som Energia: 1r Congrés d'Energies Renovables i Sostenibilitat en Territoris ...
Som Energia: 1r Congrés d'Energies Renovables i Sostenibilitat en Territoris ...
 
Prova
ProvaProva
Prova
 
Pneumàtica
PneumàticaPneumàtica
Pneumàtica
 
Esquela escola publica
Esquela escola publicaEsquela escola publica
Esquela escola publica
 
Hay alternativas
Hay alternativasHay alternativas
Hay alternativas
 
Retallades
RetalladesRetallades
Retallades
 
Formulari
FormulariFormulari
Formulari
 
Vaga
VagaVaga
Vaga
 
Gnu ubuntu-facil-v4
Gnu ubuntu-facil-v4Gnu ubuntu-facil-v4
Gnu ubuntu-facil-v4
 
Ubunturef(esp) Comandos
Ubunturef(esp) ComandosUbunturef(esp) Comandos
Ubunturef(esp) Comandos
 
Softlibre enriquecido
Softlibre enriquecidoSoftlibre enriquecido
Softlibre enriquecido
 
Manual desobediencia
Manual desobedienciaManual desobediencia
Manual desobediencia
 
Programari lliure, societat lliure:
Programari lliure,  societat lliure:Programari lliure,  societat lliure:
Programari lliure, societat lliure:
 
Ebook openoffice 3-writer-calc-impress
Ebook openoffice 3-writer-calc-impressEbook openoffice 3-writer-calc-impress
Ebook openoffice 3-writer-calc-impress
 
Escola, salud i feina, 3a edició
Escola, salud i feina, 3a edicióEscola, salud i feina, 3a edició
Escola, salud i feina, 3a edició
 
Cap09. Introducción a Linux Otras tareas elementales
Cap09. Introducción a Linux Otras tareas elementalesCap09. Introducción a Linux Otras tareas elementales
Cap09. Introducción a Linux Otras tareas elementales
 
Cap04.Introducción a Linux El entorno de trabajo en Ubuntu
Cap04.Introducción a Linux El entorno de trabajo en UbuntuCap04.Introducción a Linux El entorno de trabajo en Ubuntu
Cap04.Introducción a Linux El entorno de trabajo en Ubuntu
 
Cap07.Introducción a Linux Aplicaciones de red
Cap07.Introducción a Linux Aplicaciones de redCap07.Introducción a Linux Aplicaciones de red
Cap07.Introducción a Linux Aplicaciones de red
 

Exercici 2 lego

  • 1. UNITAT 3. Sensors, condicions i bucles: la presa de decisions.<br /> <br />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”.<br /> <br />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.<br /> <br />Una mica de teoria<br /> <br />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.<br /> <br />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:<br />- 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.<br />- El sensor de so mesura la intensitat del so.<br />- El sensor de contacte o tàctil detecta si s’està realitzant pressió sobre el seu extrem.<br />- El sensor ultrasònic permet esbrinar la distància a la que es troba un objecte (com fan els dofins i els ratpenats).<br /> <br />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.<br /> <br />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 una mesura determinada d’un sensor (bloc “Wait” o esperar), bifurcar el programa si es compleixi una mesura o condició (bloc “Switch” o bifurcació), o repetir una acció un cert número de vegades o durant un termini de temps determinat (bloc “Loop” o bucle), etc.<br /> <br />Exercici 5: 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.<br /> <br />Per tal de controlar el moviment del robot utilitzarem només el sensor de rotacions intern de cada motor associat a un bloc “Wait” o esperar. Pararem els motors quan el bloc “Esperar” hagi determinat que han passat el número de rotacions o graus de gir desitjats.<br />                                                  <br />Fer un programa nou, per exemple “ex5.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. <br /> <br /> <br /> <br />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.<br />                                                                  <br />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.<br /> <br />Fer el mateix exercici amb el bloc “Move” (tenir cura en modificar la durada a il·limitada).<br /> <br /> <br />Replicar l’exercici 3 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.<br /> <br />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.<br /> <br />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.<br /> <br />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.<br /> <br />L’atribut “Action” o acció del bloc “Rotation Sensor” ha de ser “Reset” o reiniciar.<br /> <br />El programa final serà el següent (el podem repetir amb el bloc “Move”):<br /> <br /> <br />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 3 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.<br /> <br />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 per obtenir la precisió de gir necessària.<br /> <br />Exercici utilitzant blocs “Motor” amb gir sobre eix controlat amb el sensor de rotacions<br /> <br />El gir sobre eix es controla directament amb graus de gir dels motors<br /> <br />Exercici utilitzant blocs “Move” amb gir sobre eix controlat amb el sensor de rotacions<br /> <br />El gir sobre eix es controla directament amb graus de gir dels motors<br /> <br />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.<br /> <br />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).<br /> <br /> és equivalent a <br /> <br />En la segona opció cal recordar desseleccionar “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.<br /> <br /> <br /> <br />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.<br /> <br />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ó.<br /> <br />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.<br /> <br />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. <br /> <br />Exercici incremental 2: Arribar al final de la gàbia utilitzant només el sensor de rotacions intern d’un motor.<br /> <br />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.<br /> <br /> <br />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 que els motors tinguin una durada il·limitada.<br /> <br />Exercici 6: 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.<br /> <br />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.<br /> <br />Una mica de teoria<br /> <br />Abans de començar l’exercici amb els diferents sensors, cal explicar el concepte de llindar. Per exemple, una persona que mesuri 120 cm d’alçada (A) podem dir que és baixa, i si una altra mesura 180 cm (B) podem dir que és alta. 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 = 150 cm, en aquest cas.<br /> <br />Per calcular el llindar de dues mesures d’un sensor farem exactament el mateix. 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. Aquest procés permet, per exemple, establir el llindar entre dos colors pel sensor de llum (“light sensor”), o establir el llindar de so (“sound sensor”), o el llindar de proximitat pel sensor ultrasònic (“ultrasonic sensor”), la qual cosa cal fer per posar aquest llindar en el programa, abans d’executar-lo en el robot.<br /> <br />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.<br /> <br />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.<br /> <br />Tal com hem fet amb l’exercici 5, fer un programa nou, per exemple “ex6.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 al detectar la línia negra del tauler.<br /> <br /> <br /> <br />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.<br /> <br />Aquest petit exemple serà molt important per entendre bé els exercicis següents.<br /> <br />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.<br /> <br />Podem repetir el mateix exercici amb la resta de sensors.<br /> <br /> <br /> <br />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.<br /> <br /> <br /> <br />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.<br /> <br /> <br /> <br />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.<br /> <br />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.<br /> <br />Exercici incremental 3: Arribar al final de la gàbia utilitzant només el sensor de llum associat al bloc esperar.<br /> <br />Per realitzar aquest exercici, una bona pràctica és copiar l’exercici 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).<br /> <br />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 programari implica entendre la seva lògica, per tant, per se 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ó.<br /> <br /> <br />É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.<br /> <br />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.<br /> <br />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.<br /> <br />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.<br /> <br /> <br />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.<br /> <br />Exercici 7: 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.<br /> <br />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ó.<br /> <br />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?<br /> <br />Fer un programa nou, per exemple “ex7.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.<br /> <br /> amb Count = 50<br /> <br /> amb Seconds = 45<br />                   <br />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 6 anterior, però substituint el bloc “Wait” pel bloc “Loop” controlat pel sensor de llum (recordar de modificar la durada a il·limitada i frenar els motors a la sortida del bucle).<br /> <br /> <br />Pararà el robot si no afegim un bloc per frenar els motors? El robot pararà, però sense frenar els motors.<br /> <br />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.<br /> <br /> <br />Exercici incremental 4: Arribar al final de la gàbia utilitzant només el sensor de llum associat al bloc bucle.<br /> <br />Per realitzar aquest exercici, podem copiar i modificar l’exercici incremental 3 anterior.<br /> <br /> <br />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. Només falta estudiar l’últim tipus de control que té el bucle, el control lògic, que abordarem en la unitat didàctica següent.<br /> <br />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ó). Per poder realitzar aquests conjunts de tasques diferents, el bloc 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.<br /> <br />Exercici 8: 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.<br /> <br />Crear un nou programa, per exemple “ex8.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.<br /> <br /> <br />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.<br /> <br />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.<br /> <br /> <br />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 següent unitat didàctica veurem com fer-lo parar, és a dir fer-lo sortir del bucle segons la lectura d’un sensor, per exemple.<br /> <br /> <br />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.<br />Curs d'introducció a LEGO® Mindstorms NXT by José María Fargas Texidó is licensed under a Creative Commons Reconocimiento-No comercial-Compartir bajo la misma licencia 3.0 España License.<br />Permissions beyond the scope of this license may be available at www.bogatech.org.<br /> <br />