Go Down

Topic: Sparki: Master-slave con HC-06 (Bluetooth) y RF24L01 (radio) (Read 174 times) previous topic - next topic

pedrorodriladron

Jul 19, 2018, 02:21 pm Last Edit: Jul 21, 2018, 06:47 am by surbyte Reason: Agregado de etiquetas de enlace
¡Hola!

Estoy tratando de conectar un (Sparki) con mi ordenador a través de Bluetooth para enviarle varias órdenes, y ahora que lo he conseguido , tengo que conectar este (maestro) robot a otro (esclavo) a través del modulo de radio, así que voy a tener un ordenador conectado a través de Bluetooth con el maestro , el maestro conectado a través de Bluetooth con el ordenador y (aquí está mi problema) conectado a través de la radio con el esclavo.

Modulo bluetooth: HC-06
Módulo radio: nRF24L01
ambos vendidos y distribuidos por ellos, lo que no pone ahí es como usar (o al menos si se puede) los dos a la vez.

Cuando trato de enviar varias órdenes a través de Bluethooth al maestro (por ejemplo, la velocidad y la dirección del maestro y el esclavo) y quiero volver a enviar esta información a través de la radio al otro robot, mi programa (que antes funcionaba) deja de hacerlo. Es decir, ni si quiera funciona la parte de bluetooth que, como he dicho, funcionaba perfectamente ¿Dónde está el problema? Estoy pensando en 3 posibilidades:

1.-la radio y el Bluetooth están muy muy cerca
2.-podría ser un problema de potencia, ¿puede sparki (basado en ATMEGA32U4) dar la potencia necesaria para hacer funcionar ambos juntos? Encontré información sobre el consumo y creo que sí, pero no estoy seguro. En el datasheet del ATMEGA32U4 dice que cada pin "normal" puede suministrar un máximo de 40mA, y los pines de Vcc y GND 200mA. El módulo de bluetooth (HC-06) consume 12mA a 3.3V (43mW) y el de radio 8mA a 3.3V (28mW)
3.0-¿tienen radio y Bluetooth alguna variable en común que está tratando de ser utilizada en varios sitios a la vez?

Muchas gracias por su ayuda, es muy difícil encontrar información sobre el sparki más allá de su página web, y la que dan ellos es realmente pobre.

surbyte

Fui a la página de Sparki y veo que hay una comunidad.
Entonces no te parece mas lógico preguntar en la comunidad de gente que tiene y usa Sparki que en esta comunicad que solo compartimos Arduino y que el 99% lo desconoce?
No es para decirte que no te vamos a ayudar, pero solo es para que te des cuenta que hay canales mejores.

Podemos ayudarte pero carecemos de la facilidad que si tendran otras personas que si tienen el robot.

Ahora con lo poco que podemos decirte intentaré responderte y ayudarte:

Dices que antes funcionaba y ahora no. No entiendo qué cambiaste para que no lo haga ahora?
Cambiaste el código?
Si pusieras el código original por un lado, el código modificado por otro y algun enlace al programa de PC eso ayudaría.
Si no tienes acceso al programa de PC para modificarlo no podras lograr lo que buscas.
Hay algunos cambios que hacer en todos lados.

El programa principal (PC) debe poder enviar datos al master y al slave.
El master debe poder conectarse en red con el esclavo lo que te daria lugar a tener mas esclavos.

Y dejo ahi porque no he visto nada y estoy suponiendo demasiadas cosas.

pedrorodriladron

Lo primero, gracias por responder.

Fui a la página de Sparki y veo que hay una comunidad.
Entonces no te parece mas lógico preguntar en la comunidad de gente que tiene y usa Sparki que en esta comunicad que solo compartimos Arduino y que el 99% lo desconoce?
También he preguntado por ahí, incluso he preguntado directamente al chat de sparki (su atención al cliente por decirlo de alguna manera). Me estoy moviendo por diferentes sitios intentando encontrar respuesta.



Dices que antes funcionaba y ahora no. No entiendo qué cambiaste para que no lo haga ahora?
Cambiaste el código?
Si pusieras el código original por un lado, el código modificado por otro y algun enlace al programa de PC eso ayudaría.
Si no tienes acceso al programa de PC para modificarlo no podras lograr lo que buscas.
Hay algunos cambios que hacer en todos lados.

El programa principal (PC) debe poder enviar datos al master y al slave.
El master debe poder conectarse en red con el esclavo lo que te daria lugar a tener mas esclavos.
Tienes razón en que debería haber puesto el código. Bien, lo primero que hacía era un ejemplo sencillo (sacado tal cual de la página oficial) de envio de datos por radio de un robot a otro, sin hacer nada con bluetooth, para ver si funcionaba:

Code: [Select]

//Codigo emisor
#include <SPI.h>
#include <Radio.h>

