0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在Arduino上使用传感器:创建一个可以检测运动并作出响应的简单设备

好名字 来源:DevicePlus 作者:DevicePlus 2023-02-22 17:53 次阅读

超声波传感器是一种简洁的多功能传感器,可以应用到您的Arduino项目中。顾名思义,它利用超声波来检测出现的物体以及物体的距离。这种设备可用于动作识别,或者在检测范围内出现目标对象时作出响应。
poYBAGPy0zeAIaQzAAAsR-phffs564.jpg
当然,您也许会想知道的是Arduino超声波传感器究竟是如何工作的?
为了描述它的工作原理,本指南将向您展示如何使用超声波传感器来组装一个简单的乐器。

HC-SR05, 它是旧版HC-SR04的5引脚升级版本。该设备具有两个圆柱形模块。一个是发出超声波信号的发射器,另一个是接收器,会捕获到达物体后反弹回来的信号。通过测量信号返回的时间,传感器可以计算出物体的距离。
虽然其他传感器(如被动红外线运动传感器)也具有类似的功能,但是超声波传感器的功用更强,因为它使您的项目不仅可以检测到面前经过的物体,还可以区分出不同物体的距离远近。
我们使用这种技术来创建一个浮动的乐器。该项目不是通过按下钢琴键来弹奏音符,而是让您把一个物体—比如一根棍子或者您的手指—放在传感器前面,根据物体与传感器之间的距离来播放不同的音符。这并不能打造出钢琴的效果,但是通过创建该项目,您可以了解能用这款便利的Arduino声音传感器来做什么。

所需组件

为了创建该项目,您需要具备以下组件:

Arduino Uno pYYBAGPy0keAIANsAAA5UDjpMbU093.png
HC-SR05 超声波传感器 (可以使用HC-SR04或其他超声波传感器,但需要修改引脚配置) pYYBAGPy0zyAIzCAAAC3NAOMgZY743.png
Arduino IDE pYYBAGPy0z-AK5_qAACbWr_AuR4163.png

您还需要使用以下硬件,都是比较通用的设备:
扬声器: 大多数简单的扬声器模块都可以,本项目使用的是该款简单的单声道扬声器。
USB 电缆 如果您还没有设置Arduino IDE,可以先查阅我们之前发布的指南。

代码

