Modificacion de librería"QTR SENSORS" para un mejor sensado
En este post voy a presentar algunas de las modificaciones que hice al a librería "QTRSensors" para el uso con los sensores "qtr 8rc" y "qtr 8a" para lecturas en linea blanca.
En la libreria QTRSensors se tiene la opcion de cambiar el tipo de linea que queramos sensar, cambiando desde la funcion de lectura de linea o mejor dicho:
qtrrc.readLine(sensorValues, QTR_EMITTERS_ON, 0);
En las indicaciones nos dice que si queremos sensar lineas blancas, entonces debemos colocar en el ultimo parámetro de la funcion un "1" en ves del 0 que esta por defecto para las lineas negras.
Hasta aqui todo esta bien, pues solo hay que cambiar un parametro y listo, deberia funcionar bien para lineas blancas. Pero aqui viene lo frustrante del caso, o almenos ocurrió en el mio:
Yo utilizaba los sensores "qtr-8rc" en un robot velocista que debia competir para una pista que estaba impresa en un baner que tenia lineas blancas y el fondo era negro, y me di con la sorpresa que el robot no seguía las lineas. tras varios test que hacia al robot y cuestionamientos, chekar infinidad de veces la programación , no llegaba a ver cual era la razón por la que no funcionaba bien el robot.
Me puse a indagar en internet y foros acerca del tema pero, nadie daba con la respuesta, Asi que me llene de valor y decidí a resolver este misterio. Busque los datasheets de cada componente, estudie a profundidad el esquema electronico del arreglo de los sensores, y no encontre nada de malo, por lo que la unica solucion podria hallarse en el algoritmo de sensado de la libreria, asique no me quedo de otra que tratar de entender a la libria QTRsensors para buscar la solucion.
Pues, asi fue, le dedique su tiempo a eso y logre entender el funcionamiento de la libreria y puedo decir que encontre la solucion :D. Ahora les explicare:
MODIFICACION DE LA FUNCION DE LECTURA DE LINEA
Puedes descargar la libreria modificada:" https://mega.nz/#!CkMkiZhA!FMK4eJQVmOGZK9GZzfqSKRgEPOijTSkMmbNDUwbf5C0"
La instalacion es como cualquier otra libreria convencional de arduino, por lo que eso pasos los ignorare, o sino puedes guiarte del post donde hablo de eso : Utilizando la libreria QTR SENSORS
MODIFICACION DE LA FUNCION DE LECTURA DE LINEA
Puedes descargar la libreria modificada:" https://mega.nz/#!CkMkiZhA!FMK4eJQVmOGZK9GZzfqSKRgEPOijTSkMmbNDUwbf5C0"
La instalacion es como cualquier otra libreria convencional de arduino, por lo que eso pasos los ignorare, o sino puedes guiarte del post donde hablo de eso : Utilizando la libreria QTR SENSORS
Como veran ahora en la modificacion que hice aparecen 3 nuevos parámetros: flanco_color, en_linea, ruido.
qtrrc.readLine(sensorValues, QTR_EMITTERS_ON, 1, flanco_color, en_linea, ruido);
flanco_color: Este parametro sirve para aumentar o disminuir valores de lectura. Como sabemos cada sensor lee valores desde 0 ( mínima reflactancia) hasta 1000 (maxima reflactancia). pero segun los testeos que hice, no se llega a obtener un valor adecuado, por eso cree una variable que aumentara o disminuyera esos valores forzosamente para asi obtener valores decentes que sean medibles. el valor por defecto es 0
en_linea: Con este parámetro podemos variar la forma en que la libreria tomara los valores de los sensores y los considerara "si esta o no en una linea", luego la libreria tomara los valores de cada sensor y los promediara para asi obtener un valor de posicion con respecto a esa linea. su valor por defecto es de 200.
ruido: Con este parametro se podra variar desde que valores de reflactancia es considerados como ruido, el valor por defecto es de 50.
EN ACCION!
Unos valores que probe en linea blanca que funcionan, y podria decir que hasta mejor que antes, son estos :
Valores para linea negra:
position = qtrrc.readLine(sensorValues,QTR_EMITTERS_ON, 0 , 0 , 400 , 30);
position = qtrrc.readLine(sensorValues,QTR_EMITTERS_ON, 0 , 0 , 300 , 50);
position = qtrrc.readLine(sensorValues,QTR_EMITTERS_ON, 0 , -200 , 200 , 100);
pueden probar con estos valores, y ver que tal les va. Cada valor dependera del tipo de superficie, por lo que los resultados variaran, asi que si no te resulta estos valores trata de buscar tus valores adecuados testeando los con el ejemplo y te sacas la duda de como funcionan en verdad cada paramtro ;) :
qtrrc.readLine(sensorValues, QTR_EMITTERS_ON, 1, flanco_color, en_linea, ruido);
flanco_color: Este parametro sirve para aumentar o disminuir valores de lectura. Como sabemos cada sensor lee valores desde 0 ( mínima reflactancia) hasta 1000 (maxima reflactancia). pero segun los testeos que hice, no se llega a obtener un valor adecuado, por eso cree una variable que aumentara o disminuyera esos valores forzosamente para asi obtener valores decentes que sean medibles. el valor por defecto es 0
en_linea: Con este parámetro podemos variar la forma en que la libreria tomara los valores de los sensores y los considerara "si esta o no en una linea", luego la libreria tomara los valores de cada sensor y los promediara para asi obtener un valor de posicion con respecto a esa linea. su valor por defecto es de 200.
ruido: Con este parametro se podra variar desde que valores de reflactancia es considerados como ruido, el valor por defecto es de 50.
EN ACCION!
Unos valores que probe en linea blanca que funcionan, y podria decir que hasta mejor que antes, son estos :
position = qtrrc.readLine(sensorValues,QTR_EMITTERS_ON, 1 , 0 , 400 , 30);
position = qtrrc.readLine(sensorValues,QTR_EMITTERS_ON, 1 , 500 , 400 , 50);
position = qtrrc.readLine(sensorValues,QTR_EMITTERS_ON, 1 , 500 , 500 , 50);
position = qtrrc.readLine(sensorValues,QTR_EMITTERS_ON, 1 , 300 , 500 , 100);Valores para linea negra:
position = qtrrc.readLine(sensorValues,QTR_EMITTERS_ON, 0 , 0 , 400 , 30);
position = qtrrc.readLine(sensorValues,QTR_EMITTERS_ON, 0 , 0 , 300 , 50);
position = qtrrc.readLine(sensorValues,QTR_EMITTERS_ON, 0 , -200 , 200 , 100);
pueden probar con estos valores, y ver que tal les va. Cada valor dependera del tipo de superficie, por lo que los resultados variaran, asi que si no te resulta estos valores trata de buscar tus valores adecuados testeando los con el ejemplo y te sacas la duda de como funcionan en verdad cada paramtro ;) :
Nota: esta modificacion es valida tambien para sensores QTRA (todavia no he probado en estos sensores , pero en teoria deberian funcionar, si lo pruban porfavor aganmelo saber si les funciono o no para seguir mejorandolo :D). Si lo quieres utilizar para estos sensores solo debes escoger el ejemplo que dice QTRAExample y cambia lo mismo como lo indicado arriba.
4 comentarios:
Te felicito por resolver tu problema por si mismo asi es que nacen los verdaderos programadores
buenas una consulta
se aplica también en un sensor qtr8rc (chino)???
me gustaría saber tambien
No encuentro las lineas que modificastes, puedes describrir en que parte de los archivos se encuentran, me interesa modificar para el qtr8a.
Publicar un comentario