超声波检测的总体设计
超声波的定义
波是由某一点开始的扰动所引起的,并按预定的方式传播或传输到其他点上。声波是一种弹性机械波。人们所感觉到的声音是机械波传到人耳引起耳膜振动的反应,能引起人们听觉机械波频率在20Hz-20KHz, 超声波是频率大于20KHz的机械波。在超声波测距系统中,用脉冲激励超声波探头的压电晶片,使其产生机械振动,这种振动在与其接触的介质中传播,便形成了超声波。
超声波的物理特性
(1)超声波的传播类似于光线,遵循几何光学的规律,具有反射、折射现象,也能聚焦,因此可以利用这些性质进行测量、定位、探伤和加工处理等。在传播中,超声波的速度与声波相同,通常情况下,声波在空气中的传播速度约为344m/s;
(2)超声波的波长很短,与发射器、接收器的几何尺寸相当,由发射器发射出来的超声波不向四面八方发散,而成为方向性很强的波束,波长愈短方向性愈强,因此超声用于探伤、水下探测,有很高的分辨能力,能分辨出非常微小的缺陷或物体;
(3)能够产生窄的脉冲,为了提高探测精度和分辨率。要求探测信号的脉冲极窄,但是一般脉冲宽度是波长的几倍(如要产生更窄的脉冲在技术上是有困难的),超声波波长短,因此可以作为窄脉冲的信号发生器。
(4)功率大,超声波能够产生并传递强大的能量。声波作用于物体时,物体的分子也要随着运动,其振动频率和作用的声波频率一样,频率越高,分子运动速度越快,物体获得的能量正比于分子运动速度的平方。超声频率高,故可以给出大的功率。
超声波探头
在超声波检测过程中发射和接收超声波的装置。探头的性能直接影响超声波的特性,影响超声波的检测性能。在超声检测中使用的探头,是利用材料的压电效应实现电能、声能转换的换能器。探头中的关键部件是晶片,晶片是一个具有压电效应的单晶或者多晶体薄片,它的作用是将电能和声能互相转换。
超声波检测硬件设计
结构硬件选材
器械 | 数量 |
Arduino Uno 板 | 1个 |
超声波传感器 | 1个 |
LED灯 | 1个 |
面包板 | 1个 |
杜邦线(公对公) | 一捆 |
HC-SR04超声波模块
HC-SR04超声波模块常用于机器人避障、物体测距、液位检测、公共安防、停车场检测等场所。HC-SR04超声波模块主要是由两个通用的压电陶瓷超声传感器,并加外围信号处理电路构成的。如图
模块引脚
超声波模块有4个引脚,分别为Vcc、 Trig(控制端)、 Echo(接收端)、 GND;其中VCC、GND接上5V电源, Trig(控制端)控制发出的超声波信号,Echo(接收端)接收反射回来的超声波信号。模块如图:
模块原理图
工作原理
1)采用IO触发测距,给至少10us的高电平信号。2)模块自动发送8个40KHz的方波,自动检测是否有信号返回。3)有信号返回,通过IO输出一高电平,高电平持续时间就是超声波从发射到返回的时间。只需要提供一个10uS以上脉冲触发信号,该模块内部将发出8个40kHz周期电平并检测回波。一旦检测到有回波信号则输出回响信号。回响信号的脉冲宽度与所测的距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。公式: uS/58=厘米或者uS/148=英寸;或是:距离=高电平时间*声速(340M/S) /2;建议测量周期为60ms以上,以防止发射信号对回响信号的影响。
注:
1、此模块不宜带电连接,若要带电连接,则先让模块的GND端先连接,否则会影响模块的正常工作。
2、测距时,被测物体的面积不少于05平方米且平面尽量要求平整,否则影响测量的结果。
单片机主控模块
本设计采用Atmel Atmega328微处理控制器,如图 4 其性能为: Digital I/O 数字输入/输出端共0~13。Analog I/0模拟输入/输出端共0~5。支持ISP下载功能。输入电压:接上电脑USB时无须外部供电,外部供电7V~12V直流电压输入。输出电压: 5V直流电压输出和3.3V直流电压输出。
Arduino实物图
超声波检测软件设计
实物软件方案设计
软件实施流程图:
程序编写
程序讲解
这个程序是在超声波的程序上进行了一点小的改变,首先将LED设置为8号引脚,并且使用pinMode()函数将其设置为输出,在程序中,变化的核心是程序最后的if..else函数,下面就介绍一下该函数。
通过if…else语句,用户可以让Arduino判断某一个条件是否达到,并且根据这一判断结果执行相应的程序。
Arduino
1 2 3 4 5 6 | if( 表达式1 ) { 语句块1 } else { 语句块2 }
|
上述结构表示:如果 “表达式1” 的条件得到满足则执行“语句块1”。否则Arduino将执行“语句块2”。(如下图所示)
例:
if( a == 0 ) {
digitalWrite(LEDpin, HIGH);
}else {
digitalWrite(LEDpin, LOW);
}
在以上示例中,Arduino控制器通过判断变量a是否等于0,从而决定是否执行指令(点亮LED)
digitalWrite(LEDpin, HIGH);
假如变量a确实等于0,则执行这条指令。否则Arduino将不执行指令:(保持LED熄灭)
digitalWrite(LEDpin, LOW);
在这个示例中,if(a == 0)中的 == 是一种关系运算符号,和它相似的 = 是一种赋值符号,因此我们在使用的过程中切记不能使用错误。
除此之外//是我们常用的一种注释符号,通过这个可以让我们人为的理解但是程序不会执行出错
程序详解:
int trigPin = 11; //Trig
int echoPin = 12; //Echo
int LED = 8; //全定义LED的数值为8
long duration, cm, inches; //定义duration, cm, inches为长整型变量
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT); //连接11引脚输出电压
pinMode(echoPin, INPUT); //连接12引脚输入电压
pinMode(LED, OUTPUT); //连接8引脚输出电压
//Echo INPUT输入信号,Trig OUTPUT输出信号
}
void loop()
{
// The sensor is triggered by a HIGH pulse of 10 or more microseconds.
// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
//这里是超声波模块的工作原理
digitalWrite(trigPin, LOW);
delayMicroseconds(5); //间隔时间是可以改的,但是后文的算法你需要改变
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH); //pulseIn是内置函数专门用来读取脉冲时间间隔
// convert the time into a distance
cm = (duration/2) / 29.1; //超声波数据转换算法
inches = (duration/2) / 74;
Serial.print("inchi, ");
Serial.print(inches); //通过串口监视器观察inches
Serial.print("cm");
Serial.print(cm);
Serial.println();
if(cm < 10){ //如果距离cm小于10
digitalWrite(LED, HIGH); //8引脚上的LED亮,注意LED要接一个电阻防止电流过大
}
else{
digitalWrite(LED, LOW); //否则输出低电压(熄灭)
}
delay(100);
}
迷你超声波检测的组装与调试
电路设计
器械清单
器械 目录 | 数量 |
Arduino Uno 板 | 1个 |
超声波模块 | 1个 |
LED灯 | 1个 |
面包板 | 1个 |
杜邦线(公对公) | 一捆 |
220Ω电阻 | 1个 |
原理图
电路连接图
硬件检测
确保线路连接正确后,上传程序,如若未能成功显示数据,查找原因是否为硬件损坏,更换装备后再次实验直到成功显示数据。对超声波检查完没有问题之后,我们通过主程序电路板来检查超声波是否能运行正常,串口监视器显示数据中没有出现乱码的现象显示出自己设定的数字,就代表没有任何异常。
超声波单元检测
检验超声波模块是否完好,实验成功后将会,在串口监视器中打印数据,通过if函数中的逻辑判断,观察实验结果。
整体电路调试
如果以上实验都成功了,可以试试搭建整体
参考文献
文中部分图片来自arduino中文社区,以下是官方地址
https://www.arduino.cn/forum.php
参考超声波模块知识借鉴于arduino中文社区