Actividad Nº 1 Proyecto Robot
Autor: Camilo Ariel Friz Gómez.
Competencias: Aprendizaje Autónomo.(Nivel 1).
Palabras claves: NXC, NXT, Robot, Proyecto, programación.
La
actividad de esta semana, se nos pidió programar y diseñar nuestro robot, que
realice las siguientes funciones: Desplazarse por una superficie blanca en la
cual se encuentra una serie de puntos negros y paredes. Al pasar por un punto
negro, debe girar aleatoriamente (menos de 180º) a una dirección y tiempo
indicado por entrega de parámetros, y a la vez, contar la cantidad de veces que
el robot detectó dicho punto. Al chocar en la pared, debe retroceder un poco, y
girar a una dirección y tiempo indicado por entrega de parámetros, y a la vez,
contar la cantidad de veces que el robot choca.
Estrategia
de Solución
Estrategia de
trabajo:
Uno de los primeros pasos que se realizó, fue el de designar un cargo de los integrante, este con el fin de realizar un trabajo organizado y fluido. El jefe de grupo en un principio da las indicaciones pertinentes a los demás integrantes del equipo, enseguida el staff de apoyo se dirige a retirar los kits y a crear un inventario mientras el secretario con el productor multimedia comienza a crear el programa que dará solución al problema planteado. El jefe de grupo y el productor multimedia comienza a buscar la forma de armado más adecuada para la actividad, se llega a la conclusión de hacer un diseño de robot simple. Una vez hecho esto, entre todos los integrantes damos un vistazo final al programa creado por el secretario en busca de errores, Para dar una solución definitiva al problema, decidimos instalar tres sensores: luz, tacto y sonido, con rangos definidos para que cada uno de ellos cumpliera su función a cabalidad (detectar paredes, puntos negros, o detener su recorrido). El programa creado lograba que cada vez que el robot chocara Retrocediera, girara en modo aleatorio y siguiera su recorrido. Cada vez que el robot pasaba por un punto negro éste giraba y cambiaba su velocidad, finalmente se detenía al oír un sonido. El programa también tiene un contador que nos informaba el número de choques y puntos negros detectados por nuestro robot. Finalmente el encargado multimedia es quien graba el desempeño final de nuestro robot en la plataforma, para confirmar lo creado en el código y nuestra estrategia como grupo.
Uno de los primeros pasos que se realizó, fue el de designar un cargo de los integrante, este con el fin de realizar un trabajo organizado y fluido. El jefe de grupo en un principio da las indicaciones pertinentes a los demás integrantes del equipo, enseguida el staff de apoyo se dirige a retirar los kits y a crear un inventario mientras el secretario con el productor multimedia comienza a crear el programa que dará solución al problema planteado. El jefe de grupo y el productor multimedia comienza a buscar la forma de armado más adecuada para la actividad, se llega a la conclusión de hacer un diseño de robot simple. Una vez hecho esto, entre todos los integrantes damos un vistazo final al programa creado por el secretario en busca de errores, Para dar una solución definitiva al problema, decidimos instalar tres sensores: luz, tacto y sonido, con rangos definidos para que cada uno de ellos cumpliera su función a cabalidad (detectar paredes, puntos negros, o detener su recorrido). El programa creado lograba que cada vez que el robot chocara Retrocediera, girara en modo aleatorio y siguiera su recorrido. Cada vez que el robot pasaba por un punto negro éste giraba y cambiaba su velocidad, finalmente se detenía al oír un sonido. El programa también tiene un contador que nos informaba el número de choques y puntos negros detectados por nuestro robot. Finalmente el encargado multimedia es quien graba el desempeño final de nuestro robot en la plataforma, para confirmar lo creado en el código y nuestra estrategia como grupo.
Diagrama de Flujo
:
Pseudocodigo:
contador
de choque;
contador
de puntos;
potencia
= 50;
Giro;
//subrutina
que permitira al robot,la realizacion de dos acciones.
//estas
acciones dependen del senesor activado.
subrutina
GiroPotencia(tiempo, direccion, evento)
{
si (evento == "Circulo")
{
contador de puntos negros +1;
si(direccion=="D")
{
Girar hacia la derecha por un tiempo
ingresado(t);
}
si(direccion == "I")
{
Girar hacia la izquierda por un tiempo
ingresado(t);
}
aumentar potencia 10%;
}
si (evento == "Choque")
{
retroceder por un tiempo de 1 segundo;
si(direccion == "D")
{
Girar hacia la derecha por un tiempo
ingresado(t);
}
si(direccion == "I")
{
Girar hacia la izquierda por un tiempo
ingresado(t);
}
desminuir potencia 10%;
}
}
subrutina
imprimir(y1, y2, x, im, contador)
{
imprimir en pantalla tanto número como texto.
}
INICIO
DE PROGRAMA//inicio de programa
{
SETEAR SENSOR TOUCH.
SETEAR SENSOR LIGHT.
SETEAR SENSOR
SOUND.
Giro = Random entre 300 y 700; //tiempo de
giron.
hacer (siempre)
{
avanzar ;
//
si (Sensor Light < UMBRAL)
{
llamar GiroPotencia(Giro, "D",
"Circulo");
}
si (SENSOR_1 == 1)
{
llamar GiroPotencia(1250, "D",
"Choque");
}
//si el sensor de sonido detecta un sonido mayor a 80 db, se romperá el ciclo
while establecido.
si(MIC > 80){romper ciclo while;}
}
imrimir contadores;
}//
fin del programa.
Código del Programa:
//Hello
Bot
//Definición
de variables
#define
UMBRAL 40
#define
MIC SENSOR_2
int
contador_choque=0;
int
contador_pp=0;
int
potencia=50;
int
Giro;
//subrutina
que permitira al robot,la realizacion de dos acciones.
//estas
acciones dependen del senesor activado.
sub GiroPotencia(int t, string direccion,
string evento)
{
/*int t : parámetro Encargado de recibir
tiempo.
string dirección: Encargado de recibir
parámetro necesario para
dirección de giro Ya se
ha izquierda (I) o derecha (D).
String
evento: encargado de recibir el parámetro del tipo de eventO que
se ingrese (circulo negro
o choque).
*/
if (evento == "Circulo")
{
contador_pp++;//contador de puntos negros
+1.
//Sentencia
la cual permitirá realizar una vuelta
hacia la derecha.
if(direccion == "D")
{
OnFwd(OUT_C, 50);
OnRev(OUT_A, 50);
Wait(t);
}
//Sentencia
la cual permitirá realizar una vuelta
hacia la izquierda.
if(direccion == "I")
{
OnFwd(OUT_A, 50);
OnRev(OUT_C, 50);
Wait(t);
}
potencia=potencia+10;//potencia aumenta un
10%.
if (potencia >= 100) {potencia=100;}//
Se establece una potencia máxima de la
cual no aumenta.
OnFwdReg(OUT_AC,potencia,OUT_REGMODE_SPEED);//
avanzar con control de potencia.
}
if (evento == "Choque")
{
OnRevreg(OUT_AC, 75);//retrocede con
control de potencia por un tiempo de un segundo
Wait(1000);
//Sentencia
la cual permitirá realizar una vuelta
hacia la derecha.
//con un tiempo entregado por parametro.
if(direccion == "D")
{
OnFwd(OUT_A, 50);
OnRev(OUT_C, 50);
Wait(t);
}
//Sentencia
la cual permitirá realizar una vuelta
hacia la izquierda.
//con un tiempo entregado por parametro.
if(direccion == "I")
{
OnFwd(OUT_C, 50);
OnRev(OUT_A, 50);
Wait(t);
}
potencia=potencia-10;// Disminuye un 10% de la potencia total.
if (potencia <= 30){potencia=30;}
contador_choque++;
OnFwdReg(OUT_AC,potencia,OUT_REGMODE_SPEED);
}
}
//subrutina
que permite imprimir en pantalla tanto
número como texto.
sub imprimir(int y1, int y2, int
x, string im, int contador)
{
TextOut(y1, x, im);
NumOut(y2, x,contador);
}
task
main()//inicio de programa
{
SetSensorTouch(IN_1); //ENCIENDE EL SENSOR TOUCH.
SetSensorLight (IN_4);
//ENCIENDE EL SENSOR LIGHT.
SetSensorSound(IN_2);
//ENCIENDE EL SENSOR SOUND.
Giro =
Random(700)+300; //Asignación de una
variable ramdomica , la cual permite el control de tiempo de giron.
while (true)
{//inicio ciclo while.
OnFwdReg(OUT_AC,potencia,OUT_REGMODE_SPEED);// avanzar con control de
potencia.
//
if (Sensor(IN_4) < UMBRAL)
{
GiroPotencia(Giro, "D",
"Circulo");
}
if (SENSOR_1 == 1)
{
GiroPotencia(1250, "D",
"Choque");
}
//si el sensor de sonido detecta un sonido mayor a 80, se romperá el siclo
while establecido.
if(MIC > 80){break;}
}//fin ciclo while
Off(OUT_AC);
imprimir(10,70,30,"Puntos:",contador_pp);//imprime
contador de puntos negros contados.
imprimir(10,70,40,"Choques:",contador_choque);//imprimir
contador de choques.
Wait(20000);
}//
fin del programa
Video de la actividad:
Conclusión
Después
de realizar la actividad podemos concluir que fue una buena manera de aprender
a resolver problemas llegando a un resultado óptimo en la actividad realizada.
Siendo capaces de dividir el problema planteado en subtareas con parámetros.
Otro Punto a mencionar fue la decisión de instalar tres sensores: tacto, luz y
sonido, dentro del código que creamos, para que cumplieran su objetivos que
fueron: "detectar paredes, puntos negros, y detener su recorrido”
respectivamente, objetivos que se designaron en cada función, así como también
trabajamos utilizando variables y subrutinas. Para Finalizar con la grabación
del desempeño del robot verificando así el resultado de nuestra actividad a
través del
Comportamiento
del robot. Por ende podemos decir que el robot ejecuto de manera óptima lo que esperábamos,
quedando como grupo Conforme con lo aprendido y lo realizado esta semana.