认识超声波
可在空气中传播的超声波频率,大约介于20~200KHz之间,其衰减程度与频率成正比(即频率越高,传播距离越短)
在室温20°C的环境中,声波的传输速度约为344m/s(**声音在水中传播的速度比在空气快60倍),因此,假设超声波往返的时间为600μs,可通过公式:
求得:被测物的距离为10.3cm。
影响声音传播速度的因素
- 空气的密度会影响声音的传播速度,空气的密度越高,声音的传播速度越快,而空气的密度又与温度密切相关,考虑温度变化的声音传播速度的近似公式:
其中, :声音在0摄氏度时的传播速度331.5米/秒。T:温度 - 物体的形状和材质会影响超声波传感器的效果和准确度,探测表面平整的墙壁和玻璃时,声波将会入射角度反射回来;只要物体表面的坑洞尺寸小于声波波长的
,即可视为平整表面。波长计算公式:
超声波传感器简介
超声波传感器模块上面通常有两个超声波元器件,一个用于发射,一个用于接收。电路板上有4个引脚:VCC(正极)、Trig(触发)、Echo(回应)、GND(接地),主要参数:
- 工作电压与电流 :5V、15mA。
- 感测距离 :2~400cm
- 感测角度:不大于15°。
- 被测物的面积不要小于50cm²并且尽量平整。
- 具备温度补偿电路。
在超声波模块的触发脚位输入10微妙以上的高电位,即可发射超声波,发射超声波之后,与接收到传回的超声波之前,“响应”脚位呈现高电位。因此,程序可从“响应”脚位的高电位脉冲持续时间,换算出被测物的距离。
任务1:使用超声波传感器制作数字量尺
实验说明: 使用超声波感测与障碍物之间的距离,显示在串口监视器或LCD模块。
实验材料:
名称 | 数量 |
---|---|
超声波传感器 | 1个 |
测量脉冲持续时间的pulseln()函数
Arduino提供一个测量脉冲时间长度的pulseln()函数,语法格式:
Syntax
pulseIn(pin, value)
pulseIn(pin, value, timeout)
此函数将传回微妙单位的脉冲时间,建议用unsigned long类型的变量来存放。
pulseln()函数会等待脉冲出现再开始计时,预设的等待截止时间是1秒(即
微秒),假如脉冲信号未在等待时间内出现,pulseln()将传回0.假如有需要,指定timeout的值为10微秒~3分钟的等待截止时间。
如果想要测量信号的频率,可以采用Martin Nawrath开发的频率计时器扩展库“FreqCounter”。
Parameters
pin: the number of the pin on which you want to read the pulse. (int)
value: type of pulse to read: either HIGH or LOW. (int)
timeout (optional): the number of microseconds to wait for the pulse to start; default is one second (unsigned long)
实验程序:
const byte trigPin = 10;
const int echoPin = 9;
unsigned long d;
unsigned long ping() {
digitalWrite(trigPIN, HIGH);
delayMicroseconds(5);
digitalWrite(trigPin, LOW);
return pulseln(echoPin, HIGH);
}
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop(){
d = ping() / 58;
Serial.print(d);
Serial.print("cm");
Serial.println();
delay(1000);
}