Introduction: Robot Esquiva Obstáculos

La idea principal de este proyecto es armar un robot esquiva obstáculos usando la tecnología de sensores ultrasonicos. A diferencia de otro proyectos similares hemos decidido cambiar la organización de la estructura del robot y simplificar su programación.

Step 1: Entender El Funcionamiento General

  • La detección de obstáculos es un requisito fundamental para este robot, esto se logra mediante el sensor ultrasónico instalado en la parte delantera del robot. Que en términos sencillos son los ojos del robot.
  • Un microcontrolador Arduino 1 recibe y procesa la señal del sensor y envía instrucciones a los motores. Por lo que el microcontrolador Arduino 1 es prácticamente el cerebro del robot.
  • El MotorDrive como dice su nombre es el motor del robot, es el encargado de cumplir las instrucciones del Arduino 1 y hacer que las ruedas del robot funcionen.

Step 2: Planificar El Trabajo

Tiempo requerido:

  • 3 horas Construcción
  • 4 horas Programación
  • 3 horas Prueba
  • 1 hora Archivar y compartir
  • 1 hora Total
  • 12 horas

Step 3: Comprar Materiales

Step 4: Armar El Chasis

El chasis del robot consiste en la tabla de plástico junto con las llantas y motores DC que controlan las llantas.

  1. El primer paso es atornillar los motores DC a la tabla de plástico
  2. El segundo paso es insertar las llantas con los motores DC
  3. Después de esto uno debe atornillar la tercera llanta en la parte delantera (4 clavos y tuercas)
  • Es importante ponerle los debidos cables a los motores DC ya que estos después serán conectados con el motor L298N.

Step 5: Visualizar Y Entender Mentalmente La Estructura General

El robot que esquiva obstáculos con ultrasonido funciona usando 3 piezas.

  1. La primera es el Arduino Uno, una plataforma de prototipos electrónica de código abierto. Esta es como el cerebro del robot. Funciona con el IDE Software: Integrated Development Environment.
  2. La segunda pieza es el Driver L298N, este permite controlar 2 motores de corriente continua. Este es el motor del robot que está conectado con el arduino uno y el sensor de ultrasonido HC-SR04. De este motor driver sale la energía para el arduino.
  3. La tercer pieza es el sensor de ultrasonido HC-SR04, este usando ondas de sonidos logra medir un distancia desde 2 cm - 400 cm. Este sensor está conectado al Arduino uno que dirige al driver L298N y este finalmente comanda al los motores DC haciendo que el robot se mueva de forma correcta.

Step 6: Realizar Las Conexiones

