

【物联网】老程序教你一招,10行代码让超声波模块秒变声控开关
source link: https://blog.csdn.net/nokiaguy/article/details/115341621
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

目录
在本文最后有完整的视频讲解
玩Arduino、树莓派的同学应该很熟悉超声波模块,这个东西不贵(通常在5到10元之间),作用有限,在网上搜索,99%的应用场景都是测量距离。剩下的场景就是一些没什么用的小玩应,例如,将两个超声波模块相对,利用超声波玩悬浮,其实没啥大用。本文就给大家提供一个新的思路,只用10几行代码,就可以将超声波模块改成一个声控开关,用来控制LED以及任何复杂的电子设备。我还利用了这个功能制作了一个基于鸿蒙的“救命SOS”游戏,后面我会写文章来介绍,现在还是先回到本文的主题上来。
先来体验一下基于超声波模块的声控开关:
【Arduino实验室】超声波只能测距?隔空操控LED听说过吗?见证奇迹的时刻!
1. 超声波模块的测距原理
可能有的读者不太熟悉超声波模块,为了不让大家看的一头雾水,先来看一下超声波模块的样子,看起来很萌,有两个像眼睛一样的东西,还有4个针式的管脚。
当然,这个模块发出的超声波很弱,肯定不会像对付浩克那样强的超声波,否则我也不会有命在这里写文章了!
超声波模块测距的原理其实很简单,与测量地球到月亮的距离类似,只是前者使用的是超声波,后者使用的是激光。超声波模块利用了声波在空气中传播速度是340米/秒这一特性(这是一个固定值,就像光的传播速度约等于30万千米/秒一样),然后测量出从发出超声波到接收到返回超声波的时间(就是往返的时间),然后再除以2,就是超声波从A点到B点所需的时间,如果这个值是1000毫秒,那么A到B的距离就是340米,如果是100毫秒,就是34米,以此类推。当然,超声波与激光不同,距离不能太远,一般最多也就测量个几十米,再远可能就不准了。
超声波模块的两个像眼睛一样的东西,一个负责发射超声波,另外一个负责接收返回的超声波。一旦开始发射超声波,就自动启动计时器,接收到返回的超声波就会停止计时,然后通过相应的管脚读取计时器中的时间,经过计算,就可以得到特定单位(米、厘米、毫米)的距离了。下图是超声波发射和接收的时序图。最下面的输出回响信号的时序图凸起的部位,左边设置为高电平,这时等待超声波返回,当接收到返回的超声波后,右边就变成低电平,返回计时器的时间。其实我们需要的时间就是凸起的部位处于高电平的时间(也就是说,超声波模块的某个管脚处于高电平的时间)。
2. 超声波模块如何与Arduino开发板连接
一图顶千言,还是看图说话吧!
这是超声波模块与Arduino开发板的连接图,同时还有一个LED与Arduino开发板相连,其实这里的LED与超声波模块没有任何关系,只是通过由超声波模块改装的声控开关来控制LED。
超声波模块有如下4个管脚:
(1)VCC:接Arduino开发板的5v管脚
(2)Trig:发射超声波的管脚,需要接在数字管脚上,本例接在10号管脚,当10号管脚处于高电平时发射超声波
(3)Echo:接收超声波的关键,需要接在数字管脚上,本例接在9号管脚,当9号管脚处于高电平时,会等待超声波返回,如果接收到超声波,9号管脚就会自动变成低电平,这时会返回计时器中的时间(超声波的往返时间)
(4)GND:接Arduino开发板的GND管脚(接地)
LED很简单,正极接到7号数字管脚,负极接地(GND)
本例将5V接到了面包板上,所以可以将VCC直接接到面包板上。
如果大家不了解面包板的用法,可以看这个视频:
【Arduino实验室】无需编写一行代码,用按键控制LED,Arduino初学者入门首选
3. 先从测距开始
还是先上代码吧!
这段测距代码一共就6行,其实就是先设置trip管脚低电平,然后再设置高电平,让超声波模块发射超声波。然后通过pulseIn函数将echo管脚设置高电平,等待超声波的返回,如果返回,pulseIn函数会返回时间(单位:微秒),本例计算得到的distance的单位是毫米。
看看,是不是很简单呢?
4. 如何将超声波改造成声控开关
测距很容易理解,那么如果将超声波模块变成声控开关呢?其实也并不复杂,这里用了一个技巧和一个状态机的算法,一共也就十几行代码。
测量距离肯定有远近。如300毫米和600毫米肯定是有差距的,肉眼也是可见的,也可以感知到。而这里的声控开关,其实并不是你要大喊一声:芝麻开门。超声波你也发不出,也听不见。这里的声控是指让超声波感知你的存在。
从前面的视频可以看出,将手在超声波模块前滑动,如果手正好在超声波模块的前面,那么测量的距离肯定要小于手不在超声波模块前的距离,其实这就是一个二值逻辑。利用测量距离的变化,可以判断手是否在超声波模块的前面。因此,这里需要设置一个阈值,如果测量的距离小于这个阈值,说明手在超声波模块的前面,如果大于这个阈值,说明手没在超声波模块的前面。
不过这里还有一个问题,由于loop函数是不断循环的,所以如果你的手一直在超声波模块的前面,那么就会一直触发“开”这个动作,因此需要使用状态机来屏蔽这种情况,也就是说,只有上一个状态是“关”时,才会检测当前状态是否为“开”。完整的实现代码如下:
5. 再加一个超声波开关
如果嫌不过瘾,可以再加一个超声波开关,连接方式同上,控制两个超声波开关的代码如下:
这段代码通过一个数字管脚控制多个LED,两个数字管脚控制两组LED。所以首先需要将面包板与数字管脚连接,然后这些LED连接到面包板上,如下图所示。ok,现在可以尽情滴玩耍了。
下面是本文的视频讲解:
【硬核】老程序员教你一招,让超声波模块秒变声控开关!
Recommend
-
104
一招教你打造一个滑动置顶的视觉特效 2017年10月31日 01:23 · 阅读 5267
-
63
生成模型和序列模型总是令我着迷:它们提出的问题与我们初学机器学习时常遇到的问题不同。刚开始学习 ML 时,和很多人一样,我学的是分类和回归。这些可以帮助我们提出并回答以下问题: 图片里是猫还是狗?(分类)
-
50
来源:中国科普博览秋已深,又迎来了一年一度的秋刀鱼渔汛。黑潮暖流与亲潮寒流如约相遇,交汇处形成海量的饵料,让这些一尺来长的海中美味恣意生长。这一段时间,从我国台湾海峡向北直到日本北海道以东海域,大小渔船往来如织,收获着大海的慷慨赠予。秋刀鱼
-
23
教你一招识破大资金建仓时机,让机构给你抬轿子 - 如果我能提前知道大资金会流入建仓,我最好的策略是什么?肯定是提前买入,坐等抬轿子^___^。我等小散最好的策略当然是跟着大机构的资金走。知己知彼方能百战不殆。虽然大部分机构资金的进出都是保密的,事后才会...
-
33
点击上方 “ 匠心零度 ” ,选择“
-
26
大家好,大家有没有每天打开电脑,都要关好多个弹窗,并且不知道这些弹窗是怎么来的,有时候还会莫名其妙的出来,好不容易工作之余有点休闲时光,想要释放双手,刷个剧,突然屏幕上出现了弹框广告,真不能忍受,今天小编就教大家如何消灭弹窗广告!
-
10
教你一招:复制不能复制的网页文字(通用篇)
-
8
最近,苹果发布会可以说是各大平台的头版头条,新版iPad Pro因为加入了M1芯片实现了处理器性能的飞跃提升,就像一个缩小版的Mac,对于办公党来说,出差可能带上一个iPad Pro 2021就够了,方便又实用。还有紫色版的iPhone 12,被称为“春天最适合的颜色”,...
-
2
在树莓派4B上使用HC-SR04超声波测距模块 Posted on 2021-10-31...
-
6
延寿又瘦身 如何一招提高物联网器件电池能效比-模拟/电源-与非网...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK