電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>Arduino Light Clapper使用聲音檢測(cè)器

Arduino Light Clapper使用聲音檢測(cè)器

2022-11-11 | zip | 0.11 MB | 次下載 | 免費(fèi)

資料介紹

描述

聲音探測(cè)器感知聲音。教程中使用的聲音檢測(cè)器類型是數(shù)字聲音檢測(cè)器,當(dāng)在環(huán)境中檢測(cè)到一定級(jí)別的聲音時(shí),它會(huì)被激活。傳感器板連接到一個(gè)小麥克風(fēng)以拾取聲音

本教程允許您學(xué)習(xí)如何創(chuàng)建一個(gè)帶有聲音檢測(cè)器的系統(tǒng),該系統(tǒng)允許您快速連續(xù)兩次打開或關(guān)閉導(dǎo)聯(lián)。它類似于名為 Clapper 的市售產(chǎn)品,這是一種聲音電子開關(guān),可以在用戶拍手時(shí)激活或禁用與其連接的燈。

原理圖,示意圖

?

poYBAGNtnzGAK2_ZAAFEz-dB1LI357.png
Arduino 輕拍器
?

?

  • 將聲音檢測(cè)器上的 VCC 引腳連接到 Arduino 的 3.3-V 引腳。
  • 將聲音探測(cè)器上的 GND 引腳連接到 Arduino 的 GND 引腳。
  • 將聲音探測(cè)器上的輸出引腳連接到 Arduino 的數(shù)字引腳 8。
  • LED 的負(fù)極連接到 Arduino 的 GND 引腳。
  • 將 LED 的正極連接到 Arduino 的數(shù)字引腳 7

程序

int NumberSounds = 0;
int SoundPin = 8;
int RawValue = 0;
int NumberClaps = 0;
int LightOn = 0;
unsigned long SoundDetectedTime = 0;
unsigned long PreviousSoundDetectedTime = 0;
int UniqueClapMinTime = 100;
int LEDPin = 7;
unsigned long PreviousClapTime = 0;
unsigned long CurrentClapTime = 0;
unsigned long MaxTimeBetweenClaps = 2000;


void setup()
{
 pinMode(SoundPin, INPUT);
 pinMode(LEDPin, OUTPUT);
 Serial.begin(9600);
 Serial.println("The Light Clapper ...");
}


int IsSoundPartOfUniqueClap()
{
 int result = 0;
 unsigned long ElapsedTime = 
   SoundDetectedTime -  
   PreviousSoundDetectedTime;
 if (ElapsedTime >= UniqueClapMinTime)
 {
    result = 1;
 }
 return result;
}



int CheckTurnOnOffLight()
{
 int result = 0;
 unsigned long ElapsedTime =  
   CurrentClapTime - PreviousClapTime;
 if (ElapsedTime <= MaxTimeBetweenClaps)
 {
    if (NumberClaps == 2)
    {
       result = 1;
       NumberClaps = 0;
    }
 }
 else
 {
    NumberClaps = 1;
 }
 return result;
}


void loop()
{
 RawValue = digitalRead(SoundPin);
 if (RawValue == 0)
 {
    Serial.print("SOUND DETECTED ... ");
    Serial.print(", Sound Number: ");
    Serial.print(NumberSounds);
    Serial.print(", RawValue: ");
    Serial.println(RawValue);
    NumberSounds++;

    // Process raw data for claps
    PreviousSoundDetectedTime = 
      SoundDetectedTime;
    SoundDetectedTime = millis();
    if(IsSoundPartOfUniqueClap())
    {
       NumberClaps++;

       // Update Clap Times
       PreviousClapTime = 
         CurrentClapTime;
       CurrentClapTime = millis();

       // Turn Light ON/OFF as needed
       if (CheckTurnOnOffLight())
       {
          LightOn = ~LightOn;
          if (LightOn)
          {
             digitalWrite(LEDPin, HIGH);
          }
          else
          {
             digitalWrite(LEDPin, LOW);
          }
       }
    }
 }
}

