Ing. Civil en Informática UCTemuco, Chile.
Desarrollo de software (Nivel 1).
Desarrolla soluciones de software aplicando procesos de análisis, diseño y prueba a problemas simples; centrados en la programación, los datos y las Interfaces Humano/Computador (IHM).
Programación NXC, en Robots NXT, manejo de sensores y otras herramientas de los Lego Mindstorms.
En el siguente video se explicara el objetivo de esta tarea, robot ninja cumpla su misión:
Robot Ninja.
La idea principal del proyecto es que el robot logre esquivar cada uno de los puntos "negros" y además "detone cuatro explosivos" uno por uno cada vez que choque contra alguna pared.
Solución del problema:
Mediante los sensores de tacto y de luz con sus respectivas ejecuciones en el código, el robot debería lograr con éxito su cometido, sin embargo este debe mantenerse con tiempos dentro de un siglo para, por ejemplo detonar los cuatro explosivos y luego finalizar su tarea principal.
En el siguiente código y pseudocódigo se demostrara la forma en la que el robot cumple su objetivo:
Pseudocódigo programa:Tarea principal
{
Inicio del sensor de luz;
Inicio del sensor de tacto;
Avanza en línea recta;
{
Lo que realiza cuando pasa sobre un umbral menor que 45
{
Gira por 0.2 segundos;
Sigue con su recorrido
}
Lo que realiza una vez tocado el sensor una vez
{
Se calibra el tiempo del GiroRandom en segundos;
Retrocede medio segundo;
Emite un sonido de detonación
Espera por dos segundos;
Comando para mostrar las bombas restantes en la pantalla;
Realiza un giro con el tiempo GiroRandom;
Sigue avanzando en línea recta;
Contador de repeticiones;
Borrador de números en pantalla;
}
Limite del contador se explosivos, 4
{
Emite un sonido para finalizar;
Realiza un giro para celebrar;
Termino de las órdenes, las elimina;
Lo que ralizara cuando termine poner las 4 bombas
Se detendra en una luz;
Girara en su eje;
Realizara un ruido;
Termino del programa;
}
}
}
{
Inicio del sensor de luz;
Inicio del sensor de tacto;
Avanza en línea recta;
{
Lo que realiza cuando pasa sobre un umbral menor que 45
{
Gira por 0.2 segundos;
Sigue con su recorrido
}
Lo que realiza una vez tocado el sensor una vez
{
Se calibra el tiempo del GiroRandom en segundos;
Retrocede medio segundo;
Emite un sonido de detonación
Espera por dos segundos;
Comando para mostrar las bombas restantes en la pantalla;
Realiza un giro con el tiempo GiroRandom;
Sigue avanzando en línea recta;
Contador de repeticiones;
Borrador de números en pantalla;
}
Limite del contador se explosivos, 4
{
Emite un sonido para finalizar;
Realiza un giro para celebrar;
Termino de las órdenes, las elimina;
Lo que ralizara cuando termine poner las 4 bombas
Se detendra en una luz;
Girara en su eje;
Realizara un ruido;
Termino del programa;
}
}
}
Código Del Programa:/*Grupo Facebot
Integrantes del grupo : Juan Pablo Llancavil, Jorge Henríquez, Carlos Alberto San Martin y
Marcelo Riffo */
int GiroRandom;
int contador=0;
int numero=3;
#define umbral 45
task main()
{
SetSensorTouch(IN_4);
SetSensorLight(IN_1);
OnFwd(OUT_A, 79); //acelera
OnFwd(OUT_C, 72);
while (true)
{
if(Sensor(IN_1) < umbral)
{
OnFwd(OUT_A, 79);
OnRev(OUT_C, 72);
Wait(200);
OnFwd(OUT_A, 79);
OnFwd(OUT_C, 72);
}
if(SENSOR_4==1)
{
GiroRandom= Random(1800)+500;
OnRev(OUT_A, 79);
OnRev(OUT_C, 72);
Wait(500);
PlayTone(4000, 500);
Off(OUT_AC);
Wait(2000);
NumOut(50, 60, numero--); //Cuenta bombas
OnFwd(OUT_A, 79);
OnRev(OUT_C, 72);
Wait(GiroRandom);
OnFwd(OUT_A, 79);
OnFwd(OUT_C, 72);
contador++;
ClearScreen ();
}
if(contador==4)
{
OnRev(OUT_A, 79);
OnFwd(OUT_C, 72);
Wait(2000);
PlayTone(4000, 1000);
OnFwd(OUT_A, 79);
OnFwd(OUT_C, 72);
if(Sensor(IN_1) < umbral)
Off(OUT_AC);
Wait(1000);
OnRev(OUT_A, 79);
OnFwd(OUT_C, 72);
PlayTone(5000,3000);
Wait(2500);
StopAllTasks();
}
}
}
Integrantes del grupo : Juan Pablo Llancavil, Jorge Henríquez, Carlos Alberto San Martin y
Marcelo Riffo */
int GiroRandom;
int contador=0;
int numero=3;
#define umbral 45
task main()
{
SetSensorTouch(IN_4);
SetSensorLight(IN_1);
OnFwd(OUT_A, 79); //acelera
OnFwd(OUT_C, 72);
while (true)
{
if(Sensor(IN_1) < umbral)
{
OnFwd(OUT_A, 79);
OnRev(OUT_C, 72);
Wait(200);
OnFwd(OUT_A, 79);
OnFwd(OUT_C, 72);
}
if(SENSOR_4==1)
{
GiroRandom= Random(1800)+500;
OnRev(OUT_A, 79);
OnRev(OUT_C, 72);
Wait(500);
PlayTone(4000, 500);
Off(OUT_AC);
Wait(2000);
NumOut(50, 60, numero--); //Cuenta bombas
OnFwd(OUT_A, 79);
OnRev(OUT_C, 72);
Wait(GiroRandom);
OnFwd(OUT_A, 79);
OnFwd(OUT_C, 72);
contador++;
ClearScreen ();
}
if(contador==4)
{
OnRev(OUT_A, 79);
OnFwd(OUT_C, 72);
Wait(2000);
PlayTone(4000, 1000);
OnFwd(OUT_A, 79);
OnFwd(OUT_C, 72);
if(Sensor(IN_1) < umbral)
Off(OUT_AC);
Wait(1000);
OnRev(OUT_A, 79);
OnFwd(OUT_C, 72);
PlayTone(5000,3000);
Wait(2500);
StopAllTasks();
}
}
}
(En el pseudocódigo se demuestra paso a paso el procedimiento que lleva a cabo el robot para lograr su objetivo)
Reflexión:
En esta actividad logramos fortalecer la competencia especifica desarrollo de software, ya que debíamos exigirnos mayor capacidad de análisis, de diseño y pruebas para lograr nuestro propósito.
Cualquier consulta o duda, preguntar. Estaré atento a sus inquietudes. Y no olvides opinar.


No hay comentarios:
Publicar un comentario