RC Car to Obstacle Avoiding Robot

by ando2013 in Circuits > Robots

12807 Views, 31 Favorites, 0 Comments

RC Car to Obstacle Avoiding Robot

IMG_20140322_125935.jpg
This is the old car.

I find an old RC car in my shed.
How I turned into a robot? It's simple, I will explain you in next step.

The Old RC Car

IMG_20140322_131018.jpg
IMG_20140322_130909.jpg
1. Removing the casing
2.Removing the circuit.

Control

IMG_20140322_130337.jpg
IMG_20140322_130242.jpg
To control it I used:
 -Arduino UNO
 -A motor driver TB6612FNG

Power:
8 x 1.5 alkaline battery
  - 4 for arduino
  - 4 for driver -> motor

The Space

IMG_20140322_133026.jpg
IMG_20140322_132247.jpg
IMG_20140322_133040.jpg
To put Arduino and driver on car we need a smooth space. I use the plastic, finished whit a wire brush.

I kept the original screws for a easy conection.

'Eye'

IMG_20140322_130406.jpg

Robot need a sensor to detect the obstacles.

Sensor: IR Sharp sensor.

I want to use a servo for turn the sensor at right and left, but I dropped this idea.

PCB

IMG_20140322_144245.jpg
IMG_20140322_144057.jpg
IMG_20140322_133302.jpg

For easy using I make a PCB with a female pin (If it breaks I can replace) and 2 wire holder (with screw).
I make the PCB in my enchanting machine (reduced the time).

FINISHING

IMG_20140322_154754.jpg
IMG_20140322_154745.jpg
IMG_20140322_154727.jpg
IMG_20140322_153703.jpg
IMG_20140322_154749.jpg

Now I have all the component ready for mount.
1.Put the battery holder
2.Put the Arduino UNO and Driver
3.Put the sensor
4.Wire it up


The robot is complete, but don't have code.

CODE



int DIST; //distance

//motor A connected between A01 and A02 //motor B connected between B01 and B02

int STBY = 10; //standby

//Motor A int PWMA = 3; //Speed control int AIN1 = 9; //Direction int AIN2 = 8; //Direction

//Motor B int PWMB = 5; //Speed control int BIN1 = 11; //Direction int BIN2 = 12; //Direction

void setup(){ pinMode(STBY, OUTPUT);

pinMode(PWMA, OUTPUT); pinMode(AIN1, OUTPUT); pinMode(AIN2, OUTPUT);

pinMode(PWMB, OUTPUT); pinMode(BIN1, OUTPUT); pinMode(BIN2, OUTPUT); }

void loop(){ // read the input on analog pin 0: int sensorValue = analogRead(A0); // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V): float DIST = sensorValue * (5.0 / 1023.0); if(DIST < 2) { move(1, 0, 1); //direction move(2, 255, 1); //full speed front } if(DIST > 2) { move(1, 150, 1); //direction: right move(2, 200, 0); // back } }

void move(int motor, int speed, int direction){ //Move specific motor at speed and direction //motor: 0 for B 1 for A //speed: 0 is off, and 255 is full speed //direction: 0 clockwise, 1 counter-clockwise

digitalWrite(STBY, HIGH); //disable standby

boolean inPin1 = LOW; boolean inPin2 = HIGH;

if(direction == 1){ inPin1 = HIGH; inPin2 = LOW; }

if(motor == 1){ digitalWrite(AIN1, inPin1); digitalWrite(AIN2, inPin2); analogWrite(PWMA, speed); }else{ digitalWrite(BIN1, inPin1); digitalWrite(BIN2, inPin2); analogWrite(PWMB, speed); } }

void stop(){ //enable standby digitalWrite(STBY, LOW); }