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.
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