Boa noite pessoal. Eu me chamo Médici, sou um entusiasta de tecnologia. Recentemente por um projeto na faculdade, de criar um programa para celular que leia as informações de um sensor de corrente no arduino + raspberry. Para tal, em vez de emprestar da Professora/Orientadora acabei comprando algumas coisas no querido Aliexpress, as quais se resumem a 1 raspberry, 4 arduinos uno, 1 ethernet shield 5100, resistores, breadboards, leds e uns 60 modulos diferentes.

Cada um dos módulos consegui testar de boa, ter bons retornos e aplicações. Mas então eis que tento fazer funcionar o famigerado NRF24L01. 

Comprei 3 peças desse pequeno, e estou numa luta para fazer eles funcionarem constantemente. Andei pesquisando aqui e ali, e tenho algumas considerações:

Várias são as bibliotecas para ele. As que achei foram 3: RF24, RF24Master e RF24Master Corrigida, esta ultima sendo de um autor que a postou e que se empenhou em corrigir os erros apresentados.

O NRF24L01 não funciona com todas as bibliotecas. Como alguem deste forum disse não encontrei bibliotecas do fabricante, sendo apenas as das comunidades.

Aos projetos que utilizei as bibliotecas, seguem:

Com a RF24 consegui ligar 1 led a distancia. Sendo que quando consigo 1 vez, não funciona novamente.

Com a RF24Master, não consigo receber, então não tenho certeza do envio.

Com a RF24MasterCorrigida tenho o mesmo problema da RF24Master.

Vou começar a analisar as 3 bibliotecas e postar algo aqui, pois tudo o que li, inclusive no Lab de Garagem para que funcione não se aplicou as minhas placas.

Se estou sendo repetitivo no forum ou nas informações, peço desculpas, pois mesmo com as informações encontradas aqui não consegui solução aplicavel.

Em alguns minutos vou postando os resultados.

Exibições: 1184

Responder esta

Respostas a este tópico

Biblioteca RF24

A biblioteca foi adquirida num curso web, do Brincando com Ideias. O Link remete a biblioteca salva no google drive:

https://drive.google.com/file/d/0B91L9po09u35YlRxaUlZNlRPWDA/view?u...

Agora aos testes

2 Arduinos Uno cada um com uma NRF24L01+. 

Pino 1 - GND

Pino 2 - VCC 3.3V

Pino 3 - CE - 8

Pino 4 - CS - 9

Pino 5 - SCK - 13

Pino 6 - MOSI - 11

Pino 7 - MISO - 12

Os dois arduinos estão montados nas mesmas configurações. Apenas o transmissor ou receptor, de acordo com o programa teste tera a seguinte configuração:

Pulldown no pino 7 - GND + Resistor 220Ohms ligados na porta 7

Agora vamos la. Para os testes exclui todas as bibliotecas RF e deixei somente a deste teste. Alem disso nomeei as placas como A, B e C, com uma etiqueta, e vou começar fazendo o teste da A com a B

O codigo utilizado é o GettingStarted, sendo radioNumber=0 no RF A e radioNumber=1 no RF B

role = 0 no RF A e role =1 no RF B

Sem qualquer resposta apos 5 minutos.

Agora o teste de Scanner

Com o B transmitindo e o A scaneando, tambem não tive sucesso com essa biblioteca:

Mas eis que quando estou a fechar, tenho a seguinte resposta:

Logo após  vou testar o envio.

O código para Envio segue abaixo: 

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

#define pinbtn1 2
#define pinbtn2 3

int dados[1];
RF24 radio(8,9);

const uint64_t pipe = 0x1A02E527BLL;

void setup()
{
    Serial.begin(9600);
    Serial.println("Pressione botao 1 ou 2 para iniciar a comunicacao...");

    pinMode(pinbtn1, INPUT);
    digitalWrite(pinbtn1, HIGH);
    pinMode(pinbtn2, INPUT);
    digitalWrite(pinbtn2, HIGH);

    radio.begin();
    radio.openWritingPipe(pipe);
}

void loop ()
{
    radio.powerUp();
    if (digitalRead(pinbtn1) == LOW)
    {
        Serial.print("Botão 1 Pressionado!");
        dados[0]=1;
        radio.write(dados, sizeof(int));
        bool teste = radio.write(dados, sizeof(int));
        Serial.println(teste);
    }
    if (digitalRead(pinbtn2) == LOW)
    {
        Serial.print("Botão 2 Pressionado!");
        dados[0]=2;
        radio.write(dados, sizeof(int));
        bool teste = radio.write(dados, sizeof(int));
        Serial.println(teste);
    }
}

O código do Receptor segue abaixo:

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

int recebidos[1];
RF24 radio(8,9);

