Tutorial Innobot Reto Recolector de Botellas 03 – Trazados

Info

  • Principiantes
  • Edades: 11+

Temas STEAM

  • Tecnología
  • Ingeniería
  • Matemáticas

Trazados

S1_A1_S2

Un trazado, es una ruta o camino predeterminado que realiza el robot en la pista de competencia. Es parte fundamental en la estrategia de cada participante, para llevar a cabo el Reto Recolector de Botellas.

1. Realizar Trazados

Trazado 1  – Adelantar

  • El robot está siguiendo la línea y debe pasar por cada uno de los puntos marcados en azul. Es decir, que debe ADELANTAR cada una de las intersecciones que se encuentra en el camino

Paso 1

Se partirá de un programa básico para seguir una línea BLANCA.

botellas_01

Paso 2

El robot llega a la intersección y debemos ir hacia ADELANTE durante un poco tiempo, para salir de la intersección y continuar en la misma línea. En este caso, adelantaremos 200 milisegundos. Esta condición se cumplirá cada que aparezca una intersección y por lo tanto, el robot realizará el trazado deseado.

botellas_02

Captura4

Trazado 2  – Giro a la Izquierda & Adelantar

El trazado a realizar es el siguiente:

trazados_02

En este caso el robot debe pasar por los puntos en azul, el camino más corto para el Innobot es GIRAR a la IZQUIERDA y luego ADELANTAR las intersecciones.

¿Qué es una Variable?

En programación, una variable está formada por un espacio en el sistema de almacenaje y un nombre simbólico (un identificador) que está asociado a dicho espacio. Ese espacio contiene una cantidad de información conocida o desconocida, es decir un valor, este valor puede ser un número (entero o flotante) , una letra, una cadena de caracteres, entre otros.
Las variables pueden cambiar su valor durante el programa o pueden tener un valor fijo, todo depende de lo que el programador necesite.

Bloque Contador


Este bloque permite crear una variable que aumenta o decrementa su valor cada que lo necesitemos. Por defecto, el valor del contador empieza en 0. Es posible nombrarlo como se quiera, teniendo en cuenta que no se pueden usar caracteres especiales. Lo puedes encontrar en la categoría de Variables.

Bloques Incrementar / Decrementar


Estos bloques, sirven para incrementar o decrementar por un valor determinado un contador cada que sea necesario. Lo puedes encontrar en la categoría de Variables.

Bloque de la Variable Contador


Cuando se crea un contador, aparece un bloque en la categoría de Variables, que sirve para referirse a el cada que sea necesario. Por ejemplo, si se necesita comparar el valor que tiene el contador en un momento determinado con valor específico, se debe usar este bloque.

Paso 3

Se partirá del programa básico para seguir la línea, y se creará un CONTADOR de intersecciones, de esta forma, se podrá decidir que hacer en cuando el Innobot llegue a cada una de ellas.

Traslada un bloque de CONTADOR la categoría de Variables, hasta la sección de Declaraciones. En este caso se nombró al contador como miContador.

trazados_06

Paso 4

Como miContador, es una variable que empieza en 0, entonces compararemos su valor cuando se encuentre la primera intersección con dicho valor. Para ello, traslada un bloque de SI – SINO desde la categoría de Control / Lógica, y conecta a el,  un bloque de Igual a para comparar.

trazados_07

Paso 5

Traslada un bloque de la Variable miContador y uno de Numero, hasta el bloque Igual a.

trazados_08

Paso 6

Cuando el Innobot encuentre una intersección Y el valor de miContador sea 0, entonces el robot debe Girar a la IZQUIERDA.

trazados_09

Paso 7

Cuando el Innobot cambie en la intersección al camino de la IZQUIERDA, entonces debemos INCREMENTAR miContador en 1, estos e debe a que el robot ya ha pasado por la primera intersección y va hacia la segunda.

Traslada un bloque de INCREMENTAR después del bloque REPETIR MIENTRAS.

trazados_10

Paso 8

Finalmente, cuando el Innobot vaya a pasar por las otras intersecciones lo único que debe hacer para completar el recorrido es ADELANTAR, puesto que no debe cambiar su trayectoria de nuevo. En este punto no importa el valor que tome miContador, solo debe ser diferente de 0.

trazados_11

Trazado 3  – Girar a la Izquierda, Adelantar y Girar a la Derecha

  • El robot está siguiendo la línea y debe pasar por cada uno de los puntos marcados en azul. Es decir, que debe Girar a la IZQUIERDA – ADELANTAR tres veces – Girar a la DERECHA.

Paso 9

Partiremos del programa anterior, agregando una opción SINO SI: 

trazados_14

Paso 9

