Práctica 2: El buscador de luz

  Práctica 1: Comprobación de luces y sonido

  En esta práctica vamos a ejecutar un programa (preinstalado) que comprueba que funcionan el zumbador y las tres luces verdes de la parte posterior.

  1. Coloca el robot en el suelo en un lugar suficientemente iluminado 2. Enciéndelo poniendo el interruptor I/O en posición “I”.

  3. El robot hará sonar una breve melodía y se iluminarán los tres LEDs de su parte trasera.

  4. Si no ocurre lo anterior, mantén pulsado en botón rojo (de reset) hasta que suene un pitido breve. Entonces debería ocurrir lo dicho en el paso anterior.

  5. Apaga el robot. Si no ha funcionado nada, no te preocupes: puede ser que las pilas estén gastadas (la luz roja de la parte trasera parpadea) o mal colocadas o también que se haya borrado el programa que el robot lleva preinstalado (se llama Scribbler_Demo.bs2). Si fuera esto último, pídele a tu profesor que te lo recargue.

  Práctica 2: El buscador de luz

  En la parte frontal superior el Scribbler tiene tres agujeros en cuyos fondos hay otros tantos sensores de luz. Gracias a ellos no sólo puede detectar el grado de iluminación de su entorno sino también “saber” de qué lado hay más luz.

  1. Coloca el robot en el suelo en un lugar con iluminación desigual 2. Enciéndelo poniendo el interruptor I/O en posición “I”.

  3. Coge el robot con una mano y ponlo boca arriba con el interruptor I/O a tu derecha.

  Pulsa el botón rojo a la vez que tapas con un dedo el sensor de luz derecho. Mantenlo así hasta que suene un pitido breve.

  4. Pon el robot en el suelo. Verás que suena un pitido más largo y comienza a moverse buscando la luz más intensa. Si lo enfocas con una linterna verás que irá hacia ella aunque tú la muevas.

  5. Apaga el robot.

  Práctica 3: El detector de obstáculos

  Además de los tres sensores de luz visible, el Scribbler contiene un detector de rayos infrarrojos (IR) en la parte central de su morro y dos emisores del mismo tipo a ambos lados de aquel. Estos tres elementos constituyen una especie de radar con el que el robot puede detectar obstáculos a su alrededor con bastante precisión. Vamos a comprobarlo:

  1. Coloca el robot en el suelo y enciéndelo poniendo el interruptor I/O en posición “I”.

  2. Coge el robot con una mano y ponlo boca arriba con el interruptor I/O a tu derecha.

  Pulsa el botón rojo a la vez que cubres con un dedo el sensor de luz central. Mantenlo así hasta que suene un pitido breve.

  3. Pon el robot sobre una mesa y coloca a unos 20 cm delante de él cualquier objeto (sirve con una mano, por ejemplo). Verás que se activa al menos una de las luces verdes de su parte trasera y que suena una nota musical.

  4. Mueve el objeto a ambos lados del robot y comprueba cómo cambian las luces activadas y el tono de la nota que emite, según cuál sea el emisor que envía la señal IR. Aleja y acerca el objeto y comprueba en qué rango de distancias el detector IR es capaz de percibir la presencia de un obstáculo.

  5. Repite los pasos anteriores con otros objetos más grandes o más pequeños, más rugosos o más lisos, más o menos brillantes y extrae conclusiones sobre su capacidad de detección en cada caso.

  6. Cuando hayas terminado apaga el robot.

  Práctica 4: El seguidor de líneas

  El robot Scribbler tiene otro detector formado por de un emisor y dos sensores de infrarrojos en su parte inferior. El conjunto está diseñado para que el robot sea capaz de detectar la existencia y la posición de una línea oscura sobre un fondo claro. Para comprobarlo toma una hoja blanca de papel grueso o cartulina de tamaño A3 y con un rotulador negro de unos 2 cm de ancho dibuja sobre ella una línea continua (no necesariamente recta). Cuando lo hayas hecho coge el Scribbler y realiza las siguientes operaciones: 1. Coloca el robot en el suelo y enciéndelo poniendo el interruptor I/O en posición “I”.

  2. Coge el robot con una mano y ponlo boca arriba con el interruptor I/O a tu derecha.

  Pulsa el botón rojo a la vez que cubres con un dedo el sensor de luz derecho y con otro dedo el sensor izquierdo, dejando libre el central. Mantenlo así hasta que suene un pitido breve.

  3. Pon la hoja en el suelo y sitúa el Scribbler sobre ella, preferiblemente al comienzo de la línea negra. Verás que el robot comienza a moverse buscando la línea y cuando la encuentra intentará seguirla.

  4. En ocasiones, sobre todo en curvas muy cerradas el robot perderá la línea, pero si todo funciona correctamente, volverá a moverse de un lado para otro hasta volverla a encontrar.

  5. Si ves que ha funcionado, coge el robot y apágalo enseguida porque el sistema detector de líneas consume bastante energía y se podrían agotar las pilas.

  Práctica 5: El selector de programas de demostración

  En las prácticas anteriores hemos estado ejecutando varios módulos de un programa de demostración que el Scribbler trae cargado de la fábrica. El programa tiene ocho módulos distintos que, como ya sabes, se seleccionan tapando (o destapando) con los dedos los tres sensores de luz frontales a la vez que se pulsa el botón de reset. Si representamos un sensor tapado con un 1 y uno destapado con un 0, podemos identificar cada módulo con un número binario de tres cifras que representa a la combinación de sensores tapados o destapados que lo activa. Así por ejemplo, el módulo buscador de luz (práctica 2) se activa tapando sólo el sensor derecho, por lo que le corresponde el número 001, el módulo detector de línea (práctica 4) tapando los sensores derecho e izquierdo, pero no el central, por lo que se identifica con el número 101, etc. En esta práctica vas a ejecutar uno por uno los cuatro restantes módulos de demostración y describir lo más brevemente que puedas qué es lo que hacen:

  

Ident Descripción

  000 Comprueba el altavoz y las luces 001 El robot se mueve buscando la luz 010 Comprueba el detector de obstáculos 011 100 101 El robot se mueve siguiendo una línea 110 111

  Recuerda que para hacer correctamente la selección debes tapar o destapar totalmente los sensores con la parte trasera del robot hacia ti o, lo que es lo mismo, con el interruptor I/O a tu derecha.

  Práctica 6: Carga y ejecución de un programa

  Para realizar esta práctica, además del robot necesitas un ordenador con la aplicación y un cable COM/COM o bien COM/USB que comunique a ambos.

  Basic Stamp Editor 1. Enciende el ordenador, apaga el Scribbler y conéctalos con el cable serie.

  2. En el ordenador abre la aplicación Basic Stamp Editor y en el Scribbler pulsa el botón de encendido. Comprueba que tiene conexión con el ordenador pulsando Run > Identify (ó Ctrl+I); si la conexión está correctamente establecida aparecerá un mensaje como este En caso contrario, comprueba el cable y las baterías y vuelve a intentarlo.

3. Desde el menú File > Open busca y abre el programa ScribblerSaluda.bs2

  4. Para cargar y ejecutar el programa en el Scribbler pulsa Run > Run (ó Ctrl+R). Tras un breve mensaje que indica que el programa se está cargando, verás que el robot abre en la pantalla de tu ordenador una ventana como esta

  5. El proceso ha terminado. Si no vas a hacer más prácticas, debes apagar primero el robot y después desconectarlo del ordenador. Si vas a hacer otra práctica, puedes dejarlo todo como estaba. Ciertamente no ha sido un resultado muy espectacular, pero lo que se trata en esta práctica es que aprendáis de memoria el proceso de carga y ejecución de programas, porque lo vais a realizar muchas veces.

  Práctica 7: Edición y ejecución de un programa interactivo

  En esta práctica vamos a modificar un programa ya hecho. Al ejecutarlo el robot nos pedirá un número y nos devolverá su cuadrado. Además comenzaremos a ver qué significan las órdenes de PBASIC que aparecen en los programas.

  1. Conecta el Scribbler al ordenador y abre el Basic Stamp Editor, si no lo están. Es conveniente que verifiques la conexión pulsando Run > Identify ó Ctrl+I.

2. En el editor busca y abre el programa CalculaConScribbler.bs2

  Como puedes ver, el programa no es más que un archivo con 40 líneas de texto. La mayor parte de ellas no contienen órdenes de PBASIC sino comentarios para que los usuarios humanos entiendan lo que se está haciendo. Los reconocerás porque están escritos en fuente de color verde y porque tienen un apóstrofe ( ' ) al comienzo de la línea. Cuando el intérprete ve un apóstrofe sencillamente ignora lo que haya desde él hasta el final de la línea y no se lo envía a la controladora del Scribbler.

  

' Esto es un comentario --- Da igual lo que pongas porque no te va a hacer caso

  Sin embargo hay dos excepciones a esta regla: en los comentarios iniciales de cualquier programa hay siempre dos líneas como estas

  ' {$STAMP BS2} ' {$PBASIC 2.5}

  Esas dos líneas no son comentarios ni tampoco órdenes para la controladora, sino informaciones para el intérprete con los que se le indican el modelo de controlador que va a recibir el programa y la versión de PBASIC en que está escrito. Visto esto, continuamos con la práctica:

  3. Vuelve al editor e inserta una línea en blanco entre la octava y la novena. Escribe en ella el siguiente comentario

  ' REALIZADO POR:

  y añade tu nombre y el de tus compañeros de grupo. Cuando lo hayas hecho pulsa File > Save ó Ctrl+S

  4. Ejecuta el programa con Run > Run ó Ctrl+S y espera a que el robot abra una ventana llamada Debug Terminal. Después de saludarte, el Scribbler te pedirá que escribas un número entero; hazlo y pulsa <Enter>, verás que te devuelve el cuadrado de dicho número.

  5. Rellena la Memoria de Prácticas. En el apartado de comentarios debes indicar qué se podría mejorar en el programa porque no hace mal o porque no lo hace (por ejemplo ¿Qué ocurre con los números negativos? ¿Y con los muy grandes? ¿Y si le introducimos un texto en vez de un número?).

  6. Hemos terminado la práctica. Si no vas a hacer más apaga el robot desconéctalo del ordenador. Si vas a hacer otra, puedes dejarlo todo como estaba. Como ves, el proceso de carga y ejecución de un programa desde el ordenador al Scribbler es sencillo y directo. En los siguientes apartados iremos aprendiendo poco a poco cómo se elaboran los programas en lenguaje PBASIC.

  Práctica 8: Comprobación de las luces LED Las luces del Scribbler se encienden y apagan con dos órdenes muy sencillas: HIGH y LOW.

  La primera manda una señal eléctrica alta y la segunda una señal eléctrica baja a un puerto de entrada en la controladora. En electrónica digital una señal (eléctrica o de otro tipo) sólo puede tomar dos valores:

  

alto y bajo. Si su valor es mayor que cierto valor superior de referencia, prefijado de

  antemano, entonces se considera alta, sin importar que lo supere por mucho o por poco; si, por el contrario es inferior a otra referencia inferior entonces se considera baja. En particular, la controladora BS2 del Scribbler considera que una señal eléctrica es baja si su valor no supera los +1,39 Volt y alta si es mayor de +1,41 Volt. Idealmente, una señal alta debería valer +1,5 V y una señal baja +0,0 V, pero basta con que estén por encima o por debajo de 1,40 V para que la controladora las considere alta o baja, respectivamente.

  En cuanto a los puertos, son sencillamente patillas numeradas del circuito por donde la controladora envía o recibe señales eléctricas. En concreto, las luces del Scribbler están conectadas a las patillas 8, 9 y 10 de la controladora. Así pues, una orden como

  HIGH 8

  indica que se le está enviando una señal de al menos +1,41 V a lo que esté conectado a la patilla 8 de la controladora, que en este caso el LED central. Por tanto, el LED se encenderá. Para apagarlo bastará con escribir después

  LOW 8

  Para que a quien lea el programa le resulte más sencillo saber qué hay conectado a cada patilla, se suele poner al principio una lista de abreviaturas en las que a cada puerto numérico se le asigna un nombre que elige el usuario, por ejemplo:

  LedCentro PIN 8 ' En la patilla 8 esta conectado el LED central

  De esta forma la orden

  HIGH LedCentro es idéntica a la primera, pero más sencilla de recordar.

  Por otra parte, en esta práctica utilizaremos la orden PAUSE, que lo único que hace es mantener a la controladora y a los dispositivo conectados a ella en la situación en que se encuentren durante un tiempo especificado en milisegundos. Es decir,

  PAUSE 2000 introduce un tiempo de espera de 2000 milisegundos, o sea, 2 segundos.

  Para terminar, fíjate en que no es necesario escribir los comentarios en una línea aparte, sino que también se puede poner tras una orden al final de la línea. Con esto ya podemos comenzar la práctica.

  1. Conecta el Scribbler al ordenador y abre el Basic Stamp Editor, si no lo están. Es conveniente que verifiques la conexión pulsando Run > Identify ó Ctrl+I.

2. En el editor busca y abre el programa PruebaLeds.bs2 que, por cierto, tienes al principio del apartado 22.3.

  3. Ejecuta el programa con Run > Run ó Ctrl+S y comprueba cómo se van encendiendo las tres luces en intervalos de medio segundo y cómo al final se apagan todas a la vez.

  4. Modifica el programa para que encienda primero la luz izquierda durante un segundo y luego la apague, encienda después la luz central durante otro segundo y la apague y haga lo mismo con la luz derecha. Guárdalo como PruebaLeds1.bs2 ( menú File > Save as ) y ejecútalo para comprobar que funciona como se pide.

  5. Modifica el programa para que encienda la luz izquierda, tras 1,5 segundos la luz central, en el instante 3,0 seg la luz derecha y al llegar a 4,0 seg apague las tres.

  Guárdalo como PruebaLeds2.bs2 y ejecútalo para comprobar que funciona como se pide.

  6. Apaga el robot y desconéctalo del ordenador. Vuelve a encenderlo y comprueba si ejecuta algún programa. Explica qué ha ocurrido.

  7. Explica qué sucede cada vez que se pulsa el botón rojo que está situado en la parte trasera izquierda.

8. Hemos terminado la práctica. Si no vas a hacer más apaga el robot. Si vas a hacer otra, vuelve a conectarlo al ordenador.

  Práctica 9: Verificación del altavoz y uso de bucles

  El altavoz del Scribbler no se activa con la orden HIGH porque para que produzca sonidos es necesario activarlo y desactivarlo muchas veces por segundo, más cuanto más agudo sea el sonido. Para hacer esto el lenguaje PBASIC tiene una orden que se llama FREQOUT y que vamos a aprender a usar en esta práctica.

  1. Conecta el Scribbler al ordenador y abre el Basic Stamp Editor, si no lo están. Es conveniente que verifiques la conexión pulsando Run > Identify ó Ctrl+I.

2. En el editor busca y abre los programas PruebaAltavoz.bs2 y

  ScribblerReset.bs2

  3. Ejecuta el programa PruebaAltavoz.bs2 con Run > Run ó Ctrl+S y comprueba cómo suenan repetidamente en intervalos de 4×0,5 = 2 segundos dos notas sencillas, una doble y un silencio.

  4. Para que deje de sonar puedes hacer dos cosas: apagar el robot o cargar otro programa. Si apagas el robot, al volver a encenderlo seguirá sonando, así que lo mejor es que cargues otro programa. Te recomiendo que cargues o bien el programa inicial de demostración ( Scribbler Demo.bs2 ) o bien el programa de reinicio ( ScribblerReset.bs2 ), que precisamente abriste en el segundo paso. No hemos acabado la práctica, pero conviene detenerse para ver unas cuantas cosas interesantes que hay en el programa PruebaAltavoz.bs2 En las primeras líneas hay unos comentarios iniciales que identifican al programa y explican lo que hace. Debes habituarte a ponerlas en todos los programas que hagas porque con el paso del tiempo se olvida fácilmente lo que hemos hecho. Después (líneas 18 y 19) están esos comentarios especiales que indican al Basic Stamp Editor qué controladora y lenguaje estamos usando.

  En la línea 25 usamos la orden PIN

  emAltavoz PIN 11 ' Altavoz para indicar que lo que hay conectado en la patilla 11 se va a llamar emAltavoz de ahí en adelante (le he puesto el em al principio para recordar que es un emisor, o sea, un puerto de salida de datos, pero puedo llamarle como quiera). Para saber el número que corresponde a cada dispositivo se puede mirar dentro del robot dónde está conectado o, mucho más fácil, buscarlo en la documentación que lo acompaña. Después tenemos cuatro líneas de reserva y asignación de variables. En las dos primeras

  La4 VAR Word Mi3 VAR Word

  se reserva espacio en la memoria para dos datos variables que se llamarán La4 y Mi3 . Ambos son de tipo Word , lo que significa que ocupan 2 bytes cada uno. En las dos líneas siguientes

  La4 = 1760 Mi3 = 1319

  se introducen valores numéricos en las variables recién creadas. De ahí en adelante, cada vez que se use la expresión La4 el intérprete la sustituirá por el número 1760. El programa comienza verdaderamente a partir de la línea 40. En la 42

  LOW emAltavoz

  se apaga el altavoz por si acaso permaneciera encendido de antes. En la 44

  DEBUG “Escucha como suena!” el robot abre la ventana Debug Terminal y manda el mensaje entrecomillado.

  Entre las líneas 46 y 54 se desarrolla una construcción llamada bucle indefinido. Básicamente consiste en que el robot repetirá todo lo que haya entre las órdenes DO y

  

LOOP una y otra vez hasta que algo externo lo detenga. En este caso se repiten tres

  órdenes FREQOUT y una PAUSE. Esta última ya sabes lo que hace; en cuanto a las otras, la primera (línea 48)

  FREQOUT emAltavoz, 500, La4

  equivale a

  FREQOUT 11, 500, 1760

  y eso conecta y desconecta lo que haya en el puerto 11, es decir, el altavoz, durante 500 milisegundos con una frecuencia de 1760 veces por segundo. En definitiva, el altavoz emite durante medio segundo un sonido de 1760 Hz, que corresponde con bastante aproximación a la cuarta nota La (empezando por la izquierda) de un teclado musical, de ahí su nombre.

  En la línea 50 la orden

  FREQOUT emAltavoz, 500, La4, Mi3 hace sonar esas dos notas a la vez.

  Por último, al encontrar la orden LOOP (línea 54) la controladora regresa al comienzo del bucle y vuelve a repetirlo indefinidamente. Para que se vea más claro, todo lo que hay dentro de un bucle se suele escribir con sangría, aunque no es obligatorio. Existe otro tipo de bucle, llamado bucle definido que permite repetir una serie de operaciones una cierta cantidad de veces. Vamos a ver cómo se hace.

  5. Vuelve al programa PruebaAltavoz.bs2 en el editor, pulsa File > Save as y guárdalo con el nombre PruebaAltavoz2.bs2

6. Sustituye el bucle indefinido DO … LOOP por este otro:

  cuenta VAR Word FOR cuenta = 1 TO 15 ' repite 15 veces ... ... NEXT

  Los puntos suspensivos no tienes que ponerlos sino sustituirlos por las cuatro órdenes que hacen sonar la melodía.

  7. Ejecuta el programa con Run > Run ó Ctrl+S y comprueba cómo se repite la melodía exactamente 15 veces.

  8. Sabiendo que la nota Re3 tiene una frecuencia de 1174 Hz haz que repita la secuencia {Re3, Mi3, La4, silencio} durante siete veces.

  9. Ya casi hemos terminado la práctica. Guarda el programa, pero no desconectes el robot porque lo vas a necesitar. Merece la pena ver con un poco más de detalle cómo funciona el bucle definido, porque lo vamos a utilizar muchas veces. La orden

  cuenta VAR Word

  crea una nueva variable llamada cuenta de tipo Word (dos bytes de extensión). Esa variable se usará para que la controladora vaya recordando el número de repeticiones por el que se llega. Naturalmente, el nombre es arbitrario y podía haberle puesto cualquier otro, aunque conviene que sea descriptivo. La siguiente orden

  FOR cuenta = 1 TO 15

  indica el comienzo del bucle. Lo que haya desde ahí hasta NEXT se repetirá 15 veces, y en cada vez se irá incrementando el contador de uno en uno.

  10. Explica qué ocurriría si el bucle comenzase por FOR cuenta = 5 TO 15 ¿Se repetiría 15 veces, 10, 11, …? ¿O simplemente daría error? ¿Y si fuera por FOR cuenta = 15 TO 1 ? ¿Haría una cuenta atrás? Compruébalo con el Scribbler y cuando tengas la respuesta apágalo y desconéctalo del ordenador.

  11. Este apartado es para que lo resuelvas con el Scribbler apagado: ¿Cuál es el máximo valor que podría tener la variable cuenta? Pista: recuerda que en un byte cabe un número binario de ocho cifras. Veremos más adelante que la orden FREQOUT también se usa para manejar los detectores de obstáculos del Scribbler.

  Práctica 10: Comprobación de los fotosensores

  Los fotosensores del Scribbler constan de un condensador y una foto-resistencia que a grandes rasgos funcionan así: el condensador se carga al recibir una señal alta durante un tiempo suficiente (alrededor de 3 ms) y se descarga después sobre la foto-resistencia, tanto más deprisa cuanta más luz esté recibiendo esta. Así pues para manejar los fotosensores es necesario realizar dos pasos: primero se cargan los condensadores y después se mide su tiempo de descarga; cuanto mayor sea más oscuridad hay. En esta práctica vamos a ver cómo se puede hacer eso en el lenguaje PBASIC.

  1. Conecta el Scribbler al ordenador y abre el Basic Stamp Editor, si no lo están. Es conveniente que verifiques la conexión pulsando Run > Identify ó Ctrl+I.

  2. En el editor busca y abre los programas PruebaFotoSensores.bs2 y ScribblerReset.bs2

  3. Ejecuta el programa con Run > Run ó Ctrl+S . En la pantalla del ordenador aparecerá la ventana Debug Terminal donde se muestran los valores que en ese mismo instante están recibiendo los fotosensores. Si tapas uno de ellos verás que el correspondiente valor aumenta (hay más oscuridad), si lo destapas o le acercas una luz verás que disminuye.

  4. Gira hacia los lados el robot y estima un valor aproximado para los tiempos de descarga de los tres fotosensores en las condiciones habituales de tu taller.

  Apúntalos. Es importante conocer estos valores para que el Scribbler sepa qué entendemos por luz y por oscuridad. Por otra parte, como los fotosensores no son exactamente iguales, en las mismas condiciones no se descargan a idénticas velocidades; por eso es necesario estudiar cada uno por separado.

  5. Ejecuta el programa de reinicio ( ScribblerReset.bs2 ) y apaga el robot. El programa es fácil de entender si se ha comprendido cómo funcionan los fotosensores.

  Así por ejemplo en la línea

  HIGH reOscuroCen

  se carga el condensador del fotosensor central, después con la orden

  RCTIME reOscuroCen, 1, valOscCen

  se mide el tiempo que tarda en descargarse y se almacena en la variable valOscCen y, finalmente, en

  DEBUG "Valor del fotosensor central = ", DEC5 valOscCen, CR

  se envía a la ventana Debug Terminal el valor de dicho tiempo de descarga en formato numérico de cinco cifras (DEC5) más un salto de línea (CR) al final. Recuerda que los foto- sensores son en realidad detectores de oscuridad: cuanto más alto es el valor que devuelven, hay menos luz en el ambiente.

  Práctica 11: Verificación del detector de línea

  Como vimos anteriormente, el Scribbler posee en su parte inferior un detector de rayos infrarrojos que contiene un emisor IR y dos sensores situados a sus lados. Con esto el robot es capaz de encontrar una línea pintada en el suelo aprovechando el hecho de que los rayos IR rebotan al alcanzar una superficie clara y brillante, pero son absorbidos por superficies oscuras y mates. El emisor IR está conectado al puerto 3 y se activa y desactiva como los LEDs, es decir, con las órdenes HIGH y LOW, respectivamente. Los sensores están conectados a los puertos 4 (derecho) y 5 (izquierdo); normalmente están activados y sólo se desactivan cuando reciben un rayo IR rebotado del emisor.

  En el lenguaje PBASIC se considera que una variable se encuentra en estado activado (o

  verdadero

  ) cuando contiene un valor numérico no nulo, generalmente 1, y en estado desactivado (o falso) cuando contiene el valor cero 0. Gracias a esto podemos saber si los sensores han recibido un rebote o no, como enseguida veremos. Vamos a ver cómo se lleva todo esto a la práctica.

  1. Conecta el Scribbler al ordenador y abre el Basic Stamp Editor, si no lo están. Es conveniente que verifiques la conexión pulsando Run > Identify ó Ctrl+I.

2. En el editor busca y abre los programas PruebaLineas.bs2 y

  ScribblerReset.bs2 Antes de continuar con la práctica vamos a detenernos un momento a observar lo que hay en el programa.

  En las líneas 25 a 27 se definen los tres puertos del detector IR. Los puertos 4 y 5 son de entrada de datos,

  reLineaDer PIN 4 ' Detector (inferior) derecho de lineas reLineaIzq PIN 5 ' Detector (inferior) izquierdo de lineas

  por eso la re (de receptor) al comienzo de su nombre. De ahí en adelante, cada vez que se utilice uno de estos nombres, la controladora verificará el estado del correspondiente

  puerto, si está activo devolverá un 1 y si está inactivo devolverá un 0. Se dice entonces que reLineaDer y reLineaIzq funcionan como variables binarias, que sólo pueden contener un valor verdadero (1) ó falso (0). Hay una particularidad en el comportamiento de estos sensores que conviene tener clara: habitualmente se encuentran activos (devuelven 1 al ser interrogados) y sólo tras recibir un haz de pulsos IR se desactivan (devuelven un 0). Si te parece extraño, considera que son sensores de no-rebotes en vez de sensores de rebotes. Muchos otros dispositivos, tanto emisores como receptores, se comportan de esta manera y se dice de ellos que funcionan con lógica negativa. En la línea 34 se pone en funcionamiento el emisor IR con la orden HIGH como si fuera un LED —de hecho es un tipo especial de ellos— y a partir de ahí (líneas 36 a 58) se repite indefinidamente un bucle en el que comprueba individualmente el estado de los sensores laterales: si el sensor está a 1 es que no ha recibido el rebote del haz de infrarrojos que mandó el emisor, seguramente porque en su lado hay una línea en el suelo o al menos una zona más oscura que lo ha absorbido; si el sensor está a 0 es porque el haz del emisor ha rebotado sobre una zona clara y ha llegado hasta él desactivándolo. Para hacer esa comprobación es necesario utilizar una nueva estructura llamada

  bifurcación condicional. En general, estas estructuras consisten en evaluar una expresión

  que generalmente suele ser una comparación; si el resultado es verdadero (1) o bien un número distinto de cero entonces se ejecuta un conjunto de órdenes, pero si el resultado fuera falso o, lo que es lo mismo, el número 0 entonces ejecuta otro conjunto de órdenes. En el lenguaje PBASIC eso se hace con este grupo de órdenes:

  IF (...) THEN ... ELSE ... ENDIF Veamos sobre el programa qué significa cada cosa.

  En la línea 41 se comprueba si está desactivado el sensor derecho con la orden IF

  IF (reLineaDer = 0) THEN ' Si el sensor IR derecho esta a cero

  En caso de que lo esté ( reLineaDer = 0 ) se ejecuta (THEN) la línea siguiente

  DEBUG "Lado derecho: Blanco" ' Ha recibido el rebote: no hay línea

  y en caso contrario se ejecuta (ELSE) esta otra

  DEBUG "Lado derecho: Negro" ' No ha llegado el rebote: hay línea

  Por último, la línea

  ENDIF indica el final de la estructura de bifurcación.

  En definitiva, con esa estructura se ha conseguido que según si esté desactivado o no el sensor derecho el robot haga una cosa u otra. Observa que también podríamos haberlo hecho al revés, es decir, así, IF (reLineaDer <> 0) THEN ' Si el sensor IR derecho no esta a cero...

  DEBUG "Lado derecho: Negro" ' ...no ha llegado el rebote: hay línea ELSE ' En caso contrario... DEBUG "Lado derecho: Blanco" ' ...Ha recibido el rebote: no hay línea ENDIF

  siendo el resultado exactamente el mismo. Como habrás podido suponer, el símbolo <> significa “no es igual a” ; si quisieras indicar “es mayor o igual que” o bien “es menor o

  igual que” tienes que usar >= y <= respectivamente.

  En general, tras la sentencia IF puede ir cualquier expresión aritmética o lógica que devuelva un valor 0 ó 1, mientras que en las sentencias THEN y ELSE pueden ir una o varias órdenes de PBASIC. Enseguida veremos más ejemplos de todo esto. Es muy importante que no confundas las condiciones verdaderas o falsas con los estados

  activos e inactivos. Fíjate en este mismo caso: si el detector reLineaDer está inactivo, o

  sea, si contiene un valor 0, entonces la condición IF (reLineaDer = 0) devolverá un valor verdadero, o sea, 1, pero si está activado (contiene un 1) entonces esa misma

  condición devolverá un valor falso, o sea, un 0. Parece un trabalenguas pero es absolutamente lógico. Por lo demás, en las líneas 49 a 54 el programa vuelve a hacer esas mismas operaciones con el detector izquierdo para terminar regresando al comienzo del bucle y repetir estas operaciones indefinidamente.

  3. Apoya el robot sobre un costado y ejecuta el programa con Run > Run ó Ctrl+S . En la pantalla del ordenador aparecerá la ventana Debug Terminal donde se indica lo que están detectando los dos sensores inferiores. Acerca un objeto oscuro a los sensores y comprueba que ambos funcionan.

  4. Mientras preparas el siguiente apartado apaga el robot. Esto es para que el emisor de IR no agote las baterías.

  5. Sobre una hoja de papel dibuja líneas de distintos colores y anchuras, sitúa el robot sobre ellas y comprueba su mayor o menor dificultad para detectarlas. Anota los resultados.

  6. Ejecuta el programa de reinicio ( ScribblerReset.bs2 ) y vuelve a cargar el programa CalculaConScribbler.bs2 (práctica 7). Guárdalo con el nuevo nombre CalculaConScribbler2.bs2 y modifícalo para que pida dos números enteros y calcule su cociente sólo si el denominador es distinto de cero; en caso contrario debe avisar de que no puede hacer la división.

  7. Ejecuta el programa de reinicio ( ScribblerReset.bs2 ), apaga el robot y anota en la memoria de la Práctica 7 los resultados de esta ampliación, comentando las faltas que hayas encontrado.

  Práctica 12: Comprobación del detector de obstáculos

  El detector de obstáculos tiene una estructura ligeramente distinta a la del detector de líneas: este tiene dos emisores IR a ambos lados del morro (puertos 14 y 15) y un único sensor en la parte central (puerto 6). Además, el detector de obstáculos se programa de una manera un poco más elaborada que aquél. Ambas cosas permiten extraer una información más precisa y de forma más eficiente. En efecto, para detectar obstáculos es preferible enviar y rastrear el rebote de un pulso, esto es, de una sucesión de brevísimos destellos oscilatorios generadas mediante la orden FREQOUT (repasa la práctica del altavoz); digamos que es algo parecido al bip del sonar de los barcos, pero con luz infrarroja. Gracias a esto no sólo se gasta mucha menos energía en el emisor IR, sino que además, dependiendo de la frecuencia de las oscilaciones se podrá estimar la distancia a la que se encuentra el obstáculo.

  Vamos a ver de forma práctica cómo influye todo esto en la programación del detector.

  1. Conecta el Scribbler al ordenador y abre el Basic Stamp Editor, si no lo están. Es conveniente que verifiques la conexión pulsando Run > Identify ó Ctrl+I.

2. En el editor busca y abre el programa PruebaEco.bs2 (y si abres también ScribblerReset.bs2 tanto mejor).

  Este programa se distingue del anterior en varias cosas. Tras las definiciones de los puertos (líneas 26 a 34) en las líneas 39 y 40 se crean dos variables de tipo Bit —esto es, sólo pueden contener un 0 o un 1— para conocer la procedencia del último eco recogido por el sensor IR, si es que lo ha recibido:

  varLibreDer VAR Bit ' Recuerda si no hay obstaculos a la derecha varLibreIzq VAR Bit ' Recuerda si no hay obstaculos a la izquierda

  En las líneas 45 a 52 se desactivan todos los puertos de salida para prevenir posibles interferencias de situaciones anteriores y en la línea 53 comienza el bucle principal. La tarea básica que se debe repetir ya la conocemos: mirar primero a un lado y luego al otro para ver si hay obstáculos. Pero hay algunos cambios con respecto a la práctica anterior.

  El primer cambio está en que los emisores envían un brevísimo destello oscilatorio:

  FREQOUT emEcoDer, 1, 38500 ' Emite un pulso de luz IR (modulado a 38,5 KHz)

  La frecuencia de 38500 Hz permite detectar objetos a distancias intermedias, digamos de unos 25 cm; si se aumentase o redujese este valor aumentaría o se reduciría (resp.) la distancia de detección. Inmediatamente después inspecciona el puerto del receptor IR (recuerda que en el morro sólo tiene uno). Si ha habido rebote contendrá un 0 y si no lo ha recibido continuará teniendo el 1 que tiene habitualmente (recuerda lo que comenté sobre la lógica negativa de estos dispositivos). En cualquier caso, guarda el resultado en una variable auxiliar para que no se pierda

  varLibreDer = reEco ' ... y recoge el eco si lo hay

  Posteriormente realiza (líneas 58 a 64) una bifurcación condicional parecida a la de la práctica anterior para encender o apagar el LED derecho según haya rebote o no. El esquema se repite de idéntica forma con el otro emisor. Como no hay dos receptores el resultado se recoge igualmente en reEco, por eso es necesario guardarlo en otra variable auxiliar varLibreIzq para que en el siguiente bucle no se confunda con el resultado del otro emisor.

  3. Ejecuta el programa con Run > Run ó Ctrl+S . Si acercas la mano o, mejor aún, un objeto claro y liso verás cómo se iluminan los LEDs cuando lo detecta a uno u otro lado. Comprueba a qué distancias y ángulos la detección es más precisa.

  4. Repite el apartado anterior cambiando la frecuencia de destello por los siguientes valores (uno por uno): 41500, 40500, 39500, 38250 y 37500 Hz. Recopila los resultados obtenidos en una tabla resumen.

  5. Modifica el programa para que indique además por la ventana del Debug Terminal si ha detectado un obstáculo y a qué lado está.

  6. Apaga el robot y responde a la siguiente cuestión. En ocasiones ocurre que con alguna de las frecuencias de destello del apartado anterior el Scribbler detecta siempre un objeto, lo haya o no. ¿Qué crees que puede estar ocurriendo? Pista: Apaga la luz.

  En las siguientes prácticas veremos para terminar cómo se controla el funcionamiento de los servo-motores del Scribbler. Para evitar accidentes no estaría de más que pusieras el robot sobre una caja pequeña apoyado sobre su panza de manera que las ruedas no toquen el suelo y puedan moverse libremente. Después cuando compruebes que los programas funcionan correctamente puedes ponerlo en el suelo (nunca sobre una mesa) para ver cómo se mueve.

  Práctica 13: Comprobación de los motores en marcha indefinida

  El robot Scribbler posee dos servo-motores independientes conectados a los puertos 12 (motor derecho) y 13 (motor izquierdo). En el lenguaje PBASIC se activan con la orden PULSOUT seguida de dos valores: el primero es el número de puerto del motor que se desea mover y el segundo es otro número con el que se indica la velocidad a la que debe girar. Así por ejemplo, la orden

  PULSOUT 13, 2500 hace moverse al motor izquierdo con una velocidad de 2500 unidades.

  Desafortunadamente, a cuántos metros por segundo o vueltas por minuto corresponden esas 2500 unidades de velocidad (lo abreviaremos como udv) depende grandemente de la estructura física del motor, de la transmisión y de la controladora. Para nuestro robot lo único que se puede decir es que dicho número debe estar comprendido entre 1000 y 3000

  , que corresponden a los siguientes comportamientos:

  udv - A 3000 udv el motor gira en sentido directo lo más rápido que puede.

  • - A 2000 udv el motor está detenido.
  • - A 1000 udv el motor gira en sentido inverso lo más rápido que puede.

  Naturalmente, valores intermedios proporcionan velocidades intermedias. En el caso anterior, el motor izquierdo se pondrá a girar en sentido directo a media velocidad. Es completamente posible hacer que una rueda gire a una velocidad y la otra a una distinta: así es como se consigue que el robot se desvíe hacia un lado o al otro o que rote sobre sí mismo. Vamos a verlo enseguida. Por último, y antes de comenzar con la práctica conviene que sepas que antes de ponerlos en funcionamiento, los motores del Scribbler necesitan recibir una secuencia de inicialización que consiste en una señal baja y una pausa de 100 ms:

  LOW 12 ' Patilla del motor der a 0 volt LOW 13 ' Patilla del motor izq a 0 volt PAUSE 100 ' Da tiempo para que reaccionen

  Hay más cosas que decir acerca de los motores, pero lo haré en otras prácticas. De momento comenzaremos con esta.

  1. Conecta el Scribbler al ordenador y abre el Basic Stamp Editor, si no lo están. Es conveniente que verifiques la conexión pulsando Run > Identify ó Ctrl+I.

2. En el editor busca y abre el programa PruebaMotores1.bs2 (y si abres también ScribblerReset.bs2 tanto mejor).

  Observa las dos definiciones de constantes (CON) que aparecen en las líneas 32 y 33:

  Vizq CON 2800 ' Velocidad de la rueda izquierda Vder CON 2500 ' Velocidad de la rueda derecha

  Las constantes son datos como las variables pero cuyo valor se mantiene fijo a lo largo de todo el programa, de ahí su nombre (observa que no es necesario hacer la reserva previa de espacio). En este caso hemos definido las velocidades de ambas ruedas; como la izquierda gira más deprisa que la derecha, el robot describirá una curva hacia ese lado.

  El programa propiamente dicho comienza inicializando los dos motores (líneas 41 a 44) y enviando a cada motor la correspondiente orden PULSOUT para que se mueva. La rueda izquierda gira algo más deprisa que la derecha, así que cuando lo dejemos en el suelo el robot se moverá describiendo un círculo en sentido horario.

  3. Manteniendo el robot en volandas ejecuta el programa con Run > Run ó Ctrl+S y verifica que ambas ruedas giran en la forma indicada.

  4. Apaga el robot, desconéctalo del ordenador, colócalo en el suelo y vuelve a encenderlo. Comprueba que se mueve en círculos.

5. Apaga el robot, vuelve a situarlo sobre su apoyo, enciéndelo de nuevo y carga el programa ScribblerReset.bs2 para que se detenga.

  6. Modifica el programa PruebaMotores1.bs2 para que el Scribbler se mueva en círculos en sentido antihorario. Cuando hayas comprobado que funciona, guarda el programa modificado con el nombre PruebaMotores1a.bs2 (no te olvides de apagar el robot).

  7. Modifica el programa PruebaMotores1.bs2 para que el robot se mueva en línea recta hacia delante a la máxima velocidad posible. Cuando hayas comprobado que funciona, guarda el programa modificado con el nombre PruebaMotores1b.bs2

  8. Modifica el programa PruebaMotores1.bs2 para que el Scribbler se mueva marcha atrás, en círculos antihorarios. Cuando hayas comprobado que funciona, guarda el programa modificado con el nombre PruebaMotores1c.bs2

  9. Modifica el programa PruebaMotores1.bs2 para que el robot avance en línea recta durante dos segundos y después indefinidamente en círculos horarios. Cuando hayas comprobado que funciona, guarda el programa modificado con el nombre PruebaMotores1d.bs2

  Como habrás podido observar, esta forma de programar los motores del Scribbler presenta un problema muy importante: los motores se quedan indefinidamente en la última pareja de órdenes PULSOUT que se les dé y no hay manera de pararlos. Ciertamente sería posible detenerlos con

  PULSOUT 12, 2000 PULSOUT 13, 2000

  pero esa no es una buena solución porque, aunque no giren, los motores permanecen activos y pasando corriente por ellos. En la siguiente práctica vamos a ver otra manera más potente de programarlos que resuelve este problema.

  Práctica 14: Comprobación de los motores en marcha programada

  Es posible hacer que los motores del Scribbler giren durante un tiempo predefinido y luego se detengan o hagan otra cosa utilizando una combinación de órdenes que ahora veremos. Esto es muy útil no sólo porque proporciona una manera eficaz de parar los motores sino porque permite realizar maniobras complejas enlazando varias maniobras simples.

  Para ello se debe enviar a cada motor un grupo de tres órdenes como este:

  PULSOUT 12, 2200 PAUSE 1 PULSOUT 12, 1800

  La primera orden le dice al motor (en este caso, el derecho) que gire a 2200 udv, la segunda le pide que espere a recibir otra orden, la tercera es la que establece el tiempo que permanecerá girando, que en este caso es 1800 unidades de tiempo (lo llamaremos para abreviar). Tal como ocurría con las velocidades, la correspondencia entre udt y

  udt

  segundos es distinta para cada máquina y controladora; no obstante, para el caso concreto del Scribbler hay una hay una ecuación bastante exacta que nos relaciona ambas de forma muy sencilla:

Mostrar más