xuliang
Published © CC BY

Seeeduino XIAO Ultrasonic obstacle avoidance robot

Arduino robot is a learning case that beginners like. It uses XIAO to design an ultrasonic obstacle avoidance robot

BeginnerFull instructions provided2 hours357
Seeeduino XIAO Ultrasonic obstacle avoidance robot

Things used in this project

Hardware components

Seeed Studio XIAO SAMD21 (Pre-Soldered) - Seeeduino XIAO
Seeed Studio XIAO SAMD21 (Pre-Soldered) - Seeeduino XIAO
×1
Seeed Studio XIAO Expansion Board
Seeed Studio XIAO Expansion Board
×1
Grove - I2C Mini Motor Driver
Seeed Studio Grove - I2C Mini Motor Driver
×1
Grove - Ultrasonic Ranger
Seeed Studio Grove - Ultrasonic Ranger
×1
Seeed Studio Grove - Servo
×1
Rechargeable Battery, 3.7 V
Rechargeable Battery, 3.7 V
×1
Self made mini round robot chassis kit - with two TT DC motors and brackets
×1

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Laser cutting machine
Acrylic plate

Story

Read more

Custom parts and enclosures

Robot 1st floor chassis

Robot 1st floor chassis

Robot 2nd floor chassis

Servo bracket

Schematics

Wiring diagram

Robot first floor chassis

Robot first floor chassis

Code

Program code

Arduino
#include <Servo.h>
#include <SparkFunMiniMoto.h>
#include <Ultrasonic.h>

Servo servo_2;

MiniMoto motor_CH1(0xD0);
MiniMoto motor_CH2(0xC1);
Ultrasonic ult(7);

long ult_dis;
long L_dis;
long R_dis;

void setup(){
  servo_2.attach(0);

  servo_2.write(80);
  delay(100);
  motor_CH1.stop();
  motor_CH2.stop();
}

//forward
void line(){
  motor_CH1.drive(150);
  motor_CH2.drive(150);

}
//stop

void lull(){
  motor_CH1.stop();motor_CH2.stop();
}

//retreat
void retreat(){
  motor_CH1.drive(-150);
  motor_CH2.drive(-150);
}

//Turn left
void left(){
  motor_CH1.drive(0);
  motor_CH2.drive(150);

}
//Turn right
void right(){
  motor_CH1.drive(150);
  motor_CH2.drive(0);
}

//Motion function
void robot(){

  ultcenter();
  if ((ult_dis > 50)) {
    line();
  }
  if ((ult_dis < 30)) {
    lull();
    delay(600);
    retreat();
    delay(600);
    servo_2.write(150);
    delay(100);
    ultleft();
    delay(200);
    servo_2.write(30);
    delay(100);
    ultright();
    delay(200);
    servo_2.write(90);
    delay(100);
    if ((L_dis > R_dis)) {
      left();
      delay(600);
    } else {
      right();
      delay(600);
    }
  }

}

//Ranging function
void ultcenter(){
  ult_dis = ult.MeasureInCentimeters();
}

void ultleft(){
  L_dis = ult.MeasureInCentimeters();
}

void ultright(){
  R_dis = ult.MeasureInCentimeters();
}
void loop(){
  robot();

}

Credits

xuliang
1 project • 0 followers

Comments