lunes, 9 de mayo de 2016

Programa Prueba Seguidor de Linea Para Estado Básico de Robot Laberinto

Cordial Saludo,

Expongo el código Base para el control del seguidor de linea para Robot Laberinto con tarjeta Arduino que poseen sensores QTR.

Seguir Las instrucciones para la instalación de la librería.

DESCARGAR





Código:


/*
Seguidor de Linea con sesores QTR-8RC o digitales
      0= NEGRO
      1= BLANCO
*/
#include <QTRSensors.h>

#define NUM_SENSORS   8     // Numero de Sensores a Usar
#define TIMEOUT       2000
#define EMITTER_PIN   38    // Pin de LEDON

#define HIST  300          // Valor de fluctuacion de sensores

QTRSensorsRC qtrrc((unsigned char[]) {2,3,4,5,6,7,8,9}, //Pines donde van conectados los sensores
 NUM_SENSORS, TIMEOUT, EMITTER_PIN); 
unsigned int sensorValues[NUM_SENSORS];


unsigned int sensores = 0;
unsigned int estado=0;    //estado=0  Normal   estado=1 vif derecha   estado=2 vif izquierda


void setup(){
  Serial.begin(9600);
  delay(2000);
}

void loop(){
  leersensores();
  //Determinar dependiendo de las posibilidades
  switch (sensores) {
    case B11100111:    //adelante
      adelante();
      break;
    case B11001111:    //izquierda
    case B10011111:
    case B00111111:
    case B11101111:
    case B11011111:
    case B10111111:
    case B01111111:
      izquierda();
      break;
    case B11110011:    //derecha
    case B11111001:
    case B11111100:
    case B11110111:
    case B11111011:
    case B11111101:
    case B11111110:
      derecha();
      break;
    case B11100100:    //indicador vifurcacion derecha 
      estado = 1;
      break;
    case B00100111:    //indicador vifurcacion izquierda
      estado = 2;
      break;
    case B11011011:    //llego a vifurcacion
    case B10011001:
      vifurcacion();
      break;
  }
}

void vifurcacion(){
  adelante();
  leersensores();
  while(sensores != B11111111){
    leersensores();
  }
  if (estado == 1){
    derecha();
    while(sensores != B11100111){
      leersensores();
    }
    estado=0;
  }else if (estado == 2){
    izquierda();
    while(sensores != B11100111){
      leersensores();
    }
    estado=0;
  }
}
void adelante(){
  analogWrite(5,0);
  analogWrite(3,200);
  analogWrite(9,0);
  analogWrite(6,200);
}
void izquierda(){
  analogWrite(9,0);
  analogWrite(6,200);
  analogWrite(5,0);
  analogWrite(3,50);
}
void derecha(){
  analogWrite(9,0);
  analogWrite(6,50);
  analogWrite(5,0);
  analogWrite(3,200);
}

void leersensores(){    //Determinar dependiendo de cuantos sensores utiliza
  qtrrc.read(sensorValues);
  sensores = 0;
  for (int i=0;i<=7;i++){
    if (sensorValues[i]<HIST)
      bitClear(sensores,i);
    else
      bitSet(sensores,i);
  }
    //Serial.println(sensores,BIN);
}

No hay comentarios.:

Publicar un comentario