miércoles, 14 de diciembre de 2011

Presentacion 2 sprint (Taller de Integracion)

Autor: Rodrigo Soto Parra.
Competencia: Comunicacion oral y escrita.



Descripcion de la actividad.

El objetivo es presentar a nuestros compañeros y profesor el avance que hemos tenido desde que iniciamos el proyecto del ramo, en este sprint entregamos el objetivo de nuestro proyecto y las tareas realizadas a en la semana por cada alumno.


Fomentando informática con el uso de Robots y Futbol
Prototipo Funcional 1
Integrantes: Rodrigo Soto Parra
      • Joel Cortes Sanhueza
      • Juan Navarrete Medel
      • Patricio Riquelme Soto
      • Luis Parra Pérez (Jefe)
Fecha: 28/11/2011
Profesor Guia: Alberto Caro Saldivia




Descripción Breve del 

Proyecto.


Este Proyecto se encuentra en el contexto de las presentaciones de las carreras universitarias enfocadas en atraer chicos que egresan de la enseñanza media. 












El proyecto enfocado a la
escuela de informática de la UCT, permite que las presentaciones a los establecimientos secundarios sean más interesantes para la audiencia donde personas pueden participar.

Características 

Proyecto abarca:
Uso de micro controladores (12F675 y L293D).
Manejo de protocolo Sony.
Comunicación con Infrarrojo.

Descripción del juego :
La idea es que 2 personas con un control remoto cada una pueda manipular 2 robots para simular un mini partido de futbol en una ambientación adecuada para los robots.

Cada mini partido puede terminar cuando algún jugador meta 3 goles con un máximo de 3 minutos.


Estado
Actual






Gráfico Burn Down




Notas

Joel : 6,0

Rodrigo : 6,0

Juan : 6,0

Patricio: 6,0



Uso del tracker y exposicion (Introduccion a los sistemas de base de datos)

Autor: Rodrigo Soto Parra
Competencia: Comunicacion oral y escrita (Nivel 1)

Descripcion de la actividad.


En el presente informe se presenta la actividad de modelación de trayectorias rectilíneas de objetos móviles  través de funciones de software  como el denominado Tracker donde sobre el plano euclidiano,  una curva puede ser representado en función de los ejes x e y , en donde la obtención de dichos puntos en un experimento.
  



1) Introduccion. 

 
El desarrollo de la actividad necesita de un conocimiento  medio del manejo de Sentencias del  Software  Mysql y de Matemáticas.
Dicha actividad presentara  la combinación de la Base de Datos (Mysql) con el plano euclidiano (Tracker).El desarrollo de la actividad debe realizarse  en grupo en donde cada integrante debe ser capaz de realizar cada actividad por si solo y en conjunto con el grupo, para que de esta manera se llegue a un resultado optimo.



2. Evidenciar del uso de videos y del uso del software Tracker
Para empezar tuvimos que grabar varios videos los cuales les adjunto ahora:


después ingresamos al programa tracker el cual era bastante complicado para llegar a terminar un proyecto, para llegar a nuestro resultado los pasos son los siguientes:
1.- Tenemos que importar el archivo de video:

2.-Tubimos que hacer un plano euclidiano para ver la trayectoria de la pelota, despues entramos al menú desplegable trayectorias, nuevo, masa puntual para seleccionar y ajustarlo.

3.- Iniciamos la reproducción apretando el botón buscar.



 

 
4.- Y el resultado seria este.


5.- Aquí recuperamos los datos de X e Y que sirven para seguir con este proyecto al ingresarlo a la base de datos, ocupando el programa generaInsert


2.3) Evidenciar el diseño de la Base de Datos y las consultas, vistas y otros objetos usados para el cálculo de a,b y r2.

 







Esta es nuestra datos con los puntos en las columnas x e y.






























 
Primero calculamos el coeficiente cuadrado de a y de b.



create view b as select

((sum(x)- avg(x)) * (sum(y)-avg(y)) /

((sum(x)-avg(x))*(sum(x)-avg(x))) from datos;






  


create view b as select

(avg(y) - (avg(x) *

((sum(x)- avg(x)) * (sum(y)-avg(y))) / ((sum(x)-avg(x)) * (sum(x)-avg(x)))))

 from datos;









2.4.- Describir el desarrollo de los puntos 1.1.- a 1.4.- de la introducción.



1.1)
El coeficiente de a y b mediante los mínimos cuadrados son y = 1,1438528324x + 4,440898500


1.2)


 

















1.3)

Es asi como sacamos el coeficiente de a y b también por el medio de otra formula logramos obtener   = 0,2582672976 mediante esta formula



 
1.4)

La calidad de ajuste que dio como resultado en la recta es de un 90,4% de probabilidad de perfección puesto que  se usa para calcular la perfección de la línea de tendencia.



















2.5)Conclusión.



