Welcome to Hackster!
Hackster is a community dedicated to learning hardware, from beginner to pro. Join us, it's free!
hashan_sudeera
Created October 26, 2022

Arduino SMART CAR | Bluetooth+Obstacle avoiding+VoiceControl

All in One. Make it simple

BeginnerFull instructions provided771
Arduino SMART CAR | Bluetooth+Obstacle avoiding+VoiceControl

Things used in this project

Hardware components

Arduino UNO
Arduino UNO
×1
Dual H-Bridge motor drivers L293D
Texas Instruments Dual H-Bridge motor drivers L293D
×1
DC Motor, 12 V
DC Motor, 12 V
×4
HC-06 Bluetooth Module
×1
Ultrasonic Sensor - HC-SR04 (Generic)
Ultrasonic Sensor - HC-SR04 (Generic)
×1
SG90 Micro-servo motor
SG90 Micro-servo motor
×1
Battery Holder, 18650 x 2
Battery Holder, 18650 x 2
×1
5 mm LED: Red
5 mm LED: Red
×2
High Brightness LED, White
High Brightness LED, White
×2
LED, Orange
LED, Orange
×2
Slide Switch
Slide Switch
×1

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)
Hot glue gun (generic)
Hot glue gun (generic)

Story

Read more

Schematics

Smart car circuit Diagram

Circuit diagram image

Code

Smart_car.ino

C/C++
//----------------------------SMART_CAR_Project---------------------------------------//
//hashan_sudeera

#include <Servo.h>
#include <AFMotor.h>
//-----------------------B------------------------------//
char value;
int speedCar=255;
boolean lightFront = false;
boolean lightBack = false;
boolean S_light = false;

//------------------------O-----------------------------//
int distance;
int Left;
int Right;
int L = 0;
int R = 0;
int L1 = 0;
int R1 = 0;

//----------Defines----------------//

#define Echo A0
#define Trig A1
#define S_motor 10
#define F_LED A4
#define B_LED A5
#define SL_LED A2
#define SR_LED A3
#define spoint 90

//-----------Motors-----------------//

Servo servo;
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);


void setup() {
  Serial.begin(9600);
  
  pinMode(Trig,OUTPUT);//Trig A1
  pinMode(Echo,INPUT);//Echo A0
  pinMode(F_LED,OUTPUT);//F_LED A4 pin
  pinMode(B_LED,OUTPUT);//B_LED A5 pin
  pinMode(SL_LED,OUTPUT);//SL_LED A2 pin
  pinMode(SR_LED,OUTPUT);//SR_LED A3 pin
  servo.attach(S_motor);

}

void loop() {

//-----------------Change_Mode----------------//  

  blutooth_mode();
  //obstacle_mode();
  //voice_control();  


}


//---------------------------Blutooth_Mode---------------------------//
void blutooth_mode(){

if (Serial.available() > 0) {
  value = Serial.read();
  Stop();       //Initialize with motors stopped.

if (lightFront) {digitalWrite(F_LED, HIGH);
}
if (!lightFront) {digitalWrite(F_LED, LOW);
}
if (lightBack) {digitalWrite(B_LED, HIGH);
}
if (!lightBack) {digitalWrite(B_LED, LOW);
}
if (S_light) {digitalWrite(SL_LED, HIGH);
               digitalWrite(SR_LED, HIGH);
}
if (!S_light) {digitalWrite(SL_LED, LOW);
               digitalWrite(SR_LED, LOW);
}


switch (value) {
case 'F':forward();break;
case 'B':backward();break;
case 'L':left();break;
case 'R':right();break;
case 'I':forwardRight();break;
case 'G':forwardLeft();break;
case 'J':backwardRight();break;
case 'H':backwardLeft();break;
case 'S':Stop();break;
case '0':speedCar = 75;break;
case '1':speedCar = 100;break;
case '2':speedCar = 125;break;
case '3':speedCar = 150;break;
case '4':speedCar = 175;break;
case '5':speedCar = 200;break;
case '6':speedCar = 220;break;
case '7':speedCar = 230;break;
case '8':speedCar = 240;break;
case '9':speedCar = 250;break;
case 'q':speedCar = 255;break;
case 'W':lightFront = true;break;
case 'w':lightFront = false;break;
case 'U':lightBack = true;break;
case 'u':lightBack = false;break;
case 'X':S_light = true;break;
case 'x':S_light = false;break;
}}  


  
}

//------------------------Obstacle_Mode------------------------------//

void obstacle_mode(){  

  distance = ultrasonic();
  if (distance <= 12) {
    Stop();
    backward();
    delay(100);
    Stop();
    L = leftsee();
    servo.write(spoint);
    delay(200);
    R = rightsee();
    servo.write(spoint);
    if (L < R) {
      O_right();
      delay(200);
      Stop();
      delay(200);
    } else if (L > R) {
      O_left();
      delay(500);
      Stop();
      delay(200);
    }
  } else {
    forward();
  }
  
}

//-------------------------Voice_Control-----------------------------//

void voice_control(){

  if (Serial.available() > 0) {
    value = Serial.read();
    Serial.println(value);
    if (value == '^') {
      forward();
      digitalWrite(SL_LED, HIGH);
      digitalWrite(SR_LED, HIGH);
    } else if (value == '-') {
      backward();
    } else if (value == '<') {
      L = leftsee();
      servo.write(spoint);
      if (L >= 10 ) {
        O_left();
        delay(500);
        Stop();
      } else if (L < 10) {
        Stop();
      }
    } else if (value == '>') {
      R = rightsee();
      servo.write(spoint);
      if (R >= 10 ) {
        O_right();
        delay(500);
        Stop();
      } else if (R < 10) {
        Stop();
      }
    } else if (value == '*') {
      Stop();
    }
    } else if (value == '!') {
      {digitalWrite(F_LED, HIGH);
    }
    } else if (value == '@') {
      {digitalWrite(F_LED, LOW);
    }
    } else if (value == '+') {
      {digitalWrite(B_LED, HIGH);
    }
    } else if (value == '_') {
      {digitalWrite(B_LED, LOW);
    }
  }

}

//-------------------------Ultrasonic----------------------------------//
int ultrasonic(){
  digitalWrite(Trig,LOW);
  delayMicroseconds(4);
  digitalWrite(Trig,HIGH);
  delayMicroseconds(10);
  digitalWrite(Trig,LOW);
  long t = pulseIn(Echo,HIGH);
  long cm= t / 29/ 2;
  return cm;    
}
void forward()
{
  motor1.run(FORWARD);
  motor2.run(FORWARD);
  motor3.run(FORWARD);
  motor4.run(FORWARD);

  motor1.setSpeed(speedCar);
  motor2.setSpeed(speedCar);
  motor3.setSpeed(speedCar);
  motor4.setSpeed(speedCar);

  forwardview();

}
void backward()
{
  motor1.run(BACKWARD);
  motor2.run(BACKWARD);
  motor3.run(BACKWARD);
  motor4.run(BACKWARD);
  
  motor1.setSpeed(speedCar);
  motor2.setSpeed(speedCar);
  motor3.setSpeed(speedCar);
  motor4.setSpeed(speedCar);

  digitalWrite(B_LED,HIGH);

}
void left()
{
  motor1.run(BACKWARD);
  motor2.run(BACKWARD);
  motor3.run(FORWARD);
  motor4.run(FORWARD);
  motor1.setSpeed(speedCar);
  motor2.setSpeed(speedCar);
  motor3.setSpeed(speedCar);
  motor4.setSpeed(speedCar);

  digitalWrite(SL_LED, HIGH);

  leftview();

    
}
void O_left()
{
  motor1.run(BACKWARD);
  motor2.run(BACKWARD);
  motor3.run(FORWARD);
  motor4.run(FORWARD);
  motor1.setSpeed(speedCar);
  motor2.setSpeed(speedCar);
  motor3.setSpeed(speedCar);
  motor4.setSpeed(speedCar);

  digitalWrite(SL_LED, HIGH);
    
}

void right()
{
  motor1.run(FORWARD);
  motor2.run(FORWARD);
  motor3.run(BACKWARD);
  motor4.run(BACKWARD);
  motor1.setSpeed(speedCar);
  motor2.setSpeed(speedCar);
  motor3.setSpeed(speedCar);
  motor4.setSpeed(speedCar);

  digitalWrite(SR_LED, HIGH);

  rightview();

}
void O_right()
{
  motor1.run(FORWARD);
  motor2.run(FORWARD);
  motor3.run(BACKWARD);
  motor4.run(BACKWARD);
  motor1.setSpeed(speedCar);
  motor2.setSpeed(speedCar);
  motor3.setSpeed(speedCar);
  motor4.setSpeed(speedCar);

  digitalWrite(SR_LED, HIGH);
}

void forwardRight()
{
  motor1.run(FORWARD);
  motor2.run(FORWARD);
  motor3.run(FORWARD);
  motor4.run(RELEASE);
  
  motor1.setSpeed(speedCar);
  motor2.setSpeed(speedCar);
  motor3.setSpeed(speedCar);
}

void forwardLeft()
{
  motor1.run(RELEASE);
  motor2.run(FORWARD);
  motor3.run(FORWARD);
  motor4.run(FORWARD);
  
  motor1.setSpeed(speedCar);
  motor2.setSpeed(speedCar);
  motor4.setSpeed(speedCar);
}
void backwardRight()
{
  motor1.run(BACKWARD);
  motor2.run(BACKWARD);
  motor3.run(RELEASE);
  motor4.run(BACKWARD);
  motor1.setSpeed(speedCar);
  motor2.setSpeed(speedCar);
  motor4.setSpeed(speedCar);

  digitalWrite(B_LED,HIGH);

}
void backwardLeft()
{
  motor1.run(BACKWARD);
  motor2.run(RELEASE);
  motor3.run(BACKWARD);
  motor4.run(BACKWARD);
  motor1.setSpeed(speedCar);
  motor2.setSpeed(speedCar);
  motor3.setSpeed(speedCar);

  digitalWrite(B_LED,HIGH);

}
void Stop()
{
  motor1.run(RELEASE);
  motor2.run(RELEASE);
  motor3.run(RELEASE);
  motor4.run(RELEASE);
}

int rightsee(){
  servo.write(20);
  delay(500);
  Left = ultrasonic();
  return Left;
}

int leftsee(){
  servo.write(180);
  delay(500);
  Right = ultrasonic();
  return Right;
}

int leftview(){
  servo.write(180);
  
}

int rightview(){
  servo.write(20);
}

int forwardview(){
  servo.write(spoint);
}

Credits

hashan_sudeera
5 projects • 3 followers
Contact

Comments

Please log in or sign up to comment.