私たちの世界が没入型の現実に向かってどのように動いているのか疑問に思ったことはありませんか。バーチャルリアリティ、複合現実、拡張現実などを使用して周囲と対話するための新しい方法と方法を継続的に見つけています。これらの高速ペーシングテクノロジーを備えた新しいデバイスが毎日登場し、新しいインタラクティブテクノロジーに感銘を受けています。
これらの没入型テクノロジーは、ゲーム、インタラクティブアクティビティ、エンターテインメント、その他多くのアプリケーションで使用されています。このチュートリアルでは、退屈なマウスを使用する代わりに、システムと対話するための新しい方法を提供する、このような対話型の方法について説明します。私たちのゲームオタクは、数年前に任天堂のゲーム会社がWiiコントローラーと呼ばれるハンドヘルドコントローラーの助けを借りてコンソールと対話するための3Dインタラクティブメソッドのアイデアを売り切れたことを知っている必要があります。これは、使用するゲームのためにあなたのジェスチャーを見つけて、ワイヤレスシステムに送信するために加速度計を。このテクノロジーについて詳しく知りたい場合は、特許EP1854518B1を確認してください。これにより、このテクノロジーがどのように機能するかを完全に理解できます。
このアイデアに触発されて、コンソールを空中で動かすだけでシステムと対話する「エアマウス」を作成しますが、3次元座標参照を使用する代わりに、2次元座標参照のみを使用するためです。マウスは2次元のXとYで動作するため、コンピューターのマウスの動作を模倣できます。
このワイヤレス3Dエアマウスの背後にある概念は非常に単純です。加速度計を使用して、x軸とy軸に沿った「エアマウス」のアクションとモーションの加速度の値を取得し、の値に基づいて加速度計は、コンピューター上で実行されているpythonソフトウェアドライバーを使用して、マウスカーソルを制御し、特定のアクションを実行します。
前提条件
- Arduino Nano(任意のモデル)
- 加速度計ADXL335モジュール
- BluetoothHC-05モジュール
- ボタンを押す
- Pythonがインストールされたコンピューター
コンピューターにPythonをインストールする方法の詳細については、Arduinoの前のチュートリアル-Python LEDControllingに従ってください。
回路図
手の動きでコンピューターを制御するには、X軸とY軸に沿って加速度を出力する加速度計が必要です。システム全体をワイヤレスにするには、Bluetoothモジュールを使用して信号をワイヤレスでシステムに転送します。
ここではADXL335加速度計が使用されています。これは、X、Y、およびZ軸に沿った加速度を出力するMEMSベースの3軸モジュールですが、マウスを制御するために前述したように、X軸とY軸に沿った加速度のみが必要です。 。以前のプロジェクトでArduinoでADXL335加速度計を使用する方法の詳細:
- GPS、GSM、加速度計を使用したArduinoベースの車両事故警報システム
- Arduinoと加速度計を使用したピンポンゲーム
- Arduinoを使用した加速度計ベースのハンドジェスチャ制御ロボット
- Arduinoを使用した地震検知器アラーム
ここでは、加速度計のXoutピンとYoutピンがArduinoのAnalog、A0、A1ピンに接続されており、Arduinoからシステムに信号を送信するためにBluetoothモジュールHC-05が使用されます。BluetoothはTxとRxで動作するためです。ピン接続なので、ソフトウェアのシリアルピンD2とD3を使用します。 Bluetoothをハードウェアシリアルに接続し、Pythonコンソールで読み取り値を取得し始めると、Bluetoothが独自のボーレートでPythonと通信するため、不一致のボーレートのエラーが表示されるため、ソフトウェアシリアルを使用して接続されます。 Arduinoを含むさまざまなマイクロコントローラーを使用してさまざまなBluetoothベースのプロジェクトを実行することにより、Bluetoothモジュールの使用について詳しく学びます。
以下の画像に示すように、ここでは3つのプッシュボタンを使用しました。1つはAirマウスをトリガーするためのもので、もう2つは左クリックと右クリックのためのものです。
エアマウスのプロセスフロー
フローチャートは、Arduinoベースのエアマウスのプロセスフローを示しています。
1.システムは、押されていないまで、押されている機械的トリガーを継続的にチェックします。コンピューターのマウスで正常に動作します。
2.システムがボタンの押下を検出すると、マウスの制御がエアマウスに移ります。
3.トリガーボタンが押されると、システムはマウスの読み取り値をコンピューターに転送し始めます。システムの読み取り値は、加速度計の読み取り値と、左クリックと右クリックの読み取り値で構成されます。
4.システムの読み取り値は、1バイトまたは8ビットのデータストリームで構成されます。最初の3ビットはX座標で構成され、次の3ビットはY座標で構成され、最後から2番目のビットは取得するためのステータスビットです。マウスの左クリックのステータスと最後のビットは、右クリックのステータスを取得するためのステータスビットです。
5.最初の3ビットの値、つまりX座標の範囲は100 <= Xcord <= 999ですが、Y座標の値の範囲は100 <= Ycord <= 800です。右クリックと左クリックの値は、0または1のバイナリ値であり、1はクリックが行われたことを示し、0はユーザーがクリックを行わなかったことを示します。
6.ボタンのバウンスがカーソルの位置に影響を与えないようにするために、マウスのトリガーボタンをクリックするたびに4秒の既知の遅延が保持されます。
7.エアマウスの右クリックと左クリックでは、最初に左または右のプッシュボタンを押す必要があります。その後、トリガーボタンを押して、エアマウスの目的の位置に移動する必要があります。
エアマウス用のArduinoのプログラミング
Arduinoは、X軸とY軸の加速度値を読み取るようにプログラムする必要があります。完全なプログラムは、以下の、最後に指定されたコードからの重要な抜粋です。
グローバル変数の設定
前に述べたように、Bluetoothモジュールをソフトウェアのシリアルピンに接続します。したがって、ソフトウェアシリアルを設定するには、ソフトウェアシリアルのライブラリを宣言し、TxとRxのピンを設定する必要があります。Arduino NanoとUnoでは、ピン2と3はソフトウェアシリアルとして機能します。次に、ソフトウェアシリアルライブラリからBluetoothオブジェクトを宣言して、TxとRxのピンを設定します。
#include
ボイドsetup()
では 、セットアップ 機能、我々は、彼らが入力または出力として機能するかどうかをプログラムに伝えるために、変数を設定しようとしています。トリガーボタンは入力プルアップとして設定され、左クリックと右クリックは入力として宣言され、入力プルアップとして機能するように高に設定されます。
また、シリアルおよびBluetooth通信のボーレートを9600に設定します。
void setup() { pinMode(x、INPUT); pinMode(y、INPUT); pinMode(trigger、INPUT_PULLUP) pinMode(lclick、INPUT); pinMode(rclick、INPUT); pinMode(led、OUTPUT); digitalWrite(lclick、HIGH); digitalWrite(rclick、HIGH); Serial.begin(9600); bluetooth.begin(9600); }
ボイドループ()
システムにデータストリームを送信する必要があるときを通知する トリガーボタン が必要になるため、コード全体 を whileループ内に設定します。これにより、プルアップトリガーのデジタル状態が低くなると、継続的に監視されます。処理のためにさらに渡します。
私たちは私たちがトリガーボタンが押されたときのためのシステムの状態を知らせるLEDを添付しているように、我々は最初の外に低いにつながっ設定し ながら、 内部のそれのデフォルトの状態と高いとしてループ しばらく ますループLEDを点灯しますトリガーボタンが押されたときはいつでも。
左クリックボタンと右クリックボタンのステータスを読み取るために、値が最初に0に設定された2つの変数 lclick と rclick をグローバルに宣言しました。
そして、 ループ内で 、左右のクリックボタンのデジタルステータスに応じてこれらの変数の値を設定し、ボタンが押されているかどうかを確認します。
私たちは、 analogRead 関数を使用して加速度計のXおよびY出力ピンの値を読み取り、それらの値を画面サイズにマップして、マウスポインターを画面全体で移動させます。画面サイズは画面のピクセルであるため、それに応じて設定する必要があります。出力値を3桁にする必要があるため、Xの範囲を意図的に100 <= X <= 999に設定し、同様にYの値は100 <= Y <= 800です。ピクセルは左上隅から読み取られていることを思い出してください。つまり、左上隅の値は(0,0)ですが、xとyに3桁を宣言しているため、値は点(100,100)から読み取られます。
さらに、シリアルモニターおよびBluetoothを介してシステム上で値を取得するのに役立つ Serial.print および bluetooth.print 関数を使用して、シリアルおよびBluetooth上の座標の値とクリックのステータスを印刷します。
最後に、ボタンのバウンスにより、単一の値が繰り返され、マウスカーソルが単一の位置にとどまる可能性があるため、これを取り除くには、この遅延を追加する必要があります。
void loop() { digitalWrite(led、LOW); while(digitalRead(trigger)== LOW) { digitalWrite(led、HIGH); lstate = digitalRead(lclick); rstate = digitalRead(rclick); xh =アナログ読み取り(x); yh =アナログ読み取り(y); xcord = map(xh、286,429,100,999); ycord = map(yh、282,427,100,800); Serial.print(xcord); Serial.print(ycord); if(lstate == LOW) Serial.print(1); else Serial.print(0); if(rstate == LOW) Serial.print(1); else Serial.print(0); bluetooth.print(xcord); bluetooth.print(ycord); if(lstate == LOW) bluetooth.print(1); そうしないと bluetooth.print(0); if(rstate == LOW) bluetooth.print(1); else bluetooth.print(0); delay(4000); }}
Pythonドライバースクリプト
これで、ハードウェアとそのファームウェアの部分が完了しました。エアマウスを機能させるには、エアマウスからの信号をカーソルの動きにデコードできるドライバースクリプトが必要です。そのため、これを選択しました。 Python。Pythonはスクリプト言語であり、ここでスクリプトを作成することは、ここではマウスカーソルを制御しているため、他のプログラムを制御するのに役立つことを意味します。
したがって、Pythonシェルを開き、以下のコマンドを使用して次のライブラリをインストールします。
pipinstallシリアルpipinstall pyautogui
シリアルは 、このようなCOMポートなどのシリアルインタフェースからデータを取得するために私たちを助け、また一方で、私たちがそれを操作することができますPython用のライブラリです pyautoguiは Pythonは、この場合には、マウスをGUIの機能の制御を取得するためのライブラリです。
次に、ドライバーのコードを見てみましょう。最初に行う必要があるのは、シリアルライブラリとpyautoguiライブラリをインポートすることです。次に、シリアルライブラリから、ボーレート9600の通信用のcomポートを設定する必要があります。 Bluetooth.serial がで動作して いるの と同じです。このためには、Bluetoothモジュールをシステムに接続する必要があります。次に、システム設定で、接続されているCOMポートを確認する必要があります。
次に、Bluetoothからシステムへのシリアル通信を読み取り、それを継続的に継続するために、while1を使用して残りのコードを継続的なループに保ちます。
前に述べたように、Arduinoは8ビットを送信しています。最初の6ビットは座標用で、最後の2ビットはクリックボタンのステータス用です。したがって、 ser.read を使用してすべてのビットを読み取り、その長さを8ビットに設定します。
次に、カーソル座標とクリックのビットをスライスして分割し、さらにカーソルビットをX座標とY座標に別々にスライスします。左クリックと右クリックについても同じことが言えます。
通信から、バイト文字列を取得し、座標に収まるように整数に変換する必要があります。これは、デコードしてから整数に型キャストすることで行います。
ここでカーソルを移動するには、pyautogui moveto 関数を使用します。 この 関数は、引数としてこれらの整数座標を取り、カーソルをその位置に移動します。
次にクリックをチェックします。これは最後の2ビットとpyautoguiのクリック関数を使用して行います。デフォルトのクリックは左ですが、ボタンの値を右に宣言することで右に設定できます。クリック数を次のように定義することもできます。 clicksパラメータを2に設定して、ダブルクリックに設定します。
以下は、コンピューターで実行される完全なPythonコードです。
import serial import pyautogui ser = serial.Serial( 'com3'、9600) while 1: k = ser.read(8) cursor = k click = k x = cursor y = cursor l = click r = click xcor = int(x.decode( 'utf-8')) ycor = int(y.decode( 'utf-8')) pyautogui.moveTo(xcor、ycor) if l == 49: pyautogui.click(clicks = 2) elif r = = 49: pyautogui.click(button = 'right'、clicks = 2)
Arduinoエアマウスのテスト
したがって、エアマウスを操作するには、電源を接続します。Arduino Nano USBスロットから、または7805ICを使用した5V安定化電源から入手できます。次に、Bluetoothが接続されているCOMポートを設定して、Pythonドライバースクリプトを実行します。スクリプトを実行すると、Bluetoothの点滅にタイムラグが表示されます。これは、Bluetoothがシステムに接続されていることを意味します。次に、それを操作するためにトリガーボタンをクリックすると、座標の位置が変わることがわかります。左または右クリックが必要な場合は、最初に左または右のプッシュボタンとトリガーボタンを同時に押すと、クリックのアクションが表示されます。カーソルの変更された位置。
以下の詳細な作業ビデオを確認してください。