Arduino内置教程-传感器-Knock

敲击

  • 这个教程示范了怎样用一个压力元件来监测震动,就是说,在门,桌子或者其他固体表面的敲击。

  • 压力元件是一个由形变(振动,音波,机械拉扯等引起的)产生电压的元件设备。同样地,当你在压力元件上加上一个电压,它会发生振动,并产生一个声调。压力元件可以同时用来产生音调和检测音调。

  • 这个程序通过 analogRead() 命令读取压力输出,并在一个涉及到模电转换(或者ADC)的过程里匹配这个电压从0-5V到一个数字范围0-1023。

  • 如果感应器输出超出这个固定的阈值,你的开发板将会通过串口发送字符串“Knock!”到电脑。

  • 打开串口监视器观察文本。

硬件要求

  • Arduino or Genuino 开发板
  • 压电陶瓷片
  • 1 Meg ohm 电阻
  • 固体表面

电路

  • 压电元件是极化的,意思是说电压往一个方向通过元件。连接黑色线(较低电压)到地,而红线(较高电压)连接到模拟引脚pin0。总的来说,并联一个1M ohm电阻到压电元件来限制由压电元件产生的电压和电流,从而保护模拟输入引脚。

  • 可以不带塑料罩就用压电元件。这些看起来像一个金属片,而且比用作输入传感器更简单。当紧紧挤压或者黏合到感应表面时,压电传感器的工作效果最好。

请输入图片描述

图由 Fritzing 软件制作。

原理图

请输入图片描述

一个压电元件通过1M ohm 电阻连接到模拟引脚pin0.

样例代码

这下面的代码里,输入压电数据和由使用者设置的阈值比较。尝试提高或者降低阈值来提高你感应器的整体灵敏度。

/* 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.

   The circuit:
    * + connection of the piezo attached to analog in 0
    * - connection of the piezo attached to ground
    * 1-megohm resistor attached from analog in 0 to ground

   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.

 */


// these constants won't change:
const int ledPin = 13;      // led connected to digital pin 13
const int knockSensor = A0; // the piezo is connected to analog pin 0
const int threshold = 100;  // threshold value to decide when the detected sound is a knock or not


// these variables will change:
int sensorReading = 0;      // variable to store the value read from the sensor pin
int ledState = LOW;         // variable used to store the last LED status, to toggle the light

void setup() {
  pinMode(ledPin, OUTPUT); // declare the ledPin as as OUTPUT
  Serial.begin(9600);       // use the serial port
}

void loop() {
  // read the sensor and store it in the variable sensorReading:
  sensorReading = analogRead(knockSensor);

  // if the sensor reading is greater than the threshold:
  if (sensorReading >= threshold) {
    // toggle the status of the ledPin:
    ledState = !ledState;
    // update the LED pin itself:
    digitalWrite(ledPin, ledState);
    // send the string "Knock!" back to the computer, followed by newline
    Serial.println("Knock!");
  }
  delay(100);  // delay to avoid overloading the serial port buffer
}

[Get Code]

更多

  • pinMode()
  • analogRead()
  • if()
  • serial.begin()
  • serial.print()
  • 模拟输入 - 用电位计来控制LED灯变亮或者变暗
  • 模拟串口输入输出 - 读取一个模拟输入,匹配它的值,然后根据最后的值使LED灯变亮或者变暗。
  • ADXL3xx: 读取一个 ADXL3xx 加速计
  • Knock: 通过一个压电元件来侦察敲击
  • Memsic2125: 2轴加速计
  • Ping: 通过一个超声波测距仪来侦察物品

标签: arduino内置教程, arduino knock