Radio radio;

void setup()
{
 radio.begin();
}

float num_f=23.3;
void loop()
{
   radio.writeFloat(num_f);
 delay(1000);



Code: [Select]

//código receptor
#include <SPI.h>
#include <Radio.h>

Radio radio;

void setup()
{
 Serial.begin(9600);
 radio.begin();
}

void loop()
{
// Uncomment this code if receiving
 if ( radio.available() ){ // if data is unread from the radio
   Serial.println( radio.readFloat() );
 }
}




Como era normal, funcionaba correctamente, bien. Ahora quería juntarlo con mi verdadero proyecto, en el cual mediante bluetooth y desde Matlab, envío un punto de destino al que mi robot consigue llegar tomando las referencias de una cámara y combinándolas con un control predictor, al final es un programa que recibe por bluetooth las coordenadas del robot y las de destino, y aplica unas velocidades a cada rueda para llegar al punto deseado. Como digo, este programa funciona perfectamente. Mi objetivo final es, además de mandar por bluetooth las coordenadas de este robot (maestro) también las del esclavo, por lo que el robot maestro no solo tendría que ser capaz de llegar al destino (como hace ahora) sino también de enviar por radio las coordenadas del esclavo para que este llegue a otro punto diferente. Mi problema llega aquí, ya que al intentar combinar mi programa de bluetooth, con, simplemente, el envío de un float (para probar si podían realizarse esas dos comunicaciones a la vez) no funciona ni una cosa ni la otra. Es decir, se pierde tanto la comunicación bluetooth como la de radio. He probado muchas cosas y no funciona, quizá el robot no este preparado para realizar esa doble comunicación, o haya interferencias, no sé. Se que es difícil que alguien sepa la respuesta y que seguramente no sea el sitio adecuado para escribir esto, pero estoy desesperado. Adjunto el código de una de las tantas pruebas que he hecho.

Code: [Select]

void setup () {
 Serial1.begin (9600);
 Serial.begin (9600);
 estado = get_estado_cam;
 enable_cam = 1;
 t_ini = millis();
 variables_leidas = 0;
 radio.begin();
 radio.openWritingPipe(pipe);
}

//Programa principal/////////////////////////////////////////////////////////////////
void loop () {

 if ((Serial1.available ())) {
   if ((enable_cam == 1) || (estado_cam == 2)) { //Si acabamos de revisar la camara hemos perdido las referencias de la camara
     while (variables_leidas == 0) {
       processInput();
     }
     calculoVel();
     variables_leidas = 0;
   }

   else if ( (enable_cam > 1) && (estado_cam == 0) ) {
     t_fin = millis();
     Tsample = (t_fin - t_ini) / 1000.0;
     dif_dist = 0.5 * (v_r_ms * Tsample + v_l_ms * Tsample);
     dif_tita = (1 / L) * (v_r_ms * Tsample - v_l_ms * Tsample);
     tita_des = tita_est + (dif_tita / 2);
     x_est = x_est + (cos(tita_des) * dif_dist);
     y_est = y_est + (sin(tita_des) * dif_dist);
     tita_est = tita_est + dif_tita;
     calculoVel();
   }
   t_ini = millis();

   if ( (estado_cam == 1) || (sqrt( ((x_est - valor_x) * (x_est - valor_x)) + ((y_est - valor_y) * (y_est - valor_y)) ) < 0.05) ) {
     v_r_out = 0.0;
     v_l_out = 0.0;

     v_r_ms = 0.0;
     v_l_ms = 0.0;
   }
   moveRobot();
   radio.writeInt(enable_cam);
 }
}


Mil gracias.

surbyte

Debes usar etiquetas </>, lee las normas por favor
Edita tu post.

arkarash

Yo estoy usando antenas RF24 y las alimento externamente e independientemente de mi arduino ya que por lo menos el arduino no da suficiente potencia para el RF por el puerto de 3.3V. A lo mejor es eso lo que te pasa, que ningún componente tiene suficiente potencia y no te va nada.

surbyte

Con los nRF24 con antena he tenido alguno que otro problema
Tienes o has soldado un capacitor electrolítico entre sus bornes VCC y GND? A pesar de que la fuente este bien filtrada. Revisa eso por favor.

Lo primero será volver a fojas cero, o sea repetir el buen funcionamiento del sistema con el código original y luego ir paso a paso agregando cosas.

A riesgo de ser reiterativo (disculpa) lo has intentado de nuevo y no funciona?
Si no funciona entonces hay algun problema de hardware o de alimentación.

Asi que presta atención a revisar tensiones 3.3V 5V donde sea conveniente, no uses protoboards por favor porque siempre dan problemas. Intenta usar una placa pcb perforada con las conexiones soldadas. Estará en movimiento y esto siempre da problemas.

Go Up