Loopian::ORBIT V2

Created Date: 2024-01-19/ updated date: 2024-11-10
    Owner & Collaborators
    License
    Summary
    Loopian::ORBITは、円環状に並べたセンサーの上を撫でることでピアノの音を奏でる楽器です。
    PC上で動作するLoopian::APPとMIDI接続することで、PCの音源で音を鳴らすことができます。
    Loopian::ORBIT is an instrument that produces piano sounds by touching the top edge of the circle.
    By connecting it to the Loopian::APP running on a PC via MIDI, the sound can be played by the PC's sound source.

    Materials

      Tools

        Blueprints

          Making

          • Loopian::ORBITは、円環状に並べたセンサーの上のへりに触れることでピアノの音を奏でる楽器です。PC上で動作するLoopian::APPとMIDI接続することで、PCの音源で音を鳴らすことができます。
            以下の特徴があります。
            • 鍵盤のようなスイッチではなく、上部の山の頂上を撫でることで発音するタッチ式の楽器です。音だけでなく、触れた場所のLEDが優しく光り視覚的にも楽しめます。
            • Loopian::ORBITはLoopian というアプリと同時に使用します。
              このアプリではループしながら、少しずつ音楽を作ったり、変容させたりするパフォーマンスが可能です。
              Loopian::ORBITはこのアプリと接続することで、タッチする場所の音程が和音に合わせて変わっていきます。
              1. Control基板
              2. Sensor基板
              3. LED基板
              4. Holder(3Dプリント)
              5. センサー受板(3Dプリント)
              6. かまぼこ筐体(3Dプリント)
              7. 連結スタンド(3Dプリント)
              8. 連結基板
              9. 両端用スタンド低音側、高音側(3Dプリント)
            • かまぼこ筐体を12個連結することで、一台のピアノに相当する音程をカバーできます。この状態をHalf ORBITと呼びます。
              最終的にLoopian::ORBITは円環状になるので、このHalf ORBITを2セット作り合体します。この状態をFull ORBITと呼びます。
          • ICやマイコン、コントローラなどのORBITで使用する電子部品を紹介します。ここでは、
            Half ORBITの製作に必要な個数の紹介となります。
            • 今回は、LEDの光を3Dプリントした筐体の中で光らせて、そのまま全体が光るようにしたいため、タッチセンサーが透明である必要があります。
              Bit Trade One の透明電極を使用しています。
            • CY8CMBR3110 : 静電センサ(180度分で12個必要)
              PCA9685 :  I2C PWMコントローラ(180度分で12個必要)
              2SA1313:LEDスイッチ(180度分で12個必要)
              TS5A3160DBV:LEDスイッチ用アナログスイッチ
              PCA9600D:I2Cバスバッファ
            • LED: IN-S126AT5UW
              チップ抵抗(1608), 10K, 4.7K, 560, 220, 
            • 3×8ナベ
              3×10皿
              3×15ナベ
              3mm四角ナット

          • Half ORBITをコントロールする Control基板を作成します。Control基板では、Raspberry Pi picoをマイコンとして使用します。一つのControl基板でHalf ORBIT分の12セットの基板を制御します。
            Half ORBIT分の接続図はこちら(右図)。
            右図のように各基板は、I2Cによって接続されます。
            • 写真のように電源周りの部品を実装します。
              • DCジャック(J9)
              • 100μF電解コンデンサ(C3)
              • 3端子レギュレータ(U1:NJM7805)
              • ダイオード(D1:1N4148)
              • リセッタブルヒューズ(F1)
              • コンデンサ(C1:1μF、C2:0.1μF)
              また、基板裏側に電源用のSMD LED(D7)/ 抵抗(R6)をはんだ付けします。
            • 基板の裏側にSMDを実装するところがあります。
              • TS5A3160(U2)
              • 4.7kΩ(R1,R2,R4,R5)
              • 1kΩ(R3)
              • 10kΩ(R10-13)
            • Raspberry Pi を挿すピンソケット、電源用のピンヘッダ、I2C用ピンヘッダ、GPIO用のピンヘッダをはんだ付けします。
            • 3Dプリンターでカバーを出力します。データはこちら
              4箇所の端に3mm四角ナットを入れ、Control基板を固定します。
              LEDの穴に乳白色のアクリル板などを挟むと、光が眩しくなくなります。
          • Raspberry pi Picoは今回Arduinoで開発しています。
            リポジトリはこちらになります。まずは、このリポジトリをクローンします。
            なお、Arduino の前は、 Rust 言語にて開発していました。
            参考までに リポジトリはこちらになります。
            • 上のリポジトリをダウンロードして、Arduino IDEから読み込めば、Arduinoのプロジェクトとして開発可能です。
              写真のSwitchを押しながら、USBをPCに接続すれば、Arduinoで書き込みモードとして認識されるので、あとはIDEから書き込みボタンを押すだけでファームを書き込めます。
            • この内容を参考に、Rustの開発環境を構築します。
              環境を整えてから、ターミナルで "cargo build" を行い、エラーが無くなるまで環境の不備を直していきます。
            • プログラムの書き込みは、まずラズパイpicoの白いボタンを押しながらPCにUSBケーブルを挿します。この状態で、cargo run と書くと、自動でファームがボードに書き込まれます
            • 正常に書けた場合、「ディスクの不正な取り出し」がMacの画面右上に現れます。これは正常です。
              逆に、正常に書けなかった場合、何も出ません。
              その場合、何度も cargo run をやるしかありません。
          • 白色LEDを16個搭載した基板をHalf ORBITあたり(半円分)12枚作成します。右図の紫色の基板です。

            • LEDを16個、120Ωの抵抗を16個、0.1μのコンデンサを一つ、2SA1313のトランジスタ一つ、リフローではんだ付けします。
              LEDの電流の流れる方向は、文字を読める向きにして、右から左となります。
              今回使うLEDの型番は以下。(mouserで購入)
              IN-S126AT5UW  size:1206  Vf: 3.6v, 20mA, 180mcd 
            • LED基板は旧基板(v1用)を使うことが出来ますが、その場合、以下の修正を行います。
              まずI2Cアドレスを 0x50 以降に設定します。そのためにA4(5番ピン)をVDDに接続します。
              そのために、まず基板上の4番ピンと5番ピンの接続を切断します。チップをはんだ付けした後、5番ピンからVDDに空中配線します。
              また、旧基板は Holder No.1〜No.8 までにしか使えません。
            • 基板裏面に、LEDドライバ PCA9685を手ハンダします。
              先にボンドでチップを接着しておくと良いでしょう。
              ジャンパースイッチJP1-3に適切にはんだ付けして、アドレスを設定します。
              この順に数値を設定します。(内側がlo、外側がhi)
              Holder No.1: JP1-lo, JP2-lo, jp3-lo, jp4-lo
              Holder No.2: JP1-hi, JP2-lo, jp3-lo, jp4-lo
              Holder No.3: JP1-lo, JP2-hi, jp3-lo, jp4-lo
              以下、同様に2進数的に設定
            • LED基板をセンサーホルダーに取り付ける前に、この基板が正常に動作することを確かめておきましょう。Control基板のI2Cに仮繋ぎして、LED基板を動作チェックします。
              [LED基板チェック方法]
              1. I2Cの配線をLED基板に仮繋ぎする
              2. ジョイスティックを押したまま、電源投入
              3. 88matrixLEDに「Su」が表示
              4. ジョイスティックで「LE」を選択し、真ん中のスイッチを押す
              5. LED基板のLEDが交互に光るはず
            • J2の端子に裏側に伸びるようにリード線をはんだ付けします。
              次に、J1に4本のケーブルをはんだ付けします。
              ケーブルはあらかじめ20mmほどにカットし、両端共にケーブルストリッパーで銅線を出しておきます。
          • 静電センサCY8CMBR3110を使って、基板一枚につき8つのタッチセンサを実現しています。
            この基板をHalf ORBIT(半円分)につき、12枚作成します。右図の青い基板です。
            • センサ基板に、静電センサ(CY8CMBR3110)、560抵抗、0.1μ、1μ、2.2nFをリフローします。
              R1-R8: 560
              C1,C3: 0.1μ
              C2: 2.2n
              C4: 1μ

            • Sensor基板をセンサーホルダーに取り付ける前に、この基板が正常に動作することを確かめます。Control基板のI2Cに仮繋ぎして、Sensor基板の動作チェック&アドレスの書き込みをします。
              すでに若い番号のアドレスが書かれている基板を用意し、それらを全て一つのI2Cバスに接続します。

              1. Sensor基板をI2Cに仮繋ぎする
              2. ジョイスティックを押したまま、電源投入
              3. 88matrixLEDに「Su」(Setupの意味)が表示
              4. ジョイスティックを左右に操作して、書き込みする番号を選択後、真ん中のスイッチを押す
              5. 書き込みが成功すれば「Ok」失敗すれば「Er」が表示される
              6. もう一度電源を投入すると、Normal Modeで起動
              7. 起動時チェックが成功すると、失敗した基板だけbitが消える
              8. その後、一つ一つのタッチを触り動作チェック
            • 基板の裏側に8つの小さな丸い端子があります。ここにハンダを盛ります。
              透明電極と接する部分ですので、8つのはんだの盛りが均等になるように注意します。接触が悪い場合、あとで調整する可能性があります。
          • Holder、及び受け板を3Dプリントして、LED基板を取り付けます。
            • このデータでHolderを3Dプリントします。
              一部完全に下を向いている面があるので、スライスの際にはサポート材を指定する必要があります。
              色は、透明のものを利用しています。
            • 6つの細い穴に四角ナットを縦に挿入します。
              また、二つの四角い深い穴に、四角ナットを入れ、動かないように周囲を接着剤で固めます。
            • LED基板をHolderに装着します。
              リード線をネジ穴横にある小さな四角い穴に通します。また、ケーブルを真ん中の穴に通します。最後に15mmのネジで(12mmもギリギリ可)、基板とHolderをねじ止めします。
          • Holderに、透明電極を装着します。Sensor基板とセンサーの接触が繊細なので、センサーが反応していることを確認しながら必要に応じて微調整を行います。
            • シート上で販売されている透明電極を8mm×42.5mmに切り出します。
              まずイラレで書いた切り出しの線をプリントアウトして、その上に透明電極シートをテープで貼り付けます。  
              紙に印刷された線をなぞって透明電極をカットし、これを8枚用意します。この電極を導通側を山にして半分に折ります。
            • 透明電極を写真のように接着剤で貼ります。このとき、センサーの真ん中の折り目が8本とも一直線になるように、接着されるまでの間にセンサーの位置を調整します。
            • 右図のように、LED基板とI2CアドレスがセットになっているSensor基板を、3か所ねじ止めします。
              ネジは3×8mmナベを使用します。
              この時点で、Control基板に接続し、センサーが反応するかをチェックし、必要に応じて以下のような調整を行います。
              • Sensor基板のハンダの盛り
              • ネジの締め具合
              • 透明電極の位置交換、あるいは取り替え
            • 8つの透明電極を、センサー基板の無い側に固定します。
              まずは写真のように、各センサーの折り目が真っ直ぐのラインになるように、薄い絶縁テープで軽く固定しながら調整。
              その後、仮止めしたままセンサー受板で3箇所、ねじ止めして完全に固定します。3×10mmの皿ネジを使用します。
          • HolderのLED基板とSensor基板の配線を行います。
          • ここでは、ORBITを構成する一つ一つの筐体がかまぼこに似ているため、かまぼこ筐体と呼ぶことにします。まず、かまぼこ筐体を3Dプリントし、その中にセンサーホルダーを取り付けていきます。
            • 組み立てたHolderをかまぼこの中の空洞に入れ、ケーブルを筐体下の穴から出します。
              Holderを入れる向きですが、かまぼこが連なってできる円の外側が基板、内側がセンサー受板となります。
              この状態で、筐体下の窪みとHolderの間にバネを挟み、透明電極が下から筐体の屋根裏に押しつけられるようにHolderを固定します。
            • 透明電極がかまぼこ筐体の頂点に押し当てられた状態で、一度各接点がタッチで反応するか試しておきます。
              反応しないスイッチがあれば、もう一度透明電極の取り付けまで戻り、調整を行います。
          • Half ORBITの12個の筐体を合体します。
            連結には、かまぼこ筐体を繋げる3Dプリントによるスタンドと、連結基板を使用します。12個を連結するので、11セットのスタンドと連結基板が必要になります。
            • Loopian::ORBIT-2 2024と書かれた基板を使用します。
              この基板では2種類の使い方があります。通常の連結とI2Cバッファ連結です。
              1. 通常連結では、JP1とJP2をそれぞれリード線で繋ぎます
              2. I2Cバッファ連結では、U1にPCA9600Dを、R1,R2に4.7Kの抵抗をハンダづけします
            • 連結基板にピンヘッダやピンソケットをはんだ付けします。
              J7がピンソケット、J6, J8 がピンヘッダになります。
              J6とJ7を接続するので、基板と連結スタンドをうまく位置合わせした上で、はんだ付けします。
            • Half ORBIT(かまぼこ12個分)の両端にはスタンドが付いていませんが、二つのHalf ORBITを合体する際に、この箇所を利用しますので、いったんここでは何もつけません。
          • Half ORBITのかまぼこ筐体を12台作る際、これまでの手順を何回か繰り返すことになります。
            この繰り返しの作業の際、気を付けることを以下にまとめます。
              1. 手順に従い、かまぼこ筐体を二つ作成
              2. かまぼこ筐体二つを連結
              3. LED基板作成まで戻り、3台目を製作
              4. 連結するたびに、LED基板作成まで戻る
              5. 12個を連結するまで繰り返す
            • 搬送のことを考え、6台目と7台目の間は取り外し可能とします。また、6台目と7台目の間の連結基板はI2Cバッファ連結の基板を使います。

          • Loopian::ORBITは当初PCと接続することで動作させていましたが、スタンドアロンでの動作のため、ラズパイ5を取り付けて直接オーディオを出力させるようにしました。
            ここでは、ラズパイ5の取り付けについて簡単に記述しておきます。
          • Loopian::ORBITは、木製のスタンド含めると、組み上げた際にはかなりの大きさになります。
            従って、イベントの際は組み上げた状態で運ぶことは無理なので、分解して運搬します。
            イベント会場での組み上げ手順について、ここに記載しておきます。

            • スピーカー用設置板の上にスピーカーを載せます。
              近くにモニター、キーボードを置きます。
              また、ORBIT用のタップに、スピーカーの電源を繋ぎます。
            • 木製スタンドを組み立てます。
              色付きのシールの色が合っているスタンドを組み合わせ、上中下の3箇所のねじ止めを行います。

            • 二つのControl基板(Main/Sub)を黒の3mmネジで取り付けます。
              Mainは、木製スタンドの下側にケーブルホルダーがある方です。
              長いケーブルをケーブルホルダーに引っ掛けて、二つのControl基板を繋ぎます。
              Main側のControl基板に、電源とUSB microB端子を繋ぎます。
            • ケースに収まっているラズパイ5を、木製スタンドに取り付けます。MainのControl基板の直下です。
              下にあるリングにケーブルをまとめます。
              ラズパイとControl基板の電源をタップに繋ぎます。
            • 6番目と7番目のかまぼこ筐体をねじ止めします。
              二つのHalf ORBIT同士をねじ止めします。
              ケーブルを接続します。
            • なるべくギリギリまで上を向けないようにしてそっと持ち上げ、ゆっくり台の上に置きます。
              ORBITのケーブルをControl基板に繋げます。
            • ラズパイ5にキーボードとマウスを繋げます。
              最後にタップが繋がっている電源をONにします。

          Add Card Order

          References

            Usages

            • Loopianとの接続について

              Loopian::ORBITは、PCやマイコン上で動作するLoopian::APPと接続し、協調動作することによって、始めて利用することができます。まず、そのためには、Loopian::APPと接続する設定を行う必要があります。
              Loopian::APP は汎用性のあるアプリケーションではないので、事前に接続するデバイスを設定した上でビルドします。そのためにはまず midi.rs 内に、Loopian::ORBITのMIDIデバイス名を記載する必要があります。現在 Loopian::ORBITのデバイス名は "Loopian-ORBIT" として設定してあります。
            • 起動

              現状起動時にMIDIの問題があり、立ち上げ時にターミナルで以下の順に処理する必要があります。なお、以下の1,3はデスクトップ上にアイコンを置いたので、それをダブルクリック&実行ボタンでも可能です。
              1. ./lpndmy.sh
              2. アプリを一回タクトスイッチで落とす
              3. ./go_lpn.sh

              また、アプリはディレクトリを移動して以下の方法でも立ち上がります。
              ラズパイの通常画面まで到達したら、ターミナルを起動し
              1. cd loopian/Loopian_Rust
              2. ./autostart_loopian.sh

            • loopian::APPの終了方法

              写真の円で囲まれているところ、ラズパイのMIDIボードの奥まったところに、タクトスイッチがあります。このスイッチを押すと、Loopian::APP が終了します。
              その後、ラズパイOSをシャットダウンします。
            • Loopian::APPの更新とビルド

              loopian:APPを以下の手順で更新します。
              1. ターミナルを開く
              2. loopianのフォルダに移動
                 cd loopian/Loopian_Rust
              3. ファイル更新
                 git pull
              4. 以下のコマンドでビルド
                 cargo build --release --features raspi

                なお、Rust環境自体のアップデートは
                  rustup update
            • ソフト不具合対策 -> 解決済み

              現在、Control基板が途中でハングアップしてしまう、という不具合がある。
              発生頻度が少ないため、起きた時のリカバリーを極力早くする方向で対策した。

              ハードスイッチを2箇所に追加。
              1.  Control Board のリセットスイッチ
              2.  ラズパイのGPIOを利用したスイッチ(LoopianのMIDI再接続処理が動作)
              上記のスイッチを1,2の順で押せば復帰する。
              ただし、1でControl Boardがリセットしない場合がある。また、2を押しても、ラズパイからのLED点灯情報が効果しない。もう一度効果させるには、ゼロからアプリを立ち上げる必要がある。

              9/26 に上記ハングするバグ修正


            • Pianoteq8の設定

              音色やエフェクトなどの設定をプリセットにして以下の名前でSave
              • Loopian NY Steinway New Age

              音が出ない時、Pianoteq8のMIDI受信設定を確認
              • loopian tx1
              がOnになっている必要がある

            Project comments