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 !!

 

 

sexta-feira, 30 de junho de 2023

Carrinho de Controle Remoto com Arduino Nano e NRF24L01 - TRANSMISSOR

Boa Tarde.

        Hoje vou postar pra vocês um projeto renovado. Repaginado. Seria a continuação do projeto de montagem do carrinho de controle remoto, mas com novos componentes. Pra começar, eu resolvi fazer do zero tanto o chassi do carro, quanto o circuito eletrônico. A programação também foi diferente. Vamos logo ao circuito. Para o transmissor, utilizei os seguintes componentes:

1) 01 Auduino Nano;

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

3) 04 botões Push Button de cores variadas;

4) 04 resistores de pull-down de 10K;

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

6) Jumpers para as ligações;

7) Um mini protoboard.

O pinout do NRF24L01 fica conforme a figura abaixo:

 



Nos pinos digitais D2, D3, D4 e D5 do Arduino eu liguei os 4 botões com os resistores de pull-down de 10K, conforme figura abaixo:


O esquema de ligação é o seguinte:

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. Ligamos os 3,3V do Arduino no Vcc do NRF24L01 pois o módulo não suporta 5V (queimei um sem querer ligando em 5V). O GND do NRF24L01 ligamos no GND do Arduino assim como no GND do protoboard e das baterias. Todos os GND devem estar conectados. A saída de 5V do Arduino vai alimentar somente o barramento dos botões. A alimentação do Arduino vem direto das baterias e entra no Vin. Veja o pinouto do Arduino abaixo para facilitar a ligação:


Veja como ficou o circuito do transmissor final:




O Sketch do transmissor ficou assim:

#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 estado_B4 = 0;
int msg[1];

void setup() {
  radio.begin();
  radio.openWritingPipe(address);
  radio.stopListening();
  radio.setPALevel(RF24_PA_MIN);
  radio.setChannel(82);
  pinMode(2,INPUT);
  pinMode(3,INPUT);
  pinMode(4,INPUT);
  pinMode(5,INPUT);
 
}
 
void loop() {
  estado_B1 = digitalRead(2);  
  estado_B2 = digitalRead(3);
  estado_B3 = digitalRead(4);
  estado_B4 = digitalRead(5);
 
  if(estado_B1 ==HIGH && estado_B2 == LOW && estado_B3 == LOW && estado_B4 == LOW ){
    msg[0]=111;
    radio.write(&msg,sizeof(msg));
    }
 
  if(estado_B2 ==HIGH && estado_B1 == LOW && estado_B3 == LOW && estado_B4 == LOW){
    msg[0]=112;
    radio.write(&msg,sizeof(msg));
    }
 
  if(estado_B3 ==HIGH && estado_B1 == LOW && estado_B2 == LOW && estado_B4 == LOW){
    msg[0]=113;
    radio.write(&msg,sizeof(msg));
    }
 
  if(estado_B4 ==HIGH && estado_B1 == LOW && estado_B2 == LOW && estado_B3 == LOW){
    msg[0]=114;
    radio.write(&msg,sizeof(msg));
    }
  if(estado_B1 ==HIGH && estado_B3 ==HIGH){
    msg[0]=115;
    radio.write(&msg,sizeof(msg));
    }
  if(estado_B1 ==HIGH && estado_B4 ==HIGH){
    msg[0]=116;
    radio.write(&msg,sizeof(msg));
    }
  if(estado_B2 ==HIGH && estado_B3 ==HIGH){
    msg[0]=117;
    radio.write(&msg,sizeof(msg));
    }
  if(estado_B2 ==HIGH && estado_B4 ==HIGH){
    msg[0]=118;
    radio.write(&msg,sizeof(msg));
    }
  if(estado_B1 ==HIGH && estado_B2 ==HIGH || estado_B3 ==HIGH && estado_B4 ==HIGH ){
    msg[0]=119;
    radio.write(&msg,sizeof(msg));
    }

}

Valeu. No próximo post vou colocar o circuito receptor.