arduino教程-08.超声波的应用

时间:2024-04-11 13:30:48

超声波选型指南

2.1 认识超声波

可在空气中传播的超声波频率,大约介于20~200KHz之间,其衰减程度与频率成正比(即频率越高,传播距离越短)
在室温20°C的环境中,声波的传输速度约为344m/s(**声音在水中传播的速度比在空气快60倍),因此,假设超声波往返的时间为600μs,可通过公式:=344/×2距离 = 344米/秒 \times \frac{传播时间}{2} 求得:被测物的距离为10.3cm。

2.2 影响声音传播速度的因素

  1. 空气的密度会影响声音的传播速度,空气的密度越高,声音的传播速度越快,而空气的密度又与温度密切相关,考虑温度变化的声音传播速度的近似公式:
    =V0+0.6×T速度 = V_0 + 0.6 \times T
    其中,V0V_0:声音在0摄氏度时的传播速度331.5米/秒。T:温度
  2. 物体的形状和材质会影响超声波传感器的效果和准确度,探测表面平整的墙壁和玻璃时,声波将会入射角度反射回来;只要物体表面的坑洞尺寸小于声波波长的14\frac{1}{4},即可视为平整表面。波长计算公式:
    = 波长 = \frac{相速度}{频率}

2.3 超声波传感器简介

超声波传感器模块上面通常有两个超声波元器件,一个用于发射,一个用于接收。电路板上有4个引脚:VCC(正极)、Trig(触发)、Echo(回应)、GND(接地),主要参数:

  • 工作电压与电流 :5V、15mA。
  • 感测距离 :2~400cm
  • 感测角度:不大于15°。
  • 被测物的面积不要小于50cm²并且尽量平整。
  • 具备温度补偿电路。
    在超声波模块的触发脚位输入10微妙以上的高电位,即可发射超声波,发射超声波之后,与接收到传回的超声波之前,“响应”脚位呈现高电位。因此,程序可从“响应”脚位的高电位脉冲持续时间,换算出被测物的距离。

2.4 实验

任务1:使用超声波传感器制作数字量尺

实验说明: 使用超声波感测与障碍物之间的距离,显示在串口监视器或LCD模块。
实验材料:

名称 数量
超声波传感器 1个
测量脉冲持续时间的pulseln()函数

Arduino提供一个测量脉冲时间长度的pulseln()函数,语法格式:

  1. Syntax
    pulseIn(pin, value)
    pulseIn(pin, value, timeout)
    此函数将传回微妙单位的脉冲时间,建议用unsigned long类型的变量来存放。
    pulseln()函数会等待脉冲出现再开始计时,预设的等待截止时间是1秒(即10610^6微秒),假如脉冲信号未在等待时间内出现,pulseln()将传回0.假如有需要,指定timeout的值为10微秒~3分钟的等待截止时间。
    如果想要测量信号的频率,可以采用Martin Nawrath开发的频率计时器扩展库“FreqCounter”。

  2. 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英尺不等。
其操作不受阳光或黑色材料的影响,尽管在声学上,柔软的材料(如布料等)可能难以检测到。它配有超声波发射器和接收器模块。
arduino教程-08.超声波的应用

  1. 技术规格
    arduino教程-08.超声波的应用
指标 参考
电源 + 5V DC
静态电流 <2mA
工作电流 15mA
有效角度 <15°
测距距离 2厘米-400厘米/1英寸-13英尺
分辨率 0.3厘米
测量角度 30度
  1. 必需的组件
    你将需要以下组件:
  • 1 × Breadboard 面包板
  • 1 × Arduino Uno R3
  • 1 × 超声波传感器(HC-SR04)
    arduino教程-08.超声波的应用
  1. 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;
}
  1. 代码说明
    超声波传感器有四个端子:+5V,Trigger,Echo和GND,连接如下:超声波传感器有四个端子:+5V,Trigger,Echo和GND,连接如下:
  • 将+5V引脚连接到Arduino板上的+5v。
  • 将Trigger连接到Arduino板上的数字引脚7。
  • 将Echo连接到Arduino板上的数字引脚6。
  • 将GND连接到Arduino上的GND。

在我们的程序中,我们通过串口显示了传感器测量的距离,单位为英寸和厘米。
结果,你将在Arduino串口监视器上看到传感器测量的距离,单位为英寸和厘米。