Arduinoベースの自動ギターチューナー
コンポーネントと消耗品
> |
| × | 1 |
アプリとオンラインサービス
|
このプロジェクトについて
ギターを弾くときに最も重要なことの1つは、楽器の調律を確認することです。最高のギタリストでさえ、調律外のギターでは良い音は出ません。標準のチューナーを使用して手作業でギターをチューニングすることは常に一般的ですが、自動チューナーを使用すると、作業がはるかに簡単になり、より楽しくなります。このArduinoベースのプロジェクトはあなたのためにあなたのギターをチューニングします。
プロジェクトの動作を示すビデオは次のとおりです:https://www.mathworks.com/videos/automatic-guitar-tuner-using-simulink-and-arduino-1501787185047.html
概要
<図>上の図は、自動ギターチューナーの概要を示しています。
- プッシュボタンは、調整する弦を選択するために使用されます
- どの文字列が選択されたかを示すために6つのLEDディスプレイが使用されます
- モーターに接続されたグリッパーを使用して、弦がチューニングされるまでチューニングペグを回します。
入力と出力は、上記の4つの回路によって制御されます。プッシュボタン用のデジタル入力回路、ギター用のアナログオーディオ入力回路、LEDディスプレイ用のデジタル出力回路、およびチューニングペグ用のモーター駆動回路です。グリッパー。これらの4つの回路は、Simulinkを使用して開発されたアルゴリズムを実行しているArduinoDueと相互作用します。
オーディオ入力回路
ギターは、標準のギターケーブルを介してチューナーに接続されています。ギターケーブルの端には、チップとスリーブと呼ばれる2つの接続があります。ケーブルの一方の端は、チップとスリーブのリード線がある入力ジャックに接続されます。これらのリード線にワイヤーをはんだ付けして、チップとスリーブをオーディオ入力回路に接続しました。
<図>この回路にはTL972オペアンプを使用することをお勧めします。これは、非常に低い電源電圧で動作できる、非常に低ノイズのレールツーレールアンプです。
電動チューニングペググリッパー
<図>このプロジェクトでは、DCモーターだけを使用することはできませんでした。低速で高トルクのギヤードモーターが必要でした。私が使用したモーターの速度は6RPMで、最大トルクは613oz-inです。電圧範囲は3〜12 Vなので、電源として9V電池を使用しました。
モーターのシャフトに、クランプハブ、4本のネジ、およびいくつかのテープを使用して、簡単なグリップ機構を組み立てました。
ソフトウェア
SimulinkとArduinoのサポートパッケージを使用して、チューナーのアルゴリズムを開発しました。 Simulinkは、アルゴリズムの開発と動的システムのモデリングに使用されるブロック図環境です。サポートパッケージを使用すると、Simulinkブロックを使用してArduinoのピンの読み取りと書き込みを行うことができます。ソフトウェアの外部モード機能を使用すると、コードを再コンパイルすることなく、シミュレーションの実行中に自動コード生成とパラメーターの調整を使用してArduinoでアルゴリズムをシミュレートできます。次に、アルゴリズムをハードウェアにデプロイしてスタンドアロンで実行できます。私が作成したモデルを以下に示します。
<図>外部モードでは、スコープブロックを使用して、ハードウェアで実行されているアルゴリズムの一部を監視できます。これは、ボタンからのデジタル入力とギターからのアナログ入力を監視する場合に特に便利です。ボタンのスコープから、ボタンを押すと入力が0から1に変わることがわかります。
<図>この0から1への変更により、選択した文字列の変更がトリガーされます。これは、立ち上がりトリガーとして知られています。 「SelectString」と呼ばれるStateflowチャートを作成しました。このチャートには、各文字列に1つずつ、合計6つの状態があり、この立ち上がりトリガー入力に基づいて1つの状態から次の状態に変化します。 Stateflowチャートの詳細は次のとおりです。
<図>各状態に入ると、対応するストリングのLEDピンがハイに設定されます。各状態を終了すると、ピンはローに設定されます。デフォルトとして、6本の弦の中で最も低いE弦を選択しました。チューナーの電源を最初にオンにすると、このデフォルト状態で起動します。
Stateflowチャートには7つの出力があります。1つは6つのストリングのそれぞれのLED用で、もう1つは「periodRange」と呼ばれます。これについては後で説明します。 6つのLED出力はArduinoデジタル出力ブロックに直接送られ、適切なLEDの電源をオンまたはオフにします。
次に、モデルのオーディオ処理部分を見てみましょう。ギター信号はアナログ入力ブロックから入ります。ブロックのサンプル時間を5kHzのサンプリングレートで0.0002秒に設定しました。ギターを弾いてオーディオスコープブロックを開くと、次のような波形が見られました。
<図>スコープブロックは、入力のゲインを変更するためにオーディオ回路のポテンショメータを調整するのに役立ちました。波形のピークが最大値の1023に達しないように、ゲインをできるだけ高く設定する必要があります。これにより、信号を最も正確に読み取ることができます。
ギターを弾かないときは、入力信号は500から700の間のフラットラインになります。私の場合は550前後でした。チューナーはノートがある場合にのみオーディオを処理するため、この値を知っておくことが重要です。再生されています。このフラットラインのすぐ上にある575の値をしきい値として選択しました。音声は、信号がこのしきい値を超えた場合にのみ処理されます。 Simulinkでは、シミュレーションの実行中にパラメーターを調整できるため、しきい値を簡単に設定できました。
ギターで単音を弾くと、生成される波形は周期的です。波形の周期は、特定の音高に対応しています。チューニングアルゴリズムは、波形の周期を決定することによって弦のピッチを推定します。このピッチ推定を実行するMATLAB関数を作成し、MATLAB関数ブロックを使用してSimulinkモデルに含めました。文字列が調整されているかどうかを判断するには、MATLAB関数に、各文字列に対して調整されていると見なされる期間の範囲を示す入力が必要です。これは、Stateflowチャートからの出力「periodRange」です。この関数は、弦のピッチが高すぎるか、低すぎるか、または周期範囲に基づいて調整されているかを判断し、それに応じてモーターの出力を生成します。
MATLAB関数の出力は、モーターを制御する3つのピンです。これらの出力は、Arduinoデジタル出力ブロックに直接送られます。
アルゴリズムですべてが適切であることを確認したら、ハードウェアにデプロイして、PCに接続せずに、Simulinkから独立してスタンドアロンで実行できるようにしました。
これで、ギターを自動的にチューニングできます!
このプロジェクトに必要なすべてのファイルは、ここから入手できます:
https://www.mathworks.com/matlabcentral/fileexchange/63697-automatic-guitar-tuner-using-simulink-and-arduino
回路図
押しボタンの回路は、プルダウン抵抗を備えたシンプルなスイッチです。 LED表示回路には、6個のLEDと電流制限抵抗が含まれています。 Arduinoのアナログ入力ピン「A0」を使用して、ギターからのオーディオ信号を読み取りました。 Arduino Dueは0V〜3.3 Vの電圧を読み取ります。ただし、ギターからの信号は振幅が非常に小さく、0 V付近で振動します。つまり、Arduinoが読み取れない負の電圧が含まれています。これを修正するには、入力回路が信号を増幅し、DCオフセットを追加する必要があります。回路はまた、信号から高周波成分を除去するためにローパスフィルターを提供する必要があります。サンプリングされた信号には、サンプリングレートの半分を超える周波数が含まれていてはなりません。チューナーは5kHzのレートでオーディオをサンプリングするので、私の回路は2.5kHzを超える周波数を排除します。以下のように回路を組み立てました。 L293D Hブリッジチップに接続されたArduinoからの3つのデジタル出力ピンを使用して、電動チューニングペググリッパーを制御しました。このチップにより、これら3つのピンの状態に基づいて、モーターをいずれかの方向に回転させたり、モーターを停止したりすることができます。ピンの1つはイネーブルピンと呼ばれ、モーターはイネーブルピンがハイに設定されている場合にのみ回転します。他の2つのピンは、モーターの方向を決定します。以下のように回路を接続しました。 製造プロセス