Avoidance by Infrared and Ultrasonic(一)

一、实现要求

  • 使用红外避障模块实现低位置处的障碍物避障
  • 使用超声波模块实现高位置处的避障
  • 使用舵机模块实现超声波模块的多角度探测

二、使用材料

  • 可驱动的小车模型
  • 红外避障模块
  • 超声波模块
  • 舵机模块
  • Arduino UNO开发板

三、舵机的使用

  • 完成相应线路的连接
  • 舵机引脚的定义和相关变量
#define servoPin  2   //servo signal
int pulseWidth;       //pulse   width
  • 初始化函数
//initialization of servo
pinMode(servoPin, OUTPUT);
  • 舵机控制函数
void turnServo(int angle){
  for(int i = 0; i <= 20; i++)
    servoPulse(angle);
}

void servoPulse(int angle){
  pulseWidth = (angle * 11) + 500; //map the pulse width value to 500-2048
  digitalWrite(servoPin, HIGH);
  delayMicroseconds(pulseWidth);
  digitalWrite(servoPin, LOW);
  delay(20-pulseWidth/1000);  
}
  • 至此可实现舵机在(0, 180)内任意角度的转向

四、红外避障模块的使用

  • 完成相应线路的连接
  • 引脚定义和相关的变量
#define infraredRight   8   //left  infrared signal
#define infraredLeft   11   //right infrared signal

int infraredLeftState;      //left  infrared state
int infraredRightState;     //right infrared state
  • 初始化函数
 //initialization of infrared
 pinMode(infraredLeft, INPUT);
 pinMode(infraredRight, INPUT);
  • 红外检测函数
void infraredJudge(){
  infraredLeftState = digitalRead(infraredLeft);
  infraredRightState = digitalRead(infraredRight);
  if(infraredLeftState == LOW && infraredRightState == LOW)  {
    //both left and right has obstacle
  }
  else if(infraredLeftState == HIGH && infraredRightState == LOW){
    //right has obstacle
  }
  else if(infraredLeftState == LOW && infraredRightState == HIGH){
    //left has obstacle
  }
}

五、超声波模块的使用

  • 完成线路的连接
  • 引脚的定义和相关变量
#define ultrasonicEcho A1  //Echo signal 
#define ultrasonicTrig A0  //Trig signal

int distanceFront;         //front distance
int distanceLeft;          //left  distance
int distanceRight;         //right distance
  • 初始化函数
 //initialization of ultrasonic
 pinMode(ultrasonicEcho, INPUT);
 pinMode(ultrasonicTrig, OUTPUT);
  • 超声波检测函数
float distanceTest(){
  digitalWrite(ultrasonicTrig, LOW);
  delayMicroseconds(2);
  digitalWrite(ultrasonicTrig, HIGH);
  delayMicroseconds(10);
  digitalWrite(ultrasonicTrig, LOW);
  float dis = pulseIn(ultrasonicEcho, HIGH);
  dis = dis / 58;
  return dis;
}

你可能感兴趣的:(Arduino)