手袋を集めて自分の手の位置を決定します

この記事では、グローブを集めてコンテストの手の位置を決定する方法について説明します。 もちろん、その製造には困難がありますが、小学生でも組み立てることができます。 このようなグローブは、電子機器の制御とさまざまなゲームのマニピュレーターの両方に使用できます。







スキャナーの記事を読んだ人は、おそらく私が続けることを約束したことを覚えているでしょう。 しかし、競争のために、私はまだこれのための時間がありません。 しかし今、私は競争の後に座って、私たちのプロジェクトの一部に関する記事を書いています。 展示会では、このデバイスの動作原理について話をするように頼まれた後、彼らは連絡先を求め、それから私は記事を書いて二人以上の問題を解決することを決めた。 最初は、この手袋を使用して電子機器を制御しました(ジェスチャを使用してインターネット上でケトルをオンにしました)が、今ではそれを使用して手の位置を追跡します。 これが全体の紹介です。



動作原理



ジェスチャーグローブはいくつかのタイプに分けることができます(私は何かをスキップできます)。



1)ひずみゲージについて

まあ、これは最も簡単です。 ひずみゲージは、2つの接点が伸びるストリップです。 特定のストリップを伸縮させると、抵抗が変化します。 このようなセンサーを使用して各可動ジョイントを装着すると、利益が得られます。 しかし、これらのひずみゲージは非常に高価であり、曲げの方向を決定することは不可能であり、テープ自体にはまともな長さ(指の長さ)があります。



2)「LEDチューブ」

もうおもしろい。 一番下の行はこれです:シリコンまたはゴム製のチューブが取られ、LEDがチューブの一端に設置され、フォトレジスタ/トランジスタが他端に設置されます。 このようなセンサーを強く曲げるほど、光センサーに入る光が少なくなり、それに応じて抵抗が増加します。 そのようなセンサーは一桁安くなります。 ただし、同じ欠点があります。曲げることは不便であり、曲げの方向を判断することはできません。



3)方位センサー

これは、さまざまな加速度計、ジャイロスコープ、磁力計、およびそれらのさまざまな組み合わせを意味します。 このようなセンサーのコストは非常に多様であり、それらをプログラミングするときに主な問題が発生します。 私が手袋をつけたのはこれらのセンサーです。



LIS331センサーを選択しました。 これは、8ビットの3軸加速度計です。 小売店で30ルーブルの価値があったからです。 一般に、このようなセンサーを使用したのはこれが初めてだったので、「このセンサーを捨てたら、ごめんなさい」と決めました。

加速度計から、センサーの3つの軸に沿った加速度ベクトルの分解を取得します。 加速はどこから来ますか? まあ、宇宙からのように-地球の重力の加速は私たちに影響を与えます。 ここでは、このセンサーのマイナスについて言及する必要があります。この同じベクトルは、手ぶれから変動するため、出力に高周波干渉があります。 しかし、ジェスチャを判別するには、手がほとんど動いていないときに使用できます。

実際には、これが全体のタスクです。可動骨ごとにセンサーを取り、それをマイクロコントローラーに接続し、センサーの位置を見つけ、ジェスチャーを決定します。 しかし、ここにはありませんでした...



センサーボード



まず、このセンサーをはんだ付けする必要があります。 あなたはよくはんだ付けすると思いますか? 満たす(写真のグリッドピッチ0.5 mm):







LGA16。 彼はあなたに会えてうれしいです。 はんだ付けステーションを買わなければならなかったのは彼のためだった。 私はSMDが大好きです。 詳細はそれぞれ小さく、スカーフも小さくなります。 しかし、これは...一般に、今、MPU-9250をはんだ付けした後、私はそれが景品だと言います、そしてそれは本当のものでした。 まあ、少なくとも殺すことは残念ではありません。 ボードをトレースするためのプログラムで武装して、ボードを描きます。 まず、チップ用のパッド。 はんだ付けの際の親友は、表面張力です。 はんだ付けするとき、この力がマイクロ回路を所定の位置に落とします。 したがって、サイトを非常に長くする必要があります。そうしないと、マイクロ回路が同じ表面張力を横に引きます。 データシートからすべてのサイズを取得します。 ジャンパーなしでは1つのレイヤーでそれを行うことはできませんでした。 配線では、赤い線で示されています。 そこにループをはんだ付けするための広い領域。 これらのパッド間のピッチは2.54 mmであり、これらのパッドは超小型回路の上下に配置されるため、配線間のピッチが1.27 mmのループが理想的です。 結果はそのようなボードです:







そして、はんだ付け後のセンサーは次のとおりです。







写真はテーブル混乱をはっきりと示しており、結論のステップについて話したときに私が念頭に置いていたことについて謝罪しました。 ループの幅はボードの幅にほぼ等しいため、見た目は悪くありません。 ただし、ボードを作成してエッチングする必要があります。 料金はLUTによって簡単に作られ、私は過酸化水素で中毒を起こしています。 最良の結果を得るには、電気モーターを使用してソリューションでボードを転がします。 1枚のファイバーグラス上にボードの配列をすぐに作成できます。 これにより、製造プロセスが大幅にスピードアップします。 エッチング後、私たちは料金を受け取り、この段階で問題が始まります...



はんだ付け



このプロセスは、説明するのにまったく役に立ちません。 ビデオを一度見たほうがいいです。 必要な6個のセンサーをはんだ付けする前に、8個のセンサーを絞ったと言います。 まあ、これを初めてはんだ付けするとき、あなたは許すことができます。 LGAケースのはんだ付けに関するビデオは検索エンジンで簡単に見つけることができるので添付しません。また、次のケースでインターネットを詰まらせたくありません。



別の便利なライフハック:いくつかのトレイ/天板/プレート/盆地にヘアドライヤーを付けてはんだ付けします。 マイクロチップはドライヤーで吹き飛ばされ、それらを探すことはほとんど役に立たない。



センサーを密閉した後、ループをはんだ付けします。ジャンパーのはんだ付け、ループのはんだ付けの解除、ジャンパーのはんだ付けを忘れてしまったことを忘れないでください。



マイコンボード



これはあなたのビジネスであり、MKが使用します。 ここでは、ちょっとしたトリックについて説明しますが、それは何らかの理由で忘れられます。 また、一部のボードではすでに十分ではないマイクロコントローラーの足を保存することができます。 そして、このトリックはロジックと呼ばれます。 たまたま女性であるものではなく、74HCで始まるもの。 特に74HC164に興味があります。 これはシフトレジスタです。 とても簡単に機能します。 彼には、データ、クロック、リセット、結論があります。 データとクロックを介して、8ビットを順番に送信し、レジスタが同時に結論に出力します。 リセットを使用すると、すべての出力を0に設定できます。実際には、加速度計の有効化脚をこの超小型回路に接続し、1つの超小型回路を使用して8つの加速度計を制御します。 ただし、必要なのは5つだけなので、残りの2つはLEDで占有できます。 それは美しいハイライトになります。 しかし、バグがあります。マイクロ回路をリセットすると、0が「LEDビット」に書き込まれます。データをかなり速く書き込むため、この点滅は輝度の低下のように見え、エンジニアを緊張させる可能性があります。 実際、グローブの一般的なブロック図は次のようになります。







プログラミングするときは、イネーブルレッグ(別名CS)に論理ゼロがある場合にマイクロ回路が選択されることも覚えておく必要があります。 したがって、2番目の加速度計を選択するには、レジスタに01000000ではなく10111111を書き込む必要があります。



プログラミング



加速度計とのデータ交換は次のように行われます。

0ビット-R / Wビット。 1の場合、データを読み取り、0の場合、センサーに書き込みます。

1〜7ビット-使用するレジスタのアドレス。

8-15ビット-レジスタに書き込むデータ。 読んだ場合、加速度計は単にそれらを無視します。



これですべてが明らかな場合は、最初にレジスタWHO_AM_Iを読み取ります。 このレジスタは読み取り専用であり、そのデフォルト値はデータシートに記載されています。 加速度計の場合、このレジスタは0x0Fにあり、デフォルト値は0x3Bです。 つまり、最初に0x8Fを加速度計に送信し、次に8ビットを送信し、0x3Bを考慮する必要があります。 あなたが何か他のものを読んだら、どこかで横棒。 はんだ付け、間違ったデータの送信、またははんだ付け中のチップの過熱のいずれか。 たぶん、速度が高すぎます。 また、CS脚を地面に引いて戻すことを忘れないでください。 正しいデータを受信した場合は、祝福できます。4つのセンサーのみをはんだ付けしたままです。 次の図が表示されます。







5つのセンサーすべて(各指に1つ)を密閉した後、それらを手袋に取り付けます。 これにはホットグルーを使用しました。 これが判明しました:







マイクロ回路からデータの受信を開始するには、オンにする必要があります。 これを行うには、CTRL_REG2レジスタのBOOTビットを1に設定し、値0xC7をCTRL_REG1レジスタに書き込みます。 1つ目は加速度計の再起動、2つ目は省電力モードからのセンサーの出力、400Hzのサンプリング周波数の設定、3つの軸すべての組み込みです。

x、y、およびz軸からのすべてのデータは、それぞれアドレス0x29、0x2B、および0x2Dのレジスタに書き込まれます。 データを取得するために、それを読み取るだけです(読み取った場合、最初の送信の0ビットが1であることを忘れないでください)。 キャッチ付きのもう1つの「if」を次に示します。データを読み取り、ゼロがあり、コードが確実に機能し、正しい場合は、加速度計の名前を注意深く確認します。 LIS331DLではなく、LIS331DLHが存在する場合があります。 この手紙は何を与えますか? また、センサーは16ビットであるため、多くの設定があります。 このため、レジスタのアドレスが変更されます。 私はこの横棒を見つけるために4時間も殺しました。 残念でした。 しかし、あなたがすべてを正しくしたと仮定します。 次に、ターミナルでそのようなゴミを取得します。







そのような加速がテーブルの上に平和的に横たわっている加速度計に作用することは疑わしい。 おそらくすべてが干渉です。 いや、まあ、私たちは30ルーブルに何を望んでいましたか? どうにかしてそれらを取り除く必要があります。 このためにはフィルターが必要です。 それを実装する最も簡単な方法はソフトウェアです(センサー内にはフィルターがあるようですが、何らかの理由で機能しませんでした)。 単純にsimplyいように見えます:新しい値=古い値+測定値*係数。 カットオフ周波数は、独自のタスクのために選択する必要がある係数に依存することは明らかです。



ジェスチャー定義



最も単純なケースでは、受け入れた数字の符号を見ることができます。 5本の指の配列を取得し、この配列をコンピューターに送信します。 たとえば、指が曲がっている場合は1、まっすぐになっている場合は0です。たとえば、11011です。これは、最初のグローブで実装されたものです。 しかし、傾斜角を決定することは非常に現実的です。 これを行うには、2つの軸に沿った加速度の比率のアークタンジェントを取得し、これらの軸がある平面に沿った傾斜角を取得します。 3組の軸に対してこれを行うと、3軸に沿った傾斜角を見つけて、3次元空間でセンサーの位置を復元できます。 しかし、私は誰もそれを必要としないと思います。 タスクがそれを必要としないからでも、そのようなタスクには6軸センサー(加速度計+ジャイロスコープ)またはさらに優れた9軸(加速度計+ジャイロスコープ+磁力計)を使用する必要があるからです。 しかし、彼らははるかに高価であり、それらを扱うことはすでにいくらか複雑です。



おわりに



この記事のようなものを集めたい人が助けてくれることを願っています。 私はその時に助けていただろう。 現在、私たちはすでにこのグローブで1つのコンペティションに勝ち、さらに9軸センサーで新しいグローブを作成しました。 確かに、私は磁力計が私のために機能しなかったが、誰もそれについて知らないことを秘密にあなたに話します。 グローブはそれがなくてもかなりうまく機能するので、私は安価な6軸センサーを買いたいです。 現在、コンテストは近い将来に予定されていないので、約束したとおり、3Dスキャナーに関する2番目の記事を書きます。



PSセンサーのボードレイアウトを実際に添付するのを忘れました:

SprintLayoutのボード



All Articles