デジタルミニギターの作り方

画像



この記事では、アイデアから使用可能なプロトタイプの実装まで、デバイスを作成するパスを一般的な用語で説明しようと思います。



私の名前はドミトリー・ドゥダレフです。私は電子機器の開発に携わっており、さまざまなポータブルデバイスを作成するのが大好きです。私も音楽が大好きです。 6か月前、友人からアコースティックギターを借りて、YouTubeのレッスンや表からアコースティックギターの演奏方法を学ぼうとしました。大変でした。私は何か間違ったことをしたか、ひどい試みをしたか、または私の祖先の社会では、細かい運動能力が生殖を害しました。いずれにせよ、ガタガタと音がするだけでした。私の憤慨は、弦の絶え間ない離調によって強められました。そして、私の周りの人々は、何も問題ではないという私の曲線を聞くことに喜びを与えませんでした。



しかし、これらの苦しみの中で、私はエレクトロニクスエンジニアの主なルールを忘れませんでした。何かが存在する場合は、そこにマイクロプロセッサを挿入できます。または、少なくともポータブルな電子的変更を行います。





考え



デジタルギターの構造が頭に浮かび始めました。



まず、デバイスの要件のリストを作成しました。



  1. デバイスは、フレットボードに6本の弦と12本のフレットがあるギターをシミュレートする必要があります
  2. コンパクトで、理想的には折りたためるので、どこにでも持ち運べます。
  3. すべての一般的な軸(Android、IOS、Windows、Linux、MacOS)に接続し、ドライバーなしのMIDIデバイスとして定義する必要があります
  4. バッテリー操作
  5. 接続はワイヤレスで行う必要があります(ただし、充電用のUSBコネクタがあるため、ワイヤーを介して接続することもできます)
  6. ,
  7. , ,
  8. : hummer on, pull off, slide, vibrato
  9. midi 10


もちろん、モバイルプラットフォームの場合、LEDを使用して学習するための表を選択し、楽器(音響、クラシック、さまざまなフィルタープリセットを備えた電気ギターなど)を選択し、サウンドを再生できるアプリケーションを作成する必要があります。



理論的には、ギターのように演奏でき、アナログの欠陥がなく、視覚的なトレーニングシステムを備えたコンパクトな楽器を手に入れる必要があります。

実現可能に聞こえます。



アナログ



それで、まず第一に、今日、何か新しいものを思いつくことはほとんど不可能であり、誰かがすでにそれをしているという考えで武装して、私はグーグルに行きます。実際、最初のデジタルギターは1981年に作成されたことが判明しましたが、機能が制限されていたため、広く使用されていませんでした。







現代のコンパクトなミディギターも存在しますが、よりプロフェッショナルなターゲットオーディエンス向けに設計されており、高価で、最も重要なのは「プッシュライト」モードがないことです。文字列の代わりにiPadを使用したり、ハマグリに似たエキゾチックなオプションもあります。







だからあなたは始めることができます。



コンセプトの証明



私は概念の証明から始めることにしました。急いで最小限のプロトタイプ。

まず、要素ベースを決定する必要があります。



コントローラー



私のプロジェクトでは、主にSTM32を使用しています。それらは強力で、安価で、手頃な価格です。 STM32F042を選択しました。 USB(外部クォーツをハングアップさせないように特別な内部48MHzオシレーター付き)、32ビットコア、および必要なすべての周辺機器を備えています。そして、これらすべてを1ドル未満で。



次の繰り返しのためにワイヤレス接続を離れることにしました。



甲板上の



紐紐としてプラスチック製の葦を印刷し、バネ付きの電位差計に固定して偏向角を測定することにしました。



人間工学を評価するために、ソリッドでモデル化され、印刷されています。











触るとかなりいい感じでした。動作するはずです。



ネックセンサー



ギターは6本の弦と12本のフレットを備えているはずです。これは、ネックに合計72個のセンサー、デッキにさらに6個のセンサーです。各要素にチェックボタンを使用することもできますが、最初にクリックし、次にスライドやビブラトなどの手法を実装することはできません。押圧力も調べたいのですが。



ひずみ計がこの作業に最も適しているようです。それらは、作業領域への圧力に応じて抵抗を変化させます。







適切な数量で販売されているものを見つけるのは非常に困難であり、多くの費用がかかります。私はアリに注文しなければなりませんでした。



ADC



各センサーの状態を読み取るには、ADCが必要です。 STMには数個しかないため、78個のセンサーをポーリングするには別のものが必要です。外部マルチチャネルADCチップを使用できますが、高価すぎます。したがって、5つの安価な16チャネルアナログマルチプレクサCD74HC4067をインストールし、それぞれに1つのSTMADCチャネルを接続することにしました。



料金



ゲージに行くまで、ボードの配線を開始します。センサーのリード線は長いので、重ねる必要がありました。















プリント回路基板を注文する前に、ストレインゲージを待つことにしました。そして、結局のところ、無駄ではありませんでした。



80個のセンサーのうち、機能しているのはごくわずかで、パラメーターが異なります。







それらは、売り手のウェブサイトの画像とは著しく異なります。



そして、アリで電子機器を購入するとき、私は何を期待しましたか?..



そしてそれは私に夜明けしました。



結局のところ、タッチセンサーのように容量測定という別の検出方法を適用できます。それははるかに安く、より手頃な価格です。そして、メカニズムを正しく設計すれば、努力を決定することができます。



上手。行われたすべてを削除します。







最初からやり直す



ミニマルなコンセプトプルーフの新しいバージョンでは、4mmの銅棒から切断され、センサー要素としてボードにはんだ付けされたシリンダーを選択しました。



次に、78個のコンテナを測定する方法を理解する必要があります。



センサー



調査少しグーグルすると、タッチキーボードのコントローラーである多くのマイクロ回路があることがわかりました。その中で、安価な12チャンネルの汎用容量計を見つけることができました。ピコファラッド単位のスケールで容量を測定します。これは、次の変更で実装する予定の力測定回路には十分なはずです。

また、念のため、各ネックエレメントにボタンなどのシートを掛けました。そして、彼はあなたがシリンダーに触れるだけでなく、それを中に絞ることができるようにボードに切り欠きを作りました。さまざまな演奏テクニックを試すことができます。



マイクロサーキットはI2Cインターフェースを介して接続され、アドレスを設定する2つの構成ピンがあります。したがって、1つのバスに最大4つのマイクロ回路を吊るすことができます。そして、12が必要です。問題ありません。3つのグループに分けて、マルチプレクサを介してSTMバスに接続します。



ボード











今回はボードを注文し、その生産を待つことさえできました。



キット、銅製シリンダー、ポテンショメーターを密封した後、プラスチック製のひもを使ったデザインが複雑すぎることに気づきました。したがって、今のところ、同じセンサーシリンダーをデッキに掛けることにしましたが、より本物です。ボード全体をやり直さないように、小さなオーバーレイを作成して、2番目のI2CSTMバスに接続しました。







鉄片の準備ができました。次の仕事は彼女を遊ばせることです。



ソフトウェア



計画は次のとおりです。



  1. MIDIデバイスで動作してギターサウンドを生成できる仮想シンセサイザーをダウンロードします。
  2. センサーをポーリングし、結果をUSBカスタムHIDインターフェイスを介して1秒間に約100回コンピューターに転送するファームウェアを作成します。
  3. このデータを受信し、仮想MIDIデバイスをエミュレートし、MIDIパケットを生成して、それらを仮想シンセサイザーに送信するプログラムをpythonで記述します。


少し後で、すぐにMIDIデバイスのふりをする方法を見つけることにしました。



音を再現する方法は?



MIDIをサポートするWindows用の仮想シンセサイザーはかなりたくさんあります。 Abletonライブ、RealGuitar、FLスタジオ、Kontaktを試してみました。ギターのシンプルさと精度のためにRealGuitarに立ち寄りました。彼は、人間の演奏の不完全さを模倣する方法さえ知っています-弦の上で指を滑らせること、音符のランダム化されたパラメーター。







仮想シンセサイザーへの接続



pythonの場合、「loopmidi」midiケーブルの外部エミュレーターを介して仮想シンセサイザーの入力に接続できる仮想midiポートをエミュレートできるmidoライブラリを見つけることができました。







プログラムインターフェースでは、フィルター調整を簡素化するために、各センサーの測定された容量レベルをグラフィカルに表示しました。また、将来的には、LEDのコントロール、振動モーター(理由はまだわかりませんが、ギターにも搭載される予定です)、加速度計の視覚化、バッテリーの充電レベルを追加しました。







ギターの弦を叩いて正しい音を鳴らすには、フレットボード上の72個のセンサーすべてを適切な音にマッピングする必要があります。



12フレットの72の要素のうち、37だけがユニークなノートであることが判明しました。それらは特定の構造に従って配置されているため、大きなテーブルを作成する代わりに、センサー番号によって対応するノートの番号を与える簡単な方程式を導出することができました。







テスト



すべてが最初のテストの準備ができているようです。私は怠惰すぎてロッドを見て12フレットすべてをはんだ付けすることができなかったので、8番目に制限しました。真実の瞬間:





生きてる!コンセプトの実行可能性が確認されました。幸い、制限はありませんでした。しかし、あなたはリラックスすることはできません。



次のステップは、LED、加速度計、振動モーター、バッテリー、ワイヤレス、ケースを追加し、すべての一般的なプラットフォームでドライバーやミディエミュレーションプログラムなしで動作する機能を追加することです。



LED



84個のLEDを接続するために、14個の8ビットシフトレジスタの最も単純なデイジーチェーンを選択しました。それらをSTMのSPIMOSIピンに接続し、カーネルの関与なしにDMAを介してデータアレイを送信すると便利です。



加速度計加速度計



に特別な要件はなかったので、最も単純なLIS3Dを使用しました。これにより、ギターは地平線に対する傾きを決定します。これにより、手の動きで演奏しながらさまざまなサウンドフィルターを調整できます。



ワイヤレス



ワイヤレスデータ送信には、ESP32を配置することにしました。さまざまなBluetoothおよびWI-FIプロトコルをサポートしているため、実験することがあります(当時、私の場合、正しい接続方法が1つしかないことをまだ知りませんでした)。



本体



本体は折りたたみ式である必要があるため、デッキとネックの電子機器を2つのボードに分割し、リボンケーブルで接続する必要があります。



ネックのマグネットをデッキボードのホールセンサーに近づけて本体を開くと電源が入ります。



入門



さまざまな触覚ネックデザインとLEDディフューザーを使って多くの作業が行われてきました。タッチを検出してボタンを押す機能を維持しながら、要素の表面全体を均一に輝かせたいと思いました。







私は専門的に工業設計に従事している友人に目を向けました。ギターベンディングユニットのデザインを思いついた後、プロトタイプのボディをデザインしてプリントしました。







すべてが考え抜かれたようで、ボードの配線を開始できます。























MIDIデバイス



新しいバージョンでは、まず、USB経由で接続したときに、追加のプログラムなしでギターがMIDIデバイスとして検出されるようにしたかったのです。



これはそれほど難しいことではないことが判明しました。すべての仕様は公式ウェブサイトusb.orgにあります。しかし、Pythonアプリケーションの側で実行されたすべてのアルゴリズムは、コントローラーのCで書き直す必要がありました。



すべてのデバイスですぐに機能することに驚きました。 Windows 10、MacOS、Debian 9、Android(USBアダプター経由)。ワイヤーを差し込むだけで、「Sensy」という名前のMIDIデバイスがシステムに表示され、すべてのシンセサイザーによって認識されます。私はまだiPhoneでテストすることができませんでした。アダプターなし。しかし、それは同じように機能するはずです。







ワイヤレスインターフェース



次の課題は、物事をワイヤレスで行うことです。



怠惰すぎてすぐにググることができなかったので、さまざまなワイヤレスインターフェイスのテストに数日を費やしました。 BLEをすぐに却下しました。私の頭の中では、「低エネルギー」は低パケットレートと強く関連していました。クライアントモードでWI-FI、ホットスポットモードでWI-FI、SPPモードでBluetoothなどを試しました。どこでも同じ問題がありました-大きな遅延(片目あたり100ms以上)と時間内の不均一なパケット到着。これはゲームを不可能にしました。



私はあきらめて、携帯電話やコンピューターのUSBにくっついて、カスタムラジオを介してギターからデータを受信する別のドングルを作ろうとしていました。



しかし、偶然にBLEプロトコルの新しいバージョンの仕様に出くわし、最小接続間隔が7.5msであることがわかりました。これは、私の要件に完全に適合しています。



さらに、BLE MIDIプロトコルがあることが判明しました。これは、すべての新しいオペレーティングシステムでサポートされており、USBMIDIのようにドライバーなしで動作します。



唯一の問題は、このような低い接続間隔とBLE MIDIは、一般に比較的新しいプラットフォームでのみサポートされることでした。詳細はまだわかりませんが、利用可能なデバイスを使用したテストは成功しました。



一部の新しいiPhoneには、高品質のギターサウンドを生成できる仮想ガレージバンドシンセサイザーがプリインストールされています(そうでない場合は、App Storeから無料でダウンロードできます)。



ファームウェア



必要最小限の機能をすべて記述したので、STMフラッシュのサイズに正確に依存しました。 168バイトだけが空いたままです。明らかに、シリコンの神々が私を支持していたので、私は正しい方向に進んでいます。







コードの最適化をさらに深く掘り下げて、占有するメモリの量を大幅に削減することは可能ですが、次のバージョンでは、5セント高く、時間を無駄にしない、より厚いコントローラーを使用する方が簡単です。さらに、他にどのような機能を追加したいかがわかりません。

ただし、最小限の機能では不十分であり、ゲームのテクニックを使用する必要があります。まず、スライドを実装したいと思います。これは、特定のクランプされたフレットでノートを再生し始め、フレットボードに沿って手をスライドさせ、フレットからフレットにジャンプするときです。



私はすでにUSBを楽しんでいるので、それに関連するすべてのコードと空きメモリをコメントアウトできます。ワイヤレスでテストすることもできます。





すべてのLEDが点灯しているので、暗い洞窟で迷子になった場合にギターを使用できます。







このデザインの欠点は何ですか?



  1. センサーでは、圧力はどこでも測定されません。これには3つの問題が伴います。

    • デッキとフレットボードの両方で、隣接するストリングのランダムなストライキが常にあります。これはゲームを非常に挑戦的にします。
    • 再生されるすべてのノートは同じ音量で再生されます。ほとんどの被験者はこれに気づいていませんが、もっと本物のギターに近づけて演奏したいと思います。
    • ハンマーオン、プルオフ、ビブラトテクニックを使用できない
  2. 単色LED。これにより、タブ譜を再生するときの明瞭さが制限されます。ゲームのさまざまな方法をさまざまな色で示したいと思います。
  3. . – . , , , .
  4. . , , , .
  5. . , .


.



STM32F07シリーズコントローラーに移行します。すでに128KBのフラッシュがあります-これはどの機能にも十分です。そしてイースターエッグにも。



ギターの最終バージョンでESP32を使用すると大胆すぎるので、もっと正統なものを探しに行きました。選択は、アクセス可能性、ドキュメントの可用性、およびサイトの適切性の観点からNRF52に当てはまりました。



もちろん、3つの主要なイノベーションも実装されます。



  • LEDはRGBになり、
  • バーの各センサーで力の測定が行われます(タクトボタンは不要になりました)、
  • 響板の弦が動きます。


現時点では、デッキボードは次のようになっています(念のため、ESPフットプリントを残しました)。





このプロジェクトはSensy呼ばれ、現在活発に開発されています。計画されているすべての機能が実装されるという完全な確信がすでにあるため、さらなる開発が決定されました。



私たちはサンクトペテルブルクにいます。現在、チームは2人で構成されています。私は技術的な部分、パートナー、つまりマーケティング、財務、法的な問題を扱っています。



読者の中に、船体設計やモバイル開発の分野でプロジェクトに参加したいジェダイがいる場合は、いつでもどこでも私に書いてください。



プロジェクトのニュースをフォローすることに興味がある人-サイトにフォームにメールを残し、ソーシャルネットワークに登録します。



コメントや提案でHabrasocommunityからのフィードバックを本当に望んでいます!



開発プロセスからの面白いエピソード
NRF52, UART. . , , , .



– «N» ascii. 0x4E, . – «O». . baud rate? , – «N». , «NON GENUINE DEVICE FOUND».



NRF- ? . , ? - . , NON GENUINE DEVICE?



, , ftdi , USB-UART , . , . , .



.



清聴ありがとうございました!



All Articles