Avoidance by Infrared and Ultrasonic(一)

来源:互联网 发布:小猪微信cms源码下载 编辑:程序博客网 时间:2024/06/05 19:45

一、实现要求

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

二、使用材料

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

三、舵机的使用

  • 完成相应线路的连接
  • 舵机引脚的定义和相关变量
#define servoPin  2   //servo signalint pulseWidth;       //pulse   width
  • 初始化函数
//initialization of servopinMode(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 signalint infraredLeftState;      //left  infrared stateint 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 signalint distanceFront;         //front distanceint distanceLeft;          //left  distanceint 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;}
阅读全文
0 0
原创粉丝点击