miércoles, 19 de septiembre de 2007

Nuevo Firmware para el NXT versión 1.05

Desde el día 14 de Septiembre tenemos disponible una nueva versión del firmware del NXT, la 1.05.

Las mejoras son las siguientes:

- Multiple datafile control within user programs
- Communication with 3rd party external devices
- Bluetooth communication within user programs

Tendré que probar a ver si me soluciona mis problemas de incompatibilidad entre el bluetooth del NXT y de mi dell.

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:

miércoles, 5 de septiembre de 2007

Código NXC de robot siguelineas I

Por si a alguien le puede ayudar en sus inicios de programación, voy a poner los códigos fuentes de mis robots siguelineas programados en NXC.

Empezaremos por el más simple, en el que el robot tiene una deriva conocida hacia un lado y en cuanto superamos el margen de luz marcado sabemos que nos hemos salido de la línea y giramos en el sentido contrario parando un motor en modo float (sin bloquearlo).

#include "NXCDefs.h"
#define MARGEN 50
//programa para seguir una línea con un solo sensor de luz
//el robot genera caída hacia la derecha, y en cuanto se sale de la línea
//gira a la izquierda para recueperarla. Con esto sólo puede girar en un sentido.
int d;

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


OnFwd(OUT_B,40);
OnFwd(OUT_C,50);

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

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

El video con el resultado: