曾经介绍过夏普GP2D12红外测距传感器,今天来介绍一下超声波测距传感器。
夏普GP2D12红外测距传感器的测量范围是10cm到80cm,所以对于更远的距离,超声波测距传感器将会更适用,还有一点就是不受周围环境光源干扰,在机器人对抗的比赛中,也是不可忽视的重要因素。今天以机器人基地的超声波传感器为例简地单学习一下超声波测距原理,再在Arduino上做个超声波传感器应用的实验。
它的工作原理就像声纳一样,通过发送器发出超声波信号,遇到物体反射回来传到接收器,然后计算反射回来所用的时间。信号反射时间越长,则目标越远。具体原理及计算公式见超声波测距原理及应用实例博文,这里就不过多解释了。
下面是超声波的接线简图,很简单的四根线,输入和输出接口只需接入Arduino任意的两个数字接口即可。
接线实物图
今天我来编一个简单的测距程序,我在13接口接一个小灯,使其当测得距离大于50厘米时亮起。
程序代码:
int inputPin=4; //定义超声波信号接收接口
int outputPin=5; // 定义超声波信号发出接口
int ledpin=13;
void setup()
{
Serial.begin(9600);
pinMode(ledpin,OUTPUT);
pinMode(inputPin,INPUT);
pinMode(outputPin,OUTPUT);
}
voidloop()
{
digitalWrite(outputPin, LOW); // 使发出发出超声波信号接口低电平2μs
delayMicroseconds(2);
digitalWrite(outputPin, HIGH); // 使发出发出超声波信号接口高电平10μs,这里是至少10μs
delayMicroseconds(10);
digitalWrite(outputPin, LOW);// 保持发出超声波信号接口低电平
int distance =pulseIn(inputPin,HIGH); // 读出脉冲时间
distance=distance/58; //将脉冲时间转化为距离(单位:厘米)
Serial.println(distance);//输出距离值
delay(50);
if (distance>=50)
{//如果距离大于50厘米小灯亮起
digitalWrite(ledpin,HIGH);
}//如果距离小于50厘米小灯熄灭
else
digitalWrite(ledpin,LOW);
}
当测得距离大于50厘米小灯亮起,这里由于我用的是蓝色小灯,所以效果会比较特殊。