topic
2.1 认识超声波
可在空气中传播的超声波频率,大约介于20~200KHz之间,其衰减程度与频率成正比(即频率越高,传播距离越短)
在室温20°C的环境中,声波的传输速度约为344m/s(**声音在水中传播的速度比在空气快60倍),因此,假设超声波往返的时间为600μs,可通过公式: 求得:被测物的距离为10.3cm。
2.2 影响声音传播速度的因素
- 空气的密度会影响声音的传播速度,空气的密度越高,声音的传播速度越快,而空气的密度又与温度密切相关,考虑温度变化的声音传播速度的近似公式:
其中,:声音在0摄氏度时的传播速度331.5米/秒。T:温度 - 物体的形状和材质会影响超声波传感器的效果和准确度,探测表面平整的墙壁和玻璃时,声波将会入射角度反射回来;只要物体表面的坑洞尺寸小于声波波长的,即可视为平整表面。波长计算公式:
2.3 超声波传感器简介
超声波传感器模块上面通常有两个超声波元器件,一个用于发射,一个用于接收。电路板上有4个引脚:VCC(正极)、Trig(触发)、Echo(回应)、GND(接地),主要参数:
- 工作电压与电流 :5V、15mA。
- 感测距离 :2~400cm
- 感测角度:不大于15°。
- 被测物的面积不要小于50cm²并且尽量平整。
-
具备温度补偿电路。
在超声波模块的触发脚位输入10微妙以上的高电位,即可发射超声波,发射超声波之后,与接收到传回的超声波之前,“响应”脚位呈现高电位。因此,程序可从“响应”脚位的高电位脉冲持续时间,换算出被测物的距离。
2.4 实验
任务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);
}
2.5 hc-sr04超声波传感器
HC-SR04超声波传感器使用声纳来确定物体的距离。它提供了非常好的非接触范围检测,准确度高,读数稳定,易于使用,尺寸从2厘米到400厘米或1英寸到13英尺不等。
其操作不受阳光或黑色材料的影响,尽管在声学上,柔软的材料(如布料等)可能难以检测到。它配有超声波发射器和接收器模块。
- 技术规格
指标 | 参考 |
---|---|
电源 | + 5V DC |
静态电流 | <2mA |
工作电流 | 15mA |
有效角度 | <15° |
测距距离 | 2厘米-400厘米/1英寸-13英尺 |
分辨率 | 0.3厘米 |
测量角度 | 30度 |
- 必需的组件
你将需要以下组件:
- 1 × Breadboard 面包板
- 1 × Arduino Uno R3
- 1 × 超声波传感器(HC-SR04)
- Arduino代码
const int pingPin = 7; // Trigger Pin of Ultrasonic Sensor
const int echoPin = 6; // Echo Pin of Ultrasonic Sensor
void setup() {
Serial.begin(9600); // Starting Serial Terminal
}
void loop() {
long duration, inches, cm;
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(10);
digitalWrite(pingPin, LOW);
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
inches = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(100);
}
long microsecondsToInches(long microseconds) {
return microseconds / 74 / 2;
}
long microsecondsToCentimeters(long microseconds) {
return microseconds / 29 / 2;
}
- 代码说明
超声波传感器有四个端子:+5V,Trigger,Echo和GND,连接如下:超声波传感器有四个端子:+5V,Trigger,Echo和GND,连接如下:
- 将+5V引脚连接到Arduino板上的+5v。
- 将Trigger连接到Arduino板上的数字引脚7。
- 将Echo连接到Arduino板上的数字引脚6。
- 将GND连接到Arduino上的GND。
在我们的程序中,我们通过串口显示了传感器测量的距离,单位为英寸和厘米。
结果,你将在Arduino串口监视器上看到传感器测量的距离,单位为英寸和厘米。