Cerro Tarima - Robotica
Autor : René Curín
Competencia : Trabajo en equipo (nivel 1)
Asignatura: Programacion de Robots
Palabras claves: NQC, Robotica, Lego, Codigo
Palabras claves: NQC, Robotica, Lego, Codigo
Descripción de la actividad
Esta actividad consistía en la programación de un robot lego
que fuera capaz de subir una maqueta de cerro, en donde el robot debía ir
girando automáticamente y seguir subiendo según como allá sido la situación en
que este se encuentre, además al llegar a la sima del el cerro debía
emitir un sonido cualquiera para verificar que efectivamente había llegado a su
destino.
Enunciado de la actividad:
El robot debe subir la tarima guiándose por el sensor de
tacto. Se utilizaran dos sensores de tacto. El sensor de tacto al ser activado permitirá
que el robot avance guiándose por la pared de la tarima. Una vez que el robot
llegue al punto final debe emitir una señal sonora y girar quedando en posición
para comenzar el descenso.
Objetivos principales
- Aprender el uso correcto de los sensores de tacto
- Emplear el uso de motores
- Generar una buena idea sobre la implementacion del sensor para que funcione correctamente
Herramientas utilizadas:
- Robot Lego NQC
- Editor de lenguaje NQC
- Maqueta de simulacion de un cerro
Desarrollo de la actividad:
Estrategia de Trabajo:
Nuestra estrategia consistió en emplear las diversas posibles dificultades que podría presentar el robot en su trayecto, como podría ser la posibilidad de que quedara estancado en las esquinas, el problema de que calce exactamente en el agujero para poder avanzar al siguiente obstáculo y para que nuestro robot pudiera seguir junto a la pared avanzando, y luego poder comenzar a programar nuestro código fuente.
Modelo de Solución:
La solución al problema fue la de programar nuestro robot para que cuando choque con el sensor 1 avance, y cuando sea 0 gire y choque nuevamente, esto quiere decir que el robot debe ir apegado a la pared, presionando el sensor para poder avanzar, ya que si suelta el sensor este debe girar hacia el lado de la pared para continuar su recorrido.
Nuestra estrategia consistió en emplear las diversas posibles dificultades que podría presentar el robot en su trayecto, como podría ser la posibilidad de que quedara estancado en las esquinas, el problema de que calce exactamente en el agujero para poder avanzar al siguiente obstáculo y para que nuestro robot pudiera seguir junto a la pared avanzando, y luego poder comenzar a programar nuestro código fuente.
Modelo de Solución:
La solución al problema fue la de programar nuestro robot para que cuando choque con el sensor 1 avance, y cuando sea 0 gire y choque nuevamente, esto quiere decir que el robot debe ir apegado a la pared, presionando el sensor para poder avanzar, ya que si suelta el sensor este debe girar hacia el lado de la pared para continuar su recorrido.
Pseudocódigo:
task main()
{
pocision_sensor(pocicion 1, sensor_choque);
pocision_sensor(pocision 3, sensor_choque);
enciende_motores(A + C, potencia 2);
avanza_motor(A+C);
task main()
{
pocision_sensor(pocicion 1, sensor_choque);
pocision_sensor(pocision 3, sensor_choque);
enciende_motores(A + C, potencia 2);
avanza_motor(A+C);
entero i es igual a 0;
while (true)
{
Si (sensor_pocision 1 en igual a 1)
{
avanza_motor(A+C);
}
Sino
Si (sensor_pocision 1 en igual a 0)
{
retrocede_motor(A+C);
por_un_tiempo(1 segundo);
avanza_motor(A+C);
por_un_tiempo(1 segundo);
while (true)
{
Si (sensor_pocision 1 en igual a 1)
{
avanza_motor(A+C);
}
Sino
Si (sensor_pocision 1 en igual a 0)
{
retrocede_motor(A+C);
por_un_tiempo(1 segundo);
avanza_motor(A+C);
por_un_tiempo(1 segundo);
i++;
}
Si (sensor_pocision 3 en igual a 1)
{
retrocede_motor(A+C);
por_un_tiempo(22 segundos);
avanza_motor(A);
}
}
Si (sensor_pocision 3 en igual a 1)
{
retrocede_motor(A+C);
por_un_tiempo(22 segundos);
avanza_motor(A);
}
Si (i es igual a 9)
{
retrocede_motor(A+C);
por_un_tiempo(1/5 segundos);
avanza_motor(A);
retrocede_motor(C);
por_un_tiempo(1 segundo);
emitir_sonido(tono,1000);
}
}
Codigo Fuente
task main()
{
SetSensor(SENSOR_1, SENSOR_TOUCH);
SetSensor(SENSOR_3, SENSOR_TOUCH);
SetPower(OUT_A+OUT_C, 1);
OnFwd(OUT_A+OUT_C);
{
SetSensor(SENSOR_1, SENSOR_TOUCH);
SetSensor(SENSOR_3, SENSOR_TOUCH);
SetPower(OUT_A+OUT_C, 1);
OnFwd(OUT_A+OUT_C);
int i=0;
while (true)
{
if (SENSOR_1 == 1)
{
OnFwd(OUT_A+OUT_C);
}
else
if (SENSOR_1==0)
{
OnRev(OUT_A+OUT_C);
Wait(100);
OnFwd(OUT_C+OUT_A);
Wait(100);
}
if (SENSOR_3 == 1)
{
OnRev(OUT_A+OUT_C);
Wait(22);
OnFwd(OUT_A);
}
while (true)
{
if (SENSOR_1 == 1)
{
OnFwd(OUT_A+OUT_C);
}
else
if (SENSOR_1==0)
{
OnRev(OUT_A+OUT_C);
Wait(100);
OnFwd(OUT_C+OUT_A);
Wait(100);
}
if (SENSOR_3 == 1)
{
OnRev(OUT_A+OUT_C);
Wait(22);
OnFwd(OUT_A);
}
if (i == 9)
{
OnRev(OUT_A+OUT_C);
wait(50);
OnRev(OUT_C);
OnFwd(OUT_A);
wait(100);
playtone(100,10000);
}
}
Video del robot funcionando:
}
}
Video del robot funcionando:
De que me sirvió esta actividad:
Este trabajo permitió
aprender el uso y funcionamiento de los sensores de tacto que tiene el Kit del
robot, además aprendí a emplear el sensor de acuerdo a varios aspectos en los
que se podrían encontrar permitiendo auto dirigir al avance del robot por el camino, u
como ultima instancia aprendí a emitir sonidos directamente del robot. Ademas como este trabajo no lo hubiera echo gracias a mi compañera de equipo Crla Moya puesto que ella fue a diseñadora de la arquitetura del robot para que los sensores pudieran funcionar correctamente.
No hay comentarios:
Publicar un comentario