?

程序分析

?

自程序啟動(dòng)并初始化為 0 以來(lái),聲音檢測(cè)器檢測(cè)到的聲音數(shù)量是變量 NumberSounds:

int NumberSounds = 0;

聲音探測(cè)器上的輸出引腳分配給 Arduino 的數(shù)字引腳 8:

int SoundPin = 8;

RawValue 變量保存聲音檢測(cè)器的狀態(tài)并初始化為 0:

int RawValue = 0;

NumberClaps 變量存儲(chǔ)當(dāng)前的掌聲計(jì)數(shù),以切換 LED 燈所需的兩次。這是開始 0 拍手:

int NumberClaps = 0;

如果 LED 已打開,則 LightOn 變量為非零,否則為 0。這里初始化為0:

int LightOn = 0;

SoundDetectedTime 變量存儲(chǔ)最后檢測(cè)到的聲音的時(shí)間,并用于計(jì)算不同拍手的數(shù)量,因?yàn)閱蝹€(gè)拍手可以生成多個(gè)正的聲音檢測(cè)器讀數(shù)。此變量的初始值為 0:

unsigned long SoundDetectedTime = 0;

PreviousSoundDetectedTime 變量保存上一次檢測(cè)到的聲音的時(shí)間,并用于確定唯一拍手的數(shù)量:

unsigned long PreviousSoundDetectedTime = 0;

UniqueClapMinTime 變量存儲(chǔ)檢測(cè)到的聲音之間的最小時(shí)間間隔(以毫秒為單位),程序必須將其識(shí)別為唯一的拍手:

int UniqueClapMinTime = 100;

LEDPin 變量代表數(shù)字引腳 7,它連接到 LED 的正極端子

int LEDPin = 7;

PreviousClapTime 變量保存上一次拍手發(fā)生的時(shí)間(以毫秒為單位)并初始化為 0:

unsigned long PreviousClapTime = 0;

CurrentClapTime 變量保存當(dāng)前拍手發(fā)生的時(shí)間(以毫秒為單位)并初始化為 0:

unsigned long CurrentClapTime = 0;

MaxTimeBetweenClaps 變量指定可用于切換 LED 燈的兩次連續(xù)拍手之間的最長(zhǎng)時(shí)間。默認(rèn)情況下,超時(shí)值設(shè)置為 2、000 毫秒或 2 秒。

unsigned long MaxTimeBetweenClaps = 2000;

setup() 函數(shù)初始化程序并:

1. 將連接到聲音檢測(cè)器輸出引腳的 Arduino 引腳設(shè)置為輸入引腳,以便可以測(cè)量電壓。

2. 將連接到 LED 正極端子的 Arduino 引腳設(shè)置為輸出引腳,它可以向 LED 提供電壓并驅(qū)動(dòng) LED。

3. 初始化串行監(jiān)視器并將通信速度設(shè)置為 9、600 波特。

4. 向串行監(jiān)視器打印一條指示程序已啟動(dòng)的文本消息。

void setup()
{
1.pinMode(SoundPin, INPUT);
2. pinMode(LEDPin, OUTPUT);
3. Serial.begin(9600);
3. Serial.println("The Light Clapper ...");
}

IsSoundPartOfUniqueClap() 函數(shù)確定聲音檢測(cè)器檢測(cè)到的聲音是新的唯一拍手的開始還是當(dāng)前拍手的繼續(xù)。這是通過以下方式實(shí)現(xiàn)的:

計(jì)算自檢測(cè)到上一個(gè)聲音以來(lái)經(jīng)過的時(shí)間。

如果此時(shí)間大于或等于識(shí)別唯一拍手所需的最短時(shí)間,則該函數(shù)返回 1。

否則,函數(shù)返回 0。

