Transmissão Wireless com nRF24L01 RESOLVIDO!!!!!!

Saudações prezados.

Depois de muito pesquisar, consegui fazer uma transmissão consistente com o Módulo Transceptor nRF24L01....olha....não foi fácil...rsrsrrs

Ainda existe pouco material disponível para o assunto...então faço questão de compartilhar com vocês o meu feito...que é apenas o acendimento de um LED através do apertar de um botão.

Digo faço questão porque sempre que precisei do pessoal do Fórum eu fui ajudado...infelizmente não por todos..tem gente que responde uma dúvida só pra constar que "ajudou"...porque fala cada "asneira" sem tamanho..o que pode confundir ao invés de ajudar.O pior é que quando questionamos a "ajuda", o "camarada" nem dá mais as caras..acho que deve ser a vergonha bobagem num Fórum tão difundido e conceituado...mas isso não vem ao caso.

Pessoal..segue o código comentado (para 2 Arduinos UNO)...e o esquemático de ligação.

Abração a todos e espero que seja útil futuramente.

Código Emissor
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"


int dados[1]; //Armazena os dados enviados pelo rádio

RF24 radio(9,10); //Inicializa a placa nos pinos 9 (CE) e 10 (CS) do Arduino

const uint64_t pipe = 0xE14BC8F482LL; //Define o endereço para comunicacao entre os módulos

int pino_botao1 = 7; //Inclui a Porta Digital 7 na estrutura da programação do módulo

void setup()
{
   pinMode(7, INPUT); //Define a Porta Digital 7 para entrada de sinal para disparo do Dispositivo Secundário
   digitalWrite(7,HIGH); //Define a Porta Digital 7 inicialmente em nível alto
 
  radio.begin(); //Inicializa a comunicação entre os módulos
  radio.openWritingPipe(pipe); //Entra em modo de transmissao
}

void loop()
{
  if (digitalRead(pino_botao1) == LOW) //Envia o comando para disparo caso a Porta Digital 7 entre em nível baixo
  {
    dados[0] = 1; // salva o valor 1 no índice dos valores enviados pelo rádio
    radio.write(dados, 1); // escreve o valor 1 na variável dados
  }
}


Código Receptor

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"


int recebidos[1]; //Armazena os dados recebidos

RF24 radio(9, 10); //Inicializa a placa nos pinos 9 (CE) e 10 (CS) do Arduino

const uint64_t pipe = 0xE14BC8F482LL; //Define o endereco para comunicaçao entre os módulos

int LED1 = 5; //Inclui a Porta Digital 5 na estrutura da programação do módulo

void setup()
{
  pinMode(LED1, OUTPUT); //Define a Porta Digital 5 como saída de sinal para disparo do Dispositivo Secundário

  radio.begin(); //Inicializa a comunicaçao entre os módulos
  radio.openReadingPipe(1, pipe); //Entra em modo de recepcao
  radio.startListening(); ////Entra em modo de recepcao
}

void loop()
{
  if (radio.available()) //Verifica se há sinal de radio
  {
    bool done = false; //determina a variável booleana como falsa
    while (!done) //executa uma rotina determinada enquanto a variável booleana é negada
    {
      done = radio.read(recebidos, 1); // Lê a variável transmitida

      if (recebidos[0] == 1) //Se recebeu o numero 1, executa determinada ação
      {
        delay(10); //Tempo até executar a rotina de ativamento
        digitalWrite(LED1, HIGH); //Ativa a Porta Digital 5 em nível alto para disparo do Dispositivo Secundário
      }
      else
      {
        digitalWrite(LED1, LOW); //Desativa Porta Digital 5 caso o valor recebido não seja igual ao valor 1
      }

      delay(100); //Tempo para reiniciar a verificação do sinal transmitido
    }
  }
 
}

Exibições: 8376

Anexos

Responder esta

Respostas a este tópico

Eu tenho uma explicação para você WG.

   O problema chama-se CORRENTE ELÉTRICA,  ou seja, você pode até ter os mesmos 3.3v, mas a questão da corrente é o que realmente importa pra os NRF24L01 assim como pra qualquer rádio.

   Vou tentar passar o que eu entendi até agora, logo, posso estar certo ou errado ok.

    O lance é o seguinte, rádios trabalham com uma coisa chamada modulação, em geral da frequência, o que faz com que eles precisem de pouca energia em transmissões normais, porem, em determinadas situações eles precisem de picos de energia, e tudo isso depende da força, ou corrente.

    Estou trabalhando nesse momento justamente em um shield de testes particular meu, que simula sinais analogicos, digitais e se comunica atraves do NRF, e percebi que eles tem essas oscilações, o que estou fazendo pra resolver, mesmo usando a energia do proprio arduino, é não usar os 3.3v do arduino, mas sim colocar um regulador de tensão proprio, no meu caso um 1117-33 (smd) ou um LM317.

   Isso usando capacitores de estabilização e desacoplamento tanto na chegada dos 5v como na saida dos 3.3v(lembra dos capacitores de 10uF e do de 100nF que te falei).

   Eu já tinha feito isso na passado e funcionou.

   Realmente so NRF são radios fantasticos, mas temos que entender que eles precisam de ALIMENTAÇÃO ADEQUADA.

  

   

Entendi Weider! Agora acho que vou conseguir resolver esse problema rsrsrsrsrs. Mais uma vez obrigado pelas dicas!

              Valeu!!!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço