Competencia: Desarrollo de Software (Nivel 1)
Palabras Clave: Lego, Programación, NXT.
Robot BuscaMinas
Introducción
Primero que todo, en esta tarea aplicamos los nuevos conocimientos adquiridos, ya que en esta actividad debíamos implementarle a nuestro robot un sensor de tacto, para que al momento de hacer contacto con los cubos y paredes, se encendiera; seguido de este acto, el robot tenía que retroceder, dar una vuelta y emitir un sonido con el que indicaría que había destruido el objetivo. Esto se debía repetir 5 veces y al final del trayecto tendría que tocar un sonido diferente a los anteriores con el que indicaría que se había quedado sin explosivos. Luego comenzamos por desarrollar el pseudocódigo con el que tendríamos una idea de cómo seria nuestro código en NXC.
Estrategia De Solución
Estrategia de Trabajo:
Hugo: Se encargó de Traspasar las ideas del recorrido del robot, al papel, mediante el pseudocódigo el cual debería ser lo más claro y legible, para que la creación del código fuera lo más exacta posible.
Ángel y Felipe: Se Preocuparon de Interpretar el pseudocódigo, para así lograr como resultado final un código que cumpliera con el objetivo planteado, pero que se iría modificando a medida que fuéramos comprobando en terreno nuestro código.
José Luis: su tarea fue la de posicionar correctamente el robot, e ir registrando de forma escrita los errores que surgían durante el transcurso del recorrido y dejar un registro visual.
Finalmente, cuando conseguimos que el robot cumpliera con el objetivo, procedimos a depurar el código , fue en este momento cuando dimos a conocer lo que pensábamos respecto al código, para que así no se pasara a llevar a nadie del grupo, ni tampoco se descarta alguna idea.
Modelo de Solución:
Uno de los problemas que se nos presento fue el calcular el giro aleatorio, que éste sea de más de 90º y menos de 720º como se pedía en la pauta. La solución a esto fue generar un random con un intervalo. Otra de las complicaciones fue la implementación de un ciclo que se ejecutara la cantidad de veces requerias, pues iniciamos una variable en 0 y al definirse que realice ciclos menores a 6, realizaba 6 acciones. Esto se debió a que nuestro ciclo realizaba la acción antes de sumar el contador. Nuestro ataque al problema fue reducir el ciclo a menores a 5, de este modo se realiza una acción completa y el contador sube a uno. (quedando ciclo1, contador = 0; ciclo 2, contador=1, etc).
Pseudocódigo
Contador (de bombas)=0
Avanza el robot
Si robot impacta
Retroceder 0,5 segundos
Reproducir sonido de detonación
Detenerse (Esperar 2 segundos)
Giro derecha al azar entre 90° y 720°
Detener Robot
Contador +1
Vuelve a entrar al proceso mientras el contador sea <5
Reproduce Sonido Final (Sin Munición)
APAGADO TOTAL
Código NXC
int TiempoGiro;
int Contador=0;
int Contador=0;
task main()
{
SetSensorTouch(IN_4); //asignar sensor a puerto 4
SetSensorTouch(IN_4); //asignar sensor a puerto 4
do {
OnFwd(OUT_AC,75); //avanzar
if(SENSOR_4 == 1) //si el sensor se activa
if(SENSOR_4 == 1) //si el sensor se activa
{
TiempoGiro=Random(2521)+360; //variable de giro 90 a 720
OnRev (OUT_AC,75); //reversa
Wait(500);
Off(OUT_AC);
PlayFileEx("! Attention.rso",4,FALSE); //sonido bomba
Wait(2000);
OnRev(OUT_A,75); //asginacion potencia giro
OnFwd (OUT_C,75); //asignacion potencia giro
Wait(TiempoGiro); //ejecucion random del tiempo de giro
Off(OUT_AC);
Contador++; //al terminar ciclo contador aumenta
}
TiempoGiro=Random(2521)+360; //variable de giro 90 a 720
OnRev (OUT_AC,75); //reversa
Wait(500);
Off(OUT_AC);
PlayFileEx("! Attention.rso",4,FALSE); //sonido bomba
Wait(2000);
OnRev(OUT_A,75); //asginacion potencia giro
OnFwd (OUT_C,75); //asignacion potencia giro
Wait(TiempoGiro); //ejecucion random del tiempo de giro
Off(OUT_AC);
Contador++; //al terminar ciclo contador aumenta
}
}
while (Contador<5); //fin del ciclo si contador es 4
Wait(2000);
PlayFileEx("! Startup.rso",4,FALSE); //sonido sin stock bomba
Wait(4000);
Wait(2000);
PlayFileEx("! Startup.rso",4,FALSE); //sonido sin stock bomba
Wait(4000);
}
Video Actividad
Informe de Autoevaluación
Nombre | Responsabilidad | Creatividad e Innovación |
Ángel Aedo Busto | 7 | 6 |
Hugo Manríquez | 4 | 5 |
Felipe Leal | 6 | 7 |
José Luis Palma | 6 | 6 |
Conclusión
Bueno en este trabajo tuvimos que utilizar nuevamente los comando básicos para la creación del código, en el que tuvimos que integrarle uno nuevo para poder usar el sensor de tacto que se escribe como: SetSensorTouch (el que es con el que iniciábamos el sensor), en conjunto con los demás comandos logramos que nuestro robot desarrollará sin mayores inconvenientes su recorrido.
En sí, el trabajo fue muy didáctico al igual que el anterior lo que hace que la materia sea mucho mas fácil de comprender, además de lograr aprender como optimizar nuestros tiempos y trabajar como un equipo y asi cumplir a tiempo con la elaboración del proyecto.
Hablando a gran escala creo que logramos con gran éxito las competencias ya que nuevamente nos pudimos organizar con gran exito, dando como resultado final un trabajo de gran nivel. Y un factor que es importante en cada trabajo que se realiza es tener paciencia, para repetir los procesos mas de una vez y también el código hasta obtener resultados que nos satisfagan
Esta semana nos encontramos con un nuevo desafio, que incluía tareas y funciones que aprendimos en clases, como el utilizar el Do While, el RANDOM, los sensores de tacto,etc.
Estas nuevas Funciones eran las herramientas precisas para llevar a cabo el laboratorio 2.
Esos si tuvimos algunas complicaciones, al no manejarnos bien en el tema de los ciclos, nos surgia la duda de usar un Repeat o un While, o un Do While. Pero la solución la encontramos mediante la tecnica del ensayo y error, y tambien aplicando todas nuestras capacidades y distintos puntos de vista.
El resultado: Terminamos el Robot, mas rapido que la clase anterior, con un codigo Corto , preciso y limpio.
En general, quedé personalmente, muy conforme con esta actividad.
No hay comentarios:
Publicar un comentario