ZC's ROBOTICS Projects

Hi all, I am Gong Zicheng. Welcome to my website where I showcase my Arduino and Lego Projects. I am a Y1 student at ST. Joseph’s Institution. I learned Arduino and Lego Robotics during my spare time. I like to create and build things to change the world into a better place. Here are some projects I have done in the past.

Remote Control Arduino Robot Car

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.


Leave a comment