Ahora compararemos miContador, con la quinta intersección que se encuentra el robot, es decir, cuando el valor de miContador es 4. Cuando se cumpla esta condición el Innobot debe Girar a la DERECHA, y cambiar de línea. Además, el contador debe seguir aumentando.

trazados_15

Paso 10

Finalmente, en cualquier otro valor de miContador, el Innobot debe ADELANTAR la intersección y aumentar su valor.

trazados_16

1. Realizar Trazados

Trazado 1  – Adelantar

  • El robot está siguiendo la línea y debe pasar por cada uno de los puntos marcados en azul. Es decir, que debe ADELANTAR cada una de las intersecciones que se encuentra en el camino

Paso 1

Se partirá de un programa básico para seguir una línea BLANCA.

void setup () {
  motorSpeed(M1,60);
  motorSpeed(M2,60);

}
void loop () {
  if (sensorRead(J3) <= 700 && sensorRead(J1) <= 700) {
    goForward(M1,M2);
  } else if (sensorRead(J3) <= 700 && sensorRead(J1) > 700) {
    turnRight(M2 , M1);
  } else if (sensorRead(J3) > 700 && sensorRead(J1) <= 700) {
    turnLeft(M2 , M1);
  } else {
  }
}

Paso 2

El robot llega a la intersección y debemos ir hacia ADELANTE durante un poco tiempo, para salir de la intersección y continuar en la misma línea. En este caso, adelantaremos 200 milisegundos. Esta condición se cumplirá cada que aparezca una intersección y por lo tanto, el robot realizará el trazado deseado.

Captura4

void setup () {
  motorSpeed(M1,60);
  motorSpeed(M2,60);

}
void loop () {
  if (sensorRead(J3) <= 700 && sensorRead(J1) <= 700) {
    goForward(M1,M2);
  } else if (sensorRead(J3) <= 700 && sensorRead(J1) > 700) {
    turnRight(M2 , M1);
  } else if (sensorRead(J3) > 700 && sensorRead(J1) <= 700) {
    turnLeft(M2 , M1);
  } else {
    goForward(M1,M2);
    delay(200);
  }
}

Trazado 2  – Giro a la Izquierda & Adelantar

El trazado a realizar es el siguiente:

trazados_02

En este caso el robot debe pasar por los puntos en azul, el camino más corto para el Innobot es GIRAR a la IZQUIERDA y luego ADELANTAR las intersecciones.

¿Qué es una Variable?

En programación, una variable está formada por un espacio en el sistema de almacenaje y un nombre simbólico (un identificador) que está asociado a dicho espacio. Ese espacio contiene una cantidad de información conocida o desconocida, es decir un valor, este valor puede ser un número (entero o flotante) , una letra, una cadena de caracteres, entre otros.
Las variables pueden cambiar su valor durante el programa o pueden tener un valor fijo, todo depende de lo que el programador necesite.

Contador

int miContador = 0;

Es una variable que aumenta o decrementa su valor cada que lo necesitemos. Es posible nombrarlo como se quiera, teniendo en cuenta que no se pueden usar caracteres especiales. Se suele declarar antes de SETUP, le puedes asignar cualquier valor entero que quieras, pero debes tener en cuenta este valor para realizar las comparaciones lógicas necesarias.

Incrementar / Decrementar un contador

miContador += 1;
miContador -= 1;

Estos dos códigos sirven para Incrementar o Decrementar respectivamente en un valor determinado (en el ejemplo se incrementa y decrementa en 1) un contador cada que sea necesario. También puedes utilizar las siguientes variaciones de código para Incrementar en 1 o Decrementar en 1.

miContador++; //Solo incrementa en 1
miContador--; //Solo decrementa en 1

Paso 3

Se partirá del programa básico para seguir la línea, y se creará un CONTADOR de intersecciones, de esta forma, se podrá decidir que hacer en cuando el Innobot llegue a cada una de ellas.

Declara un CONTADOR, en la sección de Declaraciones. En este caso se nombró al contador como miContador.

int miContador = 0;

void setup () {
  motorSpeed(M1,60);
  motorSpeed(M2,60);

}
void loop () {
  if (sensorRead(J3) <= 700 && sensorRead(J1) <= 700) {
    goForward(M1,M2);
  } else if (sensorRead(J3) <= 700 && sensorRead(J1) > 700) {
    turnRight(M2 , M1);
  } else if (sensorRead(J3) > 700 && sensorRead(J1) <= 700) {
    turnLeft(M2 , M1);
  } else {
    goForward(M1,M2);
    delay(200);
  }
}

Paso 4

Como miContador, es una variable que empieza en 0, entonces compararemos su valor cuando se encuentre la primera intersección con dicho valor. Para ello, escribiremos dentro del último ELSE un IF – ELSE adicional. En el IF compararemos si miContador es IGUAL a 0 entonces.

