|
|
|
LECTURA DE SENSORES PARA SIGUELINEAS: CONTROL LATERAL (by avlober) Antes de nada, y para referenciar bien los sensores y situarnos con respecto a derecha e izquierda vamos a numerar los sensores y motores y situarlos. Partimos del modelo comentado en otros tutoriales de control diferencial y 6 sensores (aunque es perfectamente válido para cualquier número de sensores y otro tipo de configuración). Primeramente numeramos los sensores del 1 al 6 comenzando por el sensor izquierdo y llamamos Mi al motor izquierdo y Md al motor derecho.
NOTA: Hay que comentar que las funciones que se exponen a continuación están hechas para un compilador de C específico y que es posible que dependiendo del compilador que se utilice puedan variar levemente. También hay que decir que se omiten las partes del programa en las que se configuran los puertos y otras configuraciones varias.
CONTROL LATERAL DERECHO Muy simple y fácil de entender, se trata de buscar la línea comenzando por el sensor situado mas a la derecha, es decir el sensor 6, nos detendremos en el primer sensor que detecte la linea y nos quedaremos con el número del sensor; esto puesto en una función no puede quedar así: char BitD(void) { if(RB5 == 1) return 6; if(RB4 == 1) return 5; if(RB3 == 1) return 4; if(RB2 == 1) return 3; if(RB1 == 1) return 2; if(RB0 == 1) return 1; return 0; } La función BitD() nos devolverá por tanto el número correspondiente al sensor que detecta la línea comenzando por la derecha. En el caso de que ningún sensor detecte la línea la función retornará el valor 0; esto nos servirá para saber lo que hacer en el caso de que el robot se salga de la línea (se explicará en el tutorial de control de motores)
CONTROL LATERAL IZQUIERDO Poco que decir, es exactamente lo mismo que el punto anterior pero ahora comenzamos por el sensor de la Izquierda (el sensor 1) y vamos hacia la derecha. Nos quedará: char BitI(void) { if(RB0 == 1) return 1; if(RB1 == 1) return 2; if(RB2 == 1) return 3; if(RB3 == 1) return 4; if(RB4 == 1) return 5; if(RB5 == 1) return 6; return 0; } DIFERENTE NÚMERO DE SENSORES Creo que no será difícil de implementar la función para un número de sensores diferente, o si los sensores los conectamos a otro puerto. |