Autor: Rodrigo Bermedo
Competencia:Gestion de TI
Palabras Claves: NXT, NXC, Lego, Programacion
Descripcion de la Actividad
Actividad número 4, en la cual se nos otorgo la misión de programar un robot patrullero, el que debía ser capaz de recorrer una ruta ya establecida alrededor de una casa que está vigilando, ya que no se cuenta con un robot y una casa para realizar una prueba real, realizamos la simulación de esta con nuestro robot NXT en la pista de pruebas , donde obtuvimos excelentes resultados, los cuales daremos a conocer en este trabajo al igual que la forma en que desempañamos la actividad.
Pseudocodigo
Codigo Fuente
#define UMBRAL 40
#define SONIDO 80
#define DISTANCIA 10
Potencia=60;
Robos=0;
Alerta=0;
Alerta2;
Energia=500;
Energia_usada;
El funcionamiento del robot pasara por 3 estados(subrutinas):
MODO PATRULLA
{Mientras (Detecte el color negro)
{ avanzar ;
Si (el sensor de luz detecta el color blanco)
{ Hacer un pequeño giro para volver a la ruta;}
Si (el sensor de sonido registra un ruido)
{Detenerse;
Emitir una sirena;
Sumar 1 a la cantidad de robos;
Mostrar en pantalla los intentos de robo;
Mostrar en pantalla el nivel de alerta después de cada
ruido detectado;
Mostrar en pantalla la energía restante después de cada
ruido detectado;}
}
}
MODO GUARDIAN
{ Si ( el nivel de alerta es mayor igual a 100)
{hacer un pequeño giro;
Avanzar;
Mientras ( la energía sea mayor a 0)
{ girar a una velocidad media;
Si (el sensor de sonido detecta un ruido)
{Emitir sirena;
Sumar 1 a la cantidad de robos;
Mostrar en pantalla los intentos de robo;
Mostrar en pantalla el nivel de alerta después de
cada ruido detectado (sumara un valor al azar
entre 20 y 50);
Mostrar en pantalla la energía restante después de
cada ruido detectado (decrecerá en un numero al
azar entre 50 y 60;}
}
}
}
MODO ATAQUE
{Mientras (la energía sea menor o igual a 0)
{Apagar motores;
Si (el sensor de ultrasonido es menor o igual a 10 cm)
{Avanzar a velocidad máxima;
Durante 1 segundo;
Retroceder;
Durante 1 segundo;
Mostrar en pantalla los intentos de robo;
Mostrar en pantalla el nivel de alerta después de
cada ruido detectado;
Mostrar en pantalla la energía restante después de
cada ruido detectado;}
}
}
COMIENZA EL FUNCIONAMIENTO DE NUESTRO ROBOT ()
{Activa sensor de luz;
Activar sensor de sonido;
Activar sensor de ultrasonido;
Hacer llamada a la subrutina MODO PATRULLA;
Hacer llamada a la subrutina MODO GUARDIAN;
Hacer llamada a la subrutina MODO ATAQUE;
}
Codigo Fuente
#define UMBRAL 40
#define SONIDO 80
#define DISTANCIA 10
int Potencia=60;
int Robos=0;
int Alerta=0;
int Alerta2;
int Energia=500;
int Energia_usada;
sub MODO_PATRULLA()
{
while (Sensor(IN_4)<UMBRAL)
{
OnFwd(OUT_C,55);
OnFwd(OUT_B,Potencia);
if (Sensor(IN_4) > UMBRAL)
{
OnFwd(OUT_B, Potencia);
OnRev(OUT_C,55);
}
if(Sensor(IN_2)> SONIDO)
{
Off(OUT_BC);
PlayTone(865,500);
Wait(400) ;
PlayTone(100,500);
Wait(400) ;
PlayTone(865,500);
Wait(400) ;
PlayTone(100,500);
Wait(400) ;
PlayTone(100,500);
Wait(400) ;
OnFwd (OUT_BC,Potencia);
Robos++;
TextOut(0,65,"Intentos de robos:");
NumOut(0,55,Robos);
Alerta2=Random(31)+20;
Alerta=Alerta+Alerta2;
TextOut(0,45,"nivel de Alarma:");
NumOut(0,35,Alerta);
Energia_usada=Random(11)+50;
Energia=Energia-Energia_usada;
TextOut(0,25,"Energia restante:");
NumOut(0,15,Energia);
}
}
}
sub MODO_GUARDIAN()
{
if(Alerta>=100)
{
OnFwd(OUT_B,Potencia);
OnRev(OUT_C,Potencia);
Wait(250);
OnFwd(OUT_BC,Potencia);
Wait(800);
while(Energia>0)
{
OnFwd(OUT_B,50);
OnRev(OUT_C,50);
if(Sensor(IN_2)> SONIDO)
{
PlayTone(865,500);
Wait(400) ;
PlayTone(100,500);
Wait(400) ;
PlayTone(865,500);
Wait(400) ;
PlayTone(100,500);
Wait(400) ;
PlayTone(100,500);
Wait(400) ;
Robos++;
TextOut(0,65,"Intentos de robo:");
NumOut(0,55,Robos);
Alerta2=Random(31)+20;
Alerta=Alerta+Alerta2;
TextOut(0,45,"Nivel de alarma:");
NumOut(0,35,Alerta);
Energia_usada=Random(11)+50;
Energia=Energia-Energia_usada;
TextOut(0,25,"Energia restante:");
NumOut(0,15,Energia);
}
}
}
}
sub MODO_ATAQUE ()
{
while (Energia <= 0)
{
Off (OUT_BC);
if(SensorUS(IN_3)<= DISTANCIA)
{
OnFwd(OUT_BC,100);
Wait(1000);
OnRev(OUT_BC,100);
Wait(1000);
Robos++;
TextOut(0,65,"Intentos de robos:");
NumOut(0,55,Robos);
Alerta2=Random(31)+20;
Alerta=Alerta+Alerta2;
TextOut(0,45,"Nivel de Alarma:");
NumOut(0,35,Alerta);
Energia_usada=Random(11)+50;
Energia=Energia-Energia_usada;
TextOut(0,25,"Energia restante:");
NumOut(0,15,Energia);
}
}
}
task main()
{
SetSensorSound(IN_2);
SetSensorLight(IN_4);
SetSensorLowspeed(IN_3);
MODO_PATRULLA();
MODO_GUARDIAN() ;
MODO_ATAQUE() ;
}
Video de la Actividad
