Práctica robot sigue líneas

Compañeros de grupo: G.M.C.20, G.G.S.10 y M.G.B.9

Muy buenas, aquí Martín en su blog. En esa ocasión estamos programando un robot coche siguelíneas junto a los Germanes (Germán Mendonça y Germán García).

Para hacer esto necesitamos:

-una placa Arduino para conectar el controlador de motor,
Resultado de imagen de placa arduino
-un controlador de motor para conectar los componentes del circuito,
Resultado de imagen de controlador de motor
-unos motores para hacer que el coche se mueva,
Resultado de imagen de motores de robot sigue lineas
-sensores infrarrojos para detectar el color de la superficie por la que se desplaza el coche
Resultado de imagen de infrarrojos arduino
- y el robot coche, para obvias razones.
Resultado de imagen de robot siguelineas
Bien, a continuación mostraremos nuestro código.


/***   Included libraries  ***/


/***   Global variables and function definition  ***/
const int INFRARROJOS_D = 2;
const int INFRARROJOS_I = 3;
const int IN1 = 11;
const int IN3 = 12;
const int IN4 = 13;
const int IN2 = 10;
const int ENA = 5;
const int ENB = 6;

float VELOCIDAD = 200;
void AVANZAR() {
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
    analogWrite(6, VELOCIDAD);
    analogWrite(5, VELOCIDAD);
}
void DERECHA() {
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, HIGH);
    analogWrite(6, VELOCIDAD);
    analogWrite(5, VELOCIDAD);
}
void IZQUIERDA() {
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
    analogWrite(6, VELOCIDAD);
    analogWrite(5, VELOCIDAD);
}
void DETENER() {
    digitalWrite(ENA, LOW);
    digitalWrite(ENB, LOW);
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
}



/***   Setup  ***/
void setup() {
    pinMode(INFRARROJOS_D, INPUT);
    pinMode(INFRARROJOS_I, INPUT);
    pinMode(IN1, OUTPUT);
    pinMode(IN3, OUTPUT);
    pinMode(IN4, OUTPUT);
    pinMode(IN2, OUTPUT);
    pinMode(ENA, OUTPUT);
    pinMode(ENB, OUTPUT);

}


/***   Loop  ***/
void loop() {
    float INFRARROJOS_DERECHA = digitalRead(INFRARROJOS_I);
    float INFRARROJOS_IZQUIERDA = digitalRead(INFRARROJOS_D);
    if (((INFRARROJOS_DERECHA == 1) && (INFRARROJOS_IZQUIERDA == 1))) {
        AVANZAR();
    } else if (((INFRARROJOS_DERECHA == 1) && (INFRARROJOS_IZQUIERDA == 0))) {
        DERECHA();
    } else if (((INFRARROJOS_DERECHA == 0) && (INFRARROJOS_IZQUIERDA == 1))) {
        IZQUIERDA();
    } else if (((INFRARROJOS_DERECHA == 0) && (INFRARROJOS_IZQUIERDA == 0))) {
        DERECHA();
        delay(2000);
        if (((INFRARROJOS_DERECHA == 0) && (INFRARROJOS_IZQUIERDA == 0))) {
            IZQUIERDA();
        } else if (((INFRARROJOS_DERECHA == 0) && (INFRARROJOS_IZQUIERDA == 0))) {
            DETENER();
        }
    }
}
Como podéis observar, hemos creado varias funciones y variables. Entre las funciones podemos apreciar AVANZAR, para hacer que e robot vaya marchalante; IZQUIERDA, para apagar el motor derecho y hacer que gire a la izquierda; y DERECHA, para que haga la misma función pero para el sentido contrario. Entre las variables podemos ver que hemos hecho VELOCIDAD, para variar la velocidad a la que se mueva el coche; e INFRARROJOS (DERECHA E IZQUIERDA), para que los valores de los sensores infrarrojos sean reconocidos según el color de la superficie que detecten.

La función principal que realiza el coche al ser programado de esta manera es moverse gracias a una línea negra sobre una superficie clara a la velocidad a la que lo programamos (125). Si el coche detecta que se sale de una línea (es decir, que hay una curva) girara para el lado contrario, por lo que si la curva gira hacia la derecha, el coche girara hacia la derecha y viceversa. Los componentes se conectan a un controlador de motor, que a su vez se conectan al mismo robot.

Bien, lo hemos logrado. A demás hemos aplicado recientemente mejoras al coche, haciendo que sea capaz de girar curvas de 90 grados, lo cual no puede hacer con un código común porque no puede reconocer ese tipo de curva. Lo que hemos hecho es hacer que si los infrarrojos no leen nada, el coche gira automáticamente hasta detectar el tipo de superficie correcta.

Bien, eso ha sido todo, nos despedimos con mucho entusiasmo.



Comentarios