Project tutorial
4WD Smart Robot Car

4WD Smart Robot Car © GPL3+

If you have this car, you will be able to avoid obstacles and follow the necessary lines to reach your destination and protect the distances

  • 3,323 views
  • 0 comments
  • 10 respects

Components and supplies

Necessary tools and machines

09507 01
Soldering iron (generic)
3drag
3D Printer (generic)

About this project

Hi Makers,

We have good news for you. In this tutorial, we are now a classic model. 4WD SMART ROBOT CAR.

If you have this car, you will be able to avoid obstacles and follow the necessary lines to reach your destination and protect the distances. You can do this autonomously. If you want to have control with your hands, you will be able to control your car with APK via the Bluetooth module.You know, or you've seen, car kits usually have a plastic chassis.

We have designed as PCB. This will save you from the unnecessary cable crowds. You'll also have a more elegant and simple look.4WD SMART ROBOT CAR is exactly a "plug and play" kit. You won't need cable connections too much. Because of the PCB we designed, we made the necessary paths for you.

What are the features of the 4WD SMART ROBOT CAR?

Code

btcontrol.inoArduino
const int motorA1  = 6;  // L298N'in IN3 Girii
  const int motorA2  = 7;  // L298N'in IN1 Girii
  const int motorB1  = 8; // L298N'in IN2 Girii
  const int motorB2  = 9;  // L298N'in IN4 Girii


  int i=0; //Dngler iin atanan rastgele bir deiken
  int j=0; //Dngler iin atanan rastgele bir deiken
  int state; //Bluetooth cihazndan gelecek sinyalin deikeni
  int vSpeed=255;     // Standart Hz, 0-255 aras bir deer alabilir

void setup() {
    // Pinlerimizi belirleyelim
    pinMode(motorA1, OUTPUT);
    pinMode(motorA2, OUTPUT);
    pinMode(motorB1, OUTPUT);
    pinMode(motorB2, OUTPUT);  
    pinMode(5, OUTPUT); 
    pinMode(10, OUTPUT);  
    pinMode(2, OUTPUT);  
    pinMode(3, OUTPUT);  
    pinMode(4, OUTPUT);   
    // 9600 baud hznda bir seri port aalm
    Serial.begin(9600);
}
 
void loop() {
  digitalWrite(5,HIGH);
  digitalWrite(10,HIGH);
  
  /*Bluetooth balants koptuunda veya kesildiinde arabay durdur.
 (Aktif etmek iin alt satrn "//" larn kaldrn.)*/
//     if(digitalRead(BTState)==LOW) { state='S'; }

  //Gelen veriyi 'state' deikenine kaydet
    if(Serial.available() > 0){     
      state = Serial.read();   
    }
  
  /* Uygulamadan ayarlanabilen 4 hz seviyesi.(Deerler 0-255 arasnda olmal)*/
    if (state == '0'){
      vSpeed=0;}
    else if (state == '1'){
      vSpeed=100;}
    else if (state == '2'){
      vSpeed=180;}
    else if (state == '3'){
      vSpeed=200;}
    else if (state == '4'){
      vSpeed=255;}
     
  /***********************leri****************************/
  //Gelen veri 'F' ise araba ileri gider.
    if (state == 'F') {
      analogWrite(motorA1, vSpeed); analogWrite(motorA2, 0);
        analogWrite(motorB1, vSpeed);      analogWrite(motorB2, 0); 
        digitalWrite(2,LOW); 
        digitalWrite(3,LOW); 
        digitalWrite(4,HIGH);
         
    }
  /**********************leri SA************************/
  //Gelen veri 'G' ise araba ileri sol(apraz) gider.
    else if (state == 'I') {
      analogWrite(motorA1,vSpeed ); analogWrite(motorA2, 0);  
        analogWrite(motorB1, 100);    analogWrite(motorB2, 0);
        digitalWrite(2,HIGH); 
        digitalWrite(4,LOW); 
    }
  /**********************leri SOL************************/
  //Gelen veri 'I' ise araba ileri sa(apraz) gider.
    else if (state == 'G') {
        analogWrite(motorA1, 100); analogWrite(motorA2, 0); 
        analogWrite(motorB1, vSpeed);      analogWrite(motorB2, 0);
        digitalWrite(3,HIGH); 
        digitalWrite(4,LOW);  
    }
  /***********************Geri****************************/
  //Gelen veri 'B' ise araba geri gider.
    else if (state == 'B') {
      analogWrite(motorA1, 0);   analogWrite(motorA2, vSpeed); 
        analogWrite(motorB1, 0);   analogWrite(motorB2, vSpeed); 
    }
  /**********************Geri Sol************************/
  //Gelen veri 'H' ise araba geri sol(apraz) gider
    else if (state == 'H') {
      analogWrite(motorA1, 0);   analogWrite(motorA2, 100); 
        analogWrite(motorB1, 0); analogWrite(motorB2, vSpeed); 
    }
  /**********************Geri Sa************************/
  //Gelen veri 'J' ise araba geri sa(apraz) gider
    else if (state == 'J') {
      analogWrite(motorA1, 0);   analogWrite(motorA2, vSpeed); 
        analogWrite(motorB1, 0);   analogWrite(motorB2, 100);
        digitalWrite(2,HIGH);  
        digitalWrite(4,LOW); 
    }
  /***************************Sol*****************************/
  //Gelen veri 'L' ise araba sola gider.
    else if (state == 'L') {
      analogWrite(motorA1, vSpeed);   analogWrite(motorA2, 150); 
        analogWrite(motorB1, 0); analogWrite(motorB2, 0); 
        digitalWrite(3,HIGH); 
        digitalWrite(4,LOW); 
    }
  /***************************Sa*****************************/
  //Gelen veri 'R' ise araba saa gider
    else if (state == 'R') {
      analogWrite(motorA1, 0);   analogWrite(motorA2, 0); 
        analogWrite(motorB1, vSpeed);   analogWrite(motorB2, 150);
        digitalWrite(2,HIGH); 
        digitalWrite(4,LOW);      
    }
  
  /************************Stop*****************************/
  //Gelen veri 'S' ise arabay durdur.
    else if (state == 'S'){
        analogWrite(motorA1, 0);  analogWrite(motorA2, 0); 
        analogWrite(motorB1, 0);  analogWrite(motorB2, 0);
        digitalWrite(4,LOW); 
    }  
}
line_tracking.inoArduino
#define echoPin A0 //Ultrasonik sensrn echo pini Arduino'nun 12.pinine
#define trigPin A1 //Ultrasonik sensrn trig pini Arduino'nun 13.pinine tanmland.

#define MotorR1 8
#define MotorR2 9
#define MotorRE 10  // Motor pinlerini tanmlyoruz.
#define MotorL1 6
#define MotorL2 7
#define MotorLE 5


byte timer=0;
long sure, uzaklik; //sre ve uzaklk diye iki deiken tanmlyoruz.

void setup() {


  // ultrasonik sensr Trig pininden ses dalgalar gnderdii iin OUTPUT (k),
  // bu dalgalar Echo pini ile geri ald iin INPUT (Giri) olarak tanmlanr.
  pinMode(echoPin, INPUT);
  pinMode(trigPin, OUTPUT);

  pinMode(MotorL1, OUTPUT);
  pinMode(MotorL2, OUTPUT);
  pinMode(MotorLE, OUTPUT); //Motorlarmz k olarak tanmlyoruz.
  pinMode(MotorR1, OUTPUT);
  pinMode(MotorR2, OUTPUT);
  pinMode(MotorRE, OUTPUT);
  pinMode(11, INPUT);
  pinMode(12, INPUT);

 pinMode(4, OUTPUT);
  Serial.begin(9600);

}

void loop() {


 
  if(digitalRead(11)==1 && digitalRead(12)==0)
  {
   sag(); // ileri git
    digitalWrite(4,LOW);
  }
  if(digitalRead(11)==0&& digitalRead(12)==1)
  {
   sol(); // ileri git
    digitalWrite(4,LOW);
  }
  if(digitalRead(11)==1 && digitalRead(12)==1)
  {
   ileri(); // ileri git
    digitalWrite(4,LOW);
  }
  if(digitalRead(11)==0 && digitalRead(12)==0)
  {
    timer++;
    if (timer<100)
    {
   sol(); // ileri git
    digitalWrite(4,LOW);
    timer=0;
    } 
    
  }
  
}



