lunes, 14 de noviembre de 2011

"Probabilidad"

Autor: Jorge Henriquez Romero
Competencia: Aplica las Ciencias de la ingeniería.(Nivel 1)
Palabras claves: Probabilidad, M y A de sistema.


Descripción de la actividad
La actividad se trataba de aprender sobre probabilidades básicas para posteriormente aplicarlas en el ramo de M y A de sistemas.
Se logró aprender todo lo básico de como calcular las probabilidades de que ocurra algún suceso y sobre los conceptos de las probabilidades.
Despues de tres clases de probabilidad se realizo una prueba de la materia, para medir nuestros conocimientos.

Solución
Los conceptos utilizados para poder desarrollar los ejercicios fueron los siguientes:
Def1: Un experimento es aleatorio cuando no es posible predecir el resultado aunque se realice en las mismas condiciones.
    Ejemplo 1: E1: Lanzar un dado y esperar la cara que muestre.
                        E2: lanzar 3 monedas al aire y observar la secuencia de ser cara o sello.
Def2: Al conjunto de todos los resultados posibles de un experimento aleatorio se denomina espacio muestral.
   Ejemplo 2: espacio muestral1 : {1, 2, 3, 4, 5, 6}
                       Espacio muestral2: {ccc,ccs,csc,sss,ssc,scc,scs}

Def3: Un evento es cualquier subconjunto del espacio muestral.
   Ejemplo3: para el espacio muestral1 tenemos los pares A={2,4,6}
                     Para el espacio muestral2 tenemos las iguales B={sss,ccc}

Regla de la adición
La regla de la adición o regla de la suma establece que la probabilidad de ocurrencia de cualquier evento en particular es igual a la suma de las probabilidades individuales, si es que los eventos son mutuamente excluyentes, es decir, que dos no pueden ocurrir al mismo tiempo.
P(A o B) = P(A) U P(B) = P(A) + P(B) si A y B son mutuamente excluyente. P(A o B) = P(A) + P(B) − P(A y B) si A y B son no excluyentes. Siendo: P(A) = probabilidad de ocurrencia del evento A. P(B) = probabilidad de ocurrencia del evento B. P(A y B) = probabilidad de ocurrencia simultanea de los eventos A y B.
Regla de la multiplicación
La regla de la multiplicación establece que la probabilidad de ocurrencia de dos o más eventos estadisticamente independientes es igual al producto de sus probabilidades individuales.
P(A y B) = P(A B) = P(A)P(B) si A y B son independientes. P(A y B) = P(A B) = P(A)P(B|A) si A y B son dependientes
Reflexión
Esta materia me ayudó mucho a entender como calcular una probabilidad, además de ayudarme en la materia que seguía en M y A de sistemas, ya que era imprescindible aprenderlo.
Espero esta materia les ayude a los futuros ingenieros.

"Robot Cosechadora"

Autor: Jorge Henriquez Romero
Competencia: Gestión en TI. (Nivel 1)
Palabras claves: NXT, programacion, Robot, Lego.




Descripción de la actividad
Esta actividad fue propuesta por los profesores de programación de robot, y les daré a conocer los detalles de tal actividad.
La actividad consistia en utilizar un robot lego NXT que debía simular a un robot
cosechador el cual debia partir sobre un punto especifico y recorrer todo el
campo hasta su extremo, mientras recorre la superficie este tiene que registrar
los tiempos que recorre en cada linea, luego debe reconocer la linea negra y
guiarse hasta cada caja y reconocer si en el borde es negro si es asi botara
una manzana(cubo negro) y de no ser asi osea blanco seguira su camino hasta
recorrer toda la superficie.

