No consigo que se comuniquen mis nRF24l01

Hi,
Pregunta: Tienes el ground del power supply conectado al arduino? Porque segun veo estas usando el ground del modulo para conectar el ground del power supply. Debes de conectar el ground del power supply al ground del arduino.

Donde esta el capacitor que no lo veo?

Buenas tardes a Tauro y a surbyte,

Respondiendo a los 2, esta tarde me ha llegado un adaptador del nrf24l01 y he cambiado la configuración para ver si funcionaba, quitándole el condensador de 10uf, en la anterior foto use un nrf24l01 sin condensador de 10uf.

Aqui os muestro mi configuración nueva:

Aun así sigue sin funcionar.

Hi,
Mi consejo es de que alambres el modulo nRF24l01 directamente al arduino y usas los 3.3 del ardiono. Asis elimnas cualquier duda. Asi eliminas cualquier problema de cableria.

TAURO,

¿Dices que suelde directamente el modulo al arduino nano?,

Es que aqui no tengo soldador, pero comprobé cableado uno por uno y todos tienen continuidad.

Estoy bastante desesperado, no se que hacer.

Mi consejo es de que alambres el modulo nRF24l01 directamente al arduino y usas los 3.3 del ardiono. Asis elimnas cualquier duda. Asi eliminas cualquier problema de cableria.

No había quedado claro que los 3.3V del Arduino no son suficientes para un nRF24L01 con antena?

No hagas eso.

Respecto del capacitor no es que va a funcionar con o sin. DEBES usarlo.
El problema si todo lo demás no funciona es que tal vez los dos módulos esten demasiado cerca uno de otro.

POrque no bajas las librerías de tmrh20 y pruebas su ejemplo Tx Rx el ejemplo básico.
Un modulo se pone en Tx y el otro en RX lo cambias con un comando del monitor Serie.

Con el puedes controlar potencia, pones ambos modulos a baja potencia y luego vas subiendo para probar.

Acá tienes todas las librerias, las simples como RF24 y las mas complejas como Network, MESH, etc.

En RF24 esta la que yo te digo.

Hi,
Aparentemente no vi que estabas usando un NANO por lo tanto no lo puedes alambrar al NANO. Si quire puedes hacerlo simpre y cuando vaz a usarlo permanentemente alambrado al a modulo.

Gracias por responder a los 2,

Surbyte, creia que con el adaptador del modulo nrf24l01, ya no hacia falta el condensador, lo soldare en cuanto pueda y os comunicare lo que tengo.

Muchas gracias a los 2.

El adaptador tiene un capacitor electrolítico?
Tu hablas como si nosotros pudieramos ver lo que tu ves.
Jamás compré un adaptador. Los fabrico yo. Siempre le pongo el capacitor porque elimina picos de corriente y en todos lados esa ha sido una de las soluciones a implementar.
La otra es controlar la potencia de TX para ello hay que poner uncomando.
Hace poco respondí lo mismo en otro hilo, 1 a 3 meses.

Todo lo que preguntas fue respondido del mismo modo en ese hilo. Anda por ahi.. en esta Sección bajo un nombre similar.

Hi,
surbite tambien se recomienda que se instale un condensador .1uf en paralelo al electrolico para eliminar los ruidos de alta frecuencia cuando los crcuitos son digitales. Nomarmente se deben instalar lo mas cerca posible al pin del ground y al V+ del chip.

Surbite, en el datasheet del adaptador sale un condensador, pero creo que no es electrolítico.

Por cierto, dices algo de un comando para el tx ¿Cual es? , ¿ese comando se pone directamente en el monitor serie o en el sketch?

Hi,
Adjunto la foto de como lo tengo montado. Solamente es un prototipo. El condesador de 10uf esta detras con otro de .1uf.

Te explico porque se pone un capacitor de 10uF y porque no uno de 0.1uF? Ver esquema primero.

1ro el cap de 100nF o 0.1uF es pequeño y el electrolìtico es voluminoso. Por eso hay capacitores ceràmicos y no electrolìticos. Además el electrolìtico sale mas caro que un ceràmico.

Pero al ver el esquema se observan a la izquierda 2 capacitores, uno de 10 nF y otro de 1nF, por eso el de 100nF sobra.

Deben haber 100 pàginas del nRF24L01 con todo tipo de cosas, esta viene de Wiki (NRF24L01 Test with Arduino) y al menos solo sugiere el capacitor de 10uF

El sketch se llama GettingStarted.ino y se cambia por Monitor Serie de este modo. R para RX o receptor y T para Tx o Transmisor.

Por defecto el sketch los pone en modo receptor y debes cambiar uno entrando en el Monitor Serie, escribiendo T para modo Transmisor y solo enter, T ENTER.

Otra cosa es que por defecto este sketch, los arranca en modo baja potencia, y acà se ve

  // Set the PA Level low to prevent power supply related issues since this is a
 // getting_started sketch, and the likelihood of close proximity of the devices. RF24_PA_MAX is default.
  radio.setPALevel(RF24_PA_LOW);

Pero los demàs codigos por defecto lo hace en MAXIMA potencia.

Hi,
Surbite adjunto un link que explica para que se usa el condensdor de .1uf entre los pines de vcc y ground lo mas posible cerca de los pines. Este se usa para eliminar las interferencias magneticas generadas por circuitos digitales. siempre se debe de conectar este condesador en los pines de VCC y ground. El problema es que se me hace dificil a veces explicarlo pero este linki lo explica correctamente.

Tambien adjunto una foto para que veas como se conecta los cerca de los pines.

A ver si nos entendemos.

El link que pusiste tauro es generico y es para fuentes lineales. Y Si, estoy de acuerdo que llevan un capacitor de desacople de 0.1 o 100nF que es lo mismo, pero en este caso, ya existen los capacitores de desacople y no son de esos valores pero si ya los tiene el mòdulo para que ponerlos? A mi me parece redundante.

De todo modos el que lo quiere poner que lo instale.

Buenas noches, Al final conseguí que se comunicaran mis Arduinos mediante wifi con los módulos NRF24L01, debido a que tenía que poner los condensadores de 10uf entre el GND y VCC.

Ahora me surge otro problema, que es en el código. He cogido en Internet un ejemplo de software para comunicar mis arduinos ( que va muy bien), pero necesito una mejora.

La mejora o actualización que necesito, es introducir varios sensores más dentro del módulo de emisión. Los cuales tienen que estar activados a la vez para que se enciendan los led´s y un buzzer ( Sé que tiene que ser muy fácil, pero no consigo sacarlo).

El código del emisor/transmisor es el siguiente:

/*  ----------------------------------------------------------------
    SETISAEDU
    Codigo para la configuracion MultiCeiver con NRF24L01.
    Codigo del PTX1 (Alarma con activacion por final de carrera(pulsador) )
  --------------------------------------------------------------------
*/
#include <SPI.h> //libreria para el uso del modulo SPI
#include "nRF24L01.h" //Libreria del modulos nRF24L01+
#include "RF24.h"

RF24 radio(9, 10); //Declaracion de los pines de control CE y CSN para el modulo, se define el objeto "radio"

/* Lista de direcciones de los transmisores 
direccion1 = 0x7878787878LL (Este nodo) 
direccion1 = 0xB3B4B5B6F1LL 
direccion3 = 0xB3B4B5B6CDLL 
direccion4 = 0xB3B4B5B6A3LL 
direccion5 = 0xB3B4B5B60FLL 
direccion6 = 0xB3B4B5B605LL
*/
const uint64_t direccion1 = 0x7878787878LL; // En esta parte LL significa LongLong para asegurar el dato de 64bits

int Alarm_out = 6; //Pin de salida de la alarma
int Alarm_modo = 7; //Pin indicador de alarma Armada o Desarmada

bool A_state=0; //Variable de estado logico de la salida del la alarma
bool Alarma=false,modo=true; //Variable de estado de la alarma, variable de modo de actividad
bool armado=1; /*Variable que se usa para discriminar las peticiones de interrupcion 
                *que se hagan mientras la alarma esta Desarmada
                */
void setup()

{

  pinMode(10, OUTPUT); //Iniciar como salida el pin de control CSN
  radio.begin(); //Inicio del modulo nRF24L01+
  //radio.setRetries(15, 15); //Configuracion del numero de intentos
  radio.setPALevel(RF24_PA_MAX);  // Configuracion en modo de baja potencia
  radio.setChannel(100); // Apertura del canal de comunicacion
    //Apertura de la linea de comunicacion, direccion 2
  radio.openReadingPipe(0, direccion1); 
  radio.startListening(); // iniciamos en modo de escucha

  //Configuracion de pines de salida de alarma e indicador
  pinMode(Alarm_out, OUTPUT);
  pinMode(Alarm_modo, OUTPUT);
  digitalWrite(Alarm_out,LOW);
  digitalWrite(Alarm_modo,HIGH); // La alarma inicia activa
  
  //Declaracion de interrupciones de el pulsador y los sensores 
  pinMode(2, INPUT); //Disparador de la alarmar (Final de carrera, PIR, IR, Luz)
  pinMode(5, INPUT); //Boton de apagado de alarmar  
  attachInterrupt(digitalPinToInterrupt(2), Alarma_On, RISING);
  attachInterrupt(digitalPinToInterrupt(3), Alarma_Off, RISING);

}

