Competencia: Trabajo en equipo.
Asignatura: Programación de Robot.
Descripción de la Actividad
La actividad tiene como objetivo el repasar conceptos e incorporar el uso de sub tareas con paso de parámetros junto con el uso de nuevas instrucciones del lenguaje NXC para mejorar la calidad del código fuente y del recorrido del robot.
El robot deberá desplazarse por una pista de obstáculos rectangular con una superficie blanca con puntos negros, donde al chocar con una pared debe de retroceder, realizar un giro de 180° a la izquierda o derecha, disminuir su potencia en 10, contar el choque y seguir su recorrido. Al detectar un punto negro este será contado, se realizara un giro en un ángulo aleatorio menor a 180° a la izquierda o derecha, aumentar su potencia en 10 y seguirá su recorrido, en caso de detectar un ruido sobre 80 DB el robot se detendrá y mostrara por un pantalla el detalle del numero de choques y puntos negros.
Cargos:
*Jefe de grupo (Jorge Arias): Esta persona fue el encargado de dirigir, solucionar problemas y dar las indicaciones pertinentes a los todos los integrantes del equipo, esto con el fin de guiar al equipo hacia un trabajo óptimo y más ordenado junto con ser participe en cada una de las actividades desarrolladas por cada integrante.
*Secretario (José Medina): Encargado de tomar los apuntes correspondientes de la activad con el fin de desarrollar un informe detallado de todo lo realizado en los “laboratorios de robótica”.
*Productor Multimedia (Ignacio León): Responsable de grabar y editar el material audio visual. Gracias a lo que fue esta recolección de material audio visual, se pudo encontrar diversos errores que se cometían con el robot los cuales posteriormente fueron reparados, además de cumplir con la función de testificar lo realizado en clases y la aplicación del código NXC.
Cargos:
*Jefe de grupo (Jorge Arias): Esta persona fue el encargado de dirigir, solucionar problemas y dar las indicaciones pertinentes a los todos los integrantes del equipo, esto con el fin de guiar al equipo hacia un trabajo óptimo y más ordenado junto con ser participe en cada una de las actividades desarrolladas por cada integrante.
*Secretario (José Medina): Encargado de tomar los apuntes correspondientes de la activad con el fin de desarrollar un informe detallado de todo lo realizado en los “laboratorios de robótica”.
*Productor Multimedia (Ignacio León): Responsable de grabar y editar el material audio visual. Gracias a lo que fue esta recolección de material audio visual, se pudo encontrar diversos errores que se cometían con el robot los cuales posteriormente fueron reparados, además de cumplir con la función de testificar lo realizado en clases y la aplicación del código NXC.
Pese a que el robot realiza su recorrido con multi tareas era necesario que el robot recolectara datos durante su trayectoria y los almacenar y los mostrara en pantalla sin mencionar que con estos datos se calculaba el puntaje por lo tanto se utilizo un arreglo para poder almacenar cada dato obtenido durante el recorrido, es decir, el Array maneja la cantidad de puntos negros encontrados.
Pseudocódigo
Declarar
variables;
Task
Sound(){
Crear Musica;
}
Task
Anotacion(){
Crear musica;
}
Task
Circulo(){
Si(sensor detecta negro){
Iniciar
tarea anotación;
Incrementar
potencia en 10;
Calcular
diferencia de tiempo entre cada punto negro;
Si
(diferencia de tiempo >10 segundos){
Puntaje =0;
}else{
Mostrar
puntaje de la ecuación;
Guardar
puntaje en array;
}
Retroceder;
Girar por tiempo aleatorio;
Volver timer a 0;
For(i<8){
Limpiar
pantalla;
Mostrar
puntaje;
If(i==8){
Limpiar pantalla;
I==0;
}
}
Subir un peldaño en la pantalla;
}
Task
aplauso(){
If(detecta sonido){
Retroceder;
Girar;
}
}
Task
parada(){
If(choca){
Apaga todo;
}
}
Task
main(){
Dar prioridad tareas;
Setear sensores;
Avanzar;
}
Codigo NXC
#define
UMBRAL 40
#define MIC
80
int
ArrayPunt[];
int
Puntaje=0, potencia=20, i=0,p=0, giro, Puntos=0;
int
TiempoAnt, TiempoAct, DiferenciaTiemp;
mutex
paso;
//tarea
sonido durante el recorrido
task
Sound(){
while(true){
Acquire(paso);//adquiere el mutex
PlayTone(587,3000);
Wait(50);
PlayTone(392,3000);
Wait(50);
PlayTone(440,3000);
Wait(50);
PlayTone(392,3000);
Wait(50);
PlayTone(415,3000);
Wait(50);
PlayTone(392,3000);
Wait(50);
PlayTone(440,3000); Wait(50);
Release(paso);//deja el mutex
}
}
//tarea
anotacion musica de deteccion de puntaje
task
anotacion(){
while(true){
Acquire(paso);//adquiere
el mutex
PlayTone(500,160);
Wait(100) ;
PlayTone(299,50);
Wait(100);
PlayTone(10000,500);
Wait(100);
Release(paso);//deja
el mutex
}
}
//tarea
deteccion de puntos negros
task
circulo(){
while(i<10){
if(SENSOR_1<UMBRAL){//en
caso de detectar un punto negro
potencia =
potencia+10; //aumenta la potencia
StartTask(
anotacion);
//calcular
puntaje
TiempoAct =
CurrentTick();
DiferenciaTiemp
= (TiempoAct – TiempoAnt) / 1000;
TiempoAnt=
TiempoAct;
if(DiferenciaTiemp
< 10){
Puntaje =
-5* DiferenciaTiemp+50;
ArrayPunt[p]=
Puntaje;
p++ ;
Puntos=
Puntos+Puntaje;
}
if(DiferenciaTiemp>10){
Puntaje =0;
}
giro =
Random(500)+1500;
Acquire(paso);//adquiere
el mutex
//retroceder y
crear giro random
OnRev(OUT_AC,potencia);
Wait(500);
OnRev(OUT_C,potencia);
OnFwd(OUT_A,potencia);
Wait(giro);
OnFwd(OUT_AC,potencia);
Release(paso);//deja
el mutex
StartTask(Sound);//inicia
nuevamente la tarea sound
DiferenciaTiemp=0;
//se cambia el valor a 0
NumOut(10,i,Puntaje);
if(i==8){
ClearScreen(); //
se limpia la pantalla y se inicia nuevamente la cuenta
i=0;
}
i++ ;
}
}
}
//tarea
aplauso donde se evaden obstaculos mediantew una seña auditiva
task Aplauso(){
while(true){
if(SENSOR_2>MIC){
Acquire(paso);//adquiere
mutex
//se retrocede y
realiza un giro
OnRev(OUT_AC,potencia);
Wait(1000);
OnRev(OUT_A,potencia);
OnFwd(OUT_C,potencia);
giro= Random(500)+1500;
Wait(giro) ;
OnFwd(OUT_AC,potencia);
Release(paso);//deja
el mutex
}
}
}
//tarea
donde se detendrán motores al activarse el sensor touch y se mostraran los
resultados
task
parada(){
while(true){
if(
SENSOR_3==1){
//si se
activa el sensor touch
Off(OUT_AC); // se
apaga los motes a y c
NumOut(10,7,Puntos);
TextOut(10,8,”Puntaje ” );
StopSound();
for(int x=0;x<30;x++){
TextOut(10,6,”Array” );
NumOut(x+3,5, ArrayPunt[p]);
}
}
}
//tarea
principal con la inicialización de motores
task main()
{
Precedes(circulo,Aplauso,parada,anotacion);
// dar inicio a las tareas
SetSensorLight(IN_1); // inicializacion sensores
SetSensorSound(IN_2);
SetSensorTouch(IN_3);
OnFwd(OUT_AC,potencia);
StartTask(Sound); // inicio tarea sonido
TiempoAnt = CurrentTick();
if( SENSOR_3==1){//apagar motores y detener tareas
Off(OUT_AC);
Wait(30000);//esperar
durante 30 segundos
StopSound();//detener
tarea sonido
StopAllTasks();//
detener todas las tareas
}
}
Vídeo Actividad Finalizada
Reflexión
La actividad presentada demuestra como con trabajo en equipo podemos dar solución a la problemática planteada al inicio del blogg, en donde al asignar cargos y delegar funciones se logro como resultado final que el robot NXC realizara el recorrido de forma exitosa. Cada participante del grupo aporto con una cuota de trabajo para el diseño del robot, producción multimedia , entre otras cosas y un trabajo conjunto para el diseño del código final.
No hay comentarios:
Publicar un comentario