lunes, 14 de noviembre de 2011

Robot Patrulla

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


#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 



Laboratorio de Programacion

Autor: Rodrigo Bermedo
Competencia: Aplica ciencias de la ingenieria
Palabras Claves: Java, NetBeans, programacion


Descrpcion de la Actividad

este laboratorio consistia simplemente en pedir al usuario que ingresara un numero cualquiera y que luego ingresar un digito que quisiera borrar del numero anteriormente ingresado. esta actividad si es manejada con String no presenta mucha dificultad debido a que la clase String posee muchos metodo para realizar diferentes funicones como calcular el largo de una cadena etc, pero esta actividad se realizaba solamente con variables de tipo INT lo que difucltaba un poco las cosas sobre todo en lo que se refiere a saber cuantos digitos posee el numero ingresado.
 
 
Entrada:

Tipo: Int.
Cantidad: 2
Restricciones: Entero Positivo, hasta máxima capacidad de Integer, En la segunda entrada un entero entre 0 y 9.


Salida:

Tipo: Int.
Cantidad: 1
Restricciones: Entero positivo, hasta máxima capacidad de Integer.


Generalización:

Declaración de variables int
Numero, numero2, numeroBorrar, largo, división, modulo, suma, suma2, exponente.
Como ejemplo
Numero = 1234
NumeroBorrar = 4
Numero2 = numero

Mientras (división sea mayor que 0)        /* este ciclo es para determinar el largo
{  división= numero/10                              * de la variable numero*/
  Numero = división
  Largo +1 }

Transcurrido este ciclo la variable largo tendría valor 4

Mientras (largo sea mayor que 0)                       /*en este ciclo se realiza el
 {  modulo = numero2%10                                    *proceso para identificar los
    numero2 = numero2/10                                    *números a borrar*/
       si(modulo es distinto a numeroBorrar)
             {
                 suma = modulo * 10^exponente
                 suma2 =suma2+suma
                 exponente  +1
             }
             Largo -1
}
Terminado este ciclo la variable suma2 tiene el valor del numero sin los dígitos borrados en este caso suma2 = 123
  
 
Codigo Fuente

import java.util.*;

public class BorrarNumero
{
    public static void main(String[] args)
    {
       int numero;
       int numeroBorrar;
       int largo=0;
       int division=1;
       int numero2;
       int modulo;
       int suma=0;
       int suma2=0;
       int exponente =0;
     
       Scanner leer = new Scanner(System.in);
       System.out.println("ingrese un numero");
       numero = leer.nextInt();
      
       System.out.println("ingrese el numero que desea borrar");
       numeroBorrar = leer.nextInt();
       numero2=numero;
      
       while(division>0)//ciclo que obtiene el largo del numero.
       {
           division=numero/10;
           numero=division;
           largo++;
       }//fin del while.
      
       while(largo>0)//ciclo que hace el proceso de sacar cada numero.
       {
           modulo=numero2%10;
           numero2 = numero2/10;
          
          
           if(modulo != numeroBorrar)
           {
               suma = (int) (modulo*(Math.pow(10, exponente)));
               suma2 =suma2+suma;
               exponente++;

           }//fin del if.
           largo--;
          
       }//fin del while.
      
       System.out.println("numero resultante: "+suma2);
   }//fin del main.
}//fin.


Capturas de pantalla