void loop()
{
       radio.startListening(); //Se inicia en modo de escucha para poder recibir ordenes del maestro
      //Espera de peticiones
      if (radio.available())      // Comprobacion de datos recibidos
      {
        char op; //operacion
        bool done = false;
      
        while (!done)   // Espera hasta recibir algo
        {
          radio.read( &op, sizeof(op) );
          if (op > 0)done = true;
          delay(20);            
        }
        //Acciones
        if (op == 'a') //Apagar alarma, pero siempre esta armada
        {
          Alarma = false;
          digitalWrite(Alarm_out,LOW);
        } else if (op == 'O') //Armar la alarma, modo On
        {
          digitalWrite(Alarm_out,LOW);
          digitalWrite(Alarm_modo,HIGH);
          armado=0; //Se pone a cero para obviar las interrupciones
          interrupts();
          delay(100);//Espera aque se den las llamadas a interrupcion pendientes
          armado=1; //Reactivar las acciones de las interrupciones
          Alarma = false;
          modo=true; //Poner modo en Alarma Armada
        } else if (op == 'o') //Desarmar la alarma,modo Off
        {
          digitalWrite(Alarm_out,LOW);
          digitalWrite(Alarm_modo,LOW);
          noInterrupts();
          Alarma = false;
          modo=false; //Poner modo en Alarma Desarmada
        } 
      }

                                           //Verificacion si la alarma ha sido disparada y
      if((Alarma==true) &&  (modo==true))  // si esta se encuentra armada (modo = true)                             
      {
        A_state=!A_state;  //Cambio de estado de la variable que controla la salida
        digitalWrite(Alarm_out,A_state); //Escribir el estado en la salida
        delay(500); //Espera para que el cambio de estados sea apreciable
      }
}

//Rutinas de interrupcion
void Alarma_On() //Alarma disparada
  {
    if((armado==1)&&(Alarma==false)) //Verificacion si se deben obviar o no las peticiones de interrupcion
    {
    radio.stopListening(); //Paramos el modo de escucha para poder escribir
    Alarma = true; //Se enciende la funcion de la alarma
    char fun = 'A';
    radio.openWritingPipe(direccion1); //Se abre el puerto de escritura
    radio.write(&fun, 1); //Se envia la notificacion de que la alarma fue activada.
    //delay(200);
    }
  }

void Alarma_Off() //Boton de apagado de alarma disparado
  {               
    //Verificacion si se deben obviar o no las peticiones de interrupcion
    if((armado==1)&&(Alarma==true)) // y a la vez, sí la la alarma esta encendida
    {
    radio.stopListening(); //Paramos el modo de escucha para poder escribir
    Alarma = false; //Se apaga la funcion de la alarma
    digitalWrite(Alarm_out,LOW); //Se pone la salida apagada
    char fun = 'D'; //Letra para informar que la alarma se desactivo manualmente
    radio.openWritingPipe(direccion1); //Se abre el puerto de escritura
    radio.write(&fun, 1); //Se envia la notificacion de que la alarma fue activada.
    //delay(200);
    }
  }

Creo que la problemática está la declaración de los interruptores y pulsadores en concreto en el "attachInterrupt(digitalPinToInterrupt(2), Alarma_On, RISING)" ,
porque no consigo meter más sensores a parte del interruptor del pin2.

TransmisorMulticeiver_1.ino (5.28 KB)

31 post y esta fue la solución?

Al final conseguí que se comunicaran mis Arduinos mediante wifi con los módulos NRF24L01, debido a que tenía que poner los condensadores de 10uf entre el GND y VCC.

Debo entender que no lo hiciste cuando te lo pedimos? No entiendo!!

Gracias por contestar Surbyte, la cuestión fue:

1-Que las soldaduras que hice para conectar los 10uf no fueron muy buenas, no hacían bien contacto y por tanto no tenían.

2-Los sketchs que cogí como ejemplo de internet también tenían problemas, porque las direcciones de el emisor y el receptor, no eran correlativas. Haciendo que los módulos no se conectaran.

3- Los módulos MB-102 no funcionaban correctamente. No suministraban la tensión y la corriente adecuada para alimentar todos lps
Componentes( tuve que comprar otros, funcionan perfectamente).

Perdona Surbyte por no explicar todo correctamente.

Quería saber si el problema que me ha surgido con la programación del nuevo sketch del post anterior, podría resolverla aquí mismo(conectar los 3 sensores al mismo programa y poner de condición que la alarma solo se active cuando se enciendan los 3 FC-51 a la vez).

Muchas gracias y perdón por los inconvenientes.

Ahora queda muy claro y no hay por qué disculparse.
Te ha pasado todo lo que la ley de Murphy dice.. y junto. No me río porque a mi me ocurre muy seguido pero no lo comento.

Respecto al nuevo problema, habré un hilo en Software.