Autor: Patricio Bello Villalobos
Competencia:
Aplica las Ciencias de la ingeniería.
Nivel 1: Implementa modelos simples de la ingeniería y de las ciencias básicas, en el desarrollo de software.
Descripción de la actividad:
En este trabajo usaremos todos los conocimientos que hemos adquirido en cursos anteriores y a su vez usaremos otros lenguajes de tipo NXC; en lo referido al desarrollo de código usaremos subrutinas para facilitar el recorrido del robot , también haremos énfasis a lo aprendió en la última clase, como lo son: las Multitareas, el método CurrentTick(), entre otros. También visualizaremos un video para mostrar lo realizado por el robot y apoyo grafico para explicar cada parte por la que está compuesta, ya sea sensores, ruedas, entre otros ,y la solución a los problemas presentados en el desarrollo del proyecto trabajando en equipo y viendo cada uno de los detalles de nuestro proyecto.
En las siguientes fotografías aclararemos cada parte que compone nuestro robot.
-En el desarrollo de nuestro proyecto, tratamos de representarlo lo más claro posible, mostrando cada parte que compone nuestro robot para aclarar su parte física, sobre todo lo que es referido a los sensores por el lugar en que están ubicados. También mostraremos un video del robot funcionando, y aclaramos el código a través de comentarios.
-El aprendizaje de las nuevas instrucciones de lenguaje NXC fueron utilizadas con éxito, al aplicarlas y ver la reacción que tuvo el robot frente a estas, las instrucciones que utilizamos fueron: las Multitareas, el método CurrentTick().
Codigo NXC:
link: http://www.megaupload.com/?d=YQZ6TRUS
Solución:
Diseño:
En las siguientes fotografías aclararemos cada parte que compone nuestro robot.
-Los sensores: en nuestro proyecto usaremos los siguientes sensores:
-Sensor de Tacto: el sensor de tacto está ubicado en posición frontal, ya que al chocar con la pared el robot dejara de funcionar y apagara sus motores.
-Sensor de Luz: el sensor de luz está ubicado en dirección hacia abajo, para que pueda reconocer el color de la base (blanca) y a su vez la de los puntos negros, estos últimos para ser contabilizados.
-Sensor de Sonido:el sensor de Sonido está ubicado en dirección hacia arriba, para que al emitir un sonido este gire en otra dirección, evitando chocar con alguna pared.
-Las Ruedas: en nuestro proyecto usaremos 3 ruedas:
Ruedas Delanteras: usaremos 2 ruedas delanteras grandes, la cual facilitara el movimiento del robot, ya que al tener las ruedas grandes girara mas rápido.
Rueda trasera: usaremos 1 rueda trasera, será de tamaño pequeño la cual nos facilitara que el robot a la hora de girar (girara con mayor precisión).
Ruedas Delanteras: usaremos 2 ruedas delanteras grandes, la cual facilitara el movimiento del robot, ya que al tener las ruedas grandes girara mas rápido.
Rueda trasera: usaremos 1 rueda trasera, será de tamaño pequeño la cual nos facilitara que el robot a la hora de girar (girara con mayor precisión).
-Los Motores: en nuestro robot usaremos 2 motores los cuales serán usados para mover las ruedas de nuestro robot.
Estas fotografías muestran el robot en todos sus ángulos y como realizo el recorrido de la actividad.
Solución Alcanzada:
-En el desarrollo de nuestro proyecto, tratamos de representarlo lo más claro posible, mostrando cada parte que compone nuestro robot para aclarar su parte física, sobre todo lo que es referido a los sensores por el lugar en que están ubicados. También mostraremos un video del robot funcionando, y aclaramos el código a través de comentarios.
-El aprendizaje de las nuevas instrucciones de lenguaje NXC fueron utilizadas con éxito, al aplicarlas y ver la reacción que tuvo el robot frente a estas, las instrucciones que utilizamos fueron: las Multitareas, el método CurrentTick().
-Otras de las soluciones a nuestro proyecto fue complementar los conocimientos ya adquiridos. Y a partir de esto, tener una idea más objetiva de lo que se debe realizar.
Pseudocodigo:
Variable Puntos=0;
Variable Velocidad;
Variable tiempo=0;
Variable tiempo_actual= 0;
Variable tiempo_anterior=0;
Subrutina Avanzar
{
Avanzar (Motores, Velocidad);
}
Subrutina Musica
{
Mientras(Sea Verdad)
{
Tocar Música
}
}
Subrutina MusicaAnotacion() //Reproduce musica al anotar un punto (detectar punto negro)
{
Tocar Musica
}
Subrutina Esquivar()
{
Avanzar (Motor A, Potencia 100);
Retroceder (Motor C, Potencia 100);
Esperar 0.5 segundos
}
Subrutina Puntos()
{
tiempo_actual= Capturar Tiempo
Llamar Subrutina MusicaAnotacion();
tiempo=(tiempo_actual-tiempo_anterior)/1000;
tiempo_anterior=tiempo_actual;
Si (tiempo es menor o igual a 10)
{
Puntos=Puntos - 5*tiempo + 50;
}
Si (tiempo es mayor a 10)
{
Puntos=Puntos+0;
}
Si (Velocidad es menor a 100)
{
Sumar 20 a Velocidad;}
}
Tarea Actividad ()
{
Mientras (Sea verdad)
{
Llamar Subrutina Avanzar();
Si (Se detecta sonido)
{
Llamar a Subrutina Esquivar();
}
Si (Detecta Punto)
{
Llamar Subrutina Puntos();
Avanzar (Motor A, Potencia 100);
Retroceder (Motor C, Potencia 100);
Esperar 0.1 segundos
}
Si ( Toca Pared)
{
Aumentar puntaje;
Imprimir Puntaje;
Apagar Motores;
Esperar 0.4 Segundos;
Detener todo;
}
}
}
Tarea Musik ()
{
Llamar Subrutina Musica();
}
Tarea MusikPunto()
{
Llamar Subrutina MusicaAnotacion();
}
Tarea TextoPantalla()
{
Mostrar Puntaje en pantalla;
}
Tarea main ()
{
tiempo_anterior= Calcular tiempo
Encender sensor tacto;
Encender sensor luz;
Encender sensor sonido;
Ejecutar (Tarea Actividad, Tarea Musik, Tarea TextoPantalla);
Si (Detecta punto)
Salir a (Tarea MusikPunto);
}
Codigo NXC:
link: http://www.megaupload.com/?d=YQZ6TRUS
//Proyecto Robotica
//Proyecto Dribbler
//Grupo Project NASA
//Integrantes:
//Daniela Muñoz Muñoz
//Patricio Bello Villalobos
//Javier Herrera Huentecura
#define UMBRAL 40 // Valor que se usa para determinar el color negro de los puntos
#define SONIDO 95
int Puntos=0; //Valor usado para calcular el puntaje
int Velocidad=20; // Variable usada para controlar la velocidad
int tiempo=0; //Variable usada para el calculo del tiempo entre punto y punto
int t_actual= 0; //Variable usada para guardar el tiempo capturado
int t_anterior=0; //Variable usada para guardar el tiempo actual ya usado
int arrayPtje[]; //Arreglo puntaje
int i=0;
int r=0;
sub Avanzar() //Avanza linea recta
{
OnFwd(OUT_AC, Velocidad);
}
sub Musica() //Reproduce musica en toda la ejecucion del programa
{
while(true)
{
PlayTone(100,500);
Wait(300);
PlayTone(200,500);
Wait(300);
PlayTone(300,500);
Wait(300);
PlayTone(400,500);
Wait(300);
PlayTone(500,500);
Wait(300);
PlayTone(500,500);
Wait(300);
PlayTone(400,500);
Wait(300);
PlayTone(300,500);
Wait(300);
PlayTone(200,500);
Wait(300);
PlayTone(100,500);
Wait(300);
}
}
sub MusicaAnotacion() //Reproduce musica al anotar un punto (detectar punto negro)
{
PlayTone(2000,500);
Wait(400);
PlayTone(8000,500);
Wait(400);
PlayTone(2000,500);
Wait(400);
PlayTone(8000,500);
Wait(400);
}
sub Esquivar() //Realiza un giro para esquivar obstaculos y la pared
{
OnFwd(OUT_A, 100);
OnRev(OUT_C, 100);
Wait(1);
}
sub Punts() //Calculo del puntaje ganado y total
{
t_actual= CurrentTick();
MusicaAnotacion();
tiempo=(t_actual-t_anterior)/1000;
t_anterior=t_actual;
if(tiempo <= 10)
{
Puntos=Puntos - 5*tiempo + 50;
}//Cierre if
if(tiempo > 10)
{
Puntos=Puntos+0;
}
arrayPtje[i] = Puntos;
i++;
if(Velocidad<100)
{Velocidad=Velocidad+10;}
} //Cierre if
task Actividad ()
{
while(true)
{
Avanzar();
if (SENSOR_4>SONIDO)
{
Esquivar();
}
if (SENSOR_1<UMBRAL)
{
Punts();
OnFwdReg(OUT_A,100,OUT_REGMODE_SPEED);
OnRevReg(OUT_C,100,OUT_REGMODE_SPEED);
Wait (100);
}
if(SENSOR_3==1)
{
for(r=0; r < ArrayLen(arrayPtje); r++) {
Puntos=Puntos+arrayPtje[r];
NumOut (5,20, Puntos); }
Off(OUT_AC);
Wait(4000);
StopAllTasks();
}
}
}
task Musik ()
{
Musica();
}
task MusikPunto()
{
MusicaAnotacion();
}
task TextoPantalla() // Muestra en pantalla el puntaje
{
TextOut(1,50,".-PROJECT NASA-.",false);
TextOut(1,30,"Puntaje = ",false);
NumOut (5,20, Puntos);
}
task main ()
{
t_anterior= CurrentTick();
SetSensorTouch(IN_3); // Enciende sensor tacto
SetSensorLight(IN_1); // Enciende sensor luz
SetSensorSound(IN_4); // Enciende sensor de sonido
Precedes(Actividad, Musik, TextoPantalla); //Realiza todas las tareas anteriores
if(SENSOR_1<UMBRAL)
ExitTo(MusikPunto);
}
//Proyecto Dribbler
//Grupo Project NASA
//Integrantes:
//Daniela Muñoz Muñoz
//Patricio Bello Villalobos
//Javier Herrera Huentecura
#define UMBRAL 40 // Valor que se usa para determinar el color negro de los puntos
#define SONIDO 95
int Puntos=0; //Valor usado para calcular el puntaje
int Velocidad=20; // Variable usada para controlar la velocidad
int tiempo=0; //Variable usada para el calculo del tiempo entre punto y punto
int t_actual= 0; //Variable usada para guardar el tiempo capturado
int t_anterior=0; //Variable usada para guardar el tiempo actual ya usado
int arrayPtje[]; //Arreglo puntaje
int i=0;
int r=0;
sub Avanzar() //Avanza linea recta
{
OnFwd(OUT_AC, Velocidad);
}
sub Musica() //Reproduce musica en toda la ejecucion del programa
{
while(true)
{
PlayTone(100,500);
Wait(300);
PlayTone(200,500);
Wait(300);
PlayTone(300,500);
Wait(300);
PlayTone(400,500);
Wait(300);
PlayTone(500,500);
Wait(300);
PlayTone(500,500);
Wait(300);
PlayTone(400,500);
Wait(300);
PlayTone(300,500);
Wait(300);
PlayTone(200,500);
Wait(300);
PlayTone(100,500);
Wait(300);
}
}
sub MusicaAnotacion() //Reproduce musica al anotar un punto (detectar punto negro)
{
PlayTone(2000,500);
Wait(400);
PlayTone(8000,500);
Wait(400);
PlayTone(2000,500);
Wait(400);
PlayTone(8000,500);
Wait(400);
}
sub Esquivar() //Realiza un giro para esquivar obstaculos y la pared
{
OnFwd(OUT_A, 100);
OnRev(OUT_C, 100);
Wait(1);
}
sub Punts() //Calculo del puntaje ganado y total
{
t_actual= CurrentTick();
MusicaAnotacion();
tiempo=(t_actual-t_anterior)/1000;
t_anterior=t_actual;
if(tiempo <= 10)
{
Puntos=Puntos - 5*tiempo + 50;
}//Cierre if
if(tiempo > 10)
{
Puntos=Puntos+0;
}
arrayPtje[i] = Puntos;
i++;
if(Velocidad<100)
{Velocidad=Velocidad+10;}
} //Cierre if
task Actividad ()
{
while(true)
{
Avanzar();
if (SENSOR_4>SONIDO)
{
Esquivar();
}
if (SENSOR_1<UMBRAL)
{
Punts();
OnFwdReg(OUT_A,100,OUT_REGMODE_SPEED);
OnRevReg(OUT_C,100,OUT_REGMODE_SPEED);
Wait (100);
}
if(SENSOR_3==1)
{
for(r=0; r < ArrayLen(arrayPtje); r++) {
Puntos=Puntos+arrayPtje[r];
NumOut (5,20, Puntos); }
Off(OUT_AC);
Wait(4000);
StopAllTasks();
}
}
}
task Musik ()
{
Musica();
}
task MusikPunto()
{
MusicaAnotacion();
}
task TextoPantalla() // Muestra en pantalla el puntaje
{
TextOut(1,50,".-PROJECT NASA-.",false);
TextOut(1,30,"Puntaje = ",false);
NumOut (5,20, Puntos);
}
task main ()
{
t_anterior= CurrentTick();
SetSensorTouch(IN_3); // Enciende sensor tacto
SetSensorLight(IN_1); // Enciende sensor luz
SetSensorSound(IN_4); // Enciende sensor de sonido
Precedes(Actividad, Musik, TextoPantalla); //Realiza todas las tareas anteriores
if(SENSOR_1<UMBRAL)
ExitTo(MusikPunto);
}
Reflexión:
-Este proyecto presento la utilización de cálculos matemáticos, permitiéndonos un desallorro en la competencia de ciencias de la ingeniería, por medio de dichas operaciones.-El proyecto presentaba elementos ya antes vistos y otros vistos recientemente, nos centramos en el manejo de subrutinas y Multitareas; los detalles del código fueron escasos, aunque el código se probó muchas veces, ya que fue desarrollado por parte, para tener mayor facilidad a la hora de encontrar algún error.
-En proyecto en si fue atractivo ya que utilizamos nuevos lenguajes NXC.
No hay comentarios:
Publicar un comentario