void ileri(){  // Robotun ileri ynde hareketi iin fonksiyon tanmlyoruz.

  digitalWrite(MotorR1, HIGH); // Sa motorun ileri hareketi aktif
  digitalWrite(MotorR2, LOW); // Sa motorun geri hareketi pasif
  analogWrite(MotorRE, 100); // Sa motorun hz 150

  digitalWrite(MotorL1, HIGH); // Sol motorun ileri hareketi aktif
  digitalWrite(MotorL2, LOW); // Sol motorun geri hareketi pasif
  analogWrite(MotorLE, 100); // Sol motorun hz 150
  
  
}


void sag(){ // Robotun saa dnme hareketi iin fonksiyon tanmlyoruz.

  digitalWrite(MotorR1, HIGH); // Sa motorun ileri hareketi aktif
  digitalWrite(MotorR2, LOW); // Sa motorun geri hareketi pasif
  analogWrite(MotorRE, 0); // Sa motorun hz 0 (Motor duruyor)

  digitalWrite(MotorL1, HIGH); // Sol motorun ileri hareketi aktif
  digitalWrite(MotorL2, LOW); // Sol motorun geri hareketi pasif
  analogWrite(MotorLE, 100); // Sol motorun hz 150
  
  
}

void sol(){ // Robotun saa dnme hareketi iin fonksiyon tanmlyoruz.

  digitalWrite(MotorR1, HIGH); // Sa motorun ileri hareketi aktif
  digitalWrite(MotorR2, LOW); // Sa motorun geri hareketi pasif
  analogWrite(MotorRE, 100); // Sa motorun hz 0 (Motor duruyor)

  digitalWrite(MotorL1, LOW); // Sol motorun ileri hareketi aktif
  digitalWrite(MotorL2, HIGH); // Sol motorun geri hareketi pasif
  analogWrite(MotorLE, 0); // Sol motorun hz 150
  
  
}


void geri(){ // Robotun geri ynde hareketi iin fonksiyon tanmlyoruz.

  digitalWrite(MotorR1, LOW); // Sa motorun ileri hareketi pasif
  digitalWrite(MotorR2, HIGH); // Sa motorun geri hareketi aktif
  analogWrite(MotorRE, 150); // Sa motorun hz 150

  digitalWrite(MotorL1, LOW); // Sol motorun ileri hareketi pasif
  digitalWrite(MotorL2, HIGH); // Sol motorun geri hareketi aktif
  analogWrite(MotorLE, 150); // Sol motorun hz 150
  
}
void dur(){  // Robotun ileri ynde hareketi iin fonksiyon tanmlyoruz.

  digitalWrite(MotorR1, HIGH); // Sa motorun ileri hareketi aktif
  digitalWrite(MotorR2, LOW); // Sa motorun geri hareketi pasif
  analogWrite(MotorRE, 0); // Sa motorun hz 150

  digitalWrite(MotorL1, HIGH); // Sol motorun ileri hareketi aktif
  digitalWrite(MotorL2, LOW); // Sol motorun geri hareketi pasif
  analogWrite(MotorLE, 0); // Sol motorun hz 150
}
obstacle_avoiding.inoArduino
#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>


double angle_rad = PI/180.0;
double angle_deg = 180.0/PI;
void sol();
void ileri();
void saga();
void geri();
double uzaklik;
float getDistance(int trig,int echo){
    pinMode(trig,OUTPUT);
    digitalWrite(trig,LOW);
    delayMicroseconds(2);
    digitalWrite(trig,HIGH);
    delayMicroseconds(10);
    digitalWrite(trig,LOW);
    pinMode(echo, INPUT);
    return pulseIn(echo,HIGH,30000)/58.0;
}


void sol()
{
    analogWrite(5,150);
    
    digitalWrite(6,0);
    
    digitalWrite(7,1);
    
    digitalWrite(8,1);
    
    digitalWrite(9,0);
    
    analogWrite(10,150);
    
}

void ileri()
{
    analogWrite(5,100);
    
    digitalWrite(6,1);
    
    digitalWrite(7,0);
    
    digitalWrite(8,1);
    
    digitalWrite(9,0);
    
    analogWrite(10,100);
    
}

void saga()
{
    analogWrite(5,100);
    
    digitalWrite(6,1);
    
    digitalWrite(7,0);
    
    digitalWrite(8,0);
    
    digitalWrite(9,1);
    
    analogWrite(10,100);
    
}

void geri()
{
    analogWrite(5,100);
    
    digitalWrite(6,0);
    
    digitalWrite(7,1);
    
    digitalWrite(8,0);
    
    digitalWrite(9,1);
    
    analogWrite(10,100);
    
}


void setup(){
    
    pinMode(5,OUTPUT);
    pinMode(6,OUTPUT);
    pinMode(7,OUTPUT);
    pinMode(8,OUTPUT);
    pinMode(9,OUTPUT);
    pinMode(10,OUTPUT);
    pinMode(4,OUTPUT);
    pinMode(16,INPUT);
    pinMode(17,INPUT);
    pinMode(2,OUTPUT);
    pinMode(3,OUTPUT);
}

void loop(){
    
    uzaklik = getDistance(15,14);
    digitalWrite(4,1);
    if((((digitalRead(16))==(1))) && ((((digitalRead(17))==(1))) && ((uzaklik) > (20)))){
        ileri();
        digitalWrite(2,0);
        digitalWrite(3,0);
        digitalWrite(4,0);
    }
    if((((digitalRead(17))==(1))) && (((uzaklik) > (20)) && (((digitalRead(16))==(0))))){
        sol();
        digitalWrite(3,1);
    }
    if((((digitalRead(17))==(1))) && (((20) > (uzaklik)) && (((digitalRead(16))==(1))))){
        geri();
        _delay(0.25);
        saga();
        digitalWrite(2,1);
        _delay(0.15);
    }
    if((((digitalRead(17))==(1))) && (((uzaklik) > (20)) && (((digitalRead(16))==(0))))){
        sol();
        digitalWrite(3,1);
    }
    if((((digitalRead(17))==(0))) && (((uzaklik) > (20)) && (((digitalRead(16))==(1))))){
        saga();
        digitalWrite(2,1);
    }
    if((((digitalRead(17))==(0))) && (((uzaklik) > (20)) && (((digitalRead(16))==(0))))){
        ileri();
        digitalWrite(2,0);
        digitalWrite(3,0);
        digitalWrite(4,0);
    }
    if((((digitalRead(17))==(0))) && (((20) > (uzaklik)) && (((digitalRead(16))==(1))))){
        saga();
        digitalWrite(2,1);
    }
    if((((digitalRead(17))==(0))) && (((20) > (uzaklik)) && (((digitalRead(16))==(0))))){
        geri();
        _delay(0.25);
        saga();
        digitalWrite(2,1);
        _delay(0.15);
    }
    
    _loop();
}

void _delay(float seconds){
    long endTime = millis() + seconds * 1000;
    while(millis() < endTime)_loop();
}

void _loop(){
    
}

Schematics

b2ot_(1)_CUyhyycUXq.pdf

Comments

Similar projects you might like

Smart Face Tracking Robot Car

Project tutorial by Sebastian Hernandez

  • 6,825 views
  • 5 comments
  • 41 respects

Smartphone Controlled Arduino 4WD Robot Car

Project in progress by Andriy Baranov

  • 60,955 views
  • 46 comments
  • 128 respects

Arduino 4WD RC Car

Project tutorial by Andriy Baranov

  • 16,851 views
  • 7 comments
  • 57 respects

Otto DIY+ Arduino Bluetooth Robot Easy to 3D Print

Project tutorial by Team Otto builders

  • 56,100 views
  • 122 comments
  • 185 respects
Add projectSign up / Login