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

Posted 硬创联盟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Knock: 使用压电传感器来检测敲击相关的知识,希望对你有一定的参考价值。

原文链接: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: 使用压电传感器来检测敲击的主要内容,如果未能解决你的问题,请参考以下文章

如何检测安卓设备的移动?

压电传感器用于车辆测速和承重车型识别

Rails:在开发中禁用敲击 JWT 身份验证

模仿人类触觉认知的压电式触觉传感与机器学习系统

关于振动传感器信号问题

piezo film 压电相关信息记录 (2018-05-04 更新)