int IsSoundPartOfUniqueClap()
{
int result = 0;
unsigned long ElapsedTime =
SoundDetectedTime -
PreviousSoundDetectedTime;
if (ElapsedTime >= UniqueClapMinTime)
{
result = 1;
}
return result;
}

CheckTurnOnOffLight() 函數(shù)通過在兩秒內(nèi)檢測(cè)到兩次連續(xù)拍手來(lái)確定是否應(yīng)切換 LED。這是通過以下方式實(shí)現(xiàn)的:

計(jì)算當(dāng)前檢測(cè)到的拍手和之前檢測(cè)到的拍手之間的經(jīng)過時(shí)間。

如果經(jīng)過的時(shí)間小于或等于拍手之間的最大允許時(shí)間,則如果檢測(cè)到的拍手次數(shù)為 2,則將返回值設(shè)置為 1,這意味著應(yīng)切換 LED 開/關(guān)狀態(tài),并重置檢測(cè)到的拍手次數(shù)為 0。

如果經(jīng)過的時(shí)間大于拍手之間的最大允許時(shí)間,則將檢測(cè)到的拍手?jǐn)?shù)設(shè)置為 1,以指示當(dāng)前檢測(cè)到的拍手是兩次拍手打開/關(guān)閉序列的唯一有效拍手。

如果應(yīng)該切換 LED,則返回 1,否則返回 0。

int CheckTurnOnOffLight()
{
int result = 0;
unsigned long ElapsedTime =
CurrentClapTime - PreviousClapTime;
if (ElapsedTime <= MaxTimeBetweenClaps)
{
if (NumberClaps == 2)
{
result = 1;
NumberClaps = 0;
}
}
else
{
NumberClaps = 1;
}
return result;
}

loop() 函數(shù)讀取聲音檢測(cè)器的輸出,確定檢測(cè)到的聲音是唯一的拍手還是先前拍手的延續(xù),確定是否檢測(cè)到兩次拍手序列,如果是,則切換 LED 燈。這是通過以下方式實(shí)現(xiàn)的:

讀取聲音檢測(cè)器的狀態(tài)。

如果讀取的值等于 0,表示檢測(cè)到聲音,則函數(shù):

將一些調(diào)試信息打印到串行監(jiān)視器。

更新跟蹤當(dāng)前聲音檢測(cè)事件和先前聲音檢測(cè)事件的時(shí)間的變量。

如果此聲音檢測(cè)事件是新的獨(dú)特鼓掌的一部分,則函數(shù):

將檢測(cè)到的拍手次數(shù)增加 1。

更新前一次拍手和當(dāng)前拍手的時(shí)間。

如果在 2 秒內(nèi)發(fā)生了兩次連續(xù)拍手,則函數(shù):

通過對(duì) LightOn 變量執(zhí)行按位非運(yùn)算來(lái)切換 LED 狀態(tài)變量。

如果 LightOn 變量的計(jì)算結(jié)果為真(非零),則打開 LED。

如果 LightOn 變量的計(jì)算結(jié)果為假(零),則關(guān)閉 LED。

void loop()
{
RawValue = digitalRead(SoundPin);
if (RawValue == 0)
{
Serial.print("SOUND DETECTED ... ");
Serial.print(", Sound Number: ");
Serial.print(NumberSounds);
Serial.print(", RawValue: ");
Serial.println(RawValue);
NumberSounds++;
// Process raw data for claps
PreviousSoundDetectedTime =
SoundDetectedTime;
SoundDetectedTime = millis();
if(IsSoundPartOfUniqueClap())
{
NumberClaps++;
// Update Clap Times
PreviousClapTime =
CurrentClapTime;
CurrentClapTime = millis();
// Turn Light ON/OFF as needed
if (CheckTurnOnOffLight())
{
LightOn = ~LightOn;
if (LightOn)
{
digitalWrite(LEDPin, HIGH);
}
else
{
digitalWrite(LEDPin, LOW);
}
}
}
}
} 

?


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)