[PEDIDO AJUDA] Nào consigo fazer funcionar modulos de radio de 1000m (NRF24L01+PA+LNA)

Galera,

   Tô precisando de ajuda pra valer, e dessa vez é pra mim, pois tenho que entregar um prototipo a um cliente de um controle remoto que alcance 500m no mínimo, de e tô meio que no desespero.

   
   Tentei aqueles controles de carro de 1000m, mas eles se mostraram afetáveis por interferências em algumas áreas(resumindo, testei e não serviu).
   Pensei em utilizar os Xbee,  mas o preço dos módulos de alta potência são proibitivos pra o projeto, visto que são vários.
   A solução foi partir pra os módulos de rádio nRF24l01, que tem de dois tipos, os de baixa potencia( nrf24l01+ ) que pelo datasheet dá uns 100m  e a versão nRF24l01+PA+LNA que pelo datasheet dá 1000m.

tá aqui os dois tipos:



Criei uma shield pra usar esses radios no arduino UNO, ela foi feita pra uso com a biblioteca RF24.h tá aqui ela:




O DESAFIO:

  Preciso que quando um dos lados for energizado(o transmissor), ele automaticamente mande um codigo pra o segundo modulo(receptor) que estará aguardando,  se o código bater ele acende um led por um tempo,  só isso,  parece fácil né ?    Mas não é!  


O PROBLEMA:

  O problema é que apesar do fabricando dizer que os dois modelos (de 100m e 1000m) serem iguais tendo como única diferença um amplificador no mais potente,  o que ocorre é que quando executo os sketchs abaixo, no radio mais simples( nrf24l01+ ),   tudo acontece bem,ele não falha nunca,   já quando executo no modelo de maior potencia (nRF24l01+PA+LNA)   ALGUMAS VEZES ELE FUNCIONA, OUTRAS NÃO ! e depois de um tempo, para de funcionar completamente.


PEDIDO DE AJUDA:

  Peço que se alguém já mexeu com esses rádios e souber alguma coisa que possa ser feita para eles funcionarem , que me dêem uma luz, pois já tentei várias coisas, inclusive colocar um capacitor de 4.7uF entre o VCC(3.3V) e o GND e nada.   Já tentei aumentar a tensão usando LM317 para o pico de 3.6V,  funcionou um tempo e parou,  dai quando aumentei mais ainda, queimei dois dos rádios.

  Tô precisando de ajuda mesmo.


os sketchs usados são esses:



// *********************************************************** TRANSMISSOR **
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"

int comunica[1];

RF24 radio(9,10);

const uint64_t pipe = 0x88E8F0F0E1LL;

void setup(void)
{ Serial.begin(9600);
  radio.begin();
  radio.openWritingPipe(pipe);
  pinMode(3, OUTPUT);  
  comunica[0]=0;
  delay(100);}


void loop(void){
 
    comunica[0]=123;
    radio.write( comunica, sizeof(comunica) );
    digitalWrite(3, HIGH);
 
}




//  **************************************** RECEPTOR**
#include <avr/wdt.h>

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

int comunica[1];

RF24 radio(9,10);
const uint64_t pipe = 0x88E8F0F0E1LL;

void setup(void){
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(1,pipe);
  radio.startListening();
  pinMode(3, OUTPUT);  
 
wdt_enable(WDTO_4S);  // habilita o watchdog
 
}

void loop(void){
  if ( radio.available() ){
    bool done = false;
      while (!done){
        done = radio.read( comunica, sizeof(comunica) );
      if(comunica[0]==123){
        digitalWrite(3, HIGH);
        delay(1000);
        digitalWrite(3, LOW);     
      }
      else{
        digitalWrite(3, LOW); }
    }
  }
 
   delay(100);
    wdt_reset();  //  reseta o watchdog,
}





  

Exibições: 10265

Responder esta

Respostas a este tópico

Não tem uma maneira automatica de ele retransmitir o pacote caso não seja recebido? li em algum lugar sobre retransmissão de pacotes porem fiquei a duvida se temos que fazer como vc fez (mudando de transmissor para receptor) ou tem algum comando que monitora isto automaticamente?

Olá Ailton Silva,

    Cara, tu deu sorte, me pegou de bom humor kkk.

    Eu estou estudando os NRF a fundo faz meses, tenho obtido resultados bem legais.

    Bem, sobre sua pergunta de ver se nao houve o recebimento e fazer o reenvio de pacotes tem sim.

    Tenho deixado de lado a biblioteca RF24 pura e trabalhado com a RF24NETWORK, nela existe um truque na emissao usando um comando bool .

   Quando baixar a biblioteca nos exemplos no HelloWorld_tx voce vai ver essa parte aqui:

bool ok = network.write(header,&payload,sizeof(payload));
if (ok)
Serial.println("ok.");
else
Serial.println("failed.");

   Ou seja, interpretando, esse book ok,  significa que o outro modulo recebeu o pacote e mandou a confirmacao de recebimento, para ter certeza disso basta gravar os helloworkd_tx e o helloworld_rx abrir as seriais e verificar,  quando voce desenergizar o modulo remoto, o modulo tx comeca a acusar falhas.

   Logo, se voce quer que caso um pacote seja reenviado  caso nao seja recebido basta fazer algo mais ou menos assim;

bool ok = network.write(header,&payload,sizeof(payload));
while (!ok) {

    bool ok = network.write(header,&payload,sizeof(payload));

}

Ou seja, enquanto do outro lado nao receber ele nao para de enviar.

  Testa ai,e coloca o resultado;

Ah, so lembrando uma coisa, no caso do NRF24L01 quem criou as bibliotecas pensou na colocacao de varios receptores e um transmissor, algo como ter varios robozinhos e um controle,  mas quando o assunto sao varios transmissores e um receptor ai o bicho tem que partir pra o trabalho braçal e na porrada,  na base da logica e do codigo,  ou seja, nao existe em todas as bibliotecas que vi uma forma atraves de comandos de eviar o encavalamento de dados que chegem ao mesmo tempo,  eu resolvi , mas atraves de uma logica pesada.

da o retorno ok.

nossa ainda nao me acostumei com esse forum, so estou lendo uma semana depois... Ainda estou estudando a biblioteca e vendo como funciona os comandos, mas logo irei comprar os arduinos ou apenas os Atmega328P(transceptor ja tenho)... te darei um retorno sim

Ola Weider... primeiramente gostaria de agradecer graças a sua ajuda depois de meses conseguir fazer meus nrf24l01 funcionarem com estabilidade... porem o alcance esta muito baixo, voce conseguiu que alcance usando o nRF24l01+PA+LNA juntamente com o nRF24l01+?

Ola Weider, voce utilizou os modulos de logo alcance no Rx e Tx? Qual o alcance quq voce conseguiu?

Olá Weider,

Vi teu tutorial, muito interessante teu método, quando me aventurar à fazê-lo te aviso, muito obrigado pela oferta de ajuda. ;)

Não se preocupe, sei como é passar os dias ocupadíssimo, trabalho com sistemas e as necessidades dos seres humanos são infinitas! (e o prazo sempre muito curto) rs

Não me lembro mais exatamente de onde peguei a livraria, mas fiz "algumas" alterações, é interessante dar uma revisada para ver se não fiz nenhuma loucura. Se me lembrar do que não estava legal na do Greg eu aviso, eu cheguei a colocar uma ao lado da outra e a comparar para pedaço de código.

Entendo, teu setup impede de usar muitos microfarads, vi relatos de que 10uf já resolveria (mas com teu post dos 470uf fiquei em dúvida rs). Não entendo muito de eletrônica, mas não parece que corrente seja o problema (o 78L tem output de 100mA, o atmega328 em 16mhz consome coisa de 20mA, o LM317 precisa de coisa de 12mA para manter a regulação), mas o carregamento de todo o sistema pode ser um dos problemas(?).

Se você não vai trocar muitos pacotes, não tem necessidade de trabalhar com 2 mega, além de que, quanto menor a velocidade maior a estabilidade e a distância.

O chip entra em modo RX depois do envio para receber o autoack, apesar de eu ter encontrado situações em que o pipe recebia a mensagem e o ack falhava, e usando o o PA+LNA, o PA+LNA recebia duas ou três vezes a mesma mensagem até o transmissor receber o autoack e parar com o retries. Muitos detalhes para prestarmos atenção rs

Cheguei a fazer testes sem o autoack, mas no final resolvi que poderia ser melhor fazer um double check (usando o ack e a resposta do pipe), mas ainda preciso fazer mais testes...

kkkk é auto explicativo sim, você já entendeu tudo!

Faço a configuração por jumper (pinos 5,6 e 7), assim o setup inicializa conforme essa configuração.

No loop existe a chamada do métodos (void) para quando a unidade é master/slave. Muitos voids podem ser onerosos em algumas situações (microcontrolador não é desktop), mas na etapa de desenvolvimento e testes fica mais fácil de separar as coisas.

