domingo, 13 de noviembre de 2011

Actividad #1 Proyecto Robotica



Grupo: Los Compadres
Competencia: Desarrollo de Software(nivel 1)
Palabras clave: Lego, NXC
Curso: Proyecto Robotica


Integrantes:Gonzalo Cartes ( Jefe de grupo).
Juan pablo Riquelme ( Secretario).
Alamiro Solis ( Prod. Multimedia).
Camilo Rivas ( staff de apoyo).

Introducción:

Modelo de la solución:
Lo que se pretende en este trabajo, es dar solución a dos problemas. Cada problemática requerirá de la utilización de un sensor específico. Se efectuarán dos tareas. EL primer programa deberá lograr que el robot recorra una linea negra. El segundo programa se encargará de que en el momento en que se activen los sensores de tacto, el robot deba realizar unos retrocesos y giros específicos.
Como primer objetivo se planteo una buena distribución de cargos, para posteriormente estructurar nuestro robot acorde a lo solicitado.
Será interesante la utilización de un nuevo lenguaje de programación llamado RCX, el cual resultaba completamente desconocido, pero el hecho de ser muy parecido al lenguaje NXT al que nos habíamos familiarizado, evitó que existieran mayores complicaciones.

Estrategia de trabajo:
Durante la semana de trabajo, en esta actividad procedimos de la siguiente manera. El staff de apoyo se preocupó de retirar los robots de trabajo de los estantes y ubicarlos en una mesa de trabajo. Posteriormente, se probaron las pilas, analizando si era necesario un recambio de las mismas.El staff de apoyo y productor multimedia se encargan de modificar el robot para dar una estructura adecuada, y así se desenvuelva de la mejor manera posible en su misión. Como la actividad consiste en realizar dos programas, se acuerdan modelos simples.

Respecto a la programación, el secretario y jefe de grupo comienzan a realizar el programa, surgen algunas complicaciones pero finalmente son solucionadas. Luego el staff de apoyo y productor multimedia se suman al equipo de programación para reforzar algunas debilidades que pudieran tener los otros integrantes.

Ambos programas coinciden en su modelo, exceptuando sensores. Podemos destacar que el robot utiliza un modelo de oruga, el cual utiliza dos motores.

Para el primer programa se usa un sensor de luz. El sensor de luz nos ayudará a que el robot , reconozca la linea negra que simulará ser el camino.

En el segundo programa, se usan dos sensores de tacto, los cuales en caso de chocar, harían que el robot realice una determinada función. Estos sensores indicarán al robot que en caso de chocar con el lado derecho, este deberá retroceder y girar hacia la izquierda, y en caso de chocar con el sensor del lado izquierdo, el robot deberá retroceder y girar hacia el lado derecho. De chocar los dos sensores al mismo tiempo, se le indicará al robot que retroceda y gire en 180°.


Código Actividad:

Código sensor de Luz:

#define umbral 45 //definir umbral en 45
task main()
{ //comienzo de la tarea main
SetSensor(SENSOR_2, SENSOR_LIGHT);
//definir el sensor 2 como sensor de luz
SetPower(OUT_A, 2); //modificar la velocidad del motor a
SetPower(OUT_C, 2); //modificar la velocidad del motor c
OnFwd(OUT_A+OUT_C); //motor a y c avanzan

while(true)

{
//comienzo del bucle infito while

if(SENSOR_2 >= umbral)
{ //comienzo de la condificion if
OnRev(OUT_A+OUT_C); tipsWait(10); //motor a y c retroceden por 10 tips
OnFwd(OUT_A); //motor a avanza
OnRev(OUT_C); Wait(40); // motor c retrocede por 40 tips
if(SENSOR_2 >= umbral)
{
// definición de la condición if
OnRev(OUT_A+OUT_C); Wait(10); //motor a y c retrocede
OnFwd(OUT_C); //motor c avanza
OnRev(OUT_A); Wait(100); //motor a retocede 100 tips
} //termino de la condicion if 1
} //termino de la condición if 2
else
{ // comienzo de la condicion else
OnFwd(OUT_A+OUT_C); Wait(5); //motor a y c avanzan 5 tips
}// temrino del else
}//termino del bucle while
}//termino de la tarea main y fin del programa




Codigo sensor de tacto:

task main()
{ //Comienzo de la tarea main
SetSensor(SENSOR_1,SENSOR_TOUCH); // definir el sensor 1 como sensor de tacto
SetSensor(SENSOR_3,SENSOR_TOUCH); // definir el sensor 3 como sensor de tacto
start choque; //definir nombre de tarea
start moverse; //definir nombre de tarea
task moverse()
{ //comienzo de la tarea de movimiento
while(true)
{
// comienzo del bucle infinito while
OnFwd(OUT_A+OUT_C); //motor a y c avanzan
} //termino del bulce while
} //termino de la tarea de movimiento
task choque()
{
//comienzo de la tarea de choque
while(true)
{
//comienzo del bucle infinito while
if (SENSOR_1 == 1)
{
//comienzo de la condicion if
stop moverse; // pausa de la tarea de movimiento
OnRev(OUT_A+OUT_C); Wait(50); //motor a y c retroceden por 50 tips
OnFwd(OUT_A); Wait(85); //motor a avanza por 85 tips
start moverse; //reanudar la tarea de movimiento
} //termino de la condicion if


if (SENSOR_3 == 1)
{
//comienzo de la condicion if
stop moverse; // pausa de la tarea de movimiento
OnRev(OUT_A+OUT_C); Wait(50); //motor a y c retroceden por 50 tips
OnFwd(OUT_C); Wait(85); //motor c avanza por 85 tips
start moverse; // reanudar la tarea de movimiento
} //termino de la condicion if
if(SENSOR_1 == 1 && SENSOR_3 == 1)
{ //comienzo de la condicion if
stop moverse; //pausa de la tarea de movimiento
OnRev(OUT_A+OUT_C); Wait(50); //motor a y c retroceden por 50 tips
OnFwd(OUT_C); Wait(170); //motor c avanza por 170 tips
start moverse; //reanudar la tarea de movimiento
} // termino de la condición if
} //termino del bucle while
} //termino de la tarea choque
}// termino de la tarea main y fin del programa



Video Sensor de Tacto








Video Sensor de Luz



La solución alcanzada para el programa del sensor de tacto:

Si la comparamos con el programa del sensor de luz, fue mucho más eficiente, porque el robot realizó todo lo que se pedía, ya que en este caso no había muchos factores los cuales afectaban al funcionamiento correcto del programa. Quizás una de las cosas que más costó aunque no habían factores que influyeran, fue que a la hora de la práctica, nuestro robot tocara con los dos sensores y ejecutar la acción que debía, la cual era distinta a cuando tocaba un solo sensor.

Conclusión 

Luego de haber realizado esta actividad, debemos decir que estamos gratamente sorprendidos por los resultados conseguidos en la tarea. Lo que más nos satisface, es el hecho de haber implementado un nuevo lenguaje de programación, el cual pensábamos sería más complicado o muy diferente al lenguaje aplicado en las actividades del semestre pasado. 

Específicamente, el lenguaje NXT y RCX, por lo que hemos podido apreciar hasta el momento, se diferencian principalmente en la sentencia para activar sensores, o la forma de regular la potencia de los motores. Este nuevo lenguaje, nos ha servido para ejercitar la mente y ampliar nuestros conocimientos.

Lamentablemente la parte física del robot nos jugó en contra, ya que al ser un poco antiguos, nos encontramos con diversos sensores que no funcionaban, en especial los sensores de luz.




No hay comentarios:

Publicar un comentario