L a  actividad presentada en el informe se desarrollo en grupo donde a cada integrante se le indico el desarrollo de cierta parte del informe, pero la realización  de las actividades fue  en grupo, por lo mismo cada uno aporto con sus ideas para  el desarrollo completo del informe.

El uso de los programas como Mysql y Tracker ayudo de manera totalmente eficiente al desarrollo de dichas actividades por lo mismo la investigación del uso de estos software se tuvo que llevar a cabo, para que de esta manera poder trabajar  y  evidenciar el uso de estos.











viernes, 9 de diciembre de 2011

Robot cosechador NXT (Programacion de robots).

Autor: Rodrigo Soto Parra
Competencia Creatividad e inovacion.

Descripcion de la actividad.

Su equipo ha sido contratado para diseñar y construir uno de los robots de la granja. Este robot ha de sacar los duraznos de los durazneros, para que otro los pueda recolectar. Sin embargo, debe dejar los manzanos intactos, pues su fruta - aún inmadura - debe ser recolectada luego del otoño.





Estrategia de Solución



En el presente trabajo cada integrante tuvo un rol especifico, para poder llegar a un resultado satisfactorio.



Juan Reyes: Se enfoco en el área de la producción multimedia, al igual que ayudo en la creación del pseudocódigo.



Patricio Riquelme: fue el encargado de desarrollar satisfactoriamente el código del robot con el fin de que este pudiera cumplir el objetivo de cosechar los duraznos.



Rodrigo Soto: Encargado de que el trabajo se desarrollara de forma correcta y ordenada por su rol de jefe de grupo y además ayudo en la creación de el diseño del robot.



Juan Arroyo: Encargado de recopilar todos los datos más importantes para luego desarrollar y redactar el informe que se presentara para ser evaluado.



Gracias al buen  realizado en equipo, se logró realizar que el robot cumpliera su misión en forma correcta, pero ocupando diferentes estrategias de solución.



Para que nuestro robot pudiera realizar correctamente lo solicitado, se trabajo de la siguiente manera:



-      Si al llegar al árbol el robot detectaba el color blanco (con el sensor de luz), entonces este se giraba y se dirigía hacia el árbol del otro extremo ya que aun no era temporada de cosecha.

-      Si al llegar al árbol el robot detectaba el color negro (con el sensor de luz), entonces este activaba la garra para recolectar la fruta madura y así en las otras tres cosechas restantes (ya que el número de cosechas estaba delimitado en 4).

-      Al ser el numero de arboles igual a 8, el robot terminara sus funciones.




Pseudocódigo:

se establece el umbral para sensor de luz igual a 40
se establese distancia de 10cm para sensor de ultrasonido

se inicia un contador de lineas en 0;
se inicia el contador de cosecha en 0;
se inicia el contador de árboles en 0;
se define a la variable tiempo, tiempo_ini y tiempo1 para poder guardar tiempo recorrido por el robot (linea a linea);
luz, i, j se definen como variables de tipo entero para poder utilizarlos en la subrutina de buscar_linea.;
se inicia el contador salida = 0 para introducir al robot en la primera cosecha;
se inicia el contador salida2 = 0 para sacar al robot de la primera cosecha;
se inicia el contador salida3 = 0 para sacar al robot de la segunda cosecha;
se inicia el contador salida4 = 0 para sacar al robot de la tercera cosecha;
se inicia el contador salidafinal = 0 para sacar al robot de la cuarta cosecha;

se indica el uso de la subrutina buscar_linea()

{  
    se indica que i es igual a 1;
     se indica que j es igual a 1;
    mientras se cumpla (que i sea menor que 5)
    {
         luz será igual al umbral detectado por el sensor de luz;
          se ordena a los motores A y B avanzar en linea recta a una potencia de 30;
          se realiza la orden anterior durante 10 milesimas de segundo;
          si se cumple(luz menor al umbral)
          {    el contador Lineas aumentará en 1;
               si se cumple (j sea = a 1)
               {    tiempo_ini será = al tiempo en el cual el robot detecta la linea;
                    la variable tiempo será = a 0;
                    el tiempo aparecerá en el monitor del brick
                }
               si no ocurre lo anterior (else)
               {    tiempo1 será = al tiempo actual;
                    tiempo será = al tiempo1 menos el tiempo_ini;
                    y en pantalla aparecerá el contenido de lavariable tiempo;
                }
               i será = a su valor anterior más 1;
               j será = a su valor anterior más 1;
              
           }
             ejecutar orden anterior durante 10 milesimas de segundo;
       }
      girar 180º;
      retroceder durante 600 milesimas de segundo;

     }

inicia sub cosecha()
 {mientras el sensor de luz detecte la linea negra
    {
     avanzar derecho;
     mientras el sensor de ultrasonido no detecte el "árbol" a 10cm
        {avanzar derecho;
         si ocurre que ( sensor de toque se activa una vez)
            {apagar los motores A y B;
             sumar 1 a la variable arboles;
             si ocurre que (el sensor de luz es menor que el umbral)
                {La garra gira durante 1 segundo;
                 la garra se apaga;
                 }
             se realiza un giro de 100º;
             }
         }
     }
  si ocurre que ( detcta el blanco, en otras palabras no detecta linea negra) //al momento de salir del while y si detecta el blanco  dcebe avanzar a la siguiente linea.
    {el robot gira en torno a su eje; //esto hace que siga la linea negra.
     }
 }

ordenes (task main())
 {SetSensorLight(IN_2);  //se inicia sensor de luz
  SetSensorLowspeed(IN_3); //se inicia sensor de ultrasonido
  SetSensorTouch(IN_1);  //se inicia sensor de toque
  //motor izquierda en A
  //motor derecho en B
  //motor de garra en C

Buscar_linea(); //subrutina

mientras (arboles sea menor a 2)
    {se realiza Cosecha1();
     }
suma 1 a salida;

mientras (salida sea igual a 1)
    {avanza derecho;
     si ocurre que (el sensor de luz detecta linea negra)
        {suma 1 a salida; //al detectar el color negro suma salida para seguir a la siguiente subrutina
         }
     }

mientras (salida sea igual a 2, y arbles sean menores a 4) //realiza la subrutina mientras hasta que se detecten los 3-4 arboles
    {Cosecha1();
     }

suma 1 a salida;
suma 1 a salida2; //la salida2 es para poner en parcha el paso a la tercera linea

mientras (salida2 sea igual a 1)
    {avanzar derecho;
     si ocurre que (el sensor de luz detecta linea negra)
        {suma 1 a salida2;
         suma 1 a salida3;
         }
     }

mientras (salida3 sea igual a 1, y arboles sea menor que 6) //se realizara hasta que se "cosechen" los 5-6 arboles.
    {Cosecha1();
     }
suma 1 a salida3;

mientras (salida3 sea igual a 2)
    {avanzar derecho;
     si ocurre que (el sensor de luz detecta linea negra)
        {suma 1 a salida3;
         suma 1 a salida4;
         }
     }

mientras (salida4 sea igual a 1, y arboles sea menor que 8) //se realizara hasta que se "cosechen" los 7-8 arboles.
    {Cosecha1();
     }
suma 1 a salida4;

gira en torno a su eje 100º;
avanza derecho durante 1 segundo a una potencia de 100;
girar en su propio eje 180º;
se apagan los motores A y B;
 } // llave del main


Datos de fisica.


En esta grafica esta la interpretacion de nuestro robot, ya que se uso una potencia de 30 en gran parte de la actividad, es asi como queda la relacion tiempo distancia.

El tiempo que nos dara el robot en la pantalla lo usaremos en la formula que nos dio el grafico es asi como podremos saber cuanto mide la distancia entre una calle (cinta negra) a otra.


Codigo 


/*Autor:Grupo Terabytes.

   Fecha: Miercoles 22, Jueves 23 y  Viernes24 de Junio de 2011.

   Objetivos.Desarrollar un codigo en lenguaje NXC para la actividad "PROYECTO FINAL".

   */







#define UMBRAL 40          //definicion del color blanco

#define CERCA 10

int Lineas = 0;

int cosecha=0;

int arboles =0;

long tiempo, tiempo_ini,tiempo1;         //Entero largo para guardar la info del timer.

int luz,i,j;

int salida=0;

int salida2=0;                           //Definimos contadores para contralar la salida de una linea a otra

int salida3=0;

int salida4=0;

int salidafinal=0;



sub Buscar_linea()



{



    i = 1;

    j = 1;

    while (i<5)

    {

        luz = Sensor(IN_2);                      //Luz recibe info del sensor de luz.

        OnFwdReg(OUT_AB,30,OUT_REGMODE_SPEED);   //Iniciar los motores con control de velocidad.

        Wait(10);

        if(luz < UMBRAL)

        {   Lineas++;

            if(j==1)

            {

                tiempo_ini = CurrentTick();

                tiempo = 0;

                NumOut(20,i*10,tiempo);

            }

            else

            {

                tiempo1 = CurrentTick();

                tiempo = tiempo1 - tiempo_ini;

                NumOut(20,i*10,tiempo);

            }

            i = i+1;

            j = j+1;

            Wait(200);                        //Tiempo de espera para que tome 1 dato por marca.

         }

        Wait(10);

        }

          OnFwd(OUT_B,30);

         OnRev(OUT_A,30);

         Wait(2500);

         OnRev(OUT_AB,60);

         Wait(600);





         }