O master verifica o status do slave (void StatusRequest) a cada intervalo (configurado com um segundo), enviando um payload dinâmico para o slave (next_node) com um count, que é recebido pelo slave (void NetCheck) que devolve a imformação para que seja verificado o tempo de resposta (com timeout de 300 millis). O output dos é a onerosa serial, no meu programa final já não usos mensagens longas e somente para debug,

Escrevi esse código para testes com cinco pipes (nodes ou slaves).

Sobre a serial, bom, ela consome ciclos do processador, por isso aumentar a velocidade (e imprimir o mínimo de texto possível, o que não acontece no meu código rs), mas como você tem um "testador", se o output for diferente de mensagem pela serial, pode ser interessante comentar tudo que se refere a serial para melhorar o "desempenho" do atmega.

Espero que tenha funcionado 100% (apesar de que com radio parece impossível não perder uns pacotes)

Marcos,

   Eu não cheguei ao nível de abrir a biblioteca,  pra falar a verdade a única vez que vi o código dela foi no exemplo que você me enviou, pois nela as bibliotecas abrem como se fossem TABs do arduino.

   Logo, tô meio que me guiando pelo que o pessoal do forum arduino.cc me passou, sobre a biblioteca do greg, e sinceramente, ela tá funcionando que é uma beleza.

    Como te disse crieu um shield que testa a comunicação entre os controles, emitindo uma requisição e aguardando uma reposta, só que tudo isso na mão grande,  não conheço nada sobre o autoack, e o shield tá ligado a mais de 17 horas, emitindo uma requisição a cada 5 minutos, e aguardando a resposta,  se a resposta chega ele conta mais um no sucesso,  bem, já tenho centenas de sucesso, e nenhuma só falha até agora.

   Realmente a shield com display ajuda, você fica livre da serial, e pode trabalhar a velocidade de atualização do display utilizando a função mills() que não bloqueia nem atrapalha o sketch.

   O lance agora vai ser começar a estudar sub biblioteca RF24NETWORK,   você já mexeu com ela ?

   chamo ela de sub biblioteca pois vi que ela depende da RF24,  dai acredito que usando a RF24 do greg vai deixa a RF24NETWORK mais estavel tambem,  o problema é que não sei se rola compatibilidade.

Fala ai Weider,

Muito bom saber te você teve sucesso! a cada 5 minutos um apenas enviando e outro apenas recebendo é menos caótico rs eu quero 5 se comunicando em intervalos de milésimos =)

A livraria não é minha (é do maniac bug rs), a do Greg é um fork da do maniacbug, então, com pequenos ajustes é possível pular de uma para a outra, e por isso comparar as duas é fácil.

Eu "coloquei a livraria junto do programa" por isso, pois no visual studio eu clico com o botão direito sobre uma variável ou chamada de método e depois em definitions e a IDE me leva até a declaração ou método, muito mais fácil de navegar/localizar os códigos.

Nop, se você remover a livraria da pasta do arduino e executar somente o código que passei o programa vai compilar normalmente. Tudo o que fiz foi "tirar os arquivos da livraria" e colocar no programa.

A serial é uma mão na roda, mas outros recursos podem ser menos onerosos, eu tenho um LCD aqui e não uso ele fazem uns dois anos rs

Se eu conseguir achar e revisar meu programa com a mescla das libs do maniac e do greg (onde mantive o que me agradava mais, cada um tem um jeito rs), eu posto aqui.

Bom, se você quiser usar todas as capacidades do nRF, como sugeri inicialmente, bora estudar o datasheet e as libs (que são bem comentadas)...

Até logo mais +

Pô Marco, 

   Tô ai,  quero sim !

   Estudar um troço desses é seguir uma metodologia, buscar algo,  dai seria mais legal se você encabeçasse e fosse me dizendo o que fazer e eu te ajudando.

   Sim, você tá certissimo, enviar um comando de 5 em 5 minutos entre modulos que falam e respondem um com ou outro é mais fácil que botar dezenas de modulos pra falarem entre sim em uma taxa de milesimos de segundos,  nesse caso cada pacote enviado e recebido é importante.

   Por isso que te propus estudarmos a sub-biblioteca RF24NETWORK,    sinceramente eu ainda não sentei a bunda pra começar a mexer com ela pois dei uma cagada e queimei dois arduinos nanos que tinha mandado pegar, dai tô só com 2 Unos e um Duemilanove que sinto ser mais lerdo que os Unos.

   Vou ver se bolo alguma placa mais simples, visto que só atmegas328 eu tenho uns 20, dai daria pra montar uns modulos de teste para estudo.

   Bem, deixo por sua conta, propõe ai como vocÊ quer fazer que tô dentro.

