O+transceiver+NRF24L01

Home > Robótica > Bibliotecas **Recursos** > RunTimer > Timer2 > CircularBuffer > SerialLog > ActionPlan **Dispositivos** > Ultrassom > Array de sensores > **NRF24L01** > Wireless log > RF24Control **Movimento** > StepperMotor > StepperMotorTm > DoubleStepper > DoubleStepperTm

Logar o que acontece dentro do programa é sempre útil, mas quando se trata de um robô móvel, isso fica um pouco mais complicado. Não dá pra testar o robô completamente com ele na bancada de testes conectado ao computador. Em algum momento é preciso colocar o robô no chão e fazer testes "em campo". E aí é necessário algum recurso wireless para poder acompanhar o que acontece dentro dele quando está enfrentando o mundo real. O módulo NRF24L01 é ideal para comunicação wireless no arduino. É um transceiver que opera em RF (Radio Frequência) na faixa dos 2,4 MHz, barato, fácil de encontrar à venda, fartamente documentado e com muito suporte de bibliotecas para sua operação. Vem em duas versões, uma mais simples com antena interna (figura 1) e outra mais "parruda" com antena destacável (figura 2). Diz a lenda que a versão bombada dele consegue comunicar a até 1000 metros em campo aberto. Se consegue ou não, não cheguei a testar, mas consegui que dois desses parrudinhos se comunicassem sem erros estando um deles na sala e outro no escritório com 3 paredes entre eles. Esse é um feito que seu irmão menor não consegue de jeito nenhum, os erros começam já na primeira parede. E mesmo aumentando a velocidade de transmissão para o máximo (2Mbps!!!, ou seja, 2 milhões de bits por segundo, é mole?) a transmissão continuou limpa e clara, sem erros. É realmente uma coisinha linda esse NRF24L01.

Se for adquirir um par destes, preste atenção na pinagem. O padrão mais comum é o de 8 pinos, como mostrado nas fotos acima, mas existem versões com 10 pinos, que repetem o GND e o VCC, se comprar a versão com 10 pinos podem ser mais bem mais complicado para conseguir adaptadores, e acredite, os adaptadores são necessários. Essas belezinhas funcionam com 3.3 volts e a maioria das versões do arduino funciona com 5 volts, ou seja, eles não combinam. O arduino tem uma saída de 3.3 volts que pode ser utilizada, mas essa saída não é capaz de fornecer muita corrente e pode não conseguir alimentar o bichinho adequadamente. Os adaptadores podem ser alimentados com 5 volts porque contam com um regulador de voltagem capaz de converter para os 3.3 volts que os radinhos gostam. E facilitam muito a vida de quem se aventurar a brincar com eles, mesmo porque, o formato da pinagem em duas linhas não é nem um pouco amigável, por exemplo, impede que o rádio seja instalado em uma protoboard para testes. Um outro detalhe é que eles são meio gulosos em relação ao consumo de energia. Providencie uma fonte externa de energia para fazer os testes. Um arduino alimentado apenas com a saída USB de um computador não vai conseguir convence-los a trabalhar direito, eles gastam mais do que parece pelo seu tamanho e a saída USB pode não fornecer a corrente que eles precisam.
 * = [[image:fperrotti/nrf24l01.jpg width="268" height="180" align="center"]] ||= [[image:fperrotti/nrf24l01-4.jpg width="217" height="205" align="center"]] ||= [[image:fperrotti/nrf24l01-3.jpeg width="238" height="193" align="center"]] ||
 * = Figura 1- NRF24L01 com antena impressa na placa ||= Figura 2 - NRF24L01 com antena destacável ||= Figura 3 - Adaptador para NRF24L01 ||

Caso esteja usando o arduino Nano, existem placas para o Nano que já contém um adaptador para estes rádios (figura 4). Também existem shields para o arduino UNO e Mega, mas nesse caso acho que o adaptador mostrado na figura 3 tem um custo benefício bem melhor por ser muito mais barato. Além disso, pelo fato de ser um componente independente do arduino permite que seja instalado em posições mais favoráveis para a transmissão/recepção.

Um dispositivo de comunicação nunca é simples, especialmente se for wireless. Existe uma infinidade de detalhes técnicos que precisam ser cuidados para que a comunicação funcione sem erros. Protocolos, CRCs, Ack e Nack, taxas de transmissão, força do sinal, ruídos, canais, pipes, interrupções, isso sem falar nos registradores e buffers internos, e vai por aí, não é algo que se aprende em um fim de semana. Mas felizmente existem programadores empenhados em tornar a vida dos mortais mais fácil e que produzem bibliotecas de código aberto que cuidam de todos esses detalhes e permitem que mesmo sem todo esse conhecimento possamos usar essa pequena maravilha tecnológica em nossos projetos. Um viva a J. Coliz que destrinchou tudo isso e criou a biblioteca RF24 utilizada como base para tudo o que foi feito aqui. Veja os detalhes nas próximas páginas.

Instalação no arduino
Como citado antes, o NRF24 tem oito pinos, sendo 2 de alimentação (VCC e GND) e um de interrupção (IRQ) que não é usado no arduino. O chip instalado na plaquinha e que faz a mágica toda funciona com 3.3 volts, então essa tem que ser a voltagem fornecida. Os pinos de sinais costumam ser tolerantes aos 5 volts fornecidos pelos pinos do arduino, mas é bom confirmar se o modelo que você tem em mão tem essa tolerância.

Dos cinco pinos restantes, três deles (MOSI, MISO e SCK) precisam ser conectados a pinos específicos do arduino porque usam a interface SPI e isso depende da versão do arduino. Os outros dois (CE e CSN) podem usar qualquer pino disponível. Abaixo uma tabela com os pinos do UNO e do Mega.


 * -- Pino NRF24 -- || -- Uno, Nano -- || -- Mega -- ||
 * GND || GND || GND ||
 * VCC || 3.3v || 3.3v ||
 * CE || 9(*) || 9(*) ||
 * CSN || 10(*) || 10(*) ||
 * SCK || 13 || 52 ||
 * MOSI || 11 || 51 ||
 * MISO || 12 || 50 ||
 * (*) Pode ser usado outro pino ||

Comunicação SPI Embarcados
 * Referências: **