const uint64_t pipe = 0x1A02E527BLL;

int pin[2]={2,3};

void setup()

{

    pinMode(pin[0], OUTPUT);
    pinMode(pin[1], OUTPUT);

    Serial.begin(9600);
    radio.begin();
    radio.openReadingPipe(1,pipe);
    radio.startListening();

}

void loop()

{

    radio.powerUp();
    digitalWrite(pin[1], LOW);
    digitalWrite(pin[0], LOW);

    if (radio.available())
    {
        bool done = false;
        while (!done)
        {
            done = radio.read(recebidos, 1);
            Serial.print("Dados recebidos : ");
            Serial.println(recebidos[0]);
            if (recebidos[0] == 1)
            {
                digitalWrite(pin[1], LOW);
                digitalWrite(pin[0], HIGH);
            }
            else
            {
                digitalWrite(pin[1], LOW);
                digitalWrite(pin[0], LOW);
            }
            if (recebidos[0] == 2)
            {
                digitalWrite(pin[1], HIGH);
                digitalWrite(pin[0], HIGH);
            }
            else
            {

                digitalWrite(pin[1], LOW);
                digitalWrite(pin[0], LOW);
            }
            delay(100);
        }
    }
    else
    {
        Serial.println("Aguardando entrada de dados...");
    }
}

A lógica é quando apertar O botão ele ligue os leds no outro arduino.

Vamos ao teste

Infelizmente o teste não aconteceu. Com essa biblioteca não funcionam os códigos. Vamos agora para a RF24 Master

Agora vou usar a biblioteca RF24-Master.  o Link segue abaixo

https://github.com/maniacbug/RF24

A esta vamos aplicar os mesmos testes.

Primeiro o getting Started

Agora o teste dos códigos:

Bom, até agora sem sucesso. Até mesmo o código que funcionou 2x (note que 2 vezes significa que apertei o botão e por duas vezes em mais ou menos 100 tentativas funcionou)  não esta funcionando.

Feito o Teste com a Biblioteca RF24-Master-Corrigida, deste link

https://github.com/gcopeland/RF24

E dando os mesmos resultados.

Alguem pode me explicar como testar individualmente estes módulos? Ou assim que eu conseguir algo eu postarei. Abraços

Olá Médici,

Por experiência própria com esses rádios recomendo a biblioteca RF24Network do TMRh20 que você encontra pra baixar no próprio gerenciador de bibliotecas da IDE do arduino. Basta ir no menu "Sketch > Incluir Bibliboteca > Gerenciador de bibliotecas", e depois procurar por RF24Network. Essa biblioteca está sempre sendo atualizada e pra mim funcionou bem melhor que a biblioteca do maniacbug. Se não me engano ela é uma versão melhorada da biblioteca do maniacbug. 

Depois de instalar essa biblioteca você pode usar os exemplos que vem com ela pra testar os rádios. No menu "Arquivo > Exemplos > RF24Network > helloword_tx" e "Arquivo > Exemplos > RF24Network > helloword_rx". Voce deve descarregar o exemplo Helloword_tx em um arduino e helloword_rx no outro. E monitorar as seriais dos dois arduinos, se não me engano o tx envia numeros como Payload para o rx, e o rx mostra na serial que recebeu os mesmos números.

Outro detlhe importante, existem imitações desses rádios no aliexpress, que são vendidos como similares ao NRF24l01, mas na verdade não funcionam com essas bibliotecas, já comprei quando não sabia disso. Mas existem os originais no aliexpress também. Se der, seria bom você postar uma foto pra gente ver se os seus são NRF24l01 mesmo.

Como sugestão evite colar o código no post. É uma determinação que está na página inicial do fórum. 

http://labdegaragem.com/forum/topics/sugest-o-de-como-postar

Peço desculpas Daniel, cheguei basicamente ontem aqui e não achei o topico das regras. 

Vou tentar com a biblioteca, mas se não me engano ja tinha brincado com ela antes.

As fotos  vou postar de uma das placas, ja que as mesmas vieram juntas, tive que destaca-las.

Em seu chip esta escrito:

NRF 0

24L01+

1420GW

Em outro

NFR M

24L01+

1126EV

o no ultimo

NFR M

24L01+

1132AQ

Ja postos os resultados do teste

Anexos

Ok, pelas fotos parece que são realmente NRF24l01. Esses módulos suportam apenas 3,3V nos pinos de alimentação. Já nos pinos de comunicação SPI eles suportam 5V.

Outro detalhe importantíssimo é adicionar um capacitor eletrolítico em paralelo com os pinos de alimentação. Caso você fabrique uma placa de circuito impresso para montar o radio esse capacitor deve estar o mais próximo possível dos pinos de alimentação do radio, se não for usar um placa de circuito impresso pode soldar este capacitor direto nos pinos de alimentação do radio, atenção para a polaridade do capacitor eletrolítico.

