原文链接:https://www.arduino.cc/en/Tutorial/Knock

敲击检测

本教程介绍如何使用压电传感器检测振动,比如敲门、桌子或其他固体表面。

压电传感器是一种能够在振动、声波或机械应变而物理变形时产生电压的电子装置,同样地,当你在压电传感器上施加电压时,它会振动并产生音调。 压电元器件可以用于播放音调和检测音调。

代码使用 analogRead() 函数读取压电传感器的输出,在模数转换(ADC)的过程中将电压范围从0至5伏编码为0至1023的数值。

如果传感器的输出强于某个阈值,你的开发板将通过串口发送字符串 “Knock!” 到计算机。

请打开串口窗口查看这个字符串。

硬件要求

  • Arduino 或 Genuino 开发板

  • 压电传感器

  • 1兆欧的电阻

  • 固体的表面

电路

各种压电元器件都是有极性的,意味着电压沿特定方向通过它们(或从它们中)。将黑线(较低电压)接地,将红线(较高电压)连接到模拟引脚0.此外,将一个1兆欧电阻并联到压电元器件,以限制压电元器件产生的电压和电流来保护模拟输入引脚。

可能有些压电元件没有塑料外壳。它们看起来像一个金属盘,这样就更容易用作输入传感器。因为压电传感器在牢固按压、粘贴其感应面时工作效果最佳。

点击图片放大

图片使用Fritzing开发。 有关更多电路示例,请参见Fritzing项目页

原理图

点击图片放大

压电传感器并联一个1兆欧电阻然后连接到模拟引脚0(A0)

代码

在下面的代码中,将输入的压电传感器的数值与用户设置的阈值进行比较。尝试提高或降低此值以提高传感器的总体灵敏度。

/* Knock Sensor
震动传感器
This sketch reads a piezo element to detect a knocking sound.
It reads an analog pin and compares the result to a set threshold.
If the result is greater than the threshold, it writes
"knock" to the serial port, and toggles the LED on pin 13.
//此代码读取压电元件的值以检测敲击声。
//它读取模拟引脚,并将结果与阈值进行比较。
//如果结果大于阈值,则对串口写入“knock”,
//并切换引脚13上的LED的状态。
The circuit:
* + connection of the piezo attached to analog in 0
* 压电元器件的“+”端接到 A0
* - connection of the piezo attached to ground
* 压电元器件的“-”端接到 Gnd
* 1-megohm resistor attached from analog in 0 to ground
* 1兆欧的电阻两端分别连接 A0 和 Gnd 参考网址:http://www.arduino.cc/en/Tutorial/Knock created 25 Mar 2007
by David Cuartielles <http://www.0j0.org>
modified 30 Aug 2011
by Tom Igoe This example code is in the public domain. */ // 这些常量不会改变
const int ledPin = 13; // LED 连接到 D13
const int knockSensor = A0; // 压电元器件连接到A0
const int threshold = 100; // 设置阀值以检测声音是不是敲击发出的 //这些变量会发生改变
int sensorReading = 0; //这个变量存储从传感器引脚读取的值
int ledState = LOW; // 这个变量存储最后一个LED状态,用于切换LED的状态(亮/灭) void setup() {
pinMode(ledPin, OUTPUT); // 将ledPin定义为输出状态
Serial.begin(9600); // 使用串口
} void loop() {
// 读取传感器的值并将其存储在变量sensorReading:
sensorReading = analogRead(knockSensor); // 如果传感器读数大于阈值:
if (sensorReading >= threshold) {
// 则切换LED的状态
ledState = !ledState;
// 并将最后一次LED引脚的状态赋予变量ledState
digitalWrite(ledPin, ledState);
// 发送字符串“Knock!” 到电脑,然后换行
Serial.println("Knock!");
}
delay(100); // 延时以避免串口缓冲区过载(溢出)
}

参考

pinMode()

analogRead()

if()

serial.begin()

serial.print()

AnalogInput - 使用电位器去控制 LED 的闪烁。

AnalogInOutSerial - 读取模拟输入,映射结果值,并使用该值去使 LED 变亮或变暗。

Knock - 使用压电传感器来检测敲击。

Memsic2125 - 两轴加速度传感器。

Ping - 使用超声波模块来检测物体。

最后修改 2015/07/29 SM

QQ 群

欢迎加入我们的大家庭  点击加入 硬创联盟 Arduino 群号 8580606

翻译:硬创联盟翻译组翻译员 – 广东小木
翻译时间:2016/12/15
审核:硬创联盟翻译组技术语文审核 - 神奇海螺,Lepton-华,成都阿杰