首先,我们先来看一下要上传到Arduino Uno的代码,了解将要执行的操作。
void setup() {
pinMode (6,OUTPUT); //Insert HC-SR-05 with VCC in pin 6
pinMode (5, INPUT); // Assign pin 5 to Echo
pinMode (4, OUTPUT);// Assign pin 4 to Trig
pinMode (2,OUTPUT); // Assign pin 2 to GND.
Serial.begin(9600); // This will allow you to read how far away your sensor is later
}
void loop()
{
long duration, cm; // Initialize variables for duration and cm
digitalWrite(6, HIGH); // Power the sensor
digitalWrite(4, LOW); // Clear pulse before sending a 10 microsecond ping,
delayMicroseconds(2);
digitalWrite(4, HIGH);
delayMicroseconds(10);
digitalWrite(4, LOW);
duration = pulseIn(5, HIGH); // Detect pulse length from the Echo pin, measured in microseconds
cm = (duration/2)/29.155; // Divide duration in half (due to round trip), then convert distance to centimeters (1cm per 29.155 microseconds), assign to cm variable
Serial.print(cm); // Print distance in cm to serial monitor
Serial.print(“cm”);
Serial.println();
delay(100); // Delay
int note = 0; // Assign note based on distance, spacing notes per 6cm
if(cm<=48&&cm>42) {
note = 523;
} else if(cm<=42&&cm>36) {
note = 493;
} else if(cm<=36&&cm>30) {
note = 440;
} else if(cm<=30&&cm>24) {
note = 392;
} else if(cm<=24&&cm>18) {
note = 349;
} else if(cm<=18&&cm>12) {
note = 329;
} else if(cm<=12&&cm>6) {
note = 294;
} else if(cm<=6) {
note = 261;
}
if (note == 0) { // If distance isn’t within 48cm, play nothing noTone(9);
} else {
tone(9, note, 200); // Play assigned note for 200 milliseconds
}
delay(10); // Brief pause
}
您可以将上述代码复制到您的IDE中,将其上传到Uno,如果您想运行该代码,可以继续进行下一部分,但是这部分的代码很重要,有必要对其进行分析和理解。首先:
digitalWrite(6, HIGH); // Power the sensor
digitalWrite(4, LOW); // Clear pulse before sending a 10 microsecond ping,
delayMicroseconds(2);
digitalWrite(4, HIGH);
delayMicroseconds(10);
digitalWrite(4, LOW);
duration = pulseIn(5, HIGH); // Detect pulse length from the Echo pin, measured in microseconds
cm = (duration/2)/29.155; // Divide duration in half (due to round trip), then convert distance to centimeters (1cm per 29.155 microseconds), assign to cm variable
这部分的操作是在Trig引脚上发出40KHz脉冲。这种超声波信号会在它接触的所有物体上发生反射,然后返回到接收器。
接下来,pulseIn() 函数测量从脉冲离开传感器到接收器检测到返回信号所用的时间,单位为微秒。
然后将该时间除以2,因为这是信号往返花费的总时间。这为我们提供了40KHz声音传播到物体所需的微秒数。由于声音传播1厘米大约需要29.155微秒,所以我们可以将计算出的时间除以29.155。以此我们就可以计算出目标对象的距离,单位为厘米,然后将该距离值分配给cm变量。
接下来的几行代码会将距离(以厘米为单位)打印到串行监视器,这有助于确认代码运行正常,并便于我们在运行程序时查看物体的距离。
代码的最后主要相关部分是这样的:
int note = 0; // Assign note based on distance, spacing notes per 6cm
if(cm<=48&&cm>42) {
note = 523;
} else if(cm<=42&&cm>36) {
note = 493;
} else if(cm<=36&&cm>30) {
note = 440;
} else if(cm<=30&&cm>24) {
note = 392;
} else if(cm<=24&&cm>18) {
note = 349;
} else if(cm<=18&&cm>12) {
note = 329;
} else if(cm<=12&&cm>6) {
note = 294;
} else if(cm<=6) { note = 261;
}
if (note == 0) { // If distance isn’t within 48cm, play nothing noTone(9);
} else {
tone(9, note, 200); // Play assigned note for 200 milliseconds
}
该代码块将根据物体的距离为扬声器分配一个频率。 此Arduino参考文档 列出了一系列音符的频率,我们将以此作为参考。 使用 if else 语句 来根据目标对象的距离(以6cm为增量)为音符变量分配一个频率,可在整个八度音阶范围内提供八个音符。如果没有检测到任何物体,音符变量值为0。
在最后一部分中,tone() 函数 用来播放音符,如果48cm内没有检测到物体,noTone()函数 将会停止前一个声音的播放。在开始循环之前的最后一个指令是delay()。这些延迟有助于避免程序更改音符过快,因为传感器的精确度没有那么高。
pYYBAGPy00GAMvz_AAA3-GGLMNs560.jpg

接线

了解了代码如何运行之后,您就可以将其上传到Arduino Uno上了,然后拔掉设备。现在,是时候将它们连接起来了。我们已经完成了代码的编写以尽可能简化该过程。您所要做的就是按照以下步骤进行操作:
● 将HC-SR05传感器插入数字引脚2到6,GND插入引脚2,VCC插入引脚6。这样连接可以使传感器朝向外侧,远离Arduino。
● 将扬声器上的正极线(通常为红色)插入引脚9。
● 将另一根扬声器线(通常为黑色)插入其中一个GND引脚。 连接好所有电线好,插入Arduino,并在传感器前留出大约50厘米的空间。接下来是最有趣的部分。将您的手或者一根小棍子放在传感器前面,您会听到扬声器发出的声音。物体放置的越远,音调越高。
您可以尝试使用delay()tone()所带来的持续时间使声音听起来更平滑,或调整频率值以获得不同的音符。该传感器还可以用作报警器,以在物体进入一定范围内的区域时发出警报,或者当您的手处于某一距离范围内时向您的计算机发送指令。

pYYBAGPbhjqAbi1JAAAGd6_rQT0867.png

DevicePlus 编辑团队

设备升级版适用于所有热爱电子和机电一体化的人。

审核编辑黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2550

    文章

    51043

    浏览量

    753106
  • 超声波
    +关注

    关注

    63

    文章

    3014

    浏览量

    138351
  • Arduino
    +关注

    关注

    188

    文章

    6469

    浏览量

    186962
