miércoles, 9 de noviembre de 2011

Robot Destructor

Autor: Felipe Lagos Morapasten
Competencia:
Gestión en TI. (Nivel 1)
Palabras Clave: Programación de Robot, NXC, Robótica, Kit Lego.

Descripción de la Actividad
Finalizando las competencias de Gestión de Tecnologías de Información, quiero mostrar a ustedes la actividad número 2 del Curso de Programación de Robots, donde se tuvo que realizar un código fuente en NXC.
La problemática de la actividad consistió en hacer un robot se convierta en destructor, este debe andar deambulando por la pista que contiene paredes y pilares, cuando detecte ya sea un pilar o un pared debe detonar una bomba (emitir un sonido) al momento de hacer esto debe retroceder y seguir en busca de objetivos, esto lo realiza 5 veces que son la cantidad de bombas disponibles al finalizar todo lo demás nombrado anteriormente reproducir un sonido que marca el final.

Solución:
En todo tipo de problemas orientado a la robótica, lo fundamental es hacer un pseudocódigo para la actividad, esto nos hace que la actividad sea de menor dificultad para después pasar a realizar el código fuente en NxC.

Pseudocódigo

int bombas=0;
Encender Sensor de Tacto

Mientras(bombas<=5)
{
   Avanzar
   Si (el sensor de tacto es igual a 1) detecta objetivo
         {Sonido de detonación
          Sumar uno a bombas
          Detener 2 segundos
          Retroceder
          Girar aleatoriamente} // Cierre de si

} // Cierre del Mientras


Si (bombas == 5)
{
   Detenerse
   Sonido de término
   }


El código fuente del proyecto en NXC es el siguiente: 

int GIRO=500;     // Declaración de variable del giro.
int contador=0;  //  Declaración de variable del contador Inicial

task main ()
{
  SetSensorTouch(IN_1);  // Inicio del Sensor de Tacto, puerto 1
  OnFwd(OUT_AC,100);    // Instrucción para que vaya hacia adelante por 1 segundo
  Wait (1000);
  while(true) // Lo que viene abajo, lo repite siempre
 
  {
  if ( SENSOR_1==1) // Si el sensor de tacto es igual a 1, siente el golpe
     {
     PlayTone (1500,1200); // Sonido que marca que la detonación de la bomba
     OnRev(OUT_AC, 75);   // Indica que se va a retroceder por medio segundo
     Wait (500);
     Off (OUT_AC);       // Los motores se deben apagar por 2 segundos
     Wait (2000);
     GIRO= Random(500)+1000;// Indica el valor de el giro que va a hacer
                           //  aleatorio entre 90° y 720°.
     OnRev(OUT_C,75);// Va junto con la orden siguiente y hace que se desvie
                     // pero no afecta el rumbo hacia adelante
     OnFwd(OUT_A,75);// Ordena que valla hacia adelante en busca de una bomba
     Wait (GIRO);
     Off (OUT_AC);  // Apagar los motores
     OnRev(OUT_C,75); // Retroceso leve
     OnFwd (OUT_A,75);//Orden que acompaña al giro necesaria para que se efectué
     Wait (100);

     GIRO += Random(51);// Produce que el robot haga un giro final

     OnFwd(OUT_C,75);

      contador++;  // Segunda parte del Contador
      }

      if (contador ==5) //Ultima parte del Contador que dice que busque
                        // 5 bombas y se detenga
      {
      Off (OUT_AC);  // El apagar de los 2 motores.
      PlayTone (2000,1000); // Sonido que marca el final de la actividad
      Wait (2000);
      StopAllTasks (); // Marca el final de todas las instrucciones.

       }
      }
    }

En el código se puede apreciar la instrucción StopAllTasks la cual nos permite terminar la tarea, finalizando el ciclo while true del codigo, además del uso de un contador que nos permite detonar las 5 bombas y por último el empleamiento de PlayTones para los sonidos de detonación de bombas y el final de la actividad

El video de esta actividad es el siguiente:


Reflexión:

El uso de decisiones ( if ) y de un contador fue de gran ayuda para realizar con éxito esta segunda actividad ya que las decisiones me hicieron pensar en los casos posibles como cuando el sensor de tacto detecta un objetivo, cuando las bombas detonadas son 5, el contador sirvió de ayuda para determinar las bombas que se detonó y así poder dar por finalizada la actividad al registrar un valor igual a 5.

Te invito a que si tienes dudas o quieres complementar esta actividad mediante opiniones, otras informaciones no tengas miedo de emitir tus comentarios, a participar donde cada comentario hará que se haga más interactivo este espacio.

No hay comentarios:

Publicar un comentario