Knock: 使用压电传感器来检测敲击的更多相关文章

  1. ADXL3xx: 读取 ADXL3xx 加速度传感器

    原文链接:https://www.arduino.cc/en/Tutorial/ADXL3xx ADXL3xx加速度传感器 本教程将为你展示如何读取Analog Devices的ADXL3xx系列加速 ...

  2. STC8H开发(六): SPI驱动ADXL345三轴加速度检测模块

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  3. iOS - CoreMotion

    前言 NS_CLASS_AVAILABLE(NA,4_0) @interface CMMotionManager : NSObject @available(iOS 4.0, *) public cl ...

  4. Swift - 加速传感器(CoreMotion)的用法,小球加速运动并反弹样例

    1,加速传感器可以监听到x,y,z三个方向的加速度,使用步骤如下: (1)实例化CMMotionManager类 (2)向CMMotionManager的accelerometerUpdateInte ...

  5. Linux中系统检测工具top命令

    Linux中系统检测工具top命令 本文转自:https://www.cnblogs.com/zhoug2020/p/6336453.html 首先介绍top中一些字段的含义: VIRT:virtua ...

  6. 干货!Jenkins下配置findbugs、pmd及checkstyle实现代码自动检测

    配置前提: 对于maven项目来说,需要在pom.xml文件的<build><plugins>添加配置</plugins></build> 网上有些地方 ...

  7. js中对arry数组的各种操作小结 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据 web前端url传递值 js加密解密 HTML中让表单input等文本框为只读不可编辑的方法 js监听用户的键盘敲击事件,兼容各大主流浏览器 HTML特殊字符

    js中对arry数组的各种操作小结   最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以说啊 ...

  8. dll文件32位64位检测工具以及Windows文件夹SysWow64的坑

    自从操作系统升级到64位以后,就要不断的需要面对32位.64位的问题.相信有很多人并不是很清楚32位程序与64位程序的区别,以及Program Files (x86),Program Files的区别 ...

  9. Android性能优化之利用LeakCanary检测内存泄漏及解决办法

    前言: 最近公司C轮融资成功了,移动团队准备扩大一下,需要招聘Android开发工程师,陆陆续续面试了几位Android应聘者,面试过程中聊到性能优化中如何避免内存泄漏问题时,很少有人全面的回答上来. ...

随机推荐

  1. ASP.NET收发邮件

    在.NET中常见到在线发邮件的实例,网站加上这个功能可以方便站长与用户的交流. NET 中发邮件有时候会用到IIS组件中的邮件服务器,不过复杂.对虚拟主机的配置也较麻烦, 也可用第三方组件比如Jmai ...

  2. Python 基礎 - 淺copy補充說明

    在 import copy 這個模塊裡 基於第一個列表來做淺copy,實際上第二個列表裡的元素,是第一個列表的 引用. 接下來介紹 淺copy有三種方式可以使用 #!/usr/bin/env pyth ...

  3. Kerberos简介及常见问题

    基本描述 Kerberos使用Needha-Schroeder协议作为它的基础.它使用了一个由两个独立的逻辑部分:认证服务器和票据授权服务器组成的"可信赖的第三方",术语称为密钥分 ...

  4. Tomcat 在mac中Operation not permitted

    5.执行/Library/Tomcat/bin下的startup.sh,然后打开http://localhost:8080查看是否Tomcat已经启动,若要停止服务器就运行同目录下的shutdown. ...

  5. DELPHI类声明方式简介

    TMyDemo = class(TObject) FName: string; {数据成员(Field)} FAge: Integer; private {私有的} {最为隐秘的访问程度} proce ...

  6. 前端学习 第七弹: Javascript实现图片的延迟加载

    前端学习 第七弹: Javascript实现图片的延迟加载 为了实现图片进入视野范围才开始加载首先: <img    src="" x-src="/acsascas ...

  7. 【我是老中医】Win10系统下MATLAB无法正常打开的解决方案

    转眼大四了,要开始做毕设了,导师给的题目要用到他之前做的东西,都是MATLAB做的,所以不太熟悉MATLAB的我也得用这玩意儿了,想想自己目前也就大二的DSS实验和大三的AI实验用过MATLAB,当时 ...

  8. Google Java编程风格指南

    出处:http://hawstein.com/posts/google-java-style.html 声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Comm ...

  9. Windows下面如何建立多个Django虚拟环境

    Linux 安装请见另一篇博客 http://www.cnblogs.com/zhaoyingjie/p/6180758.html 1.安装 virtualenv 2.安装virtualenvwrap ...

  10. Nginx和Apache配置日志格式记录Cookie

    记录Cookie有什么用? 有时候我们需要通过web服务器的访问日志来统计UV(独立访客),并据此分析用户的行为.而UV是依据cookie数据得出的统计.UV相对于IP的好处是:IP是一个反映网络虚拟 ...