收藏 人收藏

    评论

    相关推荐

    推荐运动传感器IC型号?

    我这个产品是智能卡车挂锁,带GPS定位,当车处于运动状态时,运动传感器信号给CPU启动GPS功能,就这个功能;我找的都是加速度
    发表于 07-27 17:44

    触摸/距离传感器能用于检测手势吗?

    )。手指对角移动,然后以半圈顺时针和逆时针移动。很明显,简单的软件算法可诠释手势的方向并作出相应的反应。想了解更多详情?请访问我们的网站,您可找到关于触摸距离
    发表于 10-19 08:57

    ST多轴运动传感器模块实现精确的运动检测功能

      意法半导体(纽约证券交易所代码:STM), 模块内成功集成3轴数字加速传感器
    发表于 11-14 16:36

    TheUMS与Wi-Fi相结合的超小型雷达运动检测传感器

    该雷达运动检测传感器款尺寸为15x15mm的超小型产品,面积仅为硬币的60%,不仅可以使其发挥原有的功能,也可以添加多种功能将其扩展为复
    发表于 03-14 13:49

    【开源分享】带有 Arduino 接口的火灾报警传感器

    板设计:对于制造,我已将原理图文件转换为 PCB 文件。在这里,我可以以 3D 形式查看我的电路板、检查错误并编辑电路板的形状。Arduino代码:我创建
    发表于 06-30 16:12

    自制Arduino Pcb

    和专业人士提供种低成本和简单的方法来创建与其交互的设备使用传感器和执行的环境。面向初学者的此
    发表于 07-21 08:00

    使用Arduino控制来自运动传感器的LED

    描述这块板将用于我的楼梯照明项目,每个楼梯都有这样的模块。我将使用 Arduino 来控制来自运动
    发表于 07-21 06:24

    利用Arduino让机器人学会识别标识并作出行为

    教你用Arduino让机器人学会识别标识并作出行为。你的人工智能小车从此有了眼睛!材料单:跟踪机器人底盘视觉传感器Arduino Uno电动机驱动板18650 Li-离子电池
    发表于 09-27 07:36

    方向运动传感器电路

    方向运动传感器电路的基本原理很简单传感器是用来产生
    发表于 03-16 09:51 2100次阅读
    <b class='flag-5'>一</b><b class='flag-5'>个</b>方向<b class='flag-5'>运动</b><b class='flag-5'>传感器</b>电路

    如何构建简单的PIR运动传感器

    家庭,企业和家用电器中使用的小工具中找到。PIR通常称为“被动红外”,“ IR运动”或“热电”传感器。它基本由热释电传感器制成:中心为矩形晶体的圆形金属罐
    的头像 发表于 05-04 09:16 3893次阅读
    如何构建<b class='flag-5'>简单</b>的PIR<b class='flag-5'>运动</b><b class='flag-5'>传感器</b>

    如何使用运动检测传感器创建闹钟

    我使用运动检测传感器创建闹钟,这样您就不能只是按下贪睡按钮并重新入睡。
    发表于 07-21 17:31 2568次阅读
    如何使用<b class='flag-5'>运动检测</b><b class='flag-5'>传感器</b><b class='flag-5'>创建</b><b class='flag-5'>一</b><b class='flag-5'>个</b>闹钟

    通过Arduino构建简单的雨量检测系统

    本教程中,我们将使用带有蜂鸣器的 Arduino构建基本的雨量传感器。然后,您可以使用此设
    发表于 08-19 14:55 4161次阅读
    通过<b class='flag-5'>Arduino</b>构建<b class='flag-5'>一</b><b class='flag-5'>个</b><b class='flag-5'>简单</b>的雨量<b class='flag-5'>检测</b>系统

    基于PIR传感器运动检测报警系统

    该系统使用 PIR 传感器检测运动并发送到 Arduino,然后同时触发蜂鸣器和 LED。
    发表于 12-08 11:32 1次下载

    如何使用Arduino制作LED运动传感器

    电子发烧友网站提供《如何使用Arduino制作LED运动传感器.zip》资料免费下载
    发表于 12-12 10:39 0次下载
    如何使用<b class='flag-5'>Arduino</b>制作LED<b class='flag-5'>运动</b><b class='flag-5'>传感器</b>

    使用Arduino的带有语音警报的运动传感器

    运动传感器警报市场上很容易获得,但是价格昂贵。这是带有语音警报的基于Arduino简单,廉价的运动
    的头像 发表于 10-15 16:13 1173次阅读
    使用<b class='flag-5'>Arduino</b>的带有语音警报的<b class='flag-5'>运动</b><b class='flag-5'>传感器</b>