domingo, 13 de noviembre de 2011

"Programación de robots con MRUA"

Autor: Jorge Henriquez Romero
Competencia: Aplica las Ciencias de la ingeniería. (Nivel 1)
Palabras claves: Física, Robot, NXT.




Descripción de la actividad
En esta actividad se trabajó en la programación de robot, implementada con aspectos de la Física.
Consistió en  programar un robot “Lego NXT” para que realizara un recorrido MRUA(movimiento rectilineo uniforme acelerado), el cual aumentaba su velocidad cada 1,5 segundos, cada vez que el sensor de luz detectara el color negro, este guardaría el tiempo que se demoró en recorrer del punto de inicio hasta el punto detectado.
Después de terminar el recorrido(debe tomar 7 puntos negros), muestra en pantalla los tiempos que demoro en llegar a cada uno de los puntos.

Solución

La solución a este problema se presenta en la siguiente pieza de código, en donde se aprecia los requisitos pedidos(aceleración, tomar solo 7 puntos, etc.).
//Aceleración cada 1,5 segundos.
long tiempo,t0,t1;     //Entero sin signo para guardar la info del timer.
int luz,i,j,pm;                  //Entero definido para guardar la info del sensor de Luz.
task main()
{
    PlayTone(5000,30);      //Emitir un sonido al inicio de la ejecución del programa.
    Wait(2000);             //Pausa de 2 segundos.
    i = 1;
    j = 1;
    SetSensorLight(IN_3);   //Definir y encender el sensor de luz, Puerto 3.
    pm = 10;
    while(j<7)
        {
        // ----------------------------------------------------------------------------------------------
        OnFwdReg(OUT_AC,pm,OUT_REGMODE_SPEED);   //Iniciar los motores con control de sincronización de velocidad.
        t0 = CurrentTick();                      //Tiempo inicial del timer antes de entrar al ciclo.
        NumOut(60,j*10,pm);
        while((t1-t0)<1500)
            {
            OnFwdReg(OUT_AC,pm,OUT_REGMODE_SPEED);   //Iniciar los motores con control de sincronización de velocidad.
            luz = Sensor(IN_3);                      //Luz recibe info del sensor de luz.
            t1 = CurrentTick();                      //Tiempo que determinará la salida del ciclo.
            if(luz < 33)
                {
                tiempo = CurrentTick();
                NumOut(10,j*10,tiempo);
                j = j+1;
                if(j==7)
                    {
                    break;
                    }
                if(pm < 40)
                    {
                    Wait(400);              //Tiempo de espera para que tome 1 dato por marca.
                    }
                else
                    {
                    Wait(50);
                    }
                }
            t1 = CurrentTick();
            if((t1-t0)>1499)
                {
                i = i+1;
                pm = 10*(i);
                }
            }
        }
    Float(OUT_AC);
    Wait(60000);
    Wait(50000);
}


En el siguiente grafico se muestra los resultados obtenido la hacer funcionar al robot. Como se puede apreciar fue un MRUA, ya que la pendiente toma una forma de curva.

Reflexión
El trabajo realizado a mis compañeros de grupo fue de mucha ayuda, ya que me permitió entender cómo funcionaban los MRUA y ponerlos en práctica por medio de la programación del robot asignado. Además estos trabajos en programación de robot ayudan promoviendo el trabajo en equipo.
Espero este material les sirva a los futuros ingenieros y por supuesto a todo el interesado en la programación de robot, a mí me ayudó mucho.



No hay comentarios:

Publicar un comentario