Browse Source

Update SeguidorLineaArduino.ino

comentarios
main
Miguel Delgado 3 years ago
parent
commit
9699b285f5
  1. 40
      SeguidorLineaArduino/SeguidorLineaArduino.ino

40
SeguidorLineaArduino/SeguidorLineaArduino.ino

@ -87,17 +87,33 @@ void loop() {
Serial.print("\t"); Serial.print("\t");
} }
Serial.println(pos); Serial.println(pos);
*/
/*
*El error generado de 500 a 4000, se mapea a un valor
*aceptable de -255 a 255 para establecer un valor adecuado
*del error en función de la salida de los motores
*/ */
int error=map(pos,500,4000,-255,255); int error=map(pos,500,4000,-255,255);
Serial.print(pos);
Serial.print("->");
Serial.println(error);
luces(false,false); luces(false,false);
/*
* TODO: se debe agregar el código para incluir los valores de
* D e I, pues actualmante solo tutiliza control P
*/
float pid=kp*error; float pid=kp*error;
acelerar(70+pid,70-pid); acelerar(70+pid,70-pid);
} }
/*
* Funcion que controla la velocidad de cada motor, por lo
* que se envia el PWM que será aplicado a cada motor,
* acepta cualquier valor, pero esta validado para que solo
* se pueda utilizar un rango de 0 - 255, si envias otro
* valor, por defecto se coloca el extremo correspondiente
*/
void acelerar(int motIzq, int motDer){ void acelerar(int motIzq, int motDer){
if(motIzq<0){ if(motIzq<0){
analogWrite(PWMB,0); analogWrite(PWMB,0);
@ -119,6 +135,11 @@ void acelerar(int motIzq, int motDer){
} }
} }
/*
* Función que permite controlar dos led's uno derecho y
* el otro en la izquierda del seguidor
*/
void luces(boolean izq,boolean der){ void luces(boolean izq,boolean der){
digitalWrite(LED_IZQ,izq); digitalWrite(LED_IZQ,izq);
digitalWrite(LED_DER,der); digitalWrite(LED_DER,der);
@ -142,6 +163,9 @@ void leerRAW(){
* encontrar la posición de la linea negra en todo momento * 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á * es similar a la función de la libreria QTR, por lo que regresará
* un valor entre 0 y 4000 * un valor entre 0 y 4000
*
* NOTA: despues de llamar a esta función pueces ver los
* valores en el arreglo llamado "valores"
*/ */
int getPosicion(){ int getPosicion(){
leerDigital(); leerDigital();
@ -168,6 +192,8 @@ int getPosicion(){
* linea es multipo de 500 * linea es multipo de 500
* *
* 500 1000 1500 2000 2500 3000 3500 4000 * 500 1000 1500 2000 2500 3000 3500 4000
*
*NOTA: si no se detencta linea, se regresa un 0
*/ */
void leerDigital(){ void leerDigital(){
//LEER LOS VALORES DE LOS SENSORES //LEER LOS VALORES DE LOS SENSORES
@ -179,11 +205,9 @@ void leerDigital(){
/* /*
* Esta funcion tiene como objetivo encontrar el valor mas alto * Esta funcion tiene como objetivo encontrar el valor mas alto
* y mas bajo de los sensores, para establecer su umbral, por el momento solo * y mas bajo de los sensores, para establecer su umbral, lo cual
* encuentra los valores bajos (blancos) y queda pendiente encontrar * se consigue sacando el promedio de el valor mas bajo (blanco)
* los valores negros para obtener su promedio para el umbral. * y el mas alto (negro)
*
* TODO:reacomodar esta función
*/ */
void calibracion(){ void calibracion(){
int min[]={1023,1023,1023,1023,1023,1023,1023,1023}; int min[]={1023,1023,1023,1023,1023,1023,1023,1023};

Loading…
Cancel
Save