Mobil RC Arduino 4WD – Daftar Lengkap Komponen & Panduan Pembuatan
Komponen dan Perlengkapan
- Arduino UNO – 2 unit
- SparkFun Transceiver Breakout - nRF24L01+ (RP-SMA) – 2 unit
- Funduino Joystick Shield V1.A – 1 unit
- SparkFun Dual H-Bridge motor drivers L298 – 2 unit
- 4WD Smart Robot Car Chassis Kit – 1 unit
- LED (umum) – 3 unit
- Resistor 221 ohm – 2 unit
- Breadboard (umum) – 2 unit
- Baterai 18650 – 2 unit
- Powerbank – 1 unit
- Kabel jumper (umum) – 1 set
Alat yang Diperlukan
Aplikasi dan Layanan Online
Tentang Proyek Ini
Cerita
Halo semuanya! Ini adalah proyek selanjutnya saya - Mobil RC Arduino 4WD dengan Pengendali Joystick atau Seberapa Mudahnya Mengontrol Mobil Pintar Arduino 4WD dengan Joystick Analog.
Mobil RC yang dikendalikan joystick ini menggunakan NRF24l01 sebagai pengirim dan penerima. Memiliki jarak hingga 1 kilometer di ruang terbuka. Juga sangat sederhana dan mudah dibuat.
1. Pengontrol Joystick
Komponen untuk Joystick:
Joystick shield ditempatkan di atas Arduino Anda dan mengubahnya menjadi pengontrol sederhana. 7 tombol push momentary (4 tombol besar, 2 tombol kecil, dan tombol select joystick) dan joystick jempol dua sumbu memberikan fungsionalitas Arduino Anda pada tingkat pengontrol Nintendo lama. Unit ini juga menawarkan antarmuka Nokia 5110 LCD dan nRF24L01.
Fitur:
- Antarmuka nRF24L01
- Antarmuka Nokia 5110 LCD
- Antarmuka Bluetooth
- Antarmuka I2C
- Kompatibel dengan Arduino
- Tegangan operasi 3.5V atau 5V
Sebetulnya, ini dilabeli sebagai BTE16-49 - modul komunikasi nirkabel nRF24L01+RFX2401C +PA+LNA dengan casing pelindung antena 2.4GHz 20dbm 1000m.
Karakteristik yang ditentukan oleh penjual:
- Band ISM global 2.4GHz terbuka, penggunaan bebas lisensi
- Kecepatan operasi maksimum 2Mbps, modulasi GFSK efisien, transmisi audio, video
- 125 saluran, untuk memenuhi kebutuhan komunikasi multipoint dan frekuensi-hopping
- Alamat deteksi kesalahan CRC hardware bawaan dan kontrol komunikasi multipoint ke titik
- Tegangan kerja 3.0-3.6V, daya transmisi 20dBm (VDD = 3.3V)
- Antenna 2.4GHz eksternal
- Pin pitch 2.54mm, sepenuhnya kompatibel tanpa antarmuka modul penguat, mudah untuk mengganti dan meningkatkan jarak
- Jarak transmisi hingga 1000 m
2. Pengontrol Joystick
Joystick Shield memiliki 4 tombol besar + 2 tombol kecil + tombol select joystick dan joystick jempol dua sumbu (sumbu X dari 0 hingga 1023, sumbu Y dari 0 hingga 1023). Shield ini duduk di atas Arduino Anda dan mengubahnya menjadi pengontrol sederhana. Dalam sketsa saya Tombol Atas untuk Buzzer (claxon), Tombol Kanan - lampu depan (LED + resistor 200 Ohm), Tombol Kiri - lampu belakang (LED + resistor 200 Ohm). Tombol lainnya tidak digunakan.
Pengujian Joystick:
Status idle: X=499, Y=502, Up=1, Right=1, Down=1, Left=1
3. Mobil RC Arduino 4WD
Buat koneksi sesuai dengan diagram kabeling di atas.
Catatan: sebelum mengunggah kode, Anda harus memutuskan kabel jumper dari papan Arduino Uno (pin 0, 1).
Itu saja setelah Anda melakukan semua langkah dengan benar, Mobil siap digunakan!
Setelah menyalakan Mobil Arduino dan Pengontrol Joystick, Anda dapat menggunakan Joystick untuk mengontrol mobil dengan memindahkan Joystick ke depan dan belakang mobil akan bergerak ke arah Depan atau Belakang, dan memindahkan Joystick ke kiri dan kanan akan membuat mobil belok ke kiri dan kanan.
Tetap terhubung!
Kode
Car_nRF24.ino
/* Kode penerima modul JoyStick - KONEKSI: Modul nRF24L01 Lihat: 1 - GND 2 - VCC 3.3V !!! BUKAN 5V 3 - CE ke pin Arduino 6 4 - CSN ke pin Arduino 8 5 - SCK ke pin Arduino 13 6 - MOSI ke pin Arduino 11 7 - MISO ke pin Arduino 12 8 - TIDAK DIGUNAKAN */
//-----( Impor pustaka yang diperlukan )-----
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
/*-----( Deklarasi Konstanta dan Nomor Pin )-----*/
#define CE_PIN 6
#define CSN_PIN 8
const uint64_t pipe = 0xE8E8F0F0E1LL; // Definisikan saluran transmisi
#define light_Front 18 // LED Depan Kanan pin A4 untuk Arduino Uno
#define light_Back 19 // LED Belakang Kanan pin A5 untuk Arduino Uno
#define horn_Buzz 7
#define ENA_m1 3 // Enable/kecepatan motor Depan Kanan
#define ENB_m1 5 // Enable/kecepatan motor Belakang Kanan
#define ENA_m2 9 // Enable/kecepatan motor Depan Kiri
#define ENB_m2 10 // Enable/kecepatan motor Belakang Kiri
#define IN_11 0 // L298N #1 in 1 motor Depan Kanan
#define IN_12 1 // L298N #1 in 2 motor Depan Kanan
#define IN_13 2 // L298N #1 in 3 motor Belakang Kanan
#define IN_14 4 // L298N #1 in 4 motor Belakang Kanan
#define IN_21 14 // L298N #2 in 1 motor Depan Kiri
#define IN_22 15 // L298N #2 in 2 motor Depan Kiri
#define IN_23 16 // L298N #2 in 3 motor Belakang Kiri
#define IN_24 17 // L298N #2 in 4 motor Belakang Kiri
/*-----( Deklarasi objek )-----*/
RF24 radio(CE_PIN, CSN_PIN); // Buat Radio
/*-----( Deklarasi Variabel )-----*/
int joystick[6]; // array 6 elemen yang menyimpan pembacaan Joystick
int speedRight = 0;
int speedLeft = 0;
int xAxis, yAxis;
int buttonUp; int buttonRight; int buttonDown; int buttonLeft;
void setup() {
pinMode(light_Front, OUTPUT); pinMode(light_Back, OUTPUT); pinMode(horn_Buzz, OUTPUT);
pinMode(ENA_m1, OUTPUT); pinMode(ENB_m1, OUTPUT); pinMode(ENA_m2, OUTPUT); pinMode(ENB_m2, OUTPUT);
pinMode(IN_11, OUTPUT); pinMode(IN_12, OUTPUT); pinMode(IN_13, OUTPUT); pinMode(IN_14, OUTPUT);
pinMode(IN_21, OUTPUT); pinMode(IN_22, OUTPUT); pinMode(IN_23, OUTPUT); pinMode(IN_24, OUTPUT);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
}
void loop() {
if ( radio.available() ) {
radio.read( joystick, sizeof(joystick) );
xAxis = joystick[0]; yAxis = joystick[1];
int buttonUp = joystick[2]; int buttonRight = joystick[3];
int buttonDown = joystick[4]; int buttonLeft = joystick[5];
if (buttonUp == HIGH){digitalWrite(horn_Buzz, LOW);} else {digitalWrite(horn_Buzz, HIGH);}
if (buttonRight == HIGH){digitalWrite(light_Front, LOW);} else {digitalWrite(light_Front, HIGH);}
if (buttonLeft == HIGH){digitalWrite(light_Back, LOW);} else {digitalWrite(light_Back, HIGH);}
if (yAxis < 470) {
digitalWrite(IN_11, LOW); digitalWrite(IN_12, HIGH); digitalWrite(IN_13, HIGH); digitalWrite(IN_14, LOW);
digitalWrite(IN_21, HIGH); digitalWrite(IN_22, LOW); digitalWrite(IN_23, LOW); digitalWrite(IN_24, HIGH);
speedRight = map(yAxis, 470, 0, 0, 255); speedLeft = map(yAxis, 470, 0, 0, 255);
} else if (yAxis > 550) {
digitalWrite(IN_11, HIGH); digitalWrite(IN_12, LOW); digitalWrite(IN_13, LOW); digitalWrite(IN_14, HIGH);
digitalWrite(IN_21, LOW); digitalWrite(IN_22, HIGH); digitalWrite(IN_23, HIGH); digitalWrite(IN_24, LOW);
speedRight = map(yAxis, 550, 1023, 0, 255); speedLeft = map(yAxis, 550, 1023, 0, 255);
} else { speedRight = 0; speedLeft = 0; }
if (xAxis < 470) {
int xMapped = map(xAxis, 470, 0, 0, 255);
speedLeft = speedLeft - xMapped; speedRight = speedRight + xMapped;
if (speedLeft < 0) speedLeft = 0; if (speedRight > 255) speedRight = 255;
}
if (xAxis > 550) {
int xMapped = map(xAxis, 550, 1023, 0, 255);
speedLeft = speedLeft + xMapped; speedRight = speedRight - xMapped;
if (speedLeft > 255) speedLeft = 255; if (speedRight < 0) speedRight = 0;
}
if (speedLeft < 70) speedLeft = 0;
if (speedRight < 70) speedRight = 0;
analogWrite(ENA_m1, speedRight); analogWrite(ENB_m1, speedRight);
analogWrite(ENA_m2, speedLeft); analogWrite(ENB_m2, speedLeft);
}
}
Joystick_nRF24.ino
/* Kode transceiver modul JoyStick - KONEKSI: Modul nRF24L01 Lihat: 1 - GND 2 - VCC 3.3V !!! BUKAN 5V 3 - CE ke pin Arduino 9 4 - CSN ke pin Arduino 10 5 - SCK ke pin Arduino 13 6 - MOSI ke pin Arduino 11 7 - MISO ke pin Arduino 12 8 - TIDAK DIGUNAKAN Default Button Pins: Up - pin 2 Right - pin 3 Down - pin 4 Left - pin 5 - Analog Joystick module GND ke Arduino GND VCC ke Arduino +5V X Pot ke Arduino A0 Y Pot ke Arduino A1 */
/*-----( Impor pustaka yang diperlukan )-----*/
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#define CE_PIN 9
#define CSN_PIN 10
#define xAxis 14 // A0 untuk Arduino UNO
#define yAxis 15 // A1 untuk Arduino UNO
const uint64_t pipe = 0xE8E8F0F0E1LL; // Definisikan saluran transmisi
/*-----( Deklarasi objek )-----*/
RF24 radio(CE_PIN, CSN_PIN); // Buat Radio
/*-----( Deklarasi Variabel )-----*/
int joystick[6]; // array 6 elemen yang menyimpan pembacaan Joystick dan 4 tombol
int buttonUp = 2; int buttonRight = 3; int buttonDown = 4; int buttonLeft = 5;
void setup() {
Serial.begin(9600);
radio.begin(); radio.openWritingPipe(pipe); radio.stopListening();
pinMode(buttonUp, INPUT_PULLUP); pinMode(buttonRight, INPUT_PULLUP);
pinMode(buttonDown, INPUT_PULLUP); pinMode(buttonLeft, INPUT_PULLUP);
digitalWrite(buttonUp, LOW); digitalWrite(buttonRight, LOW);
digitalWrite(buttonDown, LOW); digitalWrite(buttonLeft, LOW);
}
void loop() {
joystick[0] = analogRead(xAxis); joystick[1] = analogRead(yAxis);
joystick[2] = digitalRead(buttonUp); joystick[3] = digitalRead(buttonRight);
joystick[4] = digitalRead(buttonDown); joystick[5] = digitalRead(buttonLeft);
radio.write( joystick, sizeof(joystick) );
delay(20);
Serial.print("X = "); Serial.print(analogRead(xAxis));
Serial.print(" Y = "); Serial.print(analogRead(yAxis));
Serial.print(" Up = "); Serial.print(digitalRead(buttonUp));
Serial.print(" Right = "); Serial.print(digitalRead(buttonRight));
Serial.print(" Down = "); Serial.print(digitalRead(buttonDown));
Serial.print(" Left = "); Serial.println(digitalRead(buttonLeft));
}
Skematik
File: rc_car_tp3A7JlpYw.fzz