Step 7: Programar El Arduino

    • La programación de la tarjeta de Arduino consta de 3 etapas.

    1. La primera fase consta de declarar variables que nos ayuden a identificar los puertos que utilizaremos a lo largo del código. Las variables nos permiten guardar valores numéricos o de texto con un determinado nombre. En este caso, principalmente nos sirve para ordenar la programación y poder modificarla con mayor facilidad si es que un problema se presenta.

    Sabiendo que para este proyecto utilizaremos 6 puertos (4 para la tarjeta roja y 2 para el sensor de ultrasonido), le asignaremos un nombre a cada valor para evitar confusiones al momento de programar. En este caso el nombre que le asignamos a cada variable está relacionado con su función. Por ejemplo, el puerto 0 que va conectado al puerto IN1, cuando lo tengamos que llamar en la programación, tendríamos que escribir pinMode(0,OUTPUT); pero ese 0 evidentemente no nos dice nada y lo más probable es que nos enredemos utilizando muchos números. Para ello, creamos un casillero que almacene el valor 0 y que tenga un nombre identificable a simple vista.

    2. La segunda fase se centra en configurar el robot utilizando la función por defecto “void setup”. En esta función declaramos lo que utilizaremos a lo largo de código. En otras palabras, acentuamos una base para que el programa luego corra sin problema. En estos cimientos activaremos los 6 puertos que vamos a utilizar.
    Para activar un puerto es necesario conocer dos valores. El primero, es el número del puerto y el segundo, es si es INPUT o OUTPUT. Un puerto funciona como INPUT cuando recibe señales y como OUTPUT cuando emite señales. Por ejemplo, todos puertos destinados a los motores funcionan como OUTPUT, pues solo dan ordenes de prender y apagar. Mientras que el puerto “Echo” (el segundo puerto del sensor de ultrasonido), que mide el tiempo de retorno de la onda de ultrasonido, es INPUT, pues, a diferencia de los motores, esta envía una señal a la tarjeta.

    Ejemplo de escritura (que se debe de repetir para los 6 puertos):

    pinMode(Trigger,OUTPUT);
    pinMode(Echo,INPUT);


    3. La tercera y última parte sería programar la función “void loop”. En esta función va todo lo que el robot va a analizar en todo momento.

    Para esto, es necesario entender claramente lo que el robot hará paso por paso.

    En este caso, lo primero que hará es esperar a saber su distancia con respecto al objeto que está enfrente. Pues sin ese dato no puede saber si debe de avanzar o voltear.

    Sabiendo que el sensor de ultrasonido mide el tiempo que demora en regresar una onda emitida, tendremos que transformar este tiempo en distancia utilizando una fórmula matemática. Antes de hacer esto es imperativo crear dos variables que nos ayuden a almacenar estos datos:

    long t1;
    long d1;

    (Utilizamos “long” para declarar variables con bastantes decimales).

    Teniendo estas dos variables, programamos el sensor de ultrasonido y guardamos el tiempo en una variable, para calcular con ello la distancia.

    digitalWrite(Trigger, HIGH);
    delayMicroseconds(10);
    digitalWrite(Trigger, LOW);
    t1= pulseIn(Echo, HIGH);
    d1= (t1/2)/29;


    Una vez teniendo el valor de la distancia, creamos un “if” (condicional) que hará que el robot elija entre dos caminos dependiendo del valor de la distancia. Una camino (opción) es que siga de frente porque la distancia todavía es considerable y el otro, es que se dé una vuelta porque está muy cerca a un objeto.

    Hay que tener en cuenta que cada IN"x" es un cable que controla ya sea la función de avanzar o retroceder de una llanta. Siendo específicos, IN1 se encarga de hacer que la llanta izquierda retroceda y IN2 que avanze, igualmente IN3 y IN4 para la otra llanta.

    if (d1>25) {
    digitalWrite(IN1,LOW);
    digitalWrite(IN2, HIGH);
    digitalWrite(IN3,HIGH);
    digitalWrite(IN4, LOW);
    }
    else {
    digitalWrite(IN1,LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3,HIGH);
    digitalWrite(IN4, LOW);

    }



    Como resultado nos debería quedar el siguiente código:

    int IN1= 0;
    int IN2= 1;
    int IN3= 6;
    int IN4= 5;
    const int Trigger= 12;
    const int Echo= 13;


    void setup() {
    pinMode(IN1,OUTPUT);
    pinMode(IN2, OUTPUT);
    pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT);
    pinMode(Trigger, OUTPUT);
    pinMode(Echo,INPUT);
    digitalWrite(Trigger, LOW);
    }


    void loop() {
    long t1;
    long d1;
    digitalWrite(Trigger,HIGH);
    delayMicroseconds(10);
    digitalWrite(Trigger,LOW);


    t1= pulseIn(Echo, HIGH);
    d1= (t1/2)/29;


    if (d1>25) {
    digitalWrite(IN1,LOW);
    digitalWrite(IN2, HIGH);
    digitalWrite(IN3,HIGH);
    digitalWrite(IN4, LOW);
    }
    else {
    digitalWrite(IN1,LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3,HIGH);
    digitalWrite(IN4, LOW);
    }
    }

    Step 8: Probar Y Corregir Errores

    En esta última etapa debemos de subir el código ya listo a nuestro Arduino. Para lograr esto, necesitamos un “Cable A to B” (muy común en impresoras). Tras conectar el Arduino a la computadora, vamos al programa de arduino, vamos a la pestaña herramientas y nos aseguramos de que en “Placa” esté seleccionado “Arduino Uno”. En la misma pestaña, seleccionamos el puerto en el que nuestro cable está conectado.

    Antes de proseguir, es recomendable tener el robot prendido en todo momento. Teniendo esto en cuenta, presionamos el botón que tiene como ícono un check, verificamos de que no haya ningún error de escritura y presionamos el boton que tiene como ícono una flecha.

    Si el robot no funciona, el error puede ser causado por cuatro principales motivos. Error al declarar una variable que representa un puerto, hay un cable en malas condiciones, hay un cable mal conectado o las baterías están descargadas

    Si es que todo parece estar funcionando, recomendamos verificar que la distancia que analiza el sensor de ultrasonido sea la misma o similar a la distancia real entre el objeto y nuestro robot. De no ser así, puede ser que haya escrito mal el la distancia máxima para avanzar en la función “if”, que haya copiado mal la fórmula que convierte el tiempo a distancia o que el sensor esté defectuoso.