lunes, 10 de octubre de 2011

Robot Patrulla

Autor: Martin Berkhoff
Competencia: Desarrollo de software.




Descripcion de la Actividad 
Bueno compañeros aqui les traje nuevamente un proyecto de robotica, "el robot patrulla" .
Nuestro proyecto consiste en elaborar un robot en NXT, para hacer la simulación de un robot patrullero. Que debe cumplir con una ruta establecida y ser capaz de recrear todas las órdenes dadas por medio de la programación.




Solucion: Estrategia de solución:
Para poder lograr el término de éste proyecto el primer paso fue definir bien los roles entre los integrantes del grupo para así ocupar al cien por ciento el tiempo de laboratorio.


El pseudocódigo usado es el siguiente:




Pseudocódigo



#Se define las variables de umbral en 40.

#Se Define la variable de umbral de

#Se define la variable cerca que es la que usa el sensor de ultra sonido.

#Se le da un alias a la variable de activación del sensor de sonido.

#Se define el tiempo de giro.

#Se define tiempo de movimiento.

Sonido en 50.

Primera sub rutina avanzar ()

Avanza hacia adelante con los dos motores prendidos;

Si encuentra algo blanco ()

{

Acelera un poco el motor del lado externo de la pista;

}

Segunda sub rutina encargada de contar sonidos y ver acumuladores de alerta()

Contamos el sonido inusual;

A la energía se le descontara un valor random;

Al nivel de alerta se le sumara un valor random;

Se apagara los 2 motor Esperar un tiempo corto;

Tocará un pequeño ruido;

Enseña por pantalla los valores y los textos de;

Energía;

Nivel de alerta;

Contador de sonido;

Tercera sub rutina la de actualizar valores de energía.

Contamos el sonido inusual;

A la energía se le descontara un valor random;

Al nivel de alerta se le sumara un valor random;

Enseña por pantalla los valores y los textos de:

Energía;

Nivel de alerta;

Contador de sonido;

Cuarta sub rutina Modo de Ataque.

Avanza hacia adelante con potencia cien por ciento;

Durante 1 segundo;

Retrocede con la potencia máxima;

Durante 1 segundo;

Se inicia tarea patrullero ()

Declaramos los 3 tipos de sensores que usaremos

Mientras el nivel de alerta es menor a lo pedido ().

{

Llamamos a la sub rutina avanzar;

Si detecta un sonido fuera de lo común ().

{
Llamamos a la segunda sub rutina;
{{

Luego el robot debe girar 90° hacia adentro del circulo mientras la energía;

El robot girar en su eje;

Sea mayor que 0 ();

Si detecta un sonido fuera de lo común() ;

}}
Llamamos a la tercera subrutina()
{
{
Luego de que la energía sea menos que cero será siempre cierto que;
{
Si encuentra algo a menos de 10 cm ()
{
Llamamos a la cuarta sub rutina modo de ataque;
}
}

El Código es el siguiente:

#define CERCA 10 // cm

#define UMBRAL 40

#define UMBRAL_SONIDO 40

#define MIC SENSOR_2

#define TIEMPO_GIRO 850

#define TIEMPO_MOVIMIENTO 800

int energia = 500 ;

int nivel_alerta =0;

int contador=0;

sub avanzar()

{
     OnFwd(OUT_AC, 50);

     if (SENSOR_1 > UMBRAL)

{
    OnFwd(OUT_C, 70);

    Wait(180);
}

}
     sub contador_sonido_disminucion_energia_acumulador_alerta()

{
    contador++;

    energia =energia - Random(11)-50; // valor random

    nivel_alerta=nivel_alerta + Random (31)+20; // acumula alerta

    Off(OUT_AC);

    Wait(300);

    PlayTone(4000,50); // toca sonido

   Wait(500);

   ClearScreen();

   TextOut(0,50,"Intento de robo"); // muestra texto en pantalla

   NumOut(0,60,contador); // muestra numeros en pantalla

   TextOut(0,20,"Energia");

   NumOut(0,30,energia);

   TextOut(0,35,"Nivel de alerta");

   NumOut(0,45,nivel_alerta);

}
   sub actualizar_energia()
{
   contador++;

   energia =energia - Random(11)-50

   nivel_alerta=nivel_alerta + Random (31)+20;

    ClearScreen();

    TextOut(0,20,"Energia");

    NumOut (0,30,energia);

    TextOut(0,35,"Nivel de alerta");

    NumOut (0,45,nivel_alerta);

   Off (OUT_AC);
}
  sub ataque_final()
{
     OnFwd(OUT_AC, 100);

    Wait(1000);

    OnRev(OUT_AC, 100);

    Wait(1000);

    Off (OUT_AC);

    Wait(500);

    OnFwd(OUT_A,45) ;

    OnRev(OUT_C,45);

   Wait(500);

   OnFwd(OUT_C,45) ;

   OnRev(OUT_A,45);

   Wait(1000);

   OnFwd(OUT_A,45);

  OnRev(OUT_C,45);

  Wait (500);

  Off(OUT_AC);
}
task main ()
{
     SetSensorLight(IN_1);

    SetSensorSound(IN_2);

   SetSensorLowspeed(IN_3);

  while( nivel_alerta < 100) //MODO PATRULLA!!!
{
  avanzar();

  if (SENSOR_2 > UMBRAL_SONIDO)
{
    contador_sonido_disminucion_energia_acumulador_alerta();
}
}
   Off(OUT_AC); // aqui entra hacia el centro del circulo

   Wait(500);

   OnFwd(OUT_C,75);

  Wait(TIEMPO_GIRO);

  OnFwd(OUT_AC,50);

  Wait(TIEMPO_MOVIMIENTO);

  while(energia > 0) // MODO GUARDIAN!!!
{
   OnRev(OUT_C,50);

   OnFwd(OUT_A,50);

  if (MIC > UMBRAL_SONIDO)
{
   actualizar_energia();
}
}
    while(true) // MODO ATAQUE
{
   if(SensorUS(IN_3)<CERCA)
{
    ataque_final();
}
}
}

A modo de refelexion en este proyecto pusimos  a prueba varias cosas como lo fueron el trabajo en equipo la organizacion y las multiples habilidades en la programacion de el robot, la creacion de sub rutinas claras.
La  programacion no fue nada de sensilla en ese entonces aplicamos todos los conocimientos mas las guias y tutoriales encontrados en la web.

No hay comentarios:

Publicar un comentario