Fastest Arduino RC Car using Coreless DC Motors and nRF24L01 RF module
Code
RF Remote Joystick
/*Code to transmit RF values to Arduino
*
* Pin Conections
* CE - 7
MISO - 12
MOSI - 11
SCK - 13
CS - 8
A0 - JoyX
A1 - JoyY
*/
#include <SPI.h>
#include "RF24.h"
RF24 myRadio (7, 8);
struct package
{
int msg = 0;
};
byte addresses[][6] = {"0"};
typedef struct package Package;
Package data;
void setup()
{
Serial.begin(9600);
myRadio.begin();
myRadio.setChannel(115); //115 band above WIFI signals
myRadio.setPALevel(RF24_PA_MAX); //MAX power long rage
myRadio.setDataRate( RF24_250KBPS ) ; //Minimum speed
delay(500);
Serial.print("Remote Initialized");
}
int forward;
int reverse;
int left;
int right;
void loop()
{
int xValue = analogRead(A0); //Read JoyX value
int yValue = analogRead(A1); //Read JoyY Value
//Serial.print(xValue); Serial.print(" , "); Serial.println(yValue);
if (xValue>560 && xValue<1000) // Filter JoyX for up
{
forward = map (xValue, 560, 1000, 1, 10); //Convert Joyx-up to 0-10
//Serial.print("F="); Serial.println(forward);
data.msg = forward; WriteData(); delay(50);
}
if (xValue<500 && xValue > 10) // Filter JoyX for break
{
reverse = map (xValue, 10, 500, 20, 11); //Convert JoyX-down to 11-20
//Serial.print("B="); Serial.println(reverse);
data.msg = reverse; WriteData(); delay(50);
}
else if (yValue>600 && yValue<1000) // Filter JoyY for right
{
right = map (yValue, 600, 1000, 21, 30); //Convert JoyY-right to 21-30
//Serial.print("R="); Serial.println(right);
data.msg = right; WriteData(); delay(50);
}
else if (yValue<450 && yValue > 10) // Filter JoyY for left
{
left = map (yValue, 10, 450, 40, 31); //Convert JoyY-left to 31-40
//Serial.print("L="); Serial.println(left);
data.msg = left; WriteData(); delay(50);
}
/* else
{
Serial.println("Rest");
data.msg = 0; WriteData(); delay(50);
}
*/
}
void WriteData()
{
myRadio.stopListening(); //Stop Receiving and start transminitng
myRadio.openWritingPipe( 0xF0F0F0F0AA); //Sends data on this 40-bit address
myRadio.write(&data, sizeof(data));
//Serial.print("\nSent:");
//Serial.println(data.msg);
delay(50);
}
void ReadData()
{
myRadio.openReadingPipe(1, 0xF0F0F0F066); // Which pipe to read, 40 bit Address
myRadio.startListening(); //Stop Transminting and start Reveicing
if ( myRadio.available())
{
while (myRadio.available())
{
myRadio.read( &data, sizeof(data) );
}
Serial.print("\nReceived:");
Serial.println(data.msg);
}
}
BLDC Motor
/*CE - 7
MISO - 12
MOSI - 11
SCK - 13
CS - 8
Recently tested with nano
*/
/*PIN DEFANITIONS*/
#define R_IR 3
#define L_IR 4
#define L_MR 5
#define R_MR 6
#define min_speed 200
#define max_speed 800
#include <SPI.h>
#include "RF24.h"
RF24 myRadio (7, 8);
struct package
{
int msg;
};
typedef struct package Package;
Package data;
byte addresses[][6] = {"0"};
void setup() {
pinMode(R_IR, INPUT);
pinMode(L_IR, INPUT);
pinMode(L_MR, OUTPUT);
pinMode(R_MR, OUTPUT);
Serial.begin (9600);
myRadio.begin();
myRadio.setChannel(115); //115 band above WIFI signals
myRadio.setPALevel(RF24_PA_MIN); //MIN power low rage
myRadio.setDataRate( RF24_250KBPS ) ; //Minimum speed
}
int received;
void loop() {
ReadData();
}
void Control_Car()
{
if (received>=1 && received <=10) // Move Forward
{
int PWM_Value = map (received, 1, 10, min_speed, max_speed);
analogWrite(R_MR,PWM_Value);
analogWrite(L_MR,PWM_Value);
}
if (received>=11 && received <=20) // Break
{
int PWM_Value = map (received, 11, 20, min_speed, max_speed);
analogWrite(R_MR,0);
analogWrite(L_MR,0);
}
if (received>=21 && received <=30) // Turn Right
{
int PWM_Value = map (received, 21, 30, min_speed, max_speed);
analogWrite(R_MR,PWM_Value);
analogWrite(L_MR,0);
}
if (received>=31 && received <=40) // Turn Right
{
int PWM_Value = map (received, 31, 40, min_speed, max_speed);
analogWrite(R_MR,0);
analogWrite(L_MR,PWM_Value);
}
}
void ReadData()
{
myRadio.openReadingPipe(1, 0xF0F0F0F0AA); //Which pipe to read, 40 bit Address
myRadio.startListening(); //Stop Transminting and start Reveicing
if ( myRadio.available())
{
while (myRadio.available())
{
myRadio.read( &data, sizeof(data) );
}
Serial.print("\nReceived:");
Serial.println(data.msg);
received = data.msg;
Control_Car();
}
else //If not data from RF
{
//analogWrite(R_MR,0);
//analogWrite(L_MR,0);
}
}
void WriteData()
{
myRadio.stopListening(); //Stop Receiving and start transminitng
myRadio.openWritingPipe(0xF0F0F0F066);//Sends data on this 40-bit address
myRadio.write(&data, sizeof(data));
Serial.print("\nSent:");
Serial.println(data.msg);
delay(300);
}
Fastest Arduino RC Car using Coreless DC Motors and nRF24L01 RF module
*PCBWay community is a shared platform and we are not responsible for any design issues.
- Comments(0)
- Likes(4)
- fermin herrera Feb 17,2021
- Engineer Apr 06,2020
- Carlos Alberto Carrera Mar 25,2020
- Mairaj Ali Feb 19,2020
- 1 USER VOTES
- YOUR VOTE 0.00 0.00
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
-
10design
-
10usability
-
10creativity
-
10content
More by Mairaj Ali
- NRF9160 BOARD NRF9160 BOARD 4 LAYER WELL VERY DESIGNED
- STM32 BOARD STM NUCLEO 32 BOARD 4 LAYER BOARD, VERY WELL DESIGNED
- Arduino Nano Into a Feather Form Factor Arduino Nano Into a Feather Form Factor
- Water Level Indicator Water level indication Project
- Christmas Tree PCB Christmas Tree PCB Project
- Christmas Tree PCB Christmas Tree PCB Project
- Fastest Arduino RC Car using Coreless DC Motors and nRF24L01 RF module CodeRF Remote Joystick/*Code to transmit RF values to Arduino * * Pin Conections * CE - 7 MISO - ...
- PCB ruler by adafruit PCB ruler by adafruit
- Variable Power Supply (0 V -30 V) Its a 0 to 30 V power supply
-
-
-
-
-
-
Open Source Very Large Stick - Freejoy & MMjoy2 breakout board
666 0 0 -
RF Control training board for students based on ESP32 C3
846 0 2