Fala ai Weider,

Quem já não queimou algo nesta área? rs... Não gosto nem de pensar, ainda mais nos CIs smd que nem dá pra trocar!

Muito bom saber que que tudo esta funciona bem =)

Cheguei a usar a RF24NETWORK para testes, mas acabei por pegar apenas alguns método para usar nos meus códigos (as vezes as livrarias tem mais do que o projeto precisa e esse excesso além de tomar espaço na memória/programa pode ser oneroso para a aplicação, neste caso, muitos pacotes perdidos).

Gostaria de ajudar mais, mas por enquanto não vejo possibilidade, este final de semana me provou isso. Meu projeto de automação ficara na gaveta por mais alguns meses (como disse, já esta à 7 =S). Além do trabalho, que consome a maior parte de nossas vidas, tenho mais 3 projetos parados (envolvendo desktop/C#, microcontrolador/C++, router/wrt e Smartphone/android), muita coisa de uma vez para uma mente cansada! kkk

Mas vai com calma que você chega lá. ;)

Bom dia amigo, estou tendo o mesmo problema. Sou novo na área e já automatizei parte de minha casa utilizando inicialmente a placa EasyVR (comando por voz), que depois passei para o celular utilizando o App Inventor, com comando de voz com interação por voz. Agora estou em uma nova versão integrando a Denise da GUILE 3D para interagir os comandos de voz e incluindo controle de água e energia elétrica. Estou monitorando 2 níveis de tanque d'água com seus respectivos volumes, medindo o consumo d'água na saída do tanque principal e pela diferença dos volumes dos tanques e o consumo sei quanto de água a concessionária abasteceu minha residência. E quanto ao controle de energia elétrica tentei utilizar uns medidores de corrente não evasivo, mas eles são muito imprecisos, daí optei em comprar um medidor de consumo no ML (bifásico com neutro), que fornece pulsos por kWh e conhecendo o tempo, tenho a potência, e com um medidor de tensão (módulo arduino), tenho a corrente. Isso tudo plotado em gráficos do google chart (ainda embrionário). Agora já aprontei o hardware e sketch do tanque principal (vazão e volume) e estou enviando para central via nRF24l01. O alcance inicial estava em média de 7 metros sem barreira e com a mudança da biblioteca do "Greg" que você recomendou, dobrou o alcance e atendeu a esta 1ª etapa deste projeto, porém a medição do 2º tanque está a uns 40 metros com 2 lajes e uma parede como barreira. Você tem alguma sugestão econômica para suprir esta necessidade? tenho que enviar dados de corrente de bamba, pulso de energia elétrica, volume do tanque. 

Olá Welligton,

 

    Tenho sim amigo.

    Primeiramente, já se cadastrou no nosso grupo NRF24L01 ?     eu coloquei um post lá essa semana falando justamente sobre as novas versões do NRF24L01 lançados recentemente, que são as versões SMD dos modulos.

 

    Bem, os NRF24L01 existem em dois "sabores"  a versão básica que é chamado de NRF24L01+  e a versão mais fodona que é a NRF24L01+PA+LNA.

     O lance é que a versão NRF24L01+PA+LNA que antes existia em apenas um modelo, agora existe em duas, sendo a DIP com antena removível e a SMD com antena de ceramica e tamanho miniaturizado.

      Vou postar o link das imagens deles abaixo,  o problema é que pelas fotos não dá pra se ter uma ideia do tamanho,  a versão DIP com antena externa é meio grandinho, na verdade o maior de todos,  já a versão SMD com antena ceramica é incrivelmente minusculo.

       Bem, veja aqui:

VERSÃO SMD

http://www.ebay.com/itm/NEW-2-4G-NRF24L01-PA-LNA-Wireless-Module-wi...

 

VERSÃO DIP

http://produto.mercadolivre.com.br/MLB-635236144-nrf24l01-pa-lna-an...

 

Ah!  só uma coisa Welligton,   tenho pedido ao pessoal que ao se cadastrar no grupo NRF24L01 que se puder, disponibilize alguma coisa que você tenha feito pra galera ok.

 

valeu amigo, qualquer duvida tamo ai.

 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço