Project Introduction
The robot car that I made with Arduino Unos, a wireless controller, and working headlights.
Project Scope
I built a remote-controlled car with working headlights.
Challenges
It was hard to program the transmitter and receiver code and the jumper wires kept getting lose. I have used glue gun to put them in.
Photos and videos



Hardware Components
- 2 Arduino Unos
- 2 DC Motors
- 1 Motor Controller
- 6 AA Batteries
- 2 nRF24L01 Wireless Modules
- Jumper Wires
- 1 Mini Breadboard And 1 Large Breadboard
- 2 ws2812 LED Strips
- 6 Small Push Buttons
Software Code
Transmitter code:
#include <nRF24L01.h>
#include <printf.h>
#include <RF24.h>
#include <RF24_config.h>
#include <SPI.h>
RF24 myRadio(7, 8);
byte addresses[][6] = { "00001", "00002" };
int nan = 0;
int buttoni = 1;
int buttonii = 2;
int buttoniii = 3;
int buttoniv = 4;
int buttonv = 5;
int buttonvi = 6;
int buttonvii = 7;
int forward = 69;
void setup() {
pinMode(3, INPUT_PULLUP);
pinMode(2, INPUT_PULLUP);
pinMode(A1, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(A2, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
myRadio.begin();
myRadio.setChannel(108);
myRadio.openWritingPipe(addresses[0]);
myRadio.stopListening();
}
void loop() {
if (digitalRead(3) == 0) {
myRadio.write(&buttoni, sizeof(buttoni));
}
if (digitalRead(2) == 0) {
myRadio.write(&buttonii, sizeof(buttonii));
}
if (digitalRead(A1) == 0) {
myRadio.write(&buttoniii, sizeof(buttoniii));
}
if (digitalRead(6) == 0) {
myRadio.write(&buttoniv, sizeof(buttoniv));
}
if (digitalRead(A2) == 0) {
myRadio.write(&buttonv, sizeof(buttonv));
}
if (digitalRead(4) == 0) {
myRadio.write(&buttonvi, sizeof(buttonvi));
}
if (digitalRead(5) == 0) {
myRadio.write(&buttonvii, sizeof(buttonvii));
}
if (digitalRead(3) == 1 && digitalRead(2) == 1 && digitalRead(A1) == 1 && digitalRead(6) == 1 && digitalRead(A2) == 1 && digitalRead(4) == 1 && digitalRead(5) == 1) {
myRadio.write(&nan, sizeof(nan));
}
if (digitalRead(3) == 0 && digitalRead(6) == 0) {
myRadio.write(&forward, sizeof(forward));
}
}
Receiver Code
#include <FastLED.h>
#include <SPI.h>
#include <nRF24L01.h>
#include <printf.h>
#include <RF24.h>
#include <RF24_config.h>
#include <FastLED.h>
#define enA 9
#define in1 8
#define in2 7
#define in3 5
#define in4 4
#define enB 3
int state = 0;
RF24 myRadio (A4, A5);
byte addresses[][6] = {"00001", "00002"};
int dataReceived;
CRGB redLeds [7];
CRGB whiteLeds [6];
void setup() {
FastLED.addLeds<NEOPIXEL, 10>(redLeds, 7);
FastLED.addLeds<NEOPIXEL, 2>(whiteLeds, 6);
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(6, OUTPUT);
Serial.begin(115200);
myRadio.begin();
myRadio.setChannel(108);
myRadio.openReadingPipe(1, addresses[0]);
myRadio.startListening();
}
void motor(int motorL, int motorR)
{
bool dirL = motorL > 0;
bool dirR = motorR > 0;
if (dirL == true) {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
}
else {
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
}
if (dirR == true) {
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
}
else {
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
}
analogWrite(enA, abs(motorL));
analogWrite(enB, abs(motorR));
}
void loop() {
if (myRadio.available()) {
myRadio.read(&dataReceived, sizeof(dataReceived));
Serial.print(F("Data Received = "));
Serial.println(dataReceived);
}
if (dataReceived == 1) {
motor(255, 0);
}
else if (dataReceived == 2) {
motor(-255, 0);
}
else if (dataReceived == 6) {
motor(0, -255);
}
else if (dataReceived == 7) {
motor(0, 255);
}
else if (dataReceived == 0 ) {
motor(0, 0);
digitalWrite(6, LOW);
}
else if (dataReceived == 69) {
motor(255, -255);
}
else if (dataReceived == 4) {
digitalWrite(6, HIGH);
}
else if (dataReceived == 3) {
if (state == 0) {
for (int i = 0; i <= 6; i++) {
redLeds[i] = CRGB(110, 0, 0);
}
FastLED.show();
for (int i = 0; i <= 5; i++) {
whiteLeds[i] = CRGB(200, 200, 240);
}
FastLED.show();
state = 1;
delay(200);
}
else {
for (int i = 0; i <= 6; i++) {
redLeds[i] = CRGB(0, 0, 0);
}
FastLED.show();
for (int i = 0; i <= 5; i++) {
whiteLeds[i] = CRGB(0, 0, 0);
}
FastLED.show();
state = 0;
delay(200);
}
while (dataReceived == 3) {
myRadio.read(&dataReceived, sizeof(dataReceived));
Serial.print(F("Data Received = "));
Serial.println(dataReceived);
}
}
}
Possible Improvements
I could make the acceleration and the headlight intensity proportional.
I could also make it solar powered.
