Autor: Martin Berkhoff
Competencia (Nivel):
Aprendizaje autónomo
Nivel 1: Conoce y utiliza estrategias de aprendizaje y hábitos de estudio y trabajo, seleccionando los que le son útiles según sus necesidades de aprendizaje.
Palabras clave: codigo, parametros
Descripción de la actividad :
Un robot se desplaza por una superficie blanca con puntos negros. La superficie es rectangular y posee paredes en sus bordes. Construya un robot que implemente las siguientes funcionalidades:
- Cada vez que el robot choca con una pared debe:
- retroceder un poco,
- girar 180° a la izquierda o derecha,
- disminur su potencia en 10,
- contar los choques con las paredes,
- y seguir su recorrido con la nueva potencia
- Al pasar por un punto negro debe:
- contarlo,
- girar en un ángulo aleatorio menor a 180° a la izquierda o derecha,
- aumentar su potencia en 10,
- y seguir su recorrido con la nueva potencia.
- El robot se desplaza por tiempo indefinido, deteniendo su recorrido ante una señal auditiva sobre 80 db.
- Al final del recorrido, informará en su visor el n° de choques y el n° de puntos negros detectados.
Los giros y cambios de potencia se implementarán con una subtarea exclusiva para ello, con la siguiente estructura:
sub GiroPotencia(int t, string direccion, string evento)
donde,
t tiempo de giro
direccion dirección de giro, “D” -> Derecha, “I” -> Izquierda
evento especifica si es “choque” o “círculo”
La potencia utilizada por el robot en el avance, nunca debe sobrepasar 100 ni ser menos de 30.
Estrategia de Trabajo
La Actividad #1 de Proyecto de Robótica se nos presenta como la combinación de
todos los contenidos aprendidos durante el Primer semestre en Programación de Robots.
Considerando Que De Partida Se nos Pide este nivel de complejidad y agregando
un nuevo componente (el uso de parámetros), procedemos a separar nuestro código en
subtareas y encargar a los miembros del grupo la tarea que mejor manejaban (según
aprendieron el semestre anterior). Esto nos tomó muy poco tiempo puesto que reciclamos
códigos anteriores, adaptandolo a la actividad actual.
Pseudocódigo
Mientras No Detecte Ruido Hacer:
{
avanzar con “potencia”
SI Choque con pared:
{
contador de choques crece en 1.
retrocede.
Llama a GiroPotencia y le entrega sus parámetros
Realiza un GiroPotencia
la potencia se reduce en 10.
}
SI detecta un punto negro:
{
contador de puntos crece en 1.
Llama a GiroPotencia y le entrega sus parámetros.
Realiza un GiroPotencia.
la potencia Crece en 10.
}
Muestra en Pantalla Los Contadores.
}
GiroPotencia
{
SI recibe parámetros de Choque:
{
asigna una dirección Izquierda o Derecha
asigna un Giro en 180º en esta dirección
}
SI recibe parámetros de Punto Negro:
{
asigna una dirección Izquierda o Derecha
asigna un Giro Menor a 180º en esta dirección
}
}
Código Fuente
#define UMBRAL 40
#define MIC SENSOR_2
int potencia=60;
int giro=0;
int punto_negro=0;
int choque=0;
int decibeles = 90;
sub GiroPotencia(int t, string direccion, string evento)
{
if(("D" == direccion)||("i" == direccion))
{
OnRevReg(OUT_BC,potencia,OUT_REGMODE_SYNC);
Wait(t);
RotateMotor(OUT_C, potencia,180);
Wait(t);
}
}
sub colision()
{
if(SENSOR_1 == 1)
{
choque++;
GiroPotencia(1000,"D" ,"C");
potencia= potencia-10;
}
}
sub circulos()
{
if(SENSOR_3 <40)
{
punto_negro++;
OnRevReg(OUT_BC,potencia,OUT_REGMODE_SYNC);
giro=Random(30) + 900;
OnFwd(OUT_C,potencia);
OnRev(OUT_B,potencia);
Wait(giro);
potencia=potencia+10;
}
}
task main()
{
SetSensorTouch(IN_1);
SetSensorLight(IN_3);
SetSensorSound(IN_2);
while(SENSOR_2 < decibeles)
{
OnFwdReg(OUT_BC,potencia,OUT_REGMODE_SYNC);
Wait(500);
colision();
circulos();
RectOut(15, 20, 70,23);
TextOut(20, 40, "circulos ");
NumOut(10, 40, punto_negro);
TextOut(20, 36, "choques ");
NumOut(10, 36, choque);
}
Float(OUT_BC);
}
Adjuntare un vídeo de el trabajo
Conclusión
. Al ver este programa Ejecutándose en el robot, puede que no llame mucho la
atención, respecto de Trabajos hechos en el curso anterior. pero dentro esconde el aporte
mayor para nosotros. La producción de una Programación sintética que trabaja con Sub
Tareas para cada función pedida, Integrandolo ahora con el paso de “PARAMETROS”,
herramienta que simplifica mucho mas el resultado y genera un ahorro en lineas de
código, Pues ya no se ejecutan varias tareas con distintos valores, sino que se ejecuta
UNA SOLA pero en Función de los valores Obtengamos previamente.
Podemos concluir que a veces hay tareas que nos parecen complicadas de
implementar, o aprender nuevas funciones lo consideramos innecesario; pero estas
pueden conllevar a hacer las cosas mas simples de aquí en adelante.