SEGUIDOR DE LÍNEA VELOZ //prendemos el led (LED, HIGH);
for (int j = 0; j <200; j++)
#include <QTRSensors.h> { digitalWrite(LED, HIGH); //DECLARAMOS ENTRADAS PARA EL PUENTE delay(20); H AL ARDUINO qtra.calibrate(); // reads all sensors int PWMA=3; 10 times at 2.5 ms per six sensors (i.e. ~25 int AIN2=5; ms per call) int AIN1=4; digitalWrite(LED, LOW); // turn off LED int PWMB=9; delay(20); int BIN2=8; } int BIN1=7; //APAGAMOS EL LED int STANDBY = 6; digitalWrite(LED, LOW); ///DECLARAMOS SALIDA PARA SEÑALIZAR EL //INICIAMOS EL ARANQUE DE LOS MOTOS CALIBRADO digitalWrite(AIN1,LOW); int LED = 13; digitalWrite(AIN2,HIGH); //VARIABLES DE ALMACENAMIENTO int P=0; digitalWrite(BIN1,HIGH); int I=0; digitalWrite(BIN2,LOW); int D=0; int LAST=0; analogWrite(PWMA,0); float vel; analogWrite(PWMB,0); //DECLARAMOS VELOCIDAD DEL ROBOT OJO //HABILITAMOS EL PUENTE H PARA EL LLEGA HASTA 255 FUNCIONAMIENTO DEL MISMO int VelMax = 60; digitalWrite(STANDBY, HIGH); } void loop() { #define NUM_SENSORS 8 // number of //LEEMOS LA SEÑAL DE LOS SENSORES sensors used qtra.read(sensorValues); #define TIMEOUT 2000 // waits for 2500 position = qtra.readLine(sensorValues, microseconds for sensor outputs to go low QTR_EMITTERS_ON, 0); #define EMITTER_PIN 11 // emitter is P = ((position)-(3500)); /// ERROR controlled by digital pin 2 /////FRENOS//// // DECLARAMOS ENTRAS PARA LOS if(P<-3500){ SENSORES analogWrite(PWMA,200); // VELOCIDAD QTRSensorsRC qtra((unsigned char[]) {A0, PARA EL MOTOR DERECHO A1, A2, A3, A4, A5, A6, A7}, analogWrite(PWMB,255); // VELOCIDAD NUM_SENSORS, TIMEOUT, EMITTER_PIN); PARA EL MOTOR IZQUIERDO unsigned int sensorValues[NUM_SENSORS]; digitalWrite(AIN1,LOW); ///FRENTE unsigned int position=0; digitalWrite(AIN2,HIGH); void setup() { digitalWrite(BIN1,LOW); ///RETROCEDE pinMode(PWMA,OUTPUT); digitalWrite(BIN2,HIGH); pinMode(AIN1,OUTPUT); } else if (P>3500){ pinMode(AIN2,OUTPUT); analogWrite(PWMA,255); // VELOCIDAD pinMode(PWMB,OUTPUT); PARA EL MOTOR DERECHO pinMode(BIN1,OUTPUT); analogWrite(PWMB,200); // VELOCIDAD pinMode(BIN2,OUTPUT); PARA EL MOTOR IZQUIERDO pinMode(LED,OUTPUT); digitalWrite(AIN1,HIGH); ///RETROCEDE pinMode(STANDBY,OUTPUT); digitalWrite(AIN2,LOW); delay(50); digitalWrite(BIN1,HIGH); ///FRENTE digitalWrite(BIN2,LOW); SEGUIDOR GRANDE: /* Programacion de SEGUIDOR DE LINEA } ///////////////////////// usando ARDUINO, CNY70, DRIVER L298N.*/ else{ int infraPin1 = 10; // pin del infrarrojos D= (P - LAST); /// ERROR MENOS EL ERROR utilizado como entrada digital en el lado ANTERIOR , DERIVATIVO derecho(#1). I=(P+ LAST); //INTEGRAL int infraPin2 = 11; // pin del infrarrojos vel=(P*0.02)+(D*1.20)+(I*0.0052); utilizado como entrada digital en el lado ///VELOCIDAMAX =VELOCIDAD PUNTA , V izquierdo(#2). if(vel >VelMax) vel=VelMax; int valorInfra1 = 0; // Valor inicial de la if(vel<-VelMax) vel=-VelMax; lectura digital del infrarrojo #1. int valorInfra2 = 0; // Valor inicial de la analogWrite(PWMA,VelMax-vel); // lectura digital del infrarrojo #2. VELOCIDAD PARA EL MOTOR DERECHO int OUTPUT4 = 4; // Output4 conectada al analogWrite(PWMB,VelMax+vel); // pin 4. VELOCIDAD PARA EL MOTOR IZQUIERDO int OUTPUT3 = 3; // Ouput3 conectada al pin 3. digitalWrite(AIN1,LOW); ///FRENTE int OUTPUT2 = 6; // Output3 conectada al digitalWrite(AIN2,HIGH); pin 6. digitalWrite(BIN1,HIGH); ///FRENTE int OUTPUT1 = 7; // Output4 conectada al digitalWrite(BIN2,LOW); pin 7. LAST=P; void setup() { } Serial.begin(9600); // Comenzamos }////BUCLE INFINITO comunicacion serial. pinMode(infraPin1, INPUT); // Inicializa el pin 1 como entrada digital. pinMode(infraPin2, INPUT); // Inicializa el pin 2 como entrada digital. pinMode (OUTPUT1, OUTPUT); // Inicializa el pin 7 como salida digital. pinMode (OUTPUT2, OUTPUT); // Inicializa el pin 6 como salida digital. pinMode (OUTPUT3, OUTPUT); // Inicializa el pin 3 como salida digital. pinMode (OUTPUT4, OUTPUT); // Inicializa el pin 4 como salida digital. } void loop() { valorInfra1 = digitalRead(infraPin1); // Lee el valor de la entrada 10, esto es, el valor que lee el infrarrojo #1. Serial.print("SENSOR1 "); //Imprimimos el texto "SENSOR1 " Serial.println(valorInfra1); //Imprimimos la lectura del infrarrojo #1. valorInfra2 = digitalRead(infraPin2); // Lee el valor de la entrada 11, esto es, el valor que lee el infrarrojo #2. Serial.print("SENSOR2 "); //Imprimimos digitalWrite(OUTPUT2,0); el texto "SENSOR2 " digitalWrite(OUTPUT3,0); Serial.println(valorInfra2); //Imprimimos digitalWrite(OUTPUT4,1); la lectura del infrarrojo #2. } if(valorInfra1==0) // Si la lectura del } infrarrojo #1 es 0, entonces se cumplira una } de las siguientes condiciones: { if(valorInfra2==0) // Si la lectura del infrarrojo #2 es 0, es decir los dos sensores estan sobre la linea negra, entonces los dos motores avanzaran en linea recta. { digitalWrite(OUTPUT1,0); digitalWrite(OUTPUT2,1); digitalWrite(OUTPUT3,1); digitalWrite(OUTPUT4,0); } else // Si la lectura del infrarrojo #2 es 1, el sensor#1 esta sobre la linea negra y el sensor#2 esta fuera de la linea negra, entonces solo una rueda gira y esto causara el giro. { digitalWrite(OUTPUT1,0); digitalWrite(OUTPUT2,0); digitalWrite(OUTPUT3,1); digitalWrite(OUTPUT4,0); } } else // Si la lectura del infrarrojo #1 no es 0, sera 1, se daran las siguientes posibilidades: {if(valorInfra2==0) // Como el sensor#1 esta fuera de la linea negra y el sensor#2 esta sobre la linea negra, entonces solo una rueda gira y esto causara el giro. { digitalWrite(OUTPUT3,0); digitalWrite(OUTPUT4,0); digitalWrite(OUTPUT1,0); digitalWrite(OUTPUT2,1); } else{ // si ambos sensores dan lectura 1, los dos estan fuera de la linea negra, para que vuelva a su trayectoria tiene que retroceder. digitalWrite(OUTPUT1,1);