TouchKeyboard

Created Date: 2022-06-05/ updated date: 2022-10-29
    Owner & Collaborators
    License
    Summary
    Maker Faire Tokyo 2022に出展しました!今回、奇楽堂のブースで展示した Touch Keyboard を紹介します!Hamamatsu Micro Maker Faire 2022 にも出展します!

    Materials

      Tools

        Blueprints

          Making

          • Touch Keyboard とは、鍵盤にタッチセンサーを付けることで、独創的な演奏法を作り出すことが出来る、新しいタイプの電子キーボードです。
            このキーボードでは、今のところ下にある3つの奏法を提供します。
            • 鍵盤の一つ一つに10個のタッチセンサーが付いています。そのため、鍵盤自体が電子基板になっています。
            • 一つのユニットが一オクターブ(12鍵)で、ユニットを足すことで、オクターブ分鍵盤を増やすことが出来ます。
            • 本作品は、音源を持たないUSB MIDI Keyboardとなります。
            • 鍵盤を弾きながら、鍵盤の上で前後に指を動かすと、ビブラートが奥にいくほど深くかかります。
              和音で弾いた時、一音、一音、鍵盤別にビブラートをかけることが出来ます。
          • 自分への備忘録として、本作品の展示準備の方法、および展示時の注意点などについて説明します。
            • 本体とコントローラを写真のようにつなぎます。
              白と灰色の線は、JoyStickのAD検出用のケーブルで、4pinのケーブルはI2Cの接続です。赤い丸印が合うようにつなぎます。
              また、PCとの接続はUSB-Cで行います。
            • PCにUSBを繋げた後、アプリを立ち上げます。
              何となくですが、制作したアプリを立ち上げるのでなく、Xcode上で動作させています。
              1. まずxcodeを立ち上げる
              2. namiheySynthのプロジェクトを選ぶ
              3. ▶︎[play]ボタンを押す
              4. コンソールウインドウにMIDIの接続先として、Auduino Leonardoの番号を入力
              5. 終了するときは、quit と打ち込んでreturn
            • MFTの時にあったこと:
              1. 激しく操作し過ぎて、アプリが反応しなくなった。(オーディオアウトが追いつかない?)
          • 以降は、TouchKeyboard製作時の記録です。
            まず、基板の設計で注意したことについて記述します。
            • ATmega32U4をマイコンにして、鍵盤のスイッチをGPIOに直接繋ぎます。
              全Touch SensorをI2Cで接続します。
            • 各鍵盤からのI2Cのコネクタは基板の裏側に、リード線のハンダスペースを作りました。そのリード線を通すための穴(白鍵用)を付けました。
          • 写真はFusionPCBから基板が届いた様子。ここから基板を作ります。
            • 以下の部品を基板にリフローします
              • ATmega32U4
              • 16MHz発振子
              • 22pF SMD×2
              • Fuse
              • 22Ω SMD×2
              • 5.1kΩ(4.7kΩで代用)×2
              • 1μF SMD
              • 0.1μF SMD×2
              • 4.7kΩ SMD×2
              • 10kΩ SMD×14
            • 基板後ろ側にある、2ヶ所の3ピンの穴にL型ピンヘッダをハンダ付け。
              また、I2Cの4ヶ所の穴から4本のケーブルを、
              さらに、D1,D2のカソード側の表面実装用の端子から2本、ケーブルを引き出します。この端子はLED用からJoyStickのAD値受信用に変更しました。
          • 本作品は基板そのものを筐体として生かしますが、その他の部品は3Dプリンターで出力します。
            3Dプリントで出力するパーツは以下です。
            1. 白鍵アクション
            2. 黒鍵アクション
            3. サイドボード
            4. ストッパー
            • 白鍵アクションと黒鍵アクションを3Dプリントします。
              白鍵アクションのSTLデータはこちら。
              黒鍵アクションのSTLデータはこちら。
            • サイドボード、ストッパー、さらに軸のスペーサを3Dプリントします。
              サイドボードとスペーサのデータはこちら。
              ストッパーのデータはこちら。
          • 表示器と切替スイッチ、およびジョイスティックをこのキーボードのマイコンに繋ぐことで、より使いやすくなります。
            上記のデバイスを搭載したコントローラを作成したので紹介します。
            • スイッチとLED、JoyStickを外部コントローラとして繋げようと考えました。
              JoyStickは2軸のADC、LEDはI2Cタイプだったので、スイッチもI2Cを送れるモジュールを入手。
              まずは、ユニバーサル基板の上で、どんなふうに配置するか検討しました。
            • スイッチの基板にLEDを載せ、JoyStickの基板と一緒にMDFのボードの上にねじ止めします。
              この上に、半透明のアクリルボードを載せて完成です。
            • 鍵盤裏にCY8CMBRの静電センサチップとSMDの抵抗、コンデンサをリフローでハンダ付けします。白7枚、黒5枚です。
            • I2Cの4本のケーブルを8cmの長さで用意します。
              このケーブルをJ11端子にハンダ付けします。
              内側から、電源、GND、SCL、SDAの順になります。
              これを12鍵盤分行います。
            • 基板と3Dプリンタで作った鍵盤アクションを接着剤で貼り付け、接着されるまで強く押さえます。
              接着の際は、基板の切り欠きのあるところとアクションの出っ張りを合わせ、アクションが基板の中央に接着されるように注意深く押さえ込みます。
            • ケーブルをハンダ付けした部分をハックルーで保護します。
              白いテープで4本のケーブルをアクションに貼り付けることで束ねます。
          • メインの基板にサイドボード、ストッパーをネジ止めし、横棒で鍵盤を固定していきます。
            鍵盤からの信号線をメイン基板にハンダ付けします。
              1. 白鍵から出ている4つのリード線を該当する基板の穴に通します。
              2. 鍵盤アクションの爪の部分をストッパー縦長の穴に差し込みます。
              3. 横から横棒をアクションの穴に通し、鍵盤を固定させます。鍵盤間にはスペーサを入れます。
            • 上記を7回繰り返して、二つのサイドボードの穴に横棒が通ると、写真のように白鍵が固定されます。
              また、このとき基板の裏面では、基板の7つの穴からI2Cの4つのリード線が飛び出している状態です。

            • 穴から出ている4つのリード線を基板にハンダ付けします。
              写真のように、赤、黒、黄、青の順にハンダ付けしていきます。
            • まず、横棒をサイドボードから穴を通します。
              その後、白鍵と同様、黒鍵アクションの爪をストッパーの穴に入れて、横棒を通して一つ一つ固定していきます。
            • 配線が終わったら、導通チェック、および静電センサのセットアップ時の書き込みなどを行い、最後にハンダ付け部分をハックルーで覆い、配線の保護をしておきましょう。
          • Master BoardのマイコンはATmega32U4になります。このマイコンに、ブートローダとMaster用のファームを書き込みます。
            ファームを書き込むために、専用の書き込み機を用意します。写真の書き込み機は、Pro Microに書き込み機用のファームを書き、SPI端子を引き出して基板のコネクタに接続できるように製作したものです。
            • Arduino IDEに「Adafruit NeoPixel」「MsTimer2」「MIDI Library」のLibraryをインストールします。
            • 基板を作って最初にATmega32U4にファームを書き込む時は、まずブートを書き込みます。

              書き込み時のツールメニューの設定は、
              「ボード:"Arduino Leonardo"」
              「書込装置:"Arduino as ISP(ATmega32U4)"」
              としてください。
              その後、ツールメニューの「ブートローダを書き込む」を選ぶと書き込みが始まります。
            • デバッグ、動作確認用に、I2C端子(J5)にAdafruitの8*8 LED Matrixを接続します。
              次に、J4端子に書き込み確認用のLEDのアノード側を接続します。

              また最初にファームを書き込む際、configuration.h のSETUP_MODE を 1にしておきます。
              最新ファームを書き込みます。IDEのボタンではなく「書き込み装置を使って書き込む」を選んで書き込んでください。
            • Cypress CY8CMBR3110チップに対して、本製品用の設定を書き込みます。鍵盤分チップがあるので12回行います。
              立ち上がると、エラーLEDがしばらく点灯した後、3回点滅します。8*8LED Matrixは、下二行の12個のLEDが点灯します。

            • JP1にハンダを盛って導通させます。
              ここでUSBを接続し電源を入れると、Cの鍵盤のTouch Sensorへの設定書き込みが行われます。他のICはエラーになるので、エラーLEDがしばらく点灯した後、3回点滅します。
              その時、8*8LED Matrixには、写真のように表示されるはずです。これは、12 個のセンサーのうち、一つだけ正常に動いている状態を表しています。
            • 同様にC#の鍵盤のTouch Sensorの書き込みが終わると、LED Matrixは写真のようになります。
              これを、残りの鍵盤だけ行います。

              LED Matrixが全く光らないようになれば、Touch Sensorへの書き込み終了です。
            • Touch Sensorへの書き込みが終わったら、configuration.h の SETUP_MODE = 0 にして、再びファームを書き込みます。
          • ファームおよび、音源プログラムで本作品のために何をどのようにしたか、今後にも役立ちそうな情報を書いてみます。
            • いつも通り、シリアルMIDIの数珠繋ぎなんですが、ATmega32U4同士の接続は初めて。
              やってみたら、少々トラブルはありましたが、システム的な問題はなく無事接続できました。

              ハマったこと
              • MIDI ch=1-16 はプログラム中は 0-15 であることを期待するけれど、ArduinoのMIDI Libraryは 1-16 だった。最初はなぜ0で送れないのか悩んだ。
              • 送り側が1オクターブ高くなるので、その値で送ったら、受け側のオフセットノート値を足し込んで、とんでもないノート番号になった。
            • I2Cで繋げる静電センサが12個というのは初めて。
              I2Cアドレスを全部変えねばならず、静電センサのセットアップは12回、センサへの書き込みが必要になった。アドレスとchecksumを変えるだけのテーブルを、Cypressのツールで作成。
              数は多かったが、特に問題なく動作している。
            • 基板製作当初は、チップLEDを載せて、デバッグなどに使おうとしていたが、途中でJoyStickを付けたくなり、幸いチップLED用の端子でADが取れるため、この二つの端子をJoyStickに接続するよう仕様を変更。
              ADは特に問題なく繋がり、JoyStickとして利用することに成功。
          Add Card Order

          References

            Usages

              Project comments