Codigo de Seguidor de Lineas _ Arduino
Short Description
Download Codigo de Seguidor de Lineas _ Arduino...
Description
//En esta parte se declaran los pines del Arduino de los sensores y actuadores a utilizar int int int int int int int int
SensorDerecha = A1; SensorIzquierda = A2; SensorII = A3; SensorDD = A4; MotorDUP = 5; MotorDDOWN = 2; MotorIUP = 6; MotorIDOWN = 4;
//Se declaran las diversas variables de uso lógico dentro del código int SensorIstate, SensorDstate, SensorDDstate,SensorIIstate; int contador=0; int y=0; int x=0; int z=0; int h=0; //En la función setup es donde se inician las variables como entrada o salida (inp ut, output) void setup() { //Serial.begin(9600); pinMode(SensorIzquierda, INPUT); pinMode(SensorDerecha, INPUT); pinMode(SensorDD, INPUT); pinMode(SensorII, INPUT);
pinMode pinMode pinMode pinMode }
(MotorDUP, OUTPUT); (MotorDDOWN, OUTPUT); (MotorIUP, OUTPUT); (MotorIDOWN, OUTPUT);
/*En esta función se establecen los valores de los motores en 0 para poder utiliza rlos en el futuro sin ocasionar conflictos*/ void reset(){ digitalWrite(MotorDUP,0); digitalWrite(MotorIUP,0); digitalWrite(MotorDDOWN,0); digitalWrite(MotorIDOWN,0); } /* Secuencia de giro a la derecha, primero manda a llamar a la función reset para inicializar los motores en 0 */ void giroDerecha(){ reset(); digitalWrite(MotorDUP,1); digitalWrite(MotorIUP,0); digitalWrite(MotorDDOWN,0); digitalWrite(MotorIDOWN,1);
} /* Secuencia de giro a la izquierda, primero manda a llamar a la función reset par a inicializar los motores en 0 */ void giroIzquierda(){ reset(); digitalWrite(MotorDUP,0); digitalWrite(MotorIUP,1); digitalWrite(MotorDDOWN,1); digitalWrite(MotorIDOWN,0); } /* Secuencia de giro hacia atras, primero manda a llamar a la función reset para i nicializar los motores en 0 */ void giroAtras(){ reset(); digitalWrite(MotorDUP,0); digitalWrite(MotorIUP,0); digitalWrite(MotorDDOWN,1); digitalWrite(MotorIDOWN,1); } // Proceso de lectura y escritura complejo void ReadWrite(){ //lectura de los sensores centrales SensorIstate = digitalRead(SensorIzquierda); SensorDstate = digitalRead(SensorDerecha); //lectura de los sensores laterales SensorDDstate = digitalRead(SensorDD); SensorIIstate = digitalRead(SensorII); /*Este delay estabiliza la lectura / actuación con respecto a la distancia entre los sensores y los motores*/ delay(10);
/* Asignación de variable para cambio de velocidad*/ if (SensorDDstate==1 && SensorIIstate==1){ z=1; } /*Si la condición se cumple la variable contador incrementara al paso de una línea y realizara una operación para determinar si el conteo es par o impar*/ if (SensorDDstate==0 && SensorIIstate==0 && z==1){ contador+=1; h=pow(-1,contador); z=0; /*En base a la operación anterior se asignan valores de velocidad para la escrit ura de los motores*/ } if (h > 0){
y=220; } if (h < 0){ y=255; } if (h ==0){ y=220; } /*En este punto se hace la escritura de los motores por pwm para poder modific ar su velocidad*/ analogWrite(MotorIUP,(SensorDstate*y)); analogWrite(MotorDUP,(SensorIstate*y)); // Serial.println(h); } /* Esta es la función principal del código donde se mandan a llamar todas las funci ones antes definidas para el funcionamiento continuo del seguidor de líneas*/ void loop() { //inicio de función de lectura de sensores y escritura de motores ReadWrite(); //condición de giro para la izquierda if (SensorDDstate==1){ x=1; } //condición de giro para la derecha if (SensorIIstate==1){ x=2; } //secuencia de giro para la derecha if (SensorIstate==0 && SensorDstate==0 && x==1){ giroIzquierda(); delay(150); giroAtras(); delay(50); reset(); ReadWrite(); } //secuencia de giro para la izquierda if (SensorIstate==0 && SensorDstate==0 && x==2){ giroDerecha(); delay(150); giroAtras(); delay(50); reset(); ReadWrite(); } }
//Fin del código
// By Felipe Woo
View more...
Comments