domingo, 9 de septiembre de 2007

Código NXC de robot siguelineas II

El robot que veíamos en el primer ejemplo sólo podía girar en un sentido, ya que según la programación realizada, cuando pierde la línea tuerce siempre hacia el mismo sitio para buscarla, siendo incapaz de torcer hacie el otro lado. Veamos ahora un ejemplo, que aunque a una velocidad inferior al primer robot, es capaz de girar para cualquier lado. El funcionamiento es el siguiente, giramos una de las ruedas (torcemos hacia un lado) mientras no veamos la línea, en cuanto la veamos giramos la rueda contraria (torcemos hacia el otro lado).

Aquí el código:

#include "NXCDefs.h"
#define MARGEN 50
//programa para seguir una línea con un solo sensor de luz
//Va bien para curvas en ambos sentidos, pero lento

int d;

task main()
{
ClearScreen();
SetSensorLight(IN_3);


Float(OUT_B);
OnFwd(OUT_C,30);

while (true)
{
NumOut (1,1,1,Sensor(IN_3));

if (Sensor(IN_3) > MARGEN)
{
NumOut (1,1,1,Sensor(IN_3));
Float(OUT_C);
OnFwd(OUT_B,30)
until(Sensor(IN_3) <= MARGEN) NumOut (1,20,1,Sensor(IN_3)); Float(OUT_B); OnFwd(OUT_C,30);
}
}
}

Y el video:

5 comentarios:

Anónimo dijo...

Hola!! Un grupo de estudiantes de la ULPGC estamos desarrolando un proyecto con Lego Mindstorm nuestro blog es http://niutinbot.blogspot.com vamos actualizandolo con cada avance. Por si te interesa verlo.
Saludos!

Anónimo dijo...

hola muy buen programa, recientemente estoy realizando algunos programas con el Lego y tu código me funcionó bastante bien, sin embargo en la instrucción

NumOut(1,1,1,Sensor(IN_3));

me marca un error. Hasta donde yo sé solo permite dos coordenadas (x,y) y el texto, ¿a que crees que se deba?

También quiero saber si te importaría explicar aunque sea brevemente cómo funciona el comando Float() para controlar los servos.

Saludos

pd. comentarios a raymundodc@gmail.com

Davidin dijo...

Supongo que dependerá de la versión de software de NXC que usemos cada uno.

En cuando a lo del float, sirve para dejar la rueda del motor que gire libremente. Si simplemente la apagas sin hacer un float la bloqueas (aplicas freno motor).

Saludos.

Anónimo dijo...

esta linea no me, me da fallos-->until(Sensor(IN_3) <= MARGEN) NumOut (1,20,1,Sensor(IN_3)); Float(OUT_B); OnFwd(OUT_C,30);
porq? me pregunte....grasias

Zika dijo...

Hola, Davidin, podrías comentariar el código por favor, sería de mucha ayuda para muchos los que estamos empezando en esto de los robot´s !!

Te lo agradecería un montón!!

Saludos Zika