Solución
Fue muy difícil llegar a la solución del problema, ya que había que calibrar muy bien al robot para que lograra el objetivo esperado. El codigo y pseudocodigo que les mostrare nos da la solucion.
pseudocodigo:
Definición variables y el umbral para el sensor de luz;
creamos subrutinas;
      sub avanzar()
      {
            avanzar el linea recta con velocidad 40;
            en un tiempo de 2 segundo;
      }
      sub regresar();
      {
            realiza un giro de 180°;
      while(true){
            avanza en linea recta con velocidad 40;
            si(sensor de luz supera el umbral de negro)
                  {
                  realiza un giro de 90°;
                  y se quiebra el while;

                  }            }
      }
      sub escanear()
      {
            entramos en un while donde el contador es menor a 4(){
                  avanza en linea recta con velocidad 40;
                  si(sensor de luz supera umbral)
                  {
                  guarda el tiempo;
                  contador++;
                  }
      }
      sub guiarse()
      {
            Si(sensor de luz supera umbral)
            {
            gira 90°
            entra a un while(true){
                  si(sensor supera el umbral)
                  {
                  avanza lento desviandose hacia la derecha;
                  }
                  else
                  se desvia hacia la izquierda;
                  si(sensor de tacto es tocado)
                  {
                  se rompe el while;
                  }
sub botar()
{
      si(sensor de luz supera el umbral)
      {
      el motor A(herramienta cosecha) gira 180°;
      motor A regresa a su posición;
      robot retrocede por medio segundo;
      gira 180°;
      }
      sino
      {
      retrocede por medio segundo;
      gira 180°;
      }
}
sub volver()
{

      while(true)
      {
      si(sensor supera umbral)
      {
      avanza desviandose hacia la derecha;
      }
      sino
      se desvia hacia la izquierda;
      si(sensor de tacto es presionado)
      {
      se quiebra el while;
      }
      }
}
sub alinear()
{
      while(true)
      {
      girar 90°;

      avanzar en linea recta;
      si(sensor luz supera el umbral)
      {
            se quiebra el while;
      }
}
task main()
{
Se enciende robot;

se declaran sensores;
se realiza la subrutina escanear();
regresar();
entra en un while donde contador va a ser menor a 8{
      guiarse();

      botar();
      contador++;
      volver();
      botar();
      contador++;
      avanzar();
      alinear();
      }
}


Codigo:




//subrutinas
sub avanzar()
{
  OnFwdReg(OUT_BC,40,OUT_REGMODE_SPEED);
  Wait(800);
  OnRev(OUT_B,40);
  OnFwd(OUT_C,40);
  Wait(990);

while(true){
                  OnFwdReg(OUT_BC,40,OUT_REGMODE_SPEED);
            if(Sensor(IN_3)<negro)
               {
               OnFwd(OUT_B,40);
               OnRev(OUT_C,40);
               Wait(800);
               break;
               }
         }
}

sub regresar()
{
    OnFwd(OUT_B,40);
            OnRev(OUT_C,40);
            Wait(1980);
   //       OnRevReg(OUT_BC,40,OUT_REGMODE_SPEED);
   //       Wait(800);
    while(true){
            OnFwdReg(OUT_BC,40,OUT_REGMODE_SPEED);
            if(Sensor(IN_3)<negro)
               {
               OnFwd(OUT_B,40);
               OnRev(OUT_C,40);
               Wait(800);
               break;
               }
         }
}

sub escanear()
{
     while(cont<4)
        {
        OnFwdReg(OUT_BC,40,OUT_REGMODE_SPEED);
        t0 = CurrentTick();
        NumOut(60,cont*10,40);
        while((t1-t0)<1500)
             {
             OnFwdReg(OUT_BC,40,OUT_REGMODE_SPEED);
             luz = Sensor(IN_3);
             t1 = CurrentTick();
                if(luz <50)
                {
                   tiempo = CurrentTick();
                   NumOut(10,cont*10,tiempo);   //pantalla
                   cont = cont+1;      //cuenta 1 mas
                if(cont==7)
                    {
                   break;
                    }
                if(pm < 40)
                    {
                    Wait(400);
                    }
                else
                    {
                    Wait(50);
                    }
                }
                t1 = CurrentTick();
                if((t1-t0)>1499)
                {
                conta = conta+1;
                pm = 10*(conta);
                }
          }
        }
      }

sub guiarse()
{
    while(true)
    {
      if(Sensor(IN_3)<negro)
      {
            OnFwd(OUT_B,25);
            OnFwd(OUT_C,10);
        }
        if(Sensor(IN_3)>negro)
        {
            OnFwd(OUT_B,10);
            OnFwd(OUT_C,25);
        }
        if(Sensor(IN_1)==1)
        {
        break;
        }
    }
}

sub botar()                                          //bien
{
     if(Sensor(IN_3)<negro)
     {
         Off(OUT_BC);
         OnRev(OUT_A,20);
         Wait(1500);
         OnFwd(OUT_A,20);
         Wait(1600);
         Off(OUT_A);
         OnRev(OUT_BC,50);
         Wait(500);
         OnFwd(OUT_B,40);
         OnRev(OUT_C,40);
         Wait(1980);
        Off(OUT_BC);
     }
     else
     {
     OnRev(OUT_BC,50);
     Wait(500);
     OnFwd(OUT_B,40);
     OnRev(OUT_C,40);
     Wait(1980);
     Off(OUT_BC);
     }
}

sub volver()
{
  while(true)
    {
      if(Sensor(IN_3)<negro)
      {
            OnFwd(OUT_B,12);
            OnFwd(OUT_C,30);
        }
        else
        {
            OnFwd(OUT_B,30);
            OnFwd(OUT_C,12);
        }
        if(Sensor(IN_1)==1)
        {
        break;
        }
    }
}

task main()
{
  SetSensorTouch(IN_1);
  SetSensorLight(IN_3);

escanear();
regresar();
while (conta<16)
    {
  guiarse();
            botar();
            conta++;
            volver();
            botar();
            conta++;
            avanzar();
}}

Fotos:



Video de la actividad:



Refexiones
Este trabajo final fue muy provechoso para cada uno de los integrantes del grupo, ya que puso a prueba nuestras habilidades en física y  de programación de robots lego NXT, demostrándonos que no es sencillo programar robots, incluso los lego, nunca se termina de aprender algo nuevo que se le pueda integrar a un código cualquiera y además que siempre se puede hacer algo mejor de lo que ya está hecho.
Espero les ayude la materia de este blog, a mí me presto una gran ayuda.