Taller de robótica 2014. Sesión 5

robot_sumoSENSOR DE LUZ

El sensor de luz permite que el robot pueda percibir colores. Normalmente se emplea para distinguir negro y blanco.

El sensor informa al robot trasnmitiéndole un dato numérico cuyo valor está entre 0 y 100. 0 indicará que el sensor de luz está leyendo color negro -oscuro absoluto- y 100 blanco -luminosidad absoluta-.

Lo primero que hay que hacer cuando se van a utilizar sensores de luz es calibrarlos. Calibrar significa obtener los valores reales de luminosidad cuando el sensor o los sensores están enfocando a color negro y a color blanco.

Descargad el programa de calibración. Para distinguir negro de blanco, lo que hacemos es tomar primero los valores de negro, para ello colocamos los sensores de luz encima de color negro y pulsamos el botón derecho del ladrillo, luego lo mismo, pero situando los sensores sobre la superficie blanca  y volvemos a pulsar el botón derecho del ladrillo.

Lo que hace este programa es sumar los valores tomados en cada una de las lecturas y hacer dividir los valores por 2, esto es hacer la media. El valor obtenido lo llamamos valor umbral. Los valores leídos por el sensor cuyo valor esté por debajo del valor umbral serán considerados como negro y los que estén por encima serán considerados como blanco.

El proceso de calibración hay que hacerlo siempre porque las condiciones de luminosidad varían mucho dependiendo de dónde va a funcionar al robot.

Los sensores de luz se declaran de la siguiente forma SetSensorLight (IN_1); en caso de que el sensor de luz esté conectado a la entrada 1, si estuviera conectado a la entrada 2 sería SetSensorLight (IN_2); y así sucesivamente.

Hemos visto que todos los programas en nxc tienen que tener una tarea principal, que viene definido por task main(). Además de la tarea principal hay otros dos tipos de bloque de código: funciones y tareas secundarias.

Una función se define por void nombrefunción () y una tarea se define por task nombretarea (). Nombretarea tiene que se distinto de main. Podría ser por ejemplo:

– En el caso de la función: void calibracion (): Las funciones se ejecutan cuando se escribe su nombre en la task main().

– En el caso de la tarea podría ser task siguelinea().

El nombrefunción o el nombretarea no puede tener espacios entre las palabras del nombre en caso de que éste tenga más de una palabra ni tampoco tildes. Por ejemplo: void calibracion () sería válido, pero void cali bracion () no lo sería. De la misma forma task sigue linea () no sería válido. Sí es correcto task siguelinea ().

NOTA: veremos más sobre tareas más adelante, en la siguiente sesión.

Un programa tiene que estar ordenado en cuanto a sus tareas y funciones. Así, la estructura de un programa en nxc es:

declaración de constantes
declaración de variables
funciones
tareas secundarias
tarea principal task main()

Dentro de la tarea principal debe haber: declaración de los sensores que se vayan a utilizar en el robot y los nombres de las funciones y tareas que se van a ejecutar en ese programa.Ejemplo de una tarea principal task main() de un programa:

task main ()
{
SetSensorLight (IN_1);
SetSensorLight (IN_2);
SetSensorLight (IN_3);
SetSensorLowspeed (IN_4);
calibracion (); // Función calibración
inicio (); // Función inicio
Precedes (attack, atras, alante); // Esto lo veremos más adelante
}

PARA EQUIPOS DE RESCATE -4º ESO-
Ahora vamos a hacer una sencilla prueba, los equipos que van a hacer la prueba del rescate tendrán que añadir al programa de calibración el programa sigue líneas que os pasamos en la sesión anterior del taller. Cuidado, que hay que hacer algunas modificaciones.

PARA EQUIPOS DE SUMO -3º ESO-

Los equipos de sumo tendrán que, a partir del programa de calibración, añadir las instrucciones necesarias para mover el robot hacia adelante y que éste se mueva siempre hasta que encuentre una línea negra, entonces tiene que moverse hacia atrás y girar 180º.

Hay una nueva instrucción que necesitáis para hacer este programa: es la instrucción until, cuya sintaxis, esto es, cuya forma de escribirla es:

Una vez que terminéis de elaborar estos programas y de ver cómo funcionan los robots pasaremos a analizar cada una de las pruebas en las que vais a participar cada uno de los equipos: rescate o sumo.

Después de esto empezaréis a construir vuestros robots, que será diferente para cada equipo según las necesidades que tenga cada prueba.