Close
0%
0%

Autonomous Arduino Car

Car which can move and dodge obstacles

Similar projects worth following
Car which can move and dodge obstacle using arduino

// Constants
const int enableBridge1 = 11;
const int MotorForward1 = 12;
const int MotorReverse1 = 13;

const int enableBridge2 = 5;
const int MotorForward2 = 6;
const int MotorReverse2 = 7;

const int TrigPin = 2; 
const int EchoPin = 3; 
float distance;

#include <servo.h>

Servo myservo;

int angle = 0;
 
void setup(){
  
 Serial.begin(9600); 
 pinMode(TrigPin, OUTPUT); 
 pinMode(EchoPin, INPUT); 
 Serial.println("Ultrasonic sensor:"); 
  
 pinMode(MotorForward1,OUTPUT);
 pinMode(MotorReverse1,OUTPUT);
 pinMode(enableBridge1,OUTPUT);
  
 pinMode(MotorForward2,OUTPUT);
 pinMode(MotorReverse2,OUTPUT);
 pinMode(enableBridge2,OUTPUT);
  
 myservo.attach(9);
  
 Serial.begin(2000);
}
 
void loop(){ 
  
 digitalWrite(enableBridge1,HIGH); // Active pont en H
 digitalWrite(enableBridge2,HIGH);
 
 
  
  
 digitalWrite(TrigPin, LOW); 
 delayMicroseconds(2); 
 digitalWrite(TrigPin, HIGH); 
 delayMicroseconds(10);
 digitalWrite(TrigPin, LOW); 
     
 distance = pulseIn(EchoPin, HIGH) / 58.00;
 Serial.print(distance); 
 Serial.print("cm"); 
 Serial.println(); 
  
 for (angle = 0; angle <= 180; angle += 1) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(angle);              // tell servo to go to position in variable 'pos'
    delay(15);
   
       if (distance<=50) {
      // Tourne dans le sens indirect pendant 3 secondes
       digitalWrite(MotorForward1,HIGH);
      digitalWrite(MotorReverse1,0);
      digitalWrite(MotorForward2,0);
       digitalWrite(MotorReverse2,HIGH);
   }
    else  {
      digitalWrite(MotorForward1,HIGH);
       digitalWrite(MotorReverse1,0);
       digitalWrite(MotorForward2,HIGH);
       digitalWrite(MotorReverse2,0);
   }
 }
 for (angle = 180; angle >= 0; angle -= 1) { // goes from 180 degrees to 0 degrees
    myservo.write(angle);              // tell servo to go to position in variable 'pos'
    delay(15);
   
    if (distance<=50) {
      // Tourne dans le sens indirect pendant 3 secondes
       digitalWrite(MotorForward1,0);
       digitalWrite(MotorReverse1,HIGH);
       digitalWrite(MotorForward2,HIGH);
       digitalWrite(MotorReverse2,0);
    }
    else  {
      digitalWrite(MotorForward1,HIGH);
       digitalWrite(MotorReverse1,0);
       digitalWrite(MotorForward2,HIGH);
       digitalWrite(MotorReverse2,0); 
    }
 }
}</servo.h>


First design on fusion360 (25cm x 12cm)

(inside and support) 

Upgrade :

First prototypes of the circuit

Final Circuit V1

// Constants
const int enableBridge1 = 11;
const int MotorForward1 = 12;
const int MotorReverse1 = 13;

const int enableBridge2 = 5;
const int MotorForward2 = 6;
const int MotorReverse2 = 7;

const int TrigPin = 2;
const int EchoPin = 3;
float distance;

#include <Servo.h>

Servo myservo;

int angle = 0;

void setup(){

  Serial.begin(9600);
  pinMode(TrigPin, OUTPUT);
  pinMode(EchoPin, INPUT);
  Serial.println("Ultrasonic sensor:");

  pinMode(MotorForward1,OUTPUT);
  pinMode(MotorReverse1,OUTPUT);
  pinMode(enableBridge1,OUTPUT);

  pinMode(MotorForward2,OUTPUT);
  pinMode(MotorReverse2,OUTPUT);
  pinMode(enableBridge2,OUTPUT);

  myservo.attach(9);

  Serial.begin(2000);
}

void loop(){

  digitalWrite(enableBridge1,HIGH); // Active pont en H
  digitalWrite(enableBridge2,HIGH);

  digitalWrite(TrigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(TrigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(TrigPin, LOW);

  distance = pulseIn(EchoPin, HIGH) / 58.00;
  Serial.print(distance);
  Serial.print("cm");
  Serial.println();

  if (distance<=50) {
    // Si un obstacle est détecté
    // Vérifie s'il y a un obstacle à droite
    myservo.write(90);
    delay(10000);
    digitalWrite(TrigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(TrigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(TrigPin, LOW);
    if (pulseIn(EchoPin, HIGH) / 58.00 > 50) {
      // S'il n'y a pas d'obstacle à droite, tourne à droite
      digitalWrite(MotorForward1, 0);
      digitalWrite(MotorReverse1, HIGH);
      digitalWrite(MotorForward2, HIGH);
      digitalWrite(MotorReverse2, 0);
      delay(3000);
    } else {
      // Sinon, vérifie s'il y a un obstacle à gauche
      myservo.write(180);
      delay(10000);
 digitalWrite(TrigPin,...
Read more »

MPEG-4 Video - 2.09 MB - 05/03/2023 at 12:57

Download

  • 1
    Step 1

    The chassis and body are 3D printed separately and then fixed with glue.

View all instructions

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates