有幾個(gè)噴泉可以無(wú)條件地灑水并帶有一些有趣的燈光效果。所以我想設(shè)計(jì)一個(gè)創(chuàng)新的噴泉,它可以響應(yīng)外部音樂(lè)并根據(jù)音樂(lè)節(jié)拍灑水。聽(tīng)起來(lái)是不是很有趣?
這個(gè)Arduino 噴泉的基本思想是從任何外部聲源(如移動(dòng)設(shè)備、iPod、PC 等)獲取輸入,對(duì)聲音進(jìn)行采樣并將其分解為不同的電壓范圍,然后使用輸出打開(kāi)各種繼電器。我們首先使用基于電容麥克風(fēng)的聲音傳感器模塊在聲源上執(zhí)行,以將聲音分成不同的電壓范圍。然后電壓將被饋送到運(yùn)算放大器,以將聲級(jí)與特定限制進(jìn)行比較。較高的電壓范圍將對(duì)應(yīng)于繼電器開(kāi)關(guān)打開(kāi),該開(kāi)關(guān)包括根據(jù)歌曲節(jié)拍和節(jié)奏運(yùn)行的音樂(lè)噴泉。所以在這里我們正在使用 Arduino 和聲音傳感器構(gòu)建這個(gè)音樂(lè)噴泉。
所需材料
Arduino納米
聲音傳感器模塊
12V繼電器模塊
直流泵
發(fā)光二極管
連接線(xiàn)
Vero 板或面包板
聲音傳感器的工作
聲音傳感器模塊是一個(gè)簡(jiǎn)單的基于駐極體麥克風(fēng)的電子板,用于從環(huán)境中感知外部聲音。它基于LM393功率放大器和駐極體麥克風(fēng),可用于檢測(cè)是否有超出設(shè)定閾值限制的聲音。模塊輸出是一個(gè)數(shù)字信號(hào),表示聲音大于或小于閾值。
電位器可用于調(diào)節(jié)傳感器模塊的靈敏度。當(dāng)聲源低于/高于電位器設(shè)置的閾值時(shí),模塊輸出為 HIGH/LOW。同樣的聲音傳感器模塊也可以用于測(cè)量分貝的聲級(jí)。
聲音傳感器電路圖
眾所周知,在聲音傳感器模塊中,基本的輸入設(shè)備是麥克風(fēng),它將聲音信號(hào)轉(zhuǎn)換為電信號(hào)。但是由于聲音傳感器的電信號(hào)輸出幅度很小,很難分析,所以我們使用了一個(gè)NPN 晶體管放大器電路,將其放大并將輸出信號(hào)饋送到 Op- 的非反相輸入端。放大器。這里 LM393 OPAMP 用作比較器,用于比較來(lái)自麥克風(fēng)的電信號(hào)和來(lái)自分壓器電路的參考信號(hào)。如果輸入信號(hào)大于參考信號(hào),則 OPAMP 的輸出將為高電平,反之亦然。
音樂(lè)噴泉電路圖
如上述音樂(lè)噴泉電路圖所示,聲音傳感器由 Arduino Nano 的 3.3V 電源供電,聲音傳感器模塊的輸出引腳連接到 Nano 的模擬輸入引腳(A6)。您可以使用任何模擬引腳,但請(qǐng)確保在程序中進(jìn)行更改。如圖所示,繼電器模塊和直流泵由外部 12VDC 電源供電。繼電器模塊的輸入信號(hào)連接到 Nano 的數(shù)字輸出引腳 D10。為了照明效果,我選擇了兩種不同顏色的 LED,并將它們連接到 Nano 的兩個(gè)數(shù)字輸出引腳(D12、D11)。
在這里,泵的連接方式是,當(dāng)繼電器模塊的輸入端收到一個(gè)高脈沖時(shí),繼電器的 COM 觸點(diǎn)連接到 NO 觸點(diǎn),電流得到一個(gè)閉路路徑流過(guò)泵到激活水流。否則泵將保持關(guān)閉狀態(tài)。高/低脈沖由 Arduino Nano 生成,具體取決于聲音輸入。
在穿孔板上焊接完整電路后,它將如下所示:
在這里,我們使用一個(gè)塑料盒作為噴泉容器和迷你5v 泵作為噴泉,我們之前在消防機(jī)器人中使用過(guò)這個(gè)泵:
為舞蹈噴泉編程 Arduino Nano
這個(gè)Arduino 噴泉項(xiàng)目的完整程序在頁(yè)面底部給出。但在這里我只是分部分解釋?zhuān)员愀玫乩斫猓?/p>
程序的第一部分是聲明必要的變量來(lái)分配我們將在下一個(gè)程序塊中使用的引腳號(hào)。然后定義一個(gè)常數(shù) REF,其值為聲音傳感器模塊的參考值。賦值700是聲音傳感器輸出電信號(hào)的字節(jié)等效值。
int 傳感器 = A6; int redled = 12; int greenled = 11; int泵= 10; #define REF 700
在void setup函數(shù)中,我們使用pinMode函數(shù)來(lái)分配引腳的 INPUT/OUTPUT 數(shù)據(jù)方向。這里將傳感器作為輸入,所有其他設(shè)備作為輸出。
無(wú)效設(shè)置() { pinMode(傳感器,輸入); pinMode(紅色,輸出); pinMode(綠燈,輸出); pinMode(泵,輸出); }
在無(wú)限循環(huán)中,調(diào)用了模擬讀取函數(shù),該函數(shù)讀取從傳感器引腳輸入的模擬值并將其存儲(chǔ)在變量sensor_value中。
int sensor_value = 模擬讀取(傳感器);
在最后一部分中,使用if-else循環(huán)將輸入模擬信號(hào)與參考值進(jìn)行比較。如果它大于參考值,則所有輸出引腳都被賦予高電平輸出,以便所有 LED 和泵都被激活,否則一切都保持關(guān)閉。在這里,我們還給出了 70 毫秒的延遲來(lái)區(qū)分繼電器的開(kāi)/關(guān)時(shí)間。
if (sensor_value>REF) { digitalWrite(greenled,HIGH); 數(shù)字寫(xiě)入(紅色,高); 數(shù)字寫(xiě)入(泵,高); 延遲(70); } else { digitalWrite(greenled,LOW); 數(shù)字寫(xiě)入(紅色,低); 數(shù)字寫(xiě)入(泵,低); 延遲(70); }
int 傳感器 = A6;
int redled = 12;
int greenled = 11;
int泵= 10;
#define REF 700
無(wú)效設(shè)置()
{
pinMode(傳感器,輸入);
pinMode(紅色,輸出);
pinMode(綠燈,輸出);
pinMode(泵,輸出);
}
無(wú)效循環(huán)()
{
int sensor_value = 模擬讀取(傳感器);
if (sensor_value>REF)
{
digitalWrite(greenled,HIGH);
數(shù)字寫(xiě)入(紅色,高);
數(shù)字寫(xiě)入(泵,高);
延遲(70);
}
else
{
digitalWrite(greenled,LOW);
數(shù)字寫(xiě)入(紅色,低);
數(shù)字寫(xiě)入(泵,低);
延遲(70);
}
}
-
音樂(lè)噴泉
+關(guān)注
關(guān)注
0文章
6瀏覽量
7647 -
Arduino
+關(guān)注
關(guān)注
187文章
6453瀏覽量
185947 -
聲音傳感器
+關(guān)注
關(guān)注
4文章
55瀏覽量
15301
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論