Loopian::QUBITとは
Loopian::QUBITは、Loopian::ORBITの小型版として構想されました。
ORBITは大型のため、専用のスタンドの上でのみ使用できますが、QUBITは直径が半分以下の30cm。より気軽にLoopianデバイスを楽しめます。
以下に、Loopian::QUBITの特徴を挙げます。
小型で持ち運びも簡単
直径30cmのリング状の楽器。持ち運びも可能ですし、持ちながらの演奏も可能です。
NeoPixel搭載でフルカラー化
今回はLEDにNeoPixelを使用したので、フルカラーでの点灯が可能になりました。
静電センサーをQTouchに変更
これまでかなり長い間、CypressのCY8CMBR3110を使用してきました。この静電センサは非常に精度も信頼性も高かったのですが、一つの接点あたりOn/Offしか取っていませんでした。アナログ値を取ろうとしたのですが、基本的にデバッグ用でしか提供されておらず、読み込み時間がかかるため断念。
今回は、AtmelのQTouchシリーズであるAT42QT1070というチップを使用します。サイプレスに比べ機能や精度は劣るものの、アナログ値がすぐに取れるため、今回このチップを試してみることにしました。
利用用途の拡大
Loopianは、これまで誰でもピアノを弾けた気分になる楽器というコンセプトで製作してきました。
Loopian::QUBITは、アナログ値を取ることができるので、このコンセプト以外にももう少し新しい表現にもトライしてみようと思っています。
部品の入手
以下の主要な電子部品、機構部品を入手します。(SMDのコンデンサ、抵抗などは省略)
30AWGのワイヤー
以下を購入
https://amzn.asia/d/eTR4jWi
AT42QT1070
7chの静電センサー用IC。16個必要です。
TCA9544A
I2Cデバイスを4分配するIC。4個必要です。
PCA9600D
I2Cのバッファ。1箇所です。
NeoPixel SK6812RGBW
こちらから購入
。96個必要です。
バネ
直径5mm、長さ10mmの
バネを購入
。全部で32個必要です。
有機ELディスプレイ 0.95インチ
こちらから購入
。
74AHCT1G125
NeoPixelへの信号を5v駆動するために使用。
Seeed XIAO RP2350
マイコンボードは
Seeed XIAOを使用します
。
基板設計&製作
以下の3種類の電子基板を設計および製造、そして部品のハンダ付けします。
LED Boardの設計
図のようにKiCadにて、LED Boardを設計・製造します。6つのNeoPixelを繋げ、5Vで駆動するための端子を備えます。
LED Boardの製作
NeoPixelと0.1μのコンデンサを、リフロー炉を使ってハンダ付けします。
Sensor Boardの設計
図のようにKiCadにて、Sensor Boardを設計します。
AT42QTを使って、6つの静電センサと繋げます。電圧は3.3Vです。
Sensor Boardの製作
AT42QTと0.1μのコンデンサを手ハンダします。
Connector Boardの設計
図のようにKiCadにて、Connector Boardを設計します。I2Cを分配するTCA9544Aを使用して、4箇所のSensor BoardのI2Cと接続しています。
Connector Boardの製作
Connector Boardは、TCA9544Aが搭載されたもの(以下9544Board)と搭載しないもの(以下Non9544Board)、二種類製作します。
9544Boardは、
9544と0.1μのコンデンサ、4.7kの抵抗をR1-R8
に、それぞれ手ハンダした上で、
JP3,5,7,9の1-2を導通、JP4,6,8,10を導通
させます。
Non9544Boardは、
JP3,5,7,9の2-3
を導通させます。
下の「
Connector Board JP接続表
」も参照してみてください。
MCU Boardの設計
全体のセンサーの値を読み取り、NeoPixelを点灯させ、MIDIを送信するためにSeeed XIAOをマイコンボードとして使用します。これを搭載するためのMCU Boardを設計、製作します。
これは全体で一つのみ作ります。
MCU Boardの製作
MCU Boardに部品を手ハンダしていきます。
DCJack, 三端子レギュレータ、および周辺のデバイス、さらに、Seeed XIAO, OLED, tact Switchなどを取り付けます。
3D Printによる部品製作
inner sensor holder
PLA白のフィラメントで
このデータ
をプリントします。16個必要です。
outer sensor holder
PLA白のフィラメントで
このデータ
をプリントします。16個必要です。
bed
PLA黒のフィラメントで
このデータ
をプリントします。8つ必要です。
tube
透明のPETGのフィラメントで
このデータ
をプリントします。8つ必要です。
PETGで印刷する際は、フィラメントをセットする際の温度を250℃にします。
印刷する際、インフィルのパターンをConcentricに設定し、サポート材を有効にします。
MCU Board Box
PLA黒のフィラメントで
このデータ
をプリントします。8つ必要です。
Sensor Unitの製作
6つの透明電極を使った静電センサと、6つのNeoPixelをひとつの部品にしたSensor Unitを製作します。本デバイスのタッチとLED光の動作を決定する重要な部品ですので、取り付ける前に動作チェックをしながら慎重に進めていきます。
Sensor Boardの取り付け
Sensor Boardをouter sensor holderに
M2×6mm
の皿ネジで取り付けます。
余っているリード線の先端を曲げ、そこにハンダを盛って透明電極との接点を作り、そのリード線のもう片方の端を、outer sensor holder の6箇所の小さな穴を通して、Sensor Boardにハンダ付けします。
LED Boardの取り付け
NeoPixelを取り付けたLED Boardの裏面の端子にケーブルをハンダ付けします。
J1: 5v(赤), J2: Ground(黒), J3: signal input(白), J4: signal output(緑)
signalの白と緑はAWG30の細い線を使います。
LED Boardの配線をinner sensor holderの二つの穴に通し、inner sensor holderとLED Boardを接着します。
Groundのケーブルは
17mmくらいで切断し
、先端の被覆を剥いておきます。
innerとouterの仮止め
innerの裏側の6つの穴に四角ナットを入れ、ケーブルを穴に通しながらouterの中に配置します。outerの両側にある穴から、
M3×8mm
の非金属の皿ネジで6箇所仮のネジ止めをします。
透明電極の取り付け
透明電極の切り出す線が描いてあるファイルをプリントアウトし、透明電極をプリントした紙の上に貼ります。線に合わせて、透明電極をカッターで切り出します。
その後、切り出した透明電極を真ん中で折り、innerとouterの間に挟み込みます。電極の太い方をouterの外周側に、細い方を内周側に6枚差していきます。
電極を折った場所が同じ位置になるように調整して、innerとouterを留めているネジを強く締め込み、電極を固定します。
電極のチェック
各透明センサーが正常に電極と繋がっているか、テスターを使ってチェックします。
必要に応じてリード線による接点の調整を行います。
ケーブルのはんだ付け
innerにはんだ付けしたGND(黒)を Sensor BoardのJ2端子にハンダ付けし、さらに同じJ2端子にもう一本のGNDケーブルをハンダ付けします。
また、Sensor Boardの以下の端子にケーブルをハンダ付けします。
J1: 3.3V(赤)、J4: SCL(黄)、J3: SDA(青)
30AWGの細い線を使います。
GNDと、3.3Vは近接しているので、ハックルーで絶縁しておいたほうが良いでしょう。
Sensor Unitの動作チェック
6つの接点と6つのNeoPixelが正常に動作するかをチェックします。
ケーブルを仮ベッドの穴に通す
bedの突起にバネをとりつけ、センサー側のケーブルをバネの内側にある穴に通していきます。青黄緑白をひとまとめに、赤黒をひとまとめにして穴に通します。
Tubeの取り付け
PETGで印刷したTubeを、センサーを押さえ込むようにbedに取り付け、両横のネジ穴から透明のネジ
(3×10皿)
で固定します。
配線して動作チェック
ケーブルをマイコンと接続して、動作チェックします。
赤: 5V
赤: 3.3V
黒: GND
白: NeoPixel
黄: I2C SCL
青: I2C SDA
動作チェック時は、constants.h の
#define TEST_MODE のコメントを外して
ビルドし、マイコンに書き込んでおきます。
bedの組み立て
黒でプリントしたbedを連結し、図のようにConnector Boardを配線していきます。なお、この図は上から見た図であり、裏側から基板を見た場合、方向が逆になることに注意してください。
bed同士をネジ止めする
3×10mmの黒タッピングネジ
で、3Dプリントした部品のbed同士を両横からネジ止めしていきます。8個ねじ止めすると円になります。
四角ナットの装着
上側の両内側に窪みがあるので、そこに四角ナットを挿入していきます。
窪みにはあらかじめ接着剤を塗っておき、挿入する四角ナットが落ちないようにしておきます。
裏側にConnector Boardをネジ止めする
Connector Boardをネジ止めします。
Connector Boardは、
9544Board
と
Non9544Board
の2種類があります。この2種類の基板が交互になるように配置します。
導通しないワッシャーを入れて
3×8mmのタッピングネジ
でねじ止めした後、隣り合うConnector Boardの両端にある端子をリード線でハンダ付けし、電気的に繋げます。ただし、7枚目の9544Boardと8枚目のNon9655Boardの
7pin,8pin
、それから8枚目と1枚目の9544Boardは、
7pin,8pin
は繋ぎません。
Connector Board接続方法
裏側から見て、基板の順番は右回りとなります。
4つの9544Boardのうち、右回りに
(JP1,2): off,off -> on,off -> off,on -> on,on
となるように配置します。
9544Board/Non9544Boardともに、
JP13は基本的に繋ぎ
ます。8枚目は繋がず、あとで端子の片方をMPUBoardと繋ぐことになります。
Connector Board JP接続表
Connector BoardのJP Swを文章で書くとややこしいので、表にまとめてみました。
Sensor Unitの取り付け
Sensor Unitと、tube、bedを組み立てます。
Sensor Unitのケーブルを通す
まずbedの突起に5×10mmのバネを挿しておきます。それから、Sensor Unitのケーブルを、bedの穴に通しながら、Sensor Unitをbedのバネの上に置いていきます。
tubeを上から被せる
センサーを真上から均等に押さえ込むように、PETGで印刷したtubeを bedに押さえ付け、両横のネジ穴から透明のネジ(3×10皿)で固定します。
ケーブルをはんだ付けする
穴から出ているSensor Unitのケーブルを、近くの端子にはんだ付けします。
まず、ストリッパーで皮膜が取れる程度に、ケーブルを2cmくらいに切断します。
それから4本のケーブルは左回りに、緑、白、黄、青の順に、3本のケーブルは左回りに5v赤、3.3v赤、黒の順にはんだ付けします。
動作チェック
最後に動作チェックします。
constants.h の MAX_KAMABOKO_NUM の値は、最終的には 16となります。
もし半周分まで作ったなら8にします。90度分なら4にして、動作チェックします。
MCU Board Boxの接続
MCU Board BoxとQUBIT本体を配線します。
いずれ、MCU Board Boxは本体と一体化する予定ですが、今回はこのように分離してケーブルで繋ぐことにしました。
ファームウェアについて
ファームウェアは
ここにあります
。
以下にファームウェアの特徴などを記しておきます。
Arduino IDEで動作
Arduino-pico(Raspberry Pi Pico/RP2040/RP2350 by Earle F.Philhower,III) をインストール。ボードは"Seeed XIAO RP2350"を選択
USBはAdafruit_TinyUSBを選択
ライブラリは
Adafruit_TinyUSB
RPI_PICO_TimerInterrupt
Adafruit_SSD1331
MIDI Library
PIOでSK6812のNeoPixel制御
Whiteも含む4食分のNeoPixelのシリアル出力は、RP2350のPIO機能を使って、プログマラブルなハードウェアにて実現しており、その分、プログラム処理が軽量になっているはずです。
Core1でI2C処理
Arduino::APPと連携して動作