Glory: un robot explorador

Bueno

Me presento rodri, tengo 16 años y desde pequeñito me ha gustado el mundo de la robotica. Por fin he podido empezar con mi primer proyecto serio, un robot explorador.

En este post quiero ir poniendo los avances y los problemas que surjan. también me gustaria contar con las sugerencias y la experiencia de los mas veterenos.

Por ahora me he fabricado con dos josticks de play station un mando que esta conectado a una arduino mega ADK. La idea es con un kit de radiofrecuencia de 433 Mhz, poder controlar un doble puente en h( para dos motores por que va con orugas) y dos servo ( uno de rotacion continua y otro normal) donde posteriormente instalare una camara.

Por ahora tengo muchos problemas para conectarlo inalambricamente.

espero vuestras ideas, sugerencia y vuestra ayuda

puedes usar bluetooth.

En un futuro lo suyo es meterle el Xbee pero primero tengo que experimentar con el kit este que tengo.

El bluetooth que alcanze tendria ¿?

Pues bienvenido al foro.

Podrías usar módulos de radio tipo nordik, pero tendrías que escribirte un pequeño protocolillo.
Xbee o Zigbee son buenas alternativas y BT esta muy bien para poder controlarlo con otro dispositivo móvil.

entre 5 y 10 metros, antes de montar la xbee, és una solución barata y resultona

Hasta lo que se, para poder conectar el kit de radiofrecuencia habria que hacer un protocolo algo tipo (codigoInicio, data,data,data,codigoFin)

Por ahora no soy capaz ni de conectarlo para que me envie un "hola" ( espero solucionarlo pronto) pero enviar variables, por lo que he leido es mas complicado, alguien sabe como se envian ¿?

Si es un robot explorador lo interesante seria que le colocases un GPS para ver que ruta ha hecho...

Bienvenido al foro!!

Para utilizar los módulos RF esta la librería virtualwire que te simplifica todo.

Pon alguna foto del robot :slight_smile:

Un saludo!

Aun usando la librería virtuaWire, se tiene que utilizar un protocolo de transporte para transportar la información entre los dispositivos.

IgorR tiene un post donde explica como crear un protocolo

te puede servir de partida para aprender y si quieres luego lanzarte a protocolos especificos para RF tipo ""manchester protocol"".

Muchas gracias por los enlaces, haber si consigo avanzar. :wink:

He creado un album de picasa con las fotos de robot.

Aqui teneis el enlace

https://plus.google.com/photos/114325647361501506797/albums/5745023770199630193?authkey=CP-lwbPYlNGxnAE

Buscando he encontrado un truco para asegurarse de que funcionan bien; conectar la salida de datos de una arduino a la entrada de datos del otro por un cable.

Supongo que asi podre probar si el problema es de mi programa ( muy posible) o del modulo mismo

Con esto he conectado un cable desde el pin 12 del trasmisor hasta el pin 11 del receptor

En el código del transmisor he puesto esto (ARDUINO MEGA ADK)

#include <VirtualWire.h>
void setup()
{
vw_setup(2000); // Bits per sec
}
void loop()
{
const char *msg = "hello";
vw_send((uint8_t *)msg, strlen(msg));
delay(400);
}

En el codigo del receptor he puesto este otro (ARDUINO UNO)

#include <VirtualWire.h>
void setup()
{
Serial.begin(9600);
Serial.println("setup");
vw_setup(2000); // Bits per sec
vw_rx_start(); // Start the receiver PLL running
}
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)) // Non-blocking
{
int i;
// Message with a good checksum received, dump HEX
Serial.print("Got: ");
for (i = 0; i < buflen; i++)
{
Serial.print(buf, HEX);
Serial.print(" ");
}
Serial.println("");
}
}

En el receptor al poner el monitor me aparece "setup", pero no recibe nada.

En el trasmisor al cargar el programa me da este error

avrdude: stk500_getsync(): not in snyc: resp=0x30

Alguein sabe lo que pasa ¿?

roter45:
[...]

En el trasmisor al cargar el programa me da este error

avrdude: stk500_getsync(): not in snyc: resp=0x30

Alguein sabe lo que pasa ¿?

Eso es que el IDE de arduino no se puede comunicar correctamente con la placa para programarla, mira haber que tengas bien seleccionado el puerto y la placa o reinstala los drivers haber si te lo soluciona.

Un saludo!

Si quieres una comunicacion muy sencilla arduino-arduino por cable para probar que todo funciona y luego cambiar el sistema de transporte te aconsejaria esto:

Es la union por puerto serie Tx, Rx, Gnd. de uno a otro. O sea:
Arduino-1 Arduino-2

TX <-----------> RX
RX <-----------> TX
GND <---------> GND

En este enlace tienes explicacion muy facil:
http://dalab.ws/ubersonic/arduino-arduino/

Despues de ahi, depurar tu codigo y cuando el cacharro haga lo que quieres solamente tendras que cambiar el sistema de enlace o transporte.

Un saludo.

Muchas gracias, ya me funciona la arduino mega adk sin problemas eran los drivers.

He conseguido meter el codigo y medio funciona.

LLeva el codigo que puse antes, el problema esta que al enviar hola recibo esto 68 65 6C 6C 6F, sabéis por que ¿?

Lo unico que he echo yo es ponerlo igual que con el trasmisor pero pro cable ya que hasta que ponga las antenas el emisor/recpetor no funcionan del todo bien, pero por cable va perfecto con el problema antes mencionado

El otro arduino esta contestando "hello"

Por que el receptor lo esta enviado por serial en Hexadecimal ( http://www.table-ascii.com/ ).

Serial.print(buf, HEX);

Hace tiempo que enrede con esa librería pero para que apareciera los caracteres por el Serial.print era eliminando el HEX dejando solo la variable buf, aunque no te lo aseguro.

Un saludo!

Bueno me funciona ya la comunicacion inalambriaca ( aunque tengo qeu descodificar en el recpetor por que me lo imprime com o Hexagesimal)

Ahora tengo otro problema, tengo dos servo motores, uno de rotacion continua y uno normal. necesito una forma de controlarlos de tal forma que:

si llega A gire el RC( rotacion continua), hacia la izquierda
si llega D gire el RC , hacia la derecha
si llega W gire el normal, hacia la izquierda
si llega S gire el normal, hacia la izquierda.

la idea es que a cada pulso que llegue se mueva unos 5 grados mas o menos ( ajustable)

hasta lo que he investigado, hay que usar la libreria servotimer2

Cualquier idea o sugerencia la pruebo y envio los resultados

Muchas gracias a todos

Por la fotos deduzco que has modificado el servo para que sea de rotación continua, y al modificar el servo en rotación continua cambias el control de la posición por control de la velocidad dependiendo el angulo que le des mediante programación girara más rápido o más lento.

Así que tendrás que darle una velocidad y un tiempo para hacer girar aprox. unos 5º.

Ten en cuenta que como se va descargando la batería va perdiendo velocidad, yo lo que hago es regular el voltaje de la batería para no tener una disminución de la velocidad como se van descargando las baterías, pero no es exacto.

Para tener un control preciso del angulo necesitaras un encoder, yo en un servo que queme el circuito de control probé hacer algo como esto Servo-encoder (Robotika.cz > Articles) (pero más "cutre" y con un solo sensor para solo medir giros).

Un saludo!

El servo lo compre directamente de rotación continua, no es modificado.

Salia por el mismo precio mas o menos y le daba un plus a mi almacen de hardware y sobre todo al robot.