Codigo de Seguidor de Lineas _ Arduino

January 5, 2018 | Author: Felipe Con F | Category: Areas Of Computer Science, Computing, Technology, Computing And Information Technology, Engineering
Share Embed Donate


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

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF