Introduction: RC Car to Obstacle Avoiding Robot
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.
Step 1: The Old RC Car
2.Removing the circuit.
Step 2: Control
-Arduino UNO
-A motor driver TB6612FNG
Power:
8 x 1.5 alkaline battery
- 4 for arduino
- 4 for driver -> motor
Step 3: The Space
I kept the original screws for a easy conection.
Step 4: 'Eye'
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.
Step 5: PCB
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).
Step 6: FINISHING
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.
Step 7: 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); }