Loopian::ORBIT

Created Date: 2023-02-19/ updated date: 2023-10-20
    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の音源で音を鳴らすことができます。
            以下の特徴があります。
            • 動画内で動作している Loopian というアプリを同時に作っています。
              このアプリではループしながら、少しずつ音楽を作ったり、変容させたりするパフォーマンスが可能です。
              Loopian::ORBITはこのアプリと接続することで、タッチした音程が和音に合わせて変わっていきます。
            • 鍵盤のようなスイッチではなく、上部の山の頂上を撫でることで発音するタッチ式の楽器です。音だけでなく、触れた場所のLEDが優しく光り視覚的にも楽しめます。
            • このタッチ式のデバイスは緩やかにカーブしています。これを6個連結すると、90°分の円弧が完成。そして24個連結すると円環になります。
              円環状にすることで、同時に複数人が演奏を楽しむことができます。
          • このプロジェクトを制作するにあたり、入手に注意すべき部品について、ここで紹介します。
            なお、ORBITの筐体一つで角度が15度となるので、90度分では6個必要。一回り分制作すると24個必要になります。
            • 今回は、LEDの光を3Dプリントした筐体の中で光らせて、そのまま全体が光るようにしたいため、タッチセンサーが透明である必要があります。
              Bit Trade One の透明電極を使用しています。
            • いくつかのLEDを入手し値段と性能を比べた結果、以下の型番のLEDを使うことにしました。
              基板一つあたり16個、90度分で96個必要です。

            • 以下のICを使用します。
              CY8CMBR3110 : 静電センサ(90度分で6個必要)
              TCA9544A : I2Cマルチプレクサ(90度分で6個必要)
              PCA9685 :  I2C PWMコントローラ(90度分で6個必要)
            • Control基板に搭載するマイコンボードとしてRaspberry Pi picoを使用します。
          • センサー基板、LED基板を動作させるためのコントロール基板を作成します。
            先にコントロール基板の作成を紹介するのは、LED基板やセンサ基板を作る過程で動作チェックをしたいからです。
            コントロール基板には、Raspberry Pi picoをマイコンとして使用します。
            それ以前には、Sparkfun pro micro(ATmega32U4)を使用しましたので、その情報も下の方に載せておきます。
            • こちらが回路図となります。
              Raspberry Pi picoをメインのマイコンボードとし、各デバイスをI2Cに繋いでいます。また、ジョイスティックをADCに、LEDなどをポートに接続しています。

              設計のポイント
              • picoの電源はVDDと切り離してあり、基板上の電源を使わない選択も可能
              • LEDは、外部電源と切り離してあり、3.3Vで動作
              • 20pinのGPIO15はアナログスイッチで、5VでLED用のトランジスタを制御する
            • 右の写真が基板に部品を実装した状態となります。

              実装時以下の点に注意
              • J14のVDDを、J1のVSYSに繋げること
              • 8×8LED Matrixのコネクタ部のSCL, SDAが逆になっているため、4ピンのピンヘッダを使わず、2ピンのピンヘッダを使い、SCL/SDAはリード線を手ハンダで逆に付け替える(基板修正の必要あり)
              • R3をつけずに直結、U2の4pinをJ2の5pinに直接繋がず、途中に1kΩの抵抗を入れる(基板修正の必要あり)

            • Pro Micro版の基板は、左の通りです。
              LEDが16×6個あるので、1A程度は出力できる電源ICを搭載してあります。
            • この基板を設計する段階では、右上の3つのLED、88matrixLEDの搭載は予定していなかったので、写真のようにユニバーサル基板を切断して必要な部品を実装します。
              • 88matrixLEDを接続する際、VDDとGNDが、SCLとSDAが位置が逆になっているので、子基板で配線を逆にしてデバイスに繋ぎます。
              • pro microのGPIO出力を3つのLEDに繋ぐための子基板を右上のように作ります。VDDを近くの端子から取ってきます。

          • Sparkfun pro microをマイコンとして使用した時のファーム開発および、プログラムの書き込み方法について説明します。
            • ファームを書き込むときは、IDEのボタンではなく「書き込み装置を使って書き込む」を選んで書き込んでください。
              ファームを書き込むために、専用の書き込み機を用意します。写真の書き込み機は、Pro Microに書き込み機用のファームを書き、SPI端子を引き出して基板のコネクタに接続できるように製作したものです。
            • 基板を作って最初にATmega32U4にファームを書き込む時は、まずブートを書き込みます。

              書き込み時のツールメニューの設定は、
              「ボード:"Arduino Leonardo"」
              「書込装置:"Arduino as ISP(ATmega32U4)"」
              としてください。
              その後、ツールメニューの「ブートローダを書き込む」を選ぶと書き込みが始まります。
            • 表示器は全部で4つあります。
              1. LED1 緑
              2. LED2 緑
              3. LED Err 赤
              4. 88matrixLED 黄色

              電源投入時、LED1,LED2,LED Errが3回点滅します。
              その後、setup()関数を走っているとき、LED2のみ点灯します。
              デバイスに一つでもエラーがあると、LED Errが点灯します。
              setup()を抜けて、loop()に入ると、LED2は点滅します。

              なお、88matrixLEDは、状況に応じて様々な情報を表示します。
          • 白色LEDを16個搭載した基板を作成します。
            今回使うLEDの型番は以下。(mouserで購入)
            IN-S126AT5UW  size:1206  Vf: 3.6v, 20mA, 180mcd 
            • LEDを16個、120オームの抵抗を16個、0.1μのコンデンサを一つ、リフローではんだ付けします。

              LEDの電流の流れる方向は、文字を読める向きにして、右から左となります。
            • 基板表に、トランジスタ 2SA1313をはんだ付けします。
              次に基板裏面に、LEDドライバ PCA9685を手ハンダします。先にボンドでチップを接着しておくと良いでしょう。
            • ジャンパースイッチJP1-3に適切にはんだ付けして、アドレスを設定します。
              実際には、センサー基板側のI2Cアドレスで設定するので、ここは全てLO,LO,LO(マークの付いているほう)に設定します。

            • LED基板をセンサーホルダーに取り付ける前に、この基板が正常に動作することを確かめておきたいはずです。Control基板のI2Cに仮繋ぎして、LED基板を動作チェックします。
              [LED基板チェック方法]
              1. LED基板を仮繋ぎ後、88matrixLEDの右上のリード線をGNDに接続
              2. ジョイスティックを押したまま、電源投入
              3. 88matrixLEDに「B」(brightの意味)が表示
              4. LED基板のLEDが交互に光るはず
            • J2の端子に裏側に伸びるようにリード線をはんだ付けします。
              次に、J1に4本のケーブルをはんだ付けします。
              ケーブルはあらかじめ20mmほどにカットし、両端共にケーブルストリッパーで銅線を出しておきます。
          • 静電センサCY8CMBR3110を使って、基板一枚につき8つのタッチセンサを実現しています。この基板を作成します。
            • センサ基板に、静電センサ(CY8CMBR3110)、I2Cマルチプレクサ(TCA9544A)、10k抵抗、560抵抗、0.1μ、1μ、2.2nFをリフローします。
              R1,R2,R11,R12: 10k
              R3-R10: 560
              C1,C2,C4: 0.1μ
              C3: 2.2n
              C5: 1μ
              TCA9544Aは、端子が0.65mmと狭く、ブリッジすることも多いので、必要に応じてあとで修正します。
            • ジャンパースイッチJP1-3に適切にはんだ付けして、アドレスを設定します。
              3側がLO, 1側がHI になります。
              adrs = JP1,JP2,JP3
              0 = LO,LO,LO
              1 = LO,LO,HI
              2 = LO,HI,LO
              3 = LO,HI,HI
              4 = HI,LO,LO
              5 = HI,LO,HI
            • センサ基板をセンサーホルダーに取り付ける前に、この基板が正常に動作することを確かめます。Control基板のI2Cに仮繋ぎして、センサ基板を動作チェックします。
              [センサー基板チェック方法]
              1. センサ基板をI2Cに仮繋ぎする
              2. ジョイスティックを押したまま、電源投入
              3. 88matrixLEDに「Su」(Setupの意味)が表示
              4. 書き込みが成功すれば「Ok」失敗すれば「Er」が表示される
              5. もう一度電源を投入すると、Normal Modeで起動
              6. 起動時チェックが成功すると、失敗した基板だけbitが消える
              7. その後、一つ一つのタッチを触り動作チェック
            • 基板の裏側に8つの小さな丸い端子があります。ここにハンダを盛ります。
              透明電極と接する部分ですので、8つのはんだの盛りが均等になるように注意します。接触が悪い場合、あとで調整する可能性があります。
            • <古い基板の情報>
              センサー基板に、静電センサ(CY8CMBR3110)、I2Cマルチプレクサ(TCA9544A)、10k抵抗6つ、0.1μ4つ、1μ3つをリフローします。
              TCA9544Aは、端子が0.65mmと狭く、ブリッジすることも多いので、必要に応じて写真のようにあとで修正します。
          • センサーホルダーをプリントアウトし、ナットなどを装着します。
            そのあと、LED基板をねじ止めします。
            • 5つの細い穴に四角ナットを縦に挿入します。
              また、二つの四角い深い穴に、四角ナットを入れ、動かないように周囲を接着剤で固めます。
            • LED基板をセンサホルダーに装着します。
              リード線をネジ穴横にある小さな四角い穴に通します。また、ケーブルを真ん中の穴に通します。最後にネジで15mmのネジで、基板とホルダーをねじ止めします。
          • センサーホルダーに、透明電極、センサー基板を装着します。
            • シート上で販売されている透明電極を8mm×42.5mmに切り出します。
              まずイラレで書いた切り出しの線をプリントアウトして、その上に透明電極シートをテープで貼り付けます。  
              紙に印刷された線をなぞって透明電極をカットし、これを8枚用意します。この電極を導通側を山にして半分に折ります。
            • 透明電極を写真のように接着剤で貼ります。このとき、センサーの真ん中の折り目が8本とも一直線になるように、接着されるまでの間にセンサーの位置を調整します。
            • センサー基板を8mmの長さのネジでセンサーホルダーにねじ止めします。  
              この状態で、いったん透明電極の動作チェックをします。Control基板と接続し、透明電極に触れてセンサーが反応するかチェックします。もし反応しない場合、ハンダの山とセンサーの噛み合わせを調べ、ハンダを盛り直したり、削ったりして調整します。

            • 8つの透明電極を、センサー基板の無い側に固定します。
              まずは写真のように、薄い絶縁テープで軽く固定。その後、テープで仮止めした状態のまま、センサー受板で3箇所、ねじ止めして完全に固定します。
            • 5pinのメスコネクタのケーブルを5cmにカットします。なお、ケーブル1本のみ7cmでカットします。このケーブルをセンサー基板の4つの穴にハンダ付けし、長いケーブル一本をLED基板から出したリード線に繋ぎます。
              これでセンサーホルダーの組み立て完です。
          • ここでは、ORBITを構成する一つ一つの筐体がかまぼこに似ているため、かまぼこ筐体と呼ぶことにします。まず、かまぼこ筐体を3Dプリントし、その中にセンサーホルダーを取り付けていきます。
            • このデータでかまぼこ筐体を3Dプリントします。
              筐体の内側にある四角ナットのポケットに、四角ナットを挿入します。落ちそうであれば、接着剤で固定しておきます。
              かまぼこの両端が少しでこぼこしているようなら、やすりがけして平らにし、両隣のかまぼこと隙間なく接するよう調整します。
            • 組み立てたセンサーホルダーを中の空洞に入れ、ケーブルを筐体下の穴から出します。この状態で、バネを筐体下の窪みとセンサーホルダーの中に入れ、透明電極が下から筐体裏に押しつけられるようにホルダーを固定します。
            • 透明電極がかまぼこ筐体の頂点に押し当てられた状態で、一度各接点がタッチで反応するか試しておきます。
            • かまぼこのケーブルを電気的に接続するための連結基板を作成します。
              基板が用意できたら15mmの長さのネジで、6つのかまぼこ筐体、連結スタンド、連結基板をネジ止めします。
            • 連結基板にピンヘッダやピンソケットをはんだ付けします。
              J7がピンソケット、J6, J8 がピンヘッダになります。
              J6とJ7を接続するので、基板と連結スタンドをうまく位置合わせした上で、はんだ付けしてください。
            • 6つのかまぼこ筐体を連結させることで、ひとまず Loopian::ORBIT は完成。
              最終的には、このユニットをさらに3つ作ることで、完全なORBIT(軌道)にすることを目指します!
          • Raspberry pi Picoは今回 Rust 言語にて開発しています。
            リポジトリはこちらになります。まずは、このリポジトリをクローンします。
            • この内容を参考に、Rustの開発環境を構築します。
              環境を整えてから、ターミナルで "cargo build" を行い、エラーが無くなるまで環境の不備を直していきます。
            • プログラムの書き込みは、まずラズパイpicoの白いボタンを押しながらPCにUSBケーブルを挿します。この状態で、cargo run と書くと、自動でファームがボードに書き込まれます。
          Add Card Order

          References

            Usages

              Project comments