sub Cosecha1(){

               while(Sensor(IN_2)<UMBRAL)    //cuando este en la linea legra debe avanzar.

                    {

                    OnFwd(OUT_A,60);             //las diferencia de potencia es para que se mantenga lo mas dercho posible.

                    OnFwd(OUT_B,56);

                    while(SensorUS(IN_3)<=CERCA)  //se utiliza el while para que logre detectar y a la vez contar todos los ""arbles""

                         {

                          OnFwd(OUT_AB,65);

                          if(Sensor(IN_1)==1)         //al chocar con un Arbol debe sumar una arbol mas y apagar los motores.

                            {

                            Off(OUT_AB);

                            arboles++;

                            if(Sensor(IN_2)<UMBRAL)     //si choca con un arbol y esta posado en la linea debe "cosechra la fruta"

                              {

                              OnFwd(OUT_C,30);           //ocupar la garra en el motor c.

                              Wait(1000);

                              Off(OUT_C);

                              }                         //lalve if

                            OnFwd(OUT_A,30);            // girar si detecta o no la linea deve grira para seguir con el siguiente arbol.

                            OnRev(OUT_B,30);

                            Wait(2500);

                           }  //llave if

                         }    // llave while

                       }//llave while





                if(Sensor(IN_2)>UMBRAL)   //al momento de salir del while y si detecta el blanco  dcebe avanzar a la siguiente linea.

                   {                      //esto hace que siga la linea negra.

                    OnFwd(OUT_A,20);

                    OnRev(OUT_B,20);

                    }   //llave if.

                }  //llave subrutina.







task main(){

           SetSensorLight(IN_2);  //sensor de luz

           SetSensorLowspeed(IN_3); //sensor de ultrasonido

           SetSensorTouch(IN_1);  //sensor DELANTERO

           //motor izquierda en A

           //motor derecho en B

           //motor de garra en C





Buscar_linea();          //subrutina



while(arboles<2)      //realiza la subrutina  mhasta que alla detectado 2 arboles

     {

     Cosecha1();

     }               //llave while



salida++;          //luego de salir del while suma 1 a salida



while(salida==1)   //luego de haber detectado 2 arboles pasa a la siguiente linea

      {

      OnFwd(OUT_A,60);

      OnFwd(OUT_B,56);

      if(Sensor(IN_2)<UMBRAL)   //al detectar el color negro suma salida para seguir a la siguiente subrutina

        {

        salida++;

        }              //llave if

       }            //llave while



     

     

while(salida==2&&arboles<4)   //realiza la subrutina mientras hasta que se detecten los 3-4 arboles

     {

     Cosecha1();

     }              //llave while



salida++;

salida2++;                      //la salida2 es para poner en parcha el paso a la tercera linea



    

while(salida2==1)

     {

     OnFwd(OUT_A,60);

     OnFwd(OUT_B,56);

     if(Sensor(IN_2)<UMBRAL)   //al detectar el color negro.

       {

       salida2++;              //se suma para salir del while.

       salida3++;             //suma salida 3 para dar paso a la subrutina y cosecha de arboles.

       }               //llave if

      }             //lave while



while(salida3==1&&arboles<6)    //se realizara hasta que se "cosechen" los 5-6 arboles.

     {

     Cosecha1();

     }              //llave while

salida3++;                     //suma para dar ejecutar el paso de la tercera linea hacia la cuarta.



while(salida3==2)

     {

     OnFwd(OUT_A,60);

     OnFwd(OUT_B,56);

     if(Sensor(IN_2)<UMBRAL)

       {

       salida3++ ;

       salida4++;            //suma salida4 para ejecutar la ultima cosecha de los "arboles"

       }                      //llave if

     }                             //llave while



while(salida4==1&&arboles<8)

     {

     Cosecha1();

     }                          //llave while

salida4++;



OnFwd(OUT_A,30);              //giro en 180°.

OnRev(OUT_B,30);

 Wait(2000);

OnFwd(OUT_AB,100);             //avanza hasta la mitad de lalinea

  Wait(1000);

OnFwd(OUT_A,80);                //un giro

OnRev(OUT_B,70);

  Wait(1000);

Off(OUT_AB);                    //fin de las acciones.







Video de la actividad.



Conclusion


Con este trabajo logramos de forma satisfactoria llevar a la práctica el problema planteado, gracias a  los conocimientos adquiridos durante el semestre;  ya que este  problema era de alta complejidad, y para llevarlo a cabo necesitábamos de todos los conocimientos aplicados en trabajos anteriores.



Para el grupo en general ha sido una experiencia muy positiva, haber tenido la posibilidad de haber experimentado las distintas funciones que puede desarrollar un robot para el beneficio nuestro.



Logramos ocupar de manera correcta los comandos necesarios para que el robot funcionara sin problemas y pudiera cumplir el objetivo, el cual nos servirá para estar preparados para poder enfrentar sin mayor dificultad la propuesta que se nos viene en el próximo semestre.