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-華,成都阿傑


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM