|
|
@ -1,4 +1,17 @@ |
|
|
|
/*
|
|
|
|
* SEGUIDOR DE LINEA CON ARDUINO |
|
|
|
* CODIGO BASE |
|
|
|
* Este código es la base para iniciar el seguidor de linea |
|
|
|
* aun no esta terminado, pero se ira completando hasta la |
|
|
|
* version final. |
|
|
|
* |
|
|
|
* NOTA: Esta codigo no usa la libreria QTR, por lo que el |
|
|
|
* procesamieto es manual y se puede ajustar de una mejor manera |
|
|
|
*/ |
|
|
|
|
|
|
|
//------------------------------------------------------------
|
|
|
|
//----------------------VARIABLES-----------------------------
|
|
|
|
//------------------------------------------------------------
|
|
|
|
int sensores[]={A0,A1,A2,A3,A4,A5,A6,A7};//Sensores
|
|
|
|
int valores[8]; |
|
|
|
int umbral[]={1023,1023,1023,1023,1023,1023,1023,1023}; |
|
|
@ -6,6 +19,9 @@ int numSensores=8;//total de sensres en la barra |
|
|
|
int ir =2;//encender y apagar la barra
|
|
|
|
|
|
|
|
|
|
|
|
//------------------------------------------------------------
|
|
|
|
//----------------------INICIALIZACION------------------------
|
|
|
|
//------------------------------------------------------------
|
|
|
|
void setup() { |
|
|
|
Serial.begin(115200); |
|
|
|
//Inicializamos los pines de los sensores
|
|
|
@ -19,6 +35,10 @@ void setup() { |
|
|
|
calibracion(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//------------------------------------------------------------
|
|
|
|
//---------------------------LOOP-----------------------------
|
|
|
|
//------------------------------------------------------------
|
|
|
|
void loop() { |
|
|
|
int pos=getPosicion(); |
|
|
|
|
|
|
@ -31,6 +51,13 @@ void loop() { |
|
|
|
delay(100); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Funcion que permite la lectura de los sensores de forma |
|
|
|
* analógica sin procesar nada, el resultado queda en el |
|
|
|
* arreglo llamado "valores" |
|
|
|
*/ |
|
|
|
void leerRAW(){ |
|
|
|
//LEER LOS VALORES DE LOS SENSORES
|
|
|
|
for(int x=0;x<numSensores;x++){ |
|
|
@ -38,6 +65,12 @@ void leerRAW(){ |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/*
|
|
|
|
* Función que permite mediante un promedio de valores |
|
|
|
* encontrar la posición de la linea negra en todo momento |
|
|
|
* es similar a la función de la libreria QTR, por lo que regresará |
|
|
|
* un valor entre 0 y 4000 |
|
|
|
*/ |
|
|
|
int getPosicion(){ |
|
|
|
leerDigital(); |
|
|
|
int activos=0; |
|
|
@ -48,10 +81,22 @@ int getPosicion(){ |
|
|
|
activos++; |
|
|
|
} |
|
|
|
} |
|
|
|
return suma/activos; |
|
|
|
if(activos==0){ |
|
|
|
return 0; |
|
|
|
}else{ |
|
|
|
return suma/activos; |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/*
|
|
|
|
* Esta función permite leer los valores de los ensores y |
|
|
|
* procesar cada uno de los valores para encontrar la linea |
|
|
|
* negra, similar a la lectura de la libreria QTR, donde cada |
|
|
|
* linea es multipo de 500 |
|
|
|
* |
|
|
|
* 500 1000 1500 2000 2500 3000 3500 4000 |
|
|
|
*/ |
|
|
|
void leerDigital(){ |
|
|
|
//LEER LOS VALORES DE LOS SENSORES
|
|
|
|
for(int x=0;x<numSensores;x++){ |
|
|
@ -59,6 +104,15 @@ void leerDigital(){ |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Esta funcion tiene como objetivo encontrar el valor mas alto |
|
|
|
* y mas bajo de los sensores, para establecer su umbral, por el momento solo |
|
|
|
* encuentra los valores bajos (blancos) y queda pendiente encontrar |
|
|
|
* los valores negros para obtener su promedio para el umbral. |
|
|
|
* |
|
|
|
* TODO:reacomodar esta función |
|
|
|
*/ |
|
|
|
void calibracion(){ |
|
|
|
digitalWrite(LED_BUILTIN,HIGH); |
|
|
|
for(int y=0;y<400;y++){ |
|
|
|