Arduino NRF24L01 RC Car Robot Kit

Posted By: Jogja Robotika In: Project On: Monday, February 3, 2020 Comment: 0 Hit: 6040

Arduino NRF24L01 RC Car Robot Kit

.

Membuat Mobil Remote Kontrol menggunakan Arduino UNO dengan Modul Wireless nRF24L01. Mobil remot kontrol ini berbeda dari mobil remot kontrol mainan biasanya. Karena menggunakan Arduino, jadi mobil remot kontrol ini bisa dimodif sedemikian rupa oleh perancangnya. Misal mau ditambahkan sensor, aktuator, dall.

.

A. ALAT DAN BAHAN

1. Arduino UNO -> 2pcs

Arduino ini digunakan untuk kontroler remot dan robot nya.

2. Modul L298N -> 1pc

Modul L298N ini digunakan sebagai driver motor robot.

3. nRF24L01 -> 2pcs

Modul nRF24L01 ini digunakan untuk komunikasi nirkabel antara Robot dan Remot Kontrol. Sehingga membutuhkan 2 modul, satu untuk transmitter yang dipasang pada remote control dan satu lagi untuk receiver yang dipasang pada robot.

4. JoyStick Shield Gamepad Analog Arduino -> 1pc

Joystick yang terdiri dari beberapa axis. Termasuk axis X dan Y. Selain itu juga terdapat berbagai macam button yang dapat dimanfaatkan untuk berbagai macam fungsi.

5. Smart Car Chassis Kit A30 Sasis -> 1pc

Sasis mobil ini sudah terdiri dari Body Robot, Set Motor Gearbox Kuning + Roda, dan FreeWheel.

6. Baterai 18650 -> 4pcs

2 pcs untuk power Robot. 2pcs lagi untuk power remot kontrolnya.

7. Box Baterai Seri 2x 18650 -> 2pc

8. Saklar -> 1pc

Switch On-Off Power Robot.

9. Kabel Jumper -> Secukupnya (Male-Male 20pcs)

10. Spacer Kuningan 8mm Female to Female - > 8pcs

11. Baut JP m3x5mm -> 8pcs

12. Mur m3 -> 2pcs

13. Baut JF m3x10mm -> 1pcs

.

B. RANGKAIAN / WIRING DIAGRAM / SKEMATIK

1. Rangkaian pada Robot Mobil



.

a) nRF24L01 - Arduino UNO

*VCC - 3.3V
*GND - GND
*CE - D9
*SCN - D10
*SCK - D13
*MOSI - D11
*MISO - D12

.

b) L298N - Arduino UNO

* VCC - Vin
* GND - GND
* In1 - D2
* In2 - D3
* In3 - D4
* In4 - D5

.

2. Rangkaian Pada Remot Kontrol

.

C. PROGRAM

.

Jangan lupa copy-kan library ke file library Arduino di Documents (C).

Library nRF24L01 >> Klik disini...

.

1. Program Robot Mobil (Receiver)

.

#include "NRF24L01.h"

#define TX_ADR_WIDTH 5
#define TX_PLOAD_WIDTH 5
unsigned char RX_ADDRESS[TX_ADR_WIDTH] = {0x34,0x43,0x10,0x10,0x01};
byte rx_buf[TX_PLOAD_WIDTH] = {};
byte tx_buf[TX_PLOAD_WIDTH] = {};

#define m1 2
#define m2 3
#define m3 4
#define m4 5

void setup()
{ pinMode(m1,OUTPUT);
pinMode(m2,OUTPUT);
pinMode(m3,OUTPUT);
pinMode(m4,OUTPUT);
NRF_Init();
NRF_SetRxMode();
}
void motorOut(unsigned char lpwm, unsigned char rpwm, int arrow){
if(arrow==1){
digitalWrite(m3,HIGH);
digitalWrite(m1,LOW);
analogWrite(m4,255-lpwm);
analogWrite(m2,rpwm);
}
if(arrow==2){
digitalWrite(m3,LOW);
digitalWrite(m1,HIGH);
analogWrite(m4,lpwm);
analogWrite(m2,255-rpwm);
}
}
void loop()
{
NRF_SetRxMode();
if(NRF_Receive(rx_buf))
{
for(int i = 0; i < 4; i++)
{
if((rx_buf[0]>120) && (rx_buf[0]<140)) { motorOut(0,0,2);} //stop
if(rx_buf[0] > 130) {motorOut(rx_buf[0],rx_buf[0],2);} // maju
if(rx_buf[0] < 120) {motorOut(255-rx_buf[0],255-rx_buf[0],1);} // mundur
if((rx_buf[0] > 120)&& (rx_buf[0] < 140) && (rx_buf[3] == 0)) {motorOut(0,255,2);} // kiri
if((rx_buf[0] > 120) && (rx_buf[0] < 140) && (rx_buf[2] == 0)) {motorOut(255,0,2);} // kanan
if((rx_buf[0] > 140) && (rx_buf[3] == 0)) {motorOut(125,rx_buf[0],2);} // maju kiri
if((rx_buf[0] > 140) && (rx_buf[2] == 0)) {motorOut(rx_buf[0],125,2);} // maju kanan
if((rx_buf[0] < 120) && (rx_buf[3] == 0)) {motorOut(125,255-rx_buf[0],1);} // mundur kiri
if((rx_buf[0] < 120) && (rx_buf[2] == 0)) {motorOut(255-rx_buf[0],125,1);} // mundur kanan
}
for(int i = 0; i < 9; i++)
rx_buf[i] = 0;
}
}

.

2. Remot Kontrol (Transmitter)

.

#include "NRF24L01.h"

#define TX_ADR_WIDTH 5 
#define TX_PLOAD_WIDTH 5 
unsigned char TX_ADDRESS[TX_ADR_WIDTH] = {0x34,0x43,0x10,0x10,0x01};
byte rx_buf[TX_PLOAD_WIDTH] = {}; 
byte tx_buf[TX_PLOAD_WIDTH] = {};

const int X_pin = A1; 
const int Y_pin = A0;
const int b = 3;
const int d = 5;

void setup() {
pinMode(b, INPUT);
pinMode(d, INPUT);
NRF_Init();

}

void loop() {
NRF_SeTxMode();
if(NRF_CheckAck())
{

tx_buf[0] = map(analogRead(X_pin), 0, 1023, 0, 255);
tx_buf[1] = map(analogRead(Y_pin), 0, 1023, 0, 255);
tx_buf[2] = digitalRead(b);
tx_buf[3] = digitalRead(d);

NRF_Send(tx_buf);

}

}

.

.

Selamat Mencoba..

www.jogjarobotika.com

.

.

.

.

.

Comments

Leave your comment