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