domingo, 1 de febrero de 2015

ROBOT SIGUE LÍNEAS PROPORCIONAL

El robot sigue líneas proporcional es una mejora del que vimos en el post anterior. Aunque la estructura física del robot es la misma (usamos el Tribot), en este caso utilizaremos un programa mucho más complejo.


Ya no se mueve en zigzag. Ahora sigue el borde entre la línea negra y el fondo blanco de una manera más fluida. Esto es así porque no solo distingue el negro y el blanco, también detecta matices de gris según lo cerca o lejos que esté de la línea negra y emplea la cantidad de luz detectada como factor corrector de la potencia de los motores.



SIGUE LÍNEAS SENCILLO:
Solo distingue blanco y negro y los giros son siempre iguales, a la misma potencia. Si la luz es mayor de 50 (blanco) gira a la izquierda, si es menor de 50 (negro) gira a la derecha.


SIGUE LÍNEAS PROPORCIONAL:
Mide la luz y comprueba lo lejos que está de un valor que es el promedio entre el máximo y el mínimo que la luz puede tomar. Cuanto más se aleje del promedio, mayor será el giro y el sentido del mismo dependerá de si la luz es mayor o menor que el promedio.


Cuando el sensor está en el blanco, mide un máximo de luz reflejada, cuando está en el negro mide el valor mínimo posible y cuando este en el borde de la línea detecta un valor intermedio, que es con lo que jugamos en este modelo de sigue líneas. La potencia que le asignaremos a los motores para girar dependerá de cuanto se separe el valor de luz medido de este valor medio. La potencia de los motores no siempre va a ser la misma, será PROPORCIONAL al valor de luz medida, o lo que es lo mismo, a lo cerca o lejos que el robot esté de la línea. Cuanto más lejos esté de la línea, más acelerará, cuanto más cerca, más lento girará. Para ello a cada uno de los motores habrá que aplicarle una corrección que será la que dependa de la luz medida:

            Potencia del motor derecho = potencia + corrección

            Potencia del motor izquierdo = potencia - corrección

La corrección se calcula de la siguiente manera:


Donde:

           luz: es la luz que mide el robot en la posición en la que se encuentra

           promedio: la media entre los valores máximo y mínimo de luz que se puede medir 
                             (min+max)/2 

           ganancia: es un valor con el que ajustamos el cabeceo del sigue líneas (lo que zigzaguea)

           rango: cuantos valores posibles de luz se pueden medir entre el valor máximo y mínimo


A continuación os muestro cómo queda el programa. El código es largo y por eso lo he dividido en cuatro partes. Cada imagen incluye las explicaciones pertinentes: