タグ付けされた質問 「real-time」

9
膨大な数のアナログセンサーをリアルタイムで読み取る
ギターのような首を持つMIDIのようなコントローラーを構築しようとしています。その首には、圧力センサーの巨大なマトリックスがあります。コントローラーは3つのストリングをエミュレートします。 これが機能する方法は次のとおりです。電源(3.3Vまたは5V、おそらく今のところは問題ありません)に接続されている3枚の長尺の両面銅テープ(首まで幅0.5 cm)があります。これらのストリップには、圧力に基づいて抵抗率を変化させるベロスタットの層があります。ベロスタットの上部には、何かに接続された銅テープの列またはセルの別の層があり、ベロスタット層を介して電圧の読み取り値を吐き出します。首の長さは約40 cmなので、少なくとも80列あります。 首に沿ったチャートの列として銅テープの下部の3つのストリップを想像すると、センサーは測定方法に応じてセルまたは行のいずれかになります(列を多重化することもできると思ったので、ただし、これを簡単にする特別な条件がいくつかあります。これはギターのようなコントローラーなので、すべての相互作用を測定する必要はありません。コントローラーの本体に最も近いタッチのみが重要です。また、8ビットの解像度でも十分に正確である必要があります。とにかく、255の圧力レベルはおそらく必要以上です。 難しい部分: 測定は、ハンマーオンなどを検出するのに十分なリアルタイムyである必要があります(サンプルレートをどれだけ高くする必要があるかわかりません-良好な測定と再生可能性のために数kHzで推定)およびコントローラーのデジタル出力はMIDI(3つの独立したチャンネル-文字列ごとに1つ)またはRaspberry Piで処理できるデジタル信号。 今、私の知識は本当に限られているので、仕事に適したツールを考えることができませんでした。しかし、私が知っていることは、それは可能です。非常によく似た手法を使用する同様の異なるコントローラーがあります(私が気づくまで、実際にリバースエンジニアリングしました。特許があり、その方法に関する情報は思ったほど難解ではありません)、それはROLIと呼ばれますシーボード。 TL; DR: 約240個のセンサー 同じ回線で動作する80のグループに分離できます これはリアルタイムのアプリケーションです。タッチされるたびにすべてのセンサーから圧力を取得する必要があります(いくつかの条件が適用されます。上記を参照) 事前に感謝します、私はそれが読むことがたくさんあることを知っています。私はどんな提案にも感謝しており、あなたが私が作り出すために着手した恐ろしい混乱を達成するのを手伝うことができれば非常にうれしいです! 私がこれまで考えてきたこと: 行と列を多重化し、MCP3008以上のADCで各セルを読み取り、位置信号の最小の相互作用のみを最終信号にプッシュする(デイジーチェーンまたはツリーのような)ATmegas通信のオーバーヘッド。また、初期のモデルにはリボンポテンショメータが含まれていましたが、デザインが悪い(何度か試行しましたが、十分にクールではなかった)ため、私はそれを破棄しました。 編集/更新: これまでのところ良い提案をありがとう!彼らのおかげで、問題をより明確に表現できるようになりました。 80行×3列の圧力センサーのマトリックスがあります。人間がセンサーマトリックスと対話しているとき、近接している複数のセンサーがタッチを検出しますが、これは列に沿っている場合のみです。カラムは機械的に分離されています。センサーの抵抗は100Ω〜1kΩです。これらのセンサーはすべて、8ビットの深さで読み取り、処理する必要があり、結果は少なくとも1 kHzのレートで送信する必要があります。したがって、1回の読み取り/処理にかかる時間は1ミリ秒未満である必要があります。列ごとの最終出力は、float32では4バイト、uint8では1バイトである必要があります。float32は、列に沿った最初のインタラクションの平均位置を示します。相互作用は、特定のしきい値を超える圧力を持つセンサーの連続クラスターとして定義されます。これが処理がミックスに入る場所です:読み取り値がしきい値を超えるまで、列は下方向に走査されます。これは、インタラクションの開始としてカウントされます。すべてのセンサーの圧力と位置は、最初のセンサーまで記憶され、最大(おそらく)最大4つの連続センサーでしきい値を下回ります。記録された相互作用のすべてのセンサーから、2つのセンサーのみが処理されます-最高圧力(最低抵抗)を読み取るセンサーと、そのすぐ上または下にある最高センサー。浮動小数点位置は、圧力で重み付けされた2つのセンサー位置を平均することで計算されます。相互作用の全体的な圧力は、0と255の間にクランプされた両方の圧力を加算するだけです(unit8の両方の圧力をuint16に追加し、丸めることなく2で除算し、不要なビットを破棄します-これは高速です)。これはすべての列で発生する必要があります。15バイトのサイズの結果は、SPIを介して、シンセサイザーとして機能する小さなコンピューター(Raspberry Pi B3)に送信されます。私は、送信方法については設定されていません。SPIが仕事にふさわしいツールではない場合、Raspberry Piで処理できる通信の方法を採用しても構いません。これは音楽とインタラクティブなアプリケーションであるため、レイテンシは非常に重要です。 私の正確な質問は次のとおりです。これは、銀行を壊すことなく単一のマイクロコントローラーで解決できますか?趣味のプロジェクトのために数百ドル相当のICを買う余裕はありません。どのハードウェアをお勧めしますか?警戒する必要がある非自明な警告はありますか? これまでの回答から得たアプローチは、各列に個別に電力を供給し、SPIを介してArduinoに接続された5つの16チャンネルADC(ADS7961)で行を読み出すことでした。これは、最も簡単で安価なアプローチではないか、1 kHzを超えるレートに達するのに十分な速さではないのではないかと心配しています。 免責事項:私は通常、理論化学者であり、電気工学に関しては恐ろしいアマチュアです。私が知っていることはすべて自習であり、専門的なバックグラウンドがありません(これが私がより知識のある人々から助けを求めている理由です)。しかし、私はソフトウェアに関する私のやり方を知っています。ソフトウェアに関することなら何でも、十分な時間をかけて考えます。また、私はドイツ人ですので、時折文法の欠陥を許してください。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.