Está en la página 1de 3

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);

También podría gustarte