domingo, 2 de julho de 2023

Carrinho de Controle Remoto com Arduino Nano e NRF24L01 - RECEPTOR

    Bom dia colegas. Hoje vou ensinar a vocês como fazer o receptor do carrinho de controle remoto utilizando o módulo NRF24L01. Primeiro vou começar com a lista de materiais utilizados:

 

1) 01 Auduino Nano;

2) 01 módulo NRF24L01 de 2,4GHz;

3) 01 Motor DC 3-6V com Caixa de Redução e Eixo Duplo;

4) 01 Micro Servo Motor 9G SG90 TowerPro;

5) 04 baterias de ion-lítio 18650 de 6800mAH e 3,7V;

6) 01 Regulador de Tensão LM7805, 5V DC;

7) 01 Capacitor eletrolítico de desacoplamento de 3.300 uF (microF);

8) 01 Capacitor cerâmico de desacoplamento de 100nF (nanoF);

9) 01 Adaptador para NRF24L01 com Regulador YL-105;

10) 01 CI L293D ponte H dupla;

11) Jumpers para as ligações;

12) 01 diodo;

13) 02 mini protoboards.


Veja o esquema de ligação entre o Arduino e o NRF24L01:

    Espetamos o NRF24L01 no adaptador com regulador de tensão de 3,3V para 5V e ligamos nos 5V do Arduino. No pino D7 do Arduino ligamos o CE. No pino D8 do Arduino ligamos o CSN. No pino D13 do Arduino ligamos o CSK. No pino D11 ligamos o MOSI e no pino D12 ligamos o MISO. O IRQ não ligamos a nada, pois não vamos utilizar no momento. O GND do NRF24L01 ligamos no GND do Arduino assim como no GND do protoboard das baterias e da ponte H. Todos os GND devem estar conectados. A saída de 3,3V do Arduino utilizei para alimentar a lógica do CI L293D da ponte H (já que estava sem uso no Receptor). Liguei um regulador de 5V, o 7805, em 02 baterias na sua entrada (7,4V DC) e na saída liguei o capacitor de 100nF e usei para alimentar o Arduino (Vin) e o Servomotor, pois notei que sem o regulador o Arduino não estava funcionando direito. Usei o capacitor de desacoplamento de 3.300 uF para conectar entre o terra e a entrada de 5V do arduino que alimenta o módulo regulador de 5V do NRF24L01. Sem esse capacitor o módulo tem baixo alcance.  As saídas D2 e D3 do Arduino vão acionar o motor na ponte H. A saída D4 do Arduino é o controle do ServoMotor. Observe o circuito abaixo. Só falta conectar ao NRF24L01 conforme instruções acima. A fonte são as duas baterias de ion – lítio. As outras 02 baterias vão alimentar o motor no pino 8 do CI  L293D ponte H:

 






Segue o Sketch do Receptor:

#include <Servo.h>
Servo servo;
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7,8); // CE, CSN
const byte address[6] = "00001";
boolean estado_B1=0;
boolean estado_B2=0;
boolean estado_B3=0;
boolean leitura=false;
int msg[1];

void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(0,address);
  radio.setPALevel(RF24_PA_MIN);
  radio.setChannel(82);
  radio.startListening();
  servo.attach(4);
 
 
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  }

void loop() {
 if (radio.available()) {
  while(!leitura){
  radio.read(&msg, sizeof(msg));
 
  while(msg[0]==111){
    delay(10);
    digitalWrite(2,HIGH);
    radio.read(&msg, sizeof(msg));
  }
   
  while(msg[0]==112){
    delay(10);
    digitalWrite(3,HIGH);
    radio.read(&msg, sizeof(msg));
  }
 
  while(msg[0]==113){
    //delay(10);
    servo.write(10);
    delay(50);
    radio.read(&msg, sizeof(msg));
  }
 
  while(msg[0]==114){
    //delay(10);
    servo.write(170);
    delay(50);
    radio.read(&msg, sizeof(msg));
  }
   
  while(msg[0]==115){
    //delay(10);
    servo.write(10);
    delay(50);
    digitalWrite(2,HIGH);
    radio.read(&msg, sizeof(msg));
  }
 
  while(msg[0]==116){
    //delay(10);
    servo.write(170);
    delay(50);
    digitalWrite(2,HIGH);
    radio.read(&msg, sizeof(msg));
  }
 
  while(msg[0]==117){
    //delay(10);
    servo.write(10);
    delay(50);
    digitalWrite(3,HIGH);
    radio.read(&msg, sizeof(msg));
  }

  while(msg[0]==118){
    //delay(10);
    servo.write(170);
    delay(50);
    digitalWrite(3,HIGH);
    radio.read(&msg, sizeof(msg));
  }

  while(msg[0]==119){
    //delay(10);
    servo.write(90);
    delay(30);
    digitalWrite(2,LOW);
    digitalWrite(3,LOW);
    radio.read(&msg, sizeof(msg));
  }

    servo.write(90);
    delay(10);
    digitalWrite(2,LOW);
    digitalWrite(3,LOW);
   
 
  } //fechamento do while
 } //fechamento do radio.avaliable
 } //fechamento do void loop

 Vejam como ficou o carrinho na real:



Por hoje é só pessoal. Até a próxima !!