資料介紹
描述
聲音探測(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í)激活或禁用與其連接的燈。
原理圖,示意圖
?
?
- 將聲音檢測(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 以來,聲音檢測(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è)聲音以來經(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ù)拍手來確定是否應(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)算來切換 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);
}
}
}
}
}
?
- 帶LCD的Arduino EMF鬼檢測(cè)器
- 使用Arduino和雨滴傳感器的雨量檢測(cè)器
- Arduino音樂:音符和和弦檢測(cè)器
- Arduino聲音檢測(cè)傳感器項(xiàng)目 2次下載
- ARDUINO LPG氣體泄漏檢測(cè)器 0次下載
- Arduino使用KY-003或KY-035的磁場(chǎng)檢測(cè)器
- 使用arduino UNO的軸檢測(cè)器
- Arduino Uno掉電檢測(cè)器和記錄器
- arduino聲音傳感器 模擬資料匯總 0次下載
- 一種基于檢測(cè)器集層次聚類的否定選擇算法 13次下載
- NDIR氣體檢測(cè)器解決方案和PID氣體檢測(cè)器解決方案
- 使用Arduino制作檢測(cè)PM2.5檢測(cè)器的程序詳細(xì)資料免費(fèi)下載 9次下載
- 電阻式溫度檢測(cè)器(RTD)基礎(chǔ)知識(shí)及參考設(shè)計(jì)
- 車輛檢測(cè)器的低功耗設(shè)計(jì) 13次下載
- 基于Arduino的PM2_5和溫濕度實(shí)時(shí)檢測(cè)器設(shè)計(jì)_葉金晶 17次下載
- 電路檢測(cè)器和電流檢測(cè)器的區(qū)別 319次閱讀
- 手機(jī)檢測(cè)器電路圖 手機(jī)檢測(cè)器的功能和應(yīng)用 651次閱讀
- 簡(jiǎn)單的檢測(cè)器電路圖分享 1650次閱讀
- 什么是過零檢測(cè)器 過零檢測(cè)器的原理 2755次閱讀
- 過零檢測(cè)器的原理 3669次閱讀
- 采用Arduino開發(fā)板、火焰?zhèn)鞲?b class="flag-6" style="color: red">器和蜂鳴器構(gòu)建火感檢測(cè)器系統(tǒng) 2381次閱讀
- 基于555的聲光數(shù)字電平檢測(cè)器電路 2856次閱讀
- dfrobotUSB Serial Light Adapter下載器簡(jiǎn)介 1241次閱讀
- 熒光檢測(cè)器工作原理及特點(diǎn) 4.9w次閱讀
- 地磁車輛檢測(cè)器的應(yīng)用領(lǐng)域_地磁車輛檢測(cè)器與其他車輛檢測(cè)技術(shù)的優(yōu)劣對(duì)比 4517次閱讀
- 地磁車輛檢測(cè)器主要組成部分 4833次閱讀
- 微波運(yùn)動(dòng)檢測(cè)器 4083次閱讀
- 酸雨檢測(cè)器 1.6w次閱讀
- 過零檢測(cè)器電路圖2 4386次閱讀
- 過零檢測(cè)器電路圖1 5060次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多