miércoles, 6 de mayo de 2009

Sigue líneas/ Dibuja líneas.

*NOTA IMPORTANTE* Este programa es muy sensible a cambios en las rectas, por lo que se recomienda usar tramos de 15 cm en recta y 20-25cm en curva, además, cada tramo deberá estar separado por una línea blanca de unos 12mm de largo, y las líneas curvas deben ser de 90º.

Para este programa, lo que necesitaréis será el robot que viene en el kit básico, con ese valdrá para dibujar las líneas, pero si hacéis otro modelo más ligero (sólo con los dos motores, el ladrillo, y los sensores necesarios), posiblemente mejore.


Dicho esto, paso a expicar el programa, que encontraréis aquí:
http://www.megaupload.com/?d=2F56Z5FF

---Lo primero es empezar calibrando los sensores, tendremos que usar una línea negra, con discontinuidades blancas y con fondo más o menos marrón, si no habrá que cambiar la ecuación de la 3ª rama. En este paso, unos 15 bloques calibrarán nuestros sensores, diciéndonos en la pantalla si estamos calibrando el máximo o el mínimo de luz, una vez acabado, sonarán tres pitidos y comenzará el programa.

---Lo primero que encontraremos será un pequeño bucle donde se estará actualizando constantemente el valor del sensor de luz, que veremos en pantalla. Además, hay una pequeña rama (3ª) que reseteará la pantalla una vez para que esto funcione bien.

---Ya en la rama principal, marcamos las variables con sus valores iniciales, y entramos en el bucle principal, que consta de varias partes:
  1. Tenemos un Mini-Bucle que esperará a que la variable que busca luz blanca ( "light light") sea verdadera, entonces dará paso a la siguiente acción.
  2. Ahora medimos los sensores de rotación, y los comparamos sacando tres resultados distintos: El primero, detectará que no hay apenas diferencias entre las lecturas y marcará la variable "counter_1" con el valor 1, que más adelante significará "tramo recto". Si por el contrario, la variable no está en ese intervalo, comparará losdatos de los sensores y determinará dos cosas; si la lectura del sensor c es menor a la del b, supondrá que giramos a la derecha, marcando "counter_1" con el valor 2, si sucede lo contrario, la marcará con el valor 0. Después el programa esperará 0,3 segundos para que esta rama se alinee con las demás.
  3. Esta es la parte que dibujará las líneas. Primero leerá la variable "counter_1", y determinará si hemos girado a derecha o izquierda, o si hemos seguido rectos, tomando un camino u otro. Dentro de todos estos caminos, está una bifurcación (Parecida en los tres, con diferencias mínimas que hay que ver, así que os explico el funcionamiento básico de una de ellas), que lee la variable "dir" y determina la dirección en la que veníamos ( norte, sur este u oeste), y depediendo de ello, dibujará en la pantalla una cosa u otra, leyendo las variables para posicionar la línea ("Inicio_X" e "Inicio_Y), donde dibujará el comienzo, y después a dichas variables les sumará un número que será el final de la línea y además su nuevo valor, es decir, de donde comenzará la siguiente línea, así, obtendremos rectas en caso de que haya seguido recto, y diagonales en caso de que haya girado.
  4. Por último, emite un leve "bip" para indicar que ha dibujado algo, y reinicia los sensores de rotación para empezar a leer el siguiente tramo.

---La tercera rama se encarga del seguimiento de las líneas, así que cuenta con un sistema que relaciona la luz recibida con la potencia de los motores, para que tienda a estabilizarse entre los colores negro y marrón claro, de forma que sigue el borde de la línea. Ahora bien, cuando la varible "light light" sea verdadera, esperará 0,3 segundos a alinearse con el resto del programa, y andará unos 2 cm hacia delante para volver a estar en posición de línea negra, una vez allí, se reiniciará el bucle.

---La cuarta rama es la que determina en cada momento el valor de la variable "light light", para saber nuestro robot ha tocado línea blanca o no. Cuando la toca, la variable se marca como verdadera, y espera 0,2 segundos a remarcarla como falsa ( si recordáis, en las anteriores ramas esperamos 0,3 segundos, esto es para evitar que se cumplan sus acciones por duplicado), entonces espera de nuevo 1,5 segundos, para que no toque de nuevo la línea blanca y se produzcan duplicaciones.

Y esto es todo, este es un programa en el que hay que ajustar muchas cosa, para que funcione bien el en terreno a utilizar, se podría mejorar implementando un sensor de color en lugar del actual de luz, en cualquier caso, dentro del programa he hecho unas anotaciones en los lugares que puedan necesitar reajuste, aunque quizá necesitéis hacer más ajustes en otras zonas, eso lo dejo a vuestra elección.

Saludos.

No hay comentarios:

Publicar un comentario