int miContador = 0;

void setup () {
  motorSpeed(M1,60);
  motorSpeed(M2,60);

}
void loop () {
  if (sensorRead(J3) <= 700 && sensorRead(J1) <= 700) {
    goForward(M1,M2);
  } else if (sensorRead(J3) <= 700 && sensorRead(J1) > 700) {
    turnRight(M2 , M1);
  } else if (sensorRead(J3) > 700 && sensorRead(J1) <= 700) {
    turnLeft(M2 , M1);
  } else {
      if(miContador == 0){

      }else{

      }
  }
}

Paso 5

Cuando se cumpla la condición de miContador == 0, quiere decir que el Innobot debe girar a la IZQUIERDA, cambiar de línea e INCREMENTAR el contador, SINO se cumple, entonces debe ADELANTAR.

int miContador = 0;

void setup () {
  motorSpeed(M1,60);
  motorSpeed(M2,60);

}
void loop () {
  if (sensorRead(J3) <= 700 && sensorRead(J1) <= 700) {
    goForward(M1,M2);
  } else if (sensorRead(J3) <= 700 && sensorRead(J1) > 700) {
    turnRight(M2 , M1);
  } else if (sensorRead(J3) > 700 && sensorRead(J1) <= 700) {
    turnLeft(M2 , M1);
  } else {
      if(miContador == 0){
        turnLeft(M2 , M1);
        delay(500);
        while (sensorRead(J1) <= 700) {
        turnLeft(M2 , M1);
      }
      miContador += 1; //Despues de pasar por la intersección se debe incrementar en 1

      }else{
        goForward(M1,M2);
        delay(200);      
      }
  }
}

Trazado 3  – Girar a la Izquierda, Adelantar y Girar a la Derecha

  • El robot está siguiendo la línea y debe pasar por cada uno de los puntos marcados en azul. Es decir, que debe Girar a la IZQUIERDA – ADELANTAR tres veces – Girar a la DERECHA.

Paso 6

Partiremos del programa anterior, agregando una opción ELSE IF: 

int miContador = 0;

void setup () {
  motorSpeed(M1,60);
  motorSpeed(M2,60);

}
void loop () {
  if (sensorRead(J3) <= 700 && sensorRead(J1) <= 700) {
    goForward(M1,M2);
  } else if (sensorRead(J3) <= 700 && sensorRead(J1) > 700) {
    turnRight(M2 , M1);
  } else if (sensorRead(J3) > 700 && sensorRead(J1) <= 700) {
    turnLeft(M2 , M1);
  } else {
      if(miContador == 0){
        turnLeft(M2 , M1);
        delay(500);
        while (sensorRead(J1) <= 700) {
        turnLeft(M2 , M1);
      }
      miContador += 1; //Despues de pasar por la intersección se debe incrementar en 1

      }else if(miContador == 4){

      }
      miContador += 1; //Despues de pasar por la intersección se debe incrementar en 1  
      }else{
        goForward(M1,M2);
        delay(200);      
      }
  }
}

Paso 7

Ahora compararemos miContador, con la quinta intersección que se encuentra el Innobot, es decir, cuando el valor de miContador es 4. Cuando se cumpla esta condición el Innobot debe Girar a la DERECHA, y cambiar de línea. Además, el contador debe seguir aumentando. Finalmente, en cualquier otro valor de miContador, el Innobot debe ADELANTAR la intersección y aumentar su valor.

int miContador = 0;

void setup () {
  motorSpeed(M1,60);
  motorSpeed(M2,60);

}
void loop () {
  if (sensorRead(J3) <= 700 && sensorRead(J1) <= 700) {
    goForward(M1,M2);
  } else if (sensorRead(J3) <= 700 && sensorRead(J1) > 700) {
    turnRight(M2 , M1);
  } else if (sensorRead(J3) > 700 && sensorRead(J1) <= 700) {
    turnLeft(M2 , M1);
  } else {
      if(miContador == 0){
        turnLeft(M2 , M1);
        delay(500);
        while (sensorRead(J1) <= 700) {
        turnLeft(M2 , M1);
      }
      miContador += 1; //Despues de pasar por la intersección se debe incrementar en 1

      }else if(miContador == 4){
          turnRight(M2 , M1);
          delay(500);
          while (sensorRead(J2) <= 700) {
          turnRight(M2 , M1);
      }
      miContador += 1; //Despues de pasar por la intersección se debe incrementar en 1  
      }else{
        goForward(M1,M2);
        delay(200);      
        miContador += 1; //Despues de pasar por la intersección se debe incrementar en 1  
      }
  }
}