————高于人耳能听见的声波,称为超声波。
、
————在空气中传播的超声波频率,大约介于20~200KHZ,但其衰减程度与频率呈正比(频率越高,传输距离越短),市面上常见的超声波模块一般在38,40,42KHZ(部分超声波清洗机,震动频率高达3MHZ)
————声波在平滑的表面容易反射,在粗超的表面,容易被吸收。但只要表面的坑洞小于表面的1/4,即可当做平滑的表面,以40KHZ为例,将无视小于2mm的坑洞。公式如下。
波
长
=
声
波
速
度
频
率
→
→
344000
毫
米
/
秒
40000
H
Z
→
→
8.6
毫
米
→
→
2.15
毫
米
波长= \frac{声波速度}{频率}→→\frac{344000毫米/秒}{40000HZ}→→8.6毫米→→2.15毫米
波长=频率声波速度→→40000HZ344000毫米/秒→→8.6毫米→→2.15毫米
————声波在不同密度的环境中,传输速度不同。
————室温20摄氏度的环境中,声波的传输速度约344m/s(如果在水中,要比空气中快60倍)因此得到以下公式,因此也可以推算出,1cm的距离传播了58微秒。
————因为发射和接收,都是不同的传感器,所以声音的传播不是直线,求距离的时候需要考虑夹角。因为所设计的产品不要求太高的精度,所以文不考虑。
距
离
=
344
米
/
秒
X
传
播
时
间
X
C
o
s
(
ㄖ
)
2
距离=344米/秒 X \frac{传播时间XCos(ㄖ)}{2}
距离=344米/秒X2传播时间XCos(ㄖ)
在Arduino中,提供了一个测量pulseIn()的函数
pulseIn(端口号,信号电平,等待截止时间); //信号电平,HIGH或LOW可选,测量高低电平的持续时间。----如果在等待时间内没有接收到声波,会返回0;
函数将传回微秒单位的时间,所以使用unsigned long型的变量。
const byte trigPin=5; //超声波模块的触发引脚
const int echopin=6; //超声波模块的接收脚
unsigned long d; //存储好声波模块的持续时间
//自定义pong()函数将返回unsigned long类型的数值
unsigned long ping(){
digitalWrite(trigPin,HIGH); //触发脚设置为高定位
delayMicroseconds(5); //延时5毫秒
digitalWrite(trigPin,LOW); //触发脚设置为低定位
return pulseIn(echopin,HIGH); //传回高脉冲的持续时间.
}
void setup(){
pinMode(trigPin,OUTPUT);
pinMode(echopin,INPUT);
Serial.begin(9600);
Serial.println("开始");
}
void loop(){
d=ping() / 58;
Serial.print(d); //显示距离
Serial.print("cm");
Serial.println();
delay(1000);
}