Competencia :DESARROLLO DE SOFTWARE, Nivel: 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).
Descripción de la actividad:
A continuación se detalla la tercera actividad de programación de robot, en esta ocasión nuestro robot debió realizar complejas tareas utilizando la información obtenida por sus dos sensores incorporados, el sensor de tacto y el de luz, nuestro robot debía localizar cinco puntos distintos en una pared y colocar explosivos en cada uno de ellos avisando por medio de una alarma su detonación y mostrar en la pantalla la cantidad restante de explosivos, a lo anteriormente mencionado también se le sumaba la dificultad de tener que esquivar círculos negros en el área de desplazamiento utilizando el sensor de luz, cada circulo simbolizaba un puesto de vigilancia del enemigo que el robot debía esquivar, luego de las 5 detonaciones, nuestro robot debía encontrar un puesto de vigilancia y quedarse en la posición para atraer la atención del enemigo.
Solución:Al realizar este tercer trabajo, nos vimos enfrentados a una serie de problemas que fueron los siguientes:
Lo primero que se nos presento fue que teníamos que colocar el sensor de luz, pero el problema era que no había espacio suficiente enfrente del robot producto que el sensor touch estaba puesto, lasolución que le dimos al presente problema fue desarmar el robot para así darle una nueva configuración para que los sensores estuviesen puestos enfrente del robot.
Y nuestro segundo y recurrente problema fue la programación del robot ya que se agregaron nuevos elementos, por lo cual tuvimos muchos problemas con ellos y la solución que le dimos fue leer el tutorial de NXCque nos dio el profesor y de este modo nos quedó más claro y además de leer consultamos con nuestros compañeros quienes nos brindaron su ayuda.
Y de este modo logramos darle una solución a cada uno de los problemas que se nos presentaron en el transcurso del desarrollo de nuestro trabajo y así logramos terminar nuestro trabajo de manera satisfactoria.
Pseudocódigo:
Avanzar Mostrar explosivos restantes en la pantalla Si choca con una pared debe Reproducir un sonido de alarma Mostrar la nueva cantidad de explosivos Retroceder medio segundo Esperar un segundo más Girar aleatoriamente a la derecha con un ángulo entre 90º y 270º Avanzar para detectar más puntos de la pared Si encuentra un punto negro debe Esquivar el punto utilizando alguna estrategia Y al detectar el 4º punto débil en la pared debe Alejarse de la última explosión por dos segundos Tocar una melodía Buscar un punto negro y quedarse ahí Detener todas las acciones y apagar el programa.
Codigo:
// Este programa hace que el robot ande en una base como infiltrado,
// esquivando los puntos negros ( guardias) en la pista, en busca de detonar
// las paredes, al detonar tiene un sonido (indica la detonación de la bomba
// y un mensaje en la pantalla que indica la cantidad de bombas restantes,
// al detonar las 5 bombas(con la ayuda del contador)que son las requeridas
// ocurre un tono final de las explosiones y tiene que ir en busca del
// punto negro (guardia) para llamar la atención de él, esto último
// marca el final del programa.
#define Color_Negro 40 // Rango de luz para considerar que es el negro
int esquivar=400; // Variable usada saltar los puntos negros
int contador=0; // indica el valor inicial del Contador
int bombas= 5; // Marca la cantidad de bombas a detonar
task main()
{
SetSensorLight (IN_3);//Encender sensor de luz que hace desbliar la parte negra
SetSensorTouch (IN_1);// Enceder sensor de tacto para detectar las paredes.
OnFwd (OUT_AC,75); // Instruccion que valla hacia adelante
while (contador < 5)
{
if(SENSOR_1 == 1)
{
esquivar = Random (1300) + 300 ; // Esto le da el valor cuando va a
// a darse vuelta al tocar una pared
OnRev (OUT_AC,75); // Retroceda por medio segundo
Wait (500);
Off (OUT_AC);// Apagar motores por 2 segundos.
Wait (2000);
PlayTone (3000, 800); // Tono que marca la detonación de una bomba.
Wait(1000);
bombas --;
NumOut (50,50, bombas); // Es para colocar en la pantalla la cantidad
// bombas restantes
Off (OUT_AC); // Apagar motor
Wait (1000); // Espera de 1 segundo.
OnFwd(OUT_AC,75);
OnRev(OUT_A,75); // Estas 2 instrucciones indica que se de una media
// vuelta para retomar camino.
Wait (esquivar);
OnFwd (OUT_AC,75); // Esta indica que valla hacia adelante
contador ++;
}
if (Sensor (IN_3) < Color_Negro) // Sensor de luz
{
OnRev (OUT_AC, 75); // Al encontrar un punto negro va hacia atras
Wait (500);
OnFwd (OUT_AC, 75);// Con la Segunda instruccion indica que se
OnRev (OUT_C, 75);// doble un poco.
Wait (esquivar); //
OnFwd (OUT_AC, 75);// Hace que el robot valla hacia adelante
}
}
while (Sensor(IN_3) > Color_Negro)
{
if(SENSOR_1 == 1)
{
esquivar = Random (1300) + 500 ; // Valor del giro RANDOM
OnRev (OUT_AC,75); // Retroce al chocar
Wait (500);
OnFwd (OUT_AC,75);// Con la segunda instruccion hace que se de
OnRev (OUT_A,75);// una vuelta en RANDOM en busca de otra pared.
Wait(esquivar);
}
Off(OUT_AC); // Apagar motor
PlayTone (2000,5000); // Sonido que marca el final de la actividad
Wait (2000); // Duracion del tono
StopAllTasks (); // Marca el final de todas las instrucciones.
}
}
Video:
Reflexión: En esta actividad, pude realizar realizar la creación de un programa que realiza todas las funciones del robot en cuestión, esto me permitió ampliar mis conocimientos enormemente en la materia, con los cuales pude desarrollar un análisis mas completo de los futuros problemas propuestos, dando soluciones efectivas y rápidas.
No hay comentarios:
Publicar un comentario