Info

  • Principiantes
  • Edades: 11+

Temas STEAM

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

Intersecciones

Utiliza los sensores de línea del Innobot, para detectar Intersecciones, sortearlas o cambiar de camino. Esta es la base para resolver el Reto Recolector de Botellas.

¿Qué es una intersección?

IntersecciónUna intersección se nos presenta en una pista cuando en una línea se encuentran dos o más caminos por seguir, en este caso es necesario utilizar condicionales para seguir la línea hacia el lado que pretendemos que vaya. Las intersecciones tienen una línea que no va a ningún lado y otra que es el camino a seguir, para continuar esta dirección nos tenemos que idear la forma de hacer girar el Innobot de tal manera que no pierda la referencia de la línea.

Programa Sortear Intersecciones

Condiciones Iniciales 

  • El robot está siguiendo la línea y llega a una intersección.
  • Sensor Izquierdo en BLANCO y sensor Derecho en BLANCO

Captura3

inter

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, ya sea para girar a la izquierda, girar a la derecha o continuar en la misma línea. En este caso, adelantaremos 200 milisegundos.

botellas_02

Captura4

Paso 3

Después de adelantar, tenemos tres opciones:

  1. Si no hacemos nada el robot podría seguir la línea hacia adelante nuevamente.
  2. Podríamos hacer girar el robot hacia la izquierda MIENTRAS el sensor IZQUIERDO esté en NEGRO.
  3. Podríamos hacer girar el robot hacia la derecha MIENTRAS el sensor DERECHO esté en NEGRO.

En este caso giraremos hacia la IZQUIERDA, durante 500 milisegundos.

botellas_03

Captura5

Bloque Repetir Mientras (While)

while
Este bloque repetirá las instrucciones que se conecten dentro de el, MIENTRAS se cumpla un valor o condición.

Paso 4

Desde la categoría de Control / Lógica, traslada un bloque de Repetir Mientras, después del bloque de Esperar 500 milisegundos. Mientras el sensor J1 esté en NEGRO, el Innobot debe seguir girando hacia la IZQUIERDA o lo que es lo mismo, hasta que el sensor J1 llegue a BLANCO.

botellas_04

1. Sortear Intersecciones

Condiciones Iniciales 

  • El robot está siguiendo la línea y llega a una intersección.
  • Sensor Izquierdo en BLANCO y sensor Derecho en BLANCO

Captura3

inter

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, ya sea para girar a la izquierda, girar a la derecha o continuar en la misma línea. En este caso, adelantaremos 200 milisegundos.

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);
    }
  }


Captura4

Paso 3

Después de adelantar, tenemos tres opciones:

  1. Si no hacemos nada el robot podría seguir la línea hacia adelante nuevamente.
  2. Podríamos hacer girar el robot hacia la izquierda MIENTRAS el sensor IZQUIERDO esté en NEGRO.
  3. Podríamos hacer girar el robot hacia la derecha MIENTRAS el sensor DERECHO esté en NEGRO.

En este caso giraremos hacia la IZQUIERDA, durante 500 milisegundos.

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);
      turnLeft(M2 , M1);
      delay(500);
    }
  }

Función While (Mientras)

while (condition) {

}

Esta función repetirá las instrucciones que estén dentro de ella, MIENTRAS se cumpla un valor o condición.

Paso 4

Mientras el sensor J1 esté en NEGRO, el Innobot debe seguir girando hacia la IZQUIERDA o lo que es lo mismo, hasta que el sensor J1 llegue a BLANCO.

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);
    turnLeft(M2 , M1);
    delay(500);
    while (sensorRead(J1) <= 700) {
      turnLeft(M2 , M1);
    }
  }
}