lunes, 14 de noviembre de 2011

Proyecto N°1 "Dribbler""


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.

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).
-Los Motoresen 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);
}
  

//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);

}

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