"Robot Ninja"

Autor: Daniela Muñoz Muñoz
Competencia: Gestión en TI. (Nivel 1)
Palabras Clave: Programación,NXC, robótica, Lego


Descripción de la Actividad: A continuación les daré a conocer mi grata experiencia como estudiante de primer año de ingeniería civil en informatica, en mi proyecto llamado "Robot Ninja" realizado en el programa de lenguaje NXC, para el kit de robots de Lego NXT.
Para desarrollar el laboratorio teniamos que tener en mente que:
-Una organización enemiga a tomado como rehén a varios ciudadanos chilenos.
-Nuestro robot ninja deberá infiltrarse en una base militar enemiga y lograr debilitar sus defensas, para facilitar el ingreso de las tropas y el rescate de los rehenes.

Solución
La solución al problema es crear el  pseudocódigo que nos facilitara el desarrollo del código.


Pseudocodigo:

-Setear el sensor Touch.
-Setear el sensor Light.
-contador = 0.
-bombas = 4.
-Avanzar.
-Hacer Siempre.

-Si el sensor light se activa.
{
-Gira 45º a la izquierda.
-Luego avanza en línea recta.
}
      -Si el sensor touch se activa.
{
-muestra nº bombas en pantalla.
-Retrocede ½ Segundo.
-bombas – 1.
-Se detiene por un Segundo.
-Se produce la detonación (sonido).
-Realiza un giro entre 90º y 270º.
-Avanza en línea recta.
-contador + 1.
-La pantalla se limpia.
}
      -si el contador llega a 4.
{
-contador = 1.
-Marca en la pantalla de que no quedan bombas.
-retrocede por dos segundos.
-Emite un sonido avisando de que no quedan bombas.
-avanzar en línea recta.
-Si se activa el sensor touch.
-Realiza un giro entre 90º y 270º.
-avanzar en línea recta.
-se detiene cuando el sensor light se activa en un punto negro.
}


El pseudocódigo anteriormente mencionado, corresponde al siguiente código:

Codigo:


//Grupo The BootFather...

#define UMBRAL 35
int bombas=4;
int contador=0;
int Giro;
int final=1;

task main()
{
SetSensorTouch(IN_1);        //ENCIENDE EL SENSOR TOUCH.
SetSensorLight (IN_4);       //ENCIENDE EL SENSOR LIGHT.
OnFwd(OUT_A, 78);            //
OnFwd(OUT_C, 73);            //EL ROBOT AVANZA EN LINEA RECTA.
while (true)                 //SE HACE LA ULTIMA SENTENCIA INFINITAMENTE.

 {

if (Sensor(IN_4) < UMBRAL)  //SI EL SENSOR DE LUZ SE ACTIVA.
{  OnRev(OUT_C, 75);
Wait(200);              //GIRA 0,2 SEGUNDOS HACIA LA IZQUIERDA.
until(Sensor(IN_4) >= UMBRAL);
OnFwd(OUT_A, 78);
OnFwd(OUT_C, 73);        //LUEGO AVANZA EN LINEA RECTA.
 }

if (SENSOR_1 == 1)           //SI EL SENSOR DE TACTO SE ACTIVA.
    {
NumOut(50, 35, bombas); //MUESTRA EN LA PANTALLA LA CANTIDAD DE BOMBAS RESTANTES.
OnRev(OUT_AC, 75);
     Wait(500);              //EL ROBOT RETROCEDE.
bombas=bombas-1;        //SE ACTIVA LA BOMBA.
Off(OUT_AC);
Wait(1000);             //SE DETIENE POR UN SEGUNDO.
PlayTone(4000,1000);    //EL ROBOT EMITE UN SONIDO DE DETONACION.
OnRev(OUT_C, 75);
     OnFwd(OUT_A, 73);
Giro =Random(700)+300;
Wait (Giro);            //EL ROBOT GIRA EN SU EJE (GIRO ALEATORIO).
OnFwd(OUT_A, 78);
OnFwd(OUT_C, 73);       //EL ROBOT AVANZA EN LINEA RECTA.
contador++;             //EL ROBOT SUMA UN GIRO.
ClearScreen();        //SE LIMPIA LA PANTALLA.
     }


if (contador==4)             //CUANDO EL CONTADOR MARQUE LA CUARTA VUELTA.
{ contador =1;
NumOut(50, 35, 0);           //MARCA EN LA PANTALLA QUE NO QUEDAN BOMBAS.
OnRev(OUT_AC, 50);
Wait(2000);                  //RETROCEDE 2 SEGUNDOS.
PlayTone(5500, 1000);
Wait(1000);                  //EMITE UN SONIDO DE QUE NO QUEDAN BOMBAS.
Off(OUT_AC);
Wait(500);
if (Sensor(IN_4) > UMBRAL)  //SI EL SENSOR DE LUZ ESTA SOBRE BLANCO.
{   OnFwd(OUT_A, 78);
OnFwd(OUT_C, 73);       //AVANZAR EN LINEA RECTA.
     SetSensor(IN_1,SENSOR_TOUCH);
until (SENSOR_1 == 1);  //SI SE ACTIVA EL SENSOR TOUCH.
OnRev(OUT_A, 75);
     Giro =Random(700)+300;
Wait (Giro);            //EL ROBOT GIRA EN SU EJE (GIRO ALEATORIO).
OnFwd(OUT_A, 78);
OnFwd(OUT_C, 73);       //LUEVO AVANZA EN LINEA RECTA.
     }
until(Sensor(IN_4) < UMBRAL); //SI EL SENSOR DE LUZ ESTA SOBRE NEGRO.
StopAllTasks();          //EL ROBOT SE DETIENE POR COMPLETO Y FINALIZA SU MISION.
    }
}
}


El vídeo que muestra la actividad es el siguiente:


Reflexión:
Programar un robot y realizar una misión como si fuera de verdad, ponerse en esa situación logrando realizar el proyecto con mas entusiasmo y expectativas de poder tener una vision mas  amplia en lo referido a saber que se pueden desarrollar cosas  mas grandes; tener conocimientos bases que se pueden llegar a complementar y hacer un proyecto realmente sorprendente