一、奇葩的开始(如有不适,自觉跳过)
最近,我们学校开设了一门关于传感器的课程,这门课程虽然时间紧凑,但它的内容丰富而精彩。老师从物联网的基础概念讲起,延伸到传感器的广泛应用,以及它们之间的紧密联系。这些内容让我感到既新奇又兴奋,仿佛揭开了科技世界的神秘面纱。
尽管课程时间有限,但我在课余时间也一直在自学传感器相关的知识,主要是一些开源硬件。我意识到,学习这些技术不仅是为了激发我对嵌入式单片机的兴趣,更是为了我未来的职业发展打下坚实的基础。虽然我没有深入研究传感器的原理,但我一直保持着对它们的好奇和探索。
最近,老师提议我们班分成几个小组,各自介绍不同类型的传感器。我准备了一晚上,选择了“超声波传感器”作为我的介绍主题。在搜集资料的过程中,我深感自己之前对硬件的了解太过肤浅,错过了许多深入探索的机会。直到我真正开始深入了解,才发现传感器的世界是如此的丰富多彩。
第二天,由于时间限制,我的介绍并没有达到预期的效果。但这次经历让我意识到,只有全面地分享自己的认识,才能真正地传达知识。因此,我决定利用CSDN这个平台,分享我对超声波传感器的初步理解。如果大家有任何建议或补充,欢迎在评论区留下你的想法,或者通过私信与我交流。我期待与大家一起学习,共同进步。
二、发现超声波(历史)
还记得初中物理课本上讲关于声音的产生及传播吗?
声音是由物体振动产生的声波,振动停止发声也停止,发声的物体叫声源。
声音可以通过固体、液体、气体这些介质传播。但是声音不能在真空中传播,因为真空中没有声音传播所需用的介质。
有种回到了初中物理课堂的感觉!
声音是由物体振动产生的声波,声波的计量单位为频率,是指声波每秒钟振动的次数,称为赫兹(Hz)。
人耳所能听到的声波频率为20Hz~20000Hz之间,
小于20Hz,称之为“次声波”,大于20000Hz,称之为超声波,人耳均无法听见。
而我今天要给大家讲的就是我们所听不见的超声波,讲到超声波,就不得不提到一位著名的科学家,他就是拉扎罗·斯帕拉捷(下图)
斯帕拉捷是意大利著名的博物学家、生理学家和实验生理学家,他最卓越的贡献就是蝙蝠实验。
*
*
*
1、蝙蝠实验《夜晚的实验》
1793年夏天,一个晴朗的夜晚,喧腾热闹的城市渐渐平静下来。斯帕拉捷匆匆吃完饭,便走出街口,把笼子里的蝙蝠放了出去。当他看到放出去的几只蝙蝠轻盈敏捷地来回飞翔时,不由得尖叫起来。因为那几只蝙蝠,眼睛全被他蒙上了,都是“瞎子”。
斯帕拉捷为什么要把蝙蝠的眼睛蒙上呢?原来,每当他看到蝙蝠在夜晚自由自在的飞翔时,总认为这些小精灵一定长着一双特别敏锐的眼睛,假如他们的眼睛瞎了,就不可能在黑夜中灵巧的躲过各种障碍物,并且敏捷的捕捉飞蛾了。然而事实完全出乎他的意料。斯帕拉捷很奇怪:不用眼睛,蝙蝠凭什么来辨别前方的物体,捕捉灵活的飞蛾呢?
于是,他把蝙蝠的鼻子堵住。结果,蝙蝠在空中还是飞的那么敏捷、轻松。“难道他薄膜似的翅膀,不仅能够飞翔,而且能在夜间洞察一切吗?”斯帕拉捷这样猜想。他又捉来几只蝙蝠,用油漆涂满它们的全身,然而还是没有影响到它们飞行。
最后,斯帕拉捷堵住蝙蝠的耳朵,把他们放到夜空中。这次,蝙蝠可没有了先前的神气。他们像无头苍蝇一样在空中东碰西撞,很快就跌落在地。
啊!蝙蝠在夜间飞行,捕捉食物,原来是靠听觉来辨别方向、确认目标的!
斯帕拉捷的实验,揭开了蝙蝠飞行的秘密,促使很多人进一步思考:蝙蝠的耳朵又怎么能“穿透”黑夜,“听”没有声音的物体呢?
后来人们继续研究,终于弄清了其中的奥秘。原来,蝙蝠靠喉咙发出人耳听不到的“超声波”,这种声音沿着直线传播,一碰到物体就像光照到镜子上那样反射回来。蝙蝠用耳朵接受到这种“超声波”,就能迅速做出判断,灵巧的自由飞翔,捕捉食物。
到19世纪末20世纪初,居里兄弟(下图)发现了晶体的正压电效应与逆压电效应,由此才造出了属于人类自己的超声波
机械能与电能之间的相互转换(上图)
正压电效应:某些晶体材料在交变拉压应力作用下,产生交变电场的效应称 之为正压电效应。(就是机械能转换成电能)
逆压电效应:当晶体材料在交变电场作用下,产生伸缩变形的效应称为逆压电效应。(就是电能转换成机械能)
当然,这两者都可以称之为“压电效应”。
三、HC-SR04超声波传感器
硬件名称 | HC-SR04超声波传感器 |
---|---|
工作电压 | 直流(DC):5V |
工作电流 | 15mA |
工作频率 | 40HZ |
射程范围 | 2厘米(cm)~4米(m) |
测量角度 | <=15度 |
输入触发信号 | 10微妙(uS)的TTL脉冲 |
输出回响信号 | 输出TTL电平信号与射程成正比 |
(下图)是超声波传感器的“探头”结构: | |
![]() | |
![]() ![]() | |
超声波传感器就是由这两个超声波探头和放大电路(放大电信号)等组成的。 |
1、原理
那么HC-SR04超声波传感器是如何实现测量距离的功能的呢?
当有脉冲电压触发时(就是控制板给Trig引脚发送高电频),探头里的晶片就会振动,继而产生超声波。超声波在空气中传播,当超声波遇到物体后就会返回,被超声波传感器的接收探头接收到(反射的超声波使压电晶片振动,继而在压电晶片两端产生电压。)随后这种电压经过超声波内部的信号放大电路,将电压信号放大,此时Echo引脚给控制板发送高电频信号。
这样一个由发送到接受的过程,经过计算就可以得出距离。
根据声音在空气中传播的速度:340m/s,可以得出
公式:距离=(时间*340m/s)➗2
(÷2,是因为往返的原因)
四、实物搭建
了解了上面的原理我们开始制作吧!!!
1、材料:
1、面包板
2、Arduino UNO板(含USB连接线)
3、HC-SR04超声波传感器
4、杜邦线(若干)
I/O表:
HC-SR04超声波传感器 | Arduino UNO板 |
---|---|
GND | GND |
VCC | 5v |
Trig | D2 |
Echo | D3 |
接线图:
五、测距(代码部分)
#define Trig 2 //引脚Tring 连接 IO D2
#define Echo 3 //引脚Echo 连接 IO D3
float cm; //距离变量
float temp; //存储回波
void setup()
{
Serial.begin(9600);
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
pinMode(8,OUTPUT);
}
void loop()
{
//给Trig发送一个低高低的短时间脉冲
digitalWrite(Trig, LOW); //给Trig发送一个低电平(初始化)
delayMicroseconds(2); //等待 2微妙
digitalWrite(Trig,HIGH); //给Trig发送一个高电平
delayMicroseconds(10); //等待 10微妙
digitalWrite(Trig, LOW); //给Trig发送一个低电平
temp = float(pulseIn(Echo, HIGH)); //存储回波等待时间,
//pulseIn函数会等待引脚变为HIGH,开始计算时间,再等待变为LOW并停止计时
//返回脉冲的长度
//声速是:340m/1s 换算成 34000cm / 1000000μs = 34 / 1000
//因为发送到接收,是一来一回,我们只要单程就好了,所以➗2
//距离(厘米) = (回波时间 * (34 / 1000)) / 2
//简化后的计算公式为 (回波时间 * 17)/ 1000
cm = (temp * 17 )/1000; //把回波时间换算成cm
Serial.print("Echo =");
Serial.print(temp);//串口输出等待时间的原始数据
Serial.print(" | | Distance = ");
Serial.print(cm);//串口输出距离换算成cm的结果
Serial.println("cm");
}
效果是这样的