いくつかの興味深い照明効果で無条件に水をまき散らすいくつかの噴水があります。そこで、外部の音楽に反応し、音楽のビートに応じて水をかけることができる革新的な噴水を設計することを考えました。面白そうですね。
このArduino噴水は、モバイル、iPod、PCなどの外部音源から入力を取得し、その音をサンプリングしてさまざまな電圧範囲に分解し、その出力を使用してさまざまなリレーをオンにするという基本的な考え方です。最初に、コンデンサーマイクベースのサウンドセンサーモジュールを使用して音源を実行し、サウンドをさまざまな電圧範囲に分割しました。次に、電圧がオペアンプに供給され、サウンドレベルを特定の制限と比較します。より高い電圧範囲は、曲のビートとリズムに合わせて動作する音楽噴水を含むリレースイッチオンに対応します。そこで、ここでは、Arduinoとサウンドセンサーを使用してこのミュージカルファウンテンを構築しています。
必要な材料
- Arduino Nano
- サウンドセンサーモジュール
- 12Vリレーモジュール
- DCポンプ
- LED
- 接続線
- ベロボードまたはブレッドボード
サウンドセンサーの働き
サウンドセンサーモジュールは、環境からの外部音を感知するために使用される単純なエレクトレットマイクベースの電子ボードです。LM393パワーアンプとエレクトレットマイクをベースにしており、設定したしきい値を超える音があるかどうかを検出するために使用できます。モジュール出力は、サウンドがしきい値よりも大きいか小さいかを示すデジタル信号です。
電位差計は、センサーモジュールの感度を調整するために使用できます。音源がポテンショメータで設定したスレッショルドより低い/高い場合、モジュール出力はHIGH / LOWになります。同じサウンドセンサーモジュールを使用して、デシベル単位でサウンドレベルを測定することもできます。
サウンドセンサーの回路図
サウンドセンサーモジュールでは、基本的な入力デバイスは、音声信号を電気信号に変換するマイクです。しかし、サウンドセンサーの電気信号出力は大きさが非常に小さく、分析が非常に難しいため、それを増幅して出力信号をオペアンプの非反転入力に供給するNPNトランジスタ増幅器回路を使用しました。アンプ。ここでは、LM393 OPAMPが、マイクロフォンからの電気信号と分圧回路からの基準信号を比較するコンパレータとして使用されています。入力信号が基準信号よりも大きい場合、OPAMPの出力はハイになり、その逆も同様です。
オペアンプ回路のセクションに従って、その動作について詳しく知ることができます。
ミュージカル噴水回路図
上記の音楽噴水回路図に示すように、サウンドセンサーはArduino Nanoの3.3V電源で給電され、サウンドセンサーモジュールの出力ピンはNanoのアナログ入力ピン(A6)に接続されています。どのアナログピンでも使用できますが、プログラムで必ず変更してください。リレーモジュールとDCポンプは、図に示すように、外部12VDC電源から電力を供給されます。リレーモジュールの入力信号は、Nanoのデジタル出力ピンD10に接続されています。照明効果のために、2つの異なる色のLEDを選択し、それらをNanoの2つのデジタル出力ピン(D12、D11)に接続しました。
ここで、ポンプは、リレーモジュールの入力にHIGHパルスが与えられると、リレーのCOM接点がNO接点に接続され、電流が閉回路パスを取得してポンプを横切って流れるように接続されます。水の流れを活性化します。それ以外の場合、ポンプはオフのままになります。HIGH / LOWパルスは、サウンド入力に応じてArduinoNanoから生成されます。
回路全体をperfboardにはんだ付けすると、次のようになります。
ここでは、噴水コンテナとしてプラスチックの箱を使用し、噴水として機能するミニ5vポンプを使用しました。以前は、このポンプを消防ロボットで使用していました。
噴水を踊るためのArduinoNanoのプログラミング
このArduino噴水プロジェクトの完全なプログラムは、ページの下部にあります。しかし、ここでは、理解を深めるために、部分的に説明しています。
プログラムの最初の部分は、プログラムの次のブロックで使用するピン番号を割り当てるために必要な変数を宣言することです。次に、サウンドセンサーモジュールの参照値である値を使用して定数REFを定義します。割り当てられた値700は、サウンドセンサーの出力電気信号のバイト相当値です。
intセンサー= A6; int redled = 12; int greenled = 11; intポンプ= 10; #define REF 700
では 、ボイドセットアップ 機能、私たちが使用している pinModeの ピンのINPUT / OUTPUTデータ方向を割り当てるための機能を。ここでは、センサーが入力として使用され、他のすべてのデバイスが出力として使用されます。
void setup() { pinMode(sensor、INPUT); pinMode(redled、OUTPUT); pinMode(greenled、OUTPUT); pinMode(pump、OUTPUT); }
無限 ループ 内では、 analogRead 関数が呼び出され、センサーピンから入力されたアナログ値を読み取り、変数 sensor_valueに格納し ます。
int sensor_value = analogRead(センサー);
最後の部分では、 if-else ループを使用して、入力アナログ信号を基準値と比較します。リファレンスよりも大きい場合は、すべての出力ピンにHIGH出力が与えられ、すべてのLEDとポンプがアクティブになります。それ以外の場合は、すべてがオフのままになります。ここでは、リレーのオン/オフ時間を区別するために70ミリ秒の遅延も与えています。
if(sensor_value> REF) { digitalWrite(greenled、HIGH); digitalWrite(redled、HIGH); digitalWrite(pump、HIGH); delay(70); } else { digitalWrite(greenled、LOW); digitalWrite(redled、LOW); digitalWrite(pump、LOW); delay(70); }
これは、このArduino制御の噴水がどのように機能するかです。動作するビデオを含む完全なコードを以下に示します。