E por ultimo, muitas vezes a fonte 3,3V do arduino não fornece corrente suficiente para o bom funcionamento do rádio. Tente utilizar uma fonte separada de 3,3V para alimentar os rádios.

Fiz a alguns momentos antes de ver sua mensagem inicial a soldagem de 2 capacitores eletroliticos 10uf 16v, um em cada 1 de duas peças, excluindo-se a terceira por falta de capacitor. 

Mesmo com eles não consigo.

Alem disso instalei a biblioteca do seguinte link estou com a mensagem de erro:

In file included from C:\Users\Médici\Documents\Arduino\libraries\RF24Network-Development/RF24Network.h:20:0,

from C:\Users\Médici\Documents\Arduino\libraries\RF24Network-Development\examples\helloworld_rx\helloworld_rx.ino:18:

C:\Users\Médici\Documents\Arduino\libraries\RF24Network-Development/RF24Network_config.h:80:29: fatal error: RF24_config.h: No such file or directory

#include <RF24_config.h>

^

Necessito instalar outra biblioteca tambem? Alias a pergunta correta seria necessita mesclar as bibliotecas?

Favor ignorar os erros descritos acima... consegui instalar a biblioteca com exito.. necessita da biblioteca RF24 e a RF24Network da propria TMRh20 

Vamos la:

Chamei as placas de A, B e C:

Nos testes não comunicou.. mas dai resolvi fazer o teste do TX:

A placa A me deu o retorno Sending . . Failed (imediatamente apos o sending) - Possui capacitor

A placa B me da o retorno: Sending . . .   e não aparece mais nada - Possui capacitor

A placa C me da o retorno Sending ... Ok e não possui capacitor.

Vou retirar os capacitores, mas imagino que alguma esteja com defeito kkkkk 

 

Vamos la

Vou chamar os arduinos de 1 e 2 e os modulos de A, B, C

Retirei os capacitores dos Modulos e retomei os testes

No arduino 1 - Teste TX

A)

RF24Network/examples/helloworld_tx/
Sending...ok.
Sending...

B)

RF24Network/examples/helloworld_tx/
Sending...

C)

RF24Network/examples/helloworld_tx/
Sending...ok.
Sending...

No arduino 2 - Teste TX

A)

RF24Network/examples/helloworld_tx/
Sending...failed.
Sending...ok.
Sending...ok.
Sending...ok.
Sending...ok.

B)

RF24Network/examples/helloworld_tx/

Sending...

C)

RF24Network/examples/helloworld_tx/
Sending...failed.
Sending...ok.
Sending...ok.
Sending...ok.
Sending...ok.

Neste ponto pude reparar que os dispositivos se comportam de maneira diferente no Arduino 1 e no Arduino 2, sendo assim não sei o que possa ser o defeito.

Como as constantes em Equipamentos foram A e C, farei o teste TX RX

Segue

Arduino 1 - A - TX

Arduino 2 - C - RX

RF24Network/examples/helloworld_tx/
Sending...ok.
Sending...

RF24Network/examples/helloworld_rx/

Arduino 1 - A - RX

Arduino 2 - C - TX

RF24Network/examples/helloworld_tx/
Sending...ok.
Sending...ok.
Sending...ok.
Sending...ok.
Sending...ok.
Sending...ok.
Sending...ok.
Sending...ok.

RF24Network/examples/helloworld_rx/

Arduino 1 - C - TX

Arduino 2 - A - RX

RF24Network/examples/helloworld_tx/
Sending...

RF24Network/examples/helloworld_rx/

Arduino 1 - C - RX

Arduino 2 - A - TX

RF24Network/examples/helloworld_tx/
Sending...ok.
Sending...

RF24Network/examples/helloworld_rx/

Bom... uma cerveja pra quem fazer eles funcionarem kkk

Esqueci de falar o valor do capacitor, eu uso 22uF 10V. Mas já vi pessoas que usam até 470uF 10V. Aí precisa testar valores que funcionam melhor com sua aplicação. Aparentemente eles estão comunicando, visto que para escrever “Sending ok” o tx precisa receber um Feedback do rx confirmando a recepção dos dados enviados pelo tx.

Uma dúvida, você configurou o monitor serial na porta COM certa para cada arduino? O ideal é conectar um arduino somente primeiro e verificar qual com ele está usando. E ao conectar o segundo arduino selecionar a segunda porta COM nas configurações do monitor serial.

Para realizar os testes sempre deverá ter um arduino programado como rx e outro como tx, cada um com um com seus respectivos rádios.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço