Los sensores
Ahora vamos a usar los sensores de proximidad para evitar que el robot caiga de la mesa. Thymio dispone de 9 sensores de este tipo: 5 al frente, 2 por debajo y dos atrás. Los sensores de la parte de abajo se pueden usar para detectar el borde de la mesa.
Sensores de proximidad
Un sensor de proximidad sirve para medir la distancia hasta un objeto cercano. Esto se logra a través de dos componentes: un emisor infrarrojo y un receptor. El emisor ilumina con luz infrarroja (invisible al ojo humano), mientras el receptor mide detecta cuanta de la luz emitida fue reflejada por el objeto. Entre más cerca se encuentre el objeto, mayor será la luz reflejada. De esta forma es posible medir la distancia hasta el objeto.
Vamos a usar los sensores de la parte inferior para detectar el borde de la mesa. Ubica el robot sobre la mesa y utiliza el Aseba Studio para observar el valor que toma la variable prox.ground.delta en (Memory, variables); no olvides presionar refresh para actualizar el valor de la medición.
Ahora has lo mismo pero sosteniendo el robot en el aire. Te darás cuenta del cambio significativo que presenta la variable prox.ground.delta.
Cuando el robot está sobre la mesa, los valores son cercanos a 600; lo que quiere decir que hay mucha luz regresando al receptor. Cuando lo levantas, los valores se vuelven muy bajos porque muy poca luz regresa al receptor. Así que consideraremos la siguiente condición en nuestro código:
onevent prox
# Si el valor medido es menor que 300 entonces no se detecta la mesa
if prox.ground.delta[0]<300 or prox.ground.delta[1]<300 then
# detener los motores
motor.left.target=0
motor.right.target=0
# encender una luz roja para indicar una parada de emergencia.
call leds.top(32, 0, 0)
else
# si se detecta la mesa, entonces apagar la luz roja.
call leds.top(0, 0, 0)
end
Si el valor de uno de los dos sensores es muy bajo (<300), se deben detener los motores. Así, el robor se detendrá al encontrar el borde de la mesa.
El depurador (debugger)
Puede ocurrir que mientras probamos nuestro robot, necesitemos ver con más detalle las instrucciones que está eecutando el robot. Esto puede ayudarte a detectar y corregir errores en el código o ejecutar las instrucciones paso a paso.
En nuestro ejemplo, resulta interesante ver que pasa cuando el robot llega al borde de la mesa.
Puntos de parada
Para establecer un punto de parada en el código, has clic-derecho sobre la línea del código en la cual quieras detenerte:
call leds.top(32, 0, 0)
y selecciona Set breakpoint
El punto de parada se indica con un cuadro rojo a la izquierda de la línea.
De este modo, cuando la ejecución llega a este punto, el robot se detiene y espera hasta que le ordenes continuar.
Vamos a intentarlo. Primero, quita la x en la opción auto para mantener los valores en el punto de parada. Una vez establecido el punto de parada, hacemos que el robot se dirija hacia el borde de la mesa y esperamos a que se detenga. Podemos verificar la situación en ese momento. Por ejemplo, en la imagen vemos que los sensores de la parte inferior registran valores de 151 y 45, lo que quiere decir que no se refleja mucha luz y por lo tanto no se detectó la mesa.
Tan pronto como presionamos Run el robot continua la ejecución del código: se enciende la luz roja. Los puntos de parada se pueden quitar haciendo clic-derecho sobre la linea de código y seleccionando la opción Clear breakpoint del menú contextual.