ポータブル静電容量式タッチピアノ
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
このプロジェクトについて
このプロジェクトでは、
を使用してポータブル静電容量式タッチピアノを構築する方法を説明します。- Arduino、
- MPR121を使用したArduino用の静電容量式タッチシールド
- ピエゾブザー、
- 導電性接着剤付きの銅箔テープ(ピアノの鍵盤の形にカット)、
すべて透明なアクリル製の筐体(Arduinoの場合はProtoStax)で囲まれ、静電容量式タッチキーが上面に貼り付けられています。これにより、コンパクトで小さなピアノになり、新しい曲を演奏したり、ジャムしたり、コーディングしたりできます。
静電容量式タッチセンシングには、MPR121を使用したArduino用のAdafruitの12 x静電容量式タッチシールドを、最大12の異なる導電性表面でのタッチの検出と応答を容易にするAdafruit_MPR121ライブラリと組み合わせて使用します。
ちょっと待って!オクターブには12の半音があります-C、C#、D、D#、E、E#、F、G、G#、A、A#、B!完全! MPR121が13の入力を処理できれば、それは素晴らしいことでした。それにより、より高いオクターブのCからCに移動できたはずですが、まだたくさんの曲があります。 (オクターブ範囲を拡大することでこのプロジェクトをさらに進める方法についても、以下の提案を提供します)
さらに、独自のタッチシーケンス(「シークレットキー」またはキーの組み合わせ)でプログラムして、好きなだけオクターブを含めることができるランダムな曲を再生することもできます(音を聞く耳の力によってのみ制限されます)。それを再生するためのピエゾ/スピーカー!)。
出力には、Arduinoのトーンライブラリを使用して、ピエゾブザーでサウンドを再生します。スピーカーを使用することもできます。抵抗を使用して、電流をArduinoのピンから供給できる電流に制限することを忘れないでください!
ピアノの鍵盤には、導電性接着剤入りの銅箔テープを使用しています。シールドに接続されているワイヤーにテープを貼り付けるので、導電性接着剤を使用することが重要です。
最後にエンクロージャーがあります。私がProtoStaxと呼ばれる新しい積み重ね可能なモジュラーエンクロージャシステムを作成したことをご存知の方もいらっしゃるかもしれません。それは私が引っ掻かなければならなかった個人的なかゆみでした-私はプロトタイピングのさまざまな段階をサポートし、開始時に保護とオープンアクセスを提供し、後で側壁と上部を追加する機能を備えたエンクロージャーが必要でしたが、積み重ねることもできました複数のユニットを並べて、または重ねて配置することで、プロトタイピングのニーズや他のボードやコンポーネントの追加に合わせて拡張することができます。
この例では、Arduino用のProtoStaxを使用します。これは、Arduino用の透明なアクリル製エンクロージャーです。Uno/ Leonardoフットプリントとより大きなMega / Dueフットプリントの両方に適合します。これは、積み重ね可能でモジュール式であり、2人用のスペースがあります。シールド(いくつかのマイナーな変更を加えて、概要を説明します)。透明で頑丈で、ゴム製の脚が付いているので、少し持ち上げてテーブルの表面を保護できます。エンクロージャーの上面は、タッチピアノのキーパッドとしても機能します。これは、導電性の銅箔テープを貼り付ける場所です。最後に、持ち運びや展示、ジャムが簡単にできる、気の利いた小さなタッチピアノができあがります。 😊
さあ、始めましょう。 😊
ステップ1-Arduinoをエンクロージャベースプレートに取り付けます
まず、Arduino(この例ではUno)をエンクロージャーのベースプレートに取り付けましょう。これにより、Arduinoを構成およびセットアップし、それを試してみるための完全なオープンアクセスを提供しながら、保護が提供されます。閉じる準備ができたら、側壁と天板を簡単に追加して、すべてをネジで固定できます。
Arduinoをベースプレートに取り付け、脚やその他のハードウェアを追加して、プラットフォーム構成でエンクロージャを準備します。 。スライドショーの以下の手順を参照してください。各画像のキャプションには番号が付けられ、各手順の追加の説明が記載されています。
<図> <図> <図> <図> <図> <図> <図> <図> <図>アニメーションGIFとしてのすべての手順は次のとおりです。
<図>
ステップ2-Arduino用のMPR121シールドを準備する
22AWGより線を12本の長さに切断しました。次に、これらをMPR121シールドにはんだ付けしました。 Adafruit Shieldには、ワニ口クリップでグリップするための12個の入力のそれぞれに2つの大きな穴があります。これらの2つの穴の間には、22AWGワイヤを収容する小さな通常の穴があります。
MPR121シールドは、ヘッダーの横にある穴を介してすべてのピンを露出させます。また、ピエゾブザーPS1240にはんだ付けし、片方の脚をピン12に挿入し、もう一方の脚をGNDに挿入しました。
各ワイヤーのもう一方の(自由な)端を必ず剥がしました。 12個の入力に6色の繰り返しパターンを使用して色分けし、後で組み立てるときに順序を維持できるようにしました。
<図>
ステップ3-エンクロージャーを準備する
次に、エンクロージャーを準備する必要があります。まず、ベースプレートに取り付けられたArduinoにシールドを挿入します。次に、上部ブレース要素と側壁を壁スロットに挿入します。
<図> <図> <図> <図> <図>ProtoStax for Arduinoエンクロージャーのストックトップを取り、シールド入力からのワイヤーを挿入するために12個の穴を追加しました。ピアノの鍵盤に合わせてレーザーカッターで穴を開けましたが、ドリルも簡単に使えます(ドリルする前に必ずアクリル板にマスキングテープを貼ってください)。小さな1/8 "の穴で十分です。
次に、シールドからのワイヤーをトッププレートの穴に慎重に挿入します-ワイヤーを穴0から左端の穴に挿入し、徐々に番号が付けられたワイヤー(シールドに番号が付けられています)を穴に挿入します左から右へ。次に、トッププレートの下にトップスペーサーを追加し、スクリュートップをねじ込んでエンクロージャーを完成させます。
次に、金属部分だけが外側に突き出るまでワイヤーを押し戻します。
次に、テンプレートからピアノの鍵盤の形をした導電性接着剤を使用した銅箔のロールから断片を切り取ります(テンプレートについては以下を参照)。次に、銅箔を慎重に剥がして、エンクロージャーのトッププレートのそれぞれの位置に貼り付け、穴から突き出ている対応するワイヤーに銅テープが貼り付けられていることを確認します。
<図> <図> <図> <図> <図> <図> <図>これがピアノの鍵盤と穴のテンプレートです。これを8.5x11のレター用紙に印刷して、正しいサイズにすることができるはずです(問題が発生した場合はお知らせください)
<図>結局のところ、次のようになります:(銅箔テープでより良い仕事をすることができたかもしれませんが、これは初めて使用したので、将来的にはうまく処理できるようになることを願っています!😊)
> <図>
ステップ4-デモコード
まず、Adafruit_MPR121ライブラリをインストールする必要があります。その後、サンプルスケッチをコンパイルしてアップロードできます。これにより、タッチピアノでの作成が可能になり、いくつかのジングルを演奏するための秘密のキーの組み合わせが含まれます。
- C E G Bを押して、「Twinkle TwinkleLittleStars」を再生します
- C D E F Gを押して、スケールアップとスケールダウンを再生します
- C D A Bを押して、「おおスザンナ!」を再生します。
- C C#A#Bを押して、「Frere Jacques / BrotherJohn」を再生します
また、自分の曲のスコアから自分で選んだ曲を簡単に書き写せるようにしました。
あなたがコードについてもっと読むことに興味があるなら(そして私はあなたがそうだと知っています!)、読んでください!
コードの主要部分を簡単に見ていきましょう。ここでデモコードをすばやく参照できます-https://github.com/protostax/ProtoStax_CapacitiveTouch_Piano_Demo/blob/master/ProtoStax_CapacitiveTouch_Piano_Demo.ino
コードは3つの部分に分割できます:
- Adafruit_MRP121ライブラリを使用してMPR121からタッチデータを取得します。
- タッチデータをどのように処理するかを決定します。つまり、ピアノのように対応するトーンを再生するか、マルチタッチを検出してから秘密のジングルを再生します。どちらも組み込みのトーンライブラリを使用します。
- 独自の曲を追加する方法を含む、曲のプログラミング
コードの静電容量式タッチ部分を簡単に見てみましょう。通常の場合と同様に、Adafruit_MPR121クラスのオブジェクトを宣言します。 setup()では、begin()メソッドを呼び出して初期化し、cap.touched()メソッドを使用してloop()で現在タッチされているパッドを取得できます。シンプル!
Adafruit_MPR121 cap =Adafruit_MPR121(); void setup(){... //デフォルトアドレスは0x5A、3.3Vに接続されている場合は0x5B // SDAに接続されている場合は0x5C、SCLの場合は0x5D if( !cap.begin(0x5A)){Serial.println( "MPR121が見つかりません、配線を確認しますか?"); while(1); } ...} void loop(){//現在タッチされているパッドを取得currtouched =cap.touched();}
タッチデータを使用すると、対応するトーンを再生し、ボタンが押されていないときにトーンを停止することで、タッチに応答できます。
//以前にタッチされていて、タッチされていなかった場合は、対応するトーンを再生します。 if((currtouched&_BV(i))&&!(lasttouched&_BV(i))){// Serial.print( "currtouched ="); Serial.print(currtouched); Serial.print( "lasttouched ="); Serial.print(lasttouched); Serial.print( ""); Serial.print(i); Serial.println( "touched");トーン(TONE_PIN、scale [i]); } //タッチされ、現在は*されていない*場合、さらにボタンが押されていない場合は、トーンを停止します//これにより、キー上で指をスライドさせたときにノート間のスムーズな移行が可能になります//これにより、与えられた音符を維持するために、任意のキーに触れてそのままにしておくと、別のキーを押すとそのキーが演奏されますが、//最初のキーを離すまで演奏が停止しません-のようなものですピアノのサステインペダル! if(!(currtouched&_BV(i))&&(lasttouched&_BV(i))&&!currtouched){// if(!(currtouched&_BV(i))&&(lasttouched&_BV(i))){/ / Serial.print( "currtouched ="); Serial.print(currtouched); Serial.print( "lasttouched ="); Serial.print(lasttouched); Serial.print( ""); Serial.print(i); Serial.println( "リリース済み"); noTone(TONE_PIN); }
対応する曲を再生することにより、特別なキーのマルチタッチを処理します:
//「秘密の」キーの組み合わせが押された場合に曲を再生します! if(currtouched ==2193){// C E G B playTune(melody、MELODY_LENGTH(melody)、2); // Twinkle Twinkle LittleStarを再生します} else if(currtouched ==181){// C D E F G playTune(melody2、MELODY_LENGTH(melody2)、48); //スケールスライドを上下に再生} else if(currtouched ==2565){// C D A B playTune(melody3、MELODY_LENGTH(melody3)、1); //おおスザンナをプレイ! } else if(currtouched ==3075){// C C#A#B playTune(melody4、MELODY_LENGTH(melody4)、1); //フレールジャックを再生} else {...
playTune()は、「メモ」の配列であるギブチューンを再生するために使用されます
void playTune(Note * m、int mSize、int speedUp){noTone(TONE_PIN); //(int thisNote =0; thisNote
メロディーを見てみましょう-それはノートの配列で構成されています。各ノートには頻度と期間があります。 =
typedef struct Note {int周波数;フロート期間; } ノート; //このメロディーは、CからBまでのオクターブのすべてのノートを再生し、Cに戻ります。 、{NOTE_E、NOTE_WHOLE}、{NOTE_F、NOTE_WHOLE}、{NOTE_FS、NOTE_WHOLE}、{NOTE_G、NOTE_WHOLE}、{NOTE_GS、NOTE_WHOLE}、{NOTE_A、NOTE_WHOLE}、{NOTE_AS、NOTE_WHOLE}、{NOTE_ NOTE_AS、NOTE_WHOLE}、{NOTE_A、NOTE_WHOLE}、{NOTE_GS、NOTE_WHOLE}、{NOTE_G、NOTE_WHOLE}、{NOTE_FS、NOTE_WHOLE}、{NOTE_F、NOTE_WHOLE}、{NOTE_E、NOTE_WHOLE}、{NOTE_DS、NOTE NOTE_WHOLE}、{NOTE_CS、NOTE_WHOLE}、{NOTE_C、NOTE_WHOLE}};
ここで、pitches.hとnoteDurations.hの#definesが役立ちます。実際の頻度と期間の代わりにこれらを使用できます。たとえば、NOTE_Cを使用してCトーンを再生し、NOTE_WHOLEを使用して全音符として再生します(NOTE_HALF、NOTE_QUARTER、NOTE_EIGHTHは他の音符の長さです)。 DOTTED()マクロを使用して、DOTTED(NOTE_QUARTER)などの「点線の」音符を指定することもできます。
[注:点線の音符は、持続時間が半分の別の音符によって延長された音符です。たとえば、点線の半音符は、全音符の3/4に相当します(1/2音符と1/2音符)。 1 / 2noteの)。 ]
これらはあなたがどんな楽譜でも取りそしてあなたのメロディー配列にそれを書き写すことを可能にするでしょう!
デモでは、「Twinkle Twinkle Little Star」、「Frere Jacques / Brother John」、「OhSusanna!」と書き起こしました。だからあなたは何か遊ぶことがあります(しゃれは意図されていませんか?!😜)-これらの曲はすべて1オクターブ内に収まります。これは私が固執しようとしたキーボードの制限です。もちろん、秘密の曲を演奏するときは、この制限に縛られることはなく、複数のオクターブを使用できます。 「おおスザンナ!」また、もう少し複雑で、2分音符、4分音符、8分音符、および「点線」の4分音符と2分音符を使用します。これにより、他の曲を簡単に書き写す方法をよく理解できるようになります。
それが実際に動いているのを見てみましょう。 😊
ステップ5-さらに進んでください!
プロジェクトをさらに進めるためのアイデアをいくつか紹介します。
1.独自のジングル/曲を作成(または既存のものを転写)し、独自の「シークレットキー」を割り当ててアクティブにします!
2. 2番目のピエゾを追加して2レベルのポリフォニックサウンドを取得します!トーンライブラリは、Timer2を使用して方形波をピエゾブザーに送信し、トーンを再生します。 Arduino Unoには3つのタイマーがありますが、タイマー0は特別で、millis()やpwmなどに使用されます。それでも、Timer1を使用する必要があります。 NewToneライブラリは、Timer1を使用する、トーンライブラリのより最適化された書き直しです。したがって、たとえば、トーンを使用するトーンとNewToneを使用するトーンの2つのトーンを同時に持つことができます。
3.ボタンを1つか2つ追加して、機能を追加します。たとえば、ボタンを押してオクターブを高い方または低い方に拡張します。これらのボタンを静電容量式タッチキーと組み合わせて押すことで、キーボードの範囲を広げることができます。
もう考えられますか?以下にコメントを書いてお知らせください。 😊ご不明な点がございましたら、お気軽にお問い合わせください。 😊
幸せな作り! 😊
コード
ProtoStax_CapacitiveTouch_Piano_Demo
Arduinoエンクロージャー用のProtoStax、Arduino用のAdafruit 12 x容量性タッチシールドを備えたProtoStaxピアノのデモ-MPR121、ピエゾブザー、およびArduino https://github.com/protostax/ProtoStax_CapacitiveTouch_Piano_Demo.git カスタムパーツとエンクロージャー
ProtoStax静電容量式タッチピアノのピアノキーをカットし、トッププレートに穴を開けるためのテンプレート 回路図
製造プロセス