スマートフォン制御マウス
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 |
アプリとオンラインサービス
> |
| |||
| ||||
|
このプロジェクトについて
このプロジェクトは、ジョイスティックを使用してPCカーソルを制御した以前の作業と似ています。主な違いは、カーソルを移動したり、画面をスクロールしたり、通常のトラックパッドと同じように左右にクリックしたりするための2つの仮想ジョイスティックを含むスマートフォンアプリケーションを作成したことです。
作業中
このプロジェクトには、ジョイスティックのx軸とy軸のデータ、スクロールステータス、Bluetoothを使用した左クリックと右クリックのステータスをHC-05Bluetoothモジュールに接続されたArduinoUnoに送信するスマートフォンアプリケーションが含まれます。 Arduinoに受信されたこれらのデータは、現在のカーソルの位置を変更して新しい位置を取得するように操作されます。結果のデータは、スクロールとボタンのステータスとともに、Pythonスケッチによって読み取られると認識される出力として出力されます。 Pythonスケッチは、マウスモジュールを使用してマウスアクションを実行するために作成されています。
<図>
アプリケーションについて
スマートフォンアプリケーションは、MIT-AppInventorを使用して作成されます。必要なアプリケーションを構築するために必要なブロックを追加するだけでよいため、アプリの作成は簡単です。それらの作成については、Tabletoproboticsチュートリアルを参照しました。アプリケーションのメイン画面は次のとおりです-
<図>主な情報をHC-05モジュールに送信する前に、アプリケーションは最初に情報の開始を示す1バイトの番号(255)を送信します。データ転送の順序は次のとおりです-
1.開始を示すために「255」を送信します
2.1バイトのジョイスティックのx軸値を送信します
3.1バイトのジョイスティックのy軸値を送信します
4.左クリック、右クリックボタン、スクロールステータス(1バイト)のステータスを送信します。
アプリケーションからのデータは、20ミリ秒ごとにArduinoUNOに送信されます。
Arduinoの側面
アプリケーションからのデータバイトは、HC-05Bluetoothモジュールの助けを借りてArduinoによって受信されます。 Arduinoには、カーソルの現在の座標が含まれています。ここで、x座標の範囲は0〜1279、y座標の範囲は0〜799です。Python関数 mouse.get_position()
からこれらの極端な座標を取得しました。 カーソルを移動したときに座標を返します(メインスケッチでは使用されません)。
ジョイスティックを動かしたときに受け取ったデータに基づいて、現在のカーソルの位置(x座標とy座標)にアプリケーションが受け取ったデータを加算/減算して、カーソルを新しい目的の座標に移動します。最終的なデータは、以下に示す順序でシリアルモニターに印刷されます。
<図>次のデータシーケンスは、Pythonプログラムによって最終的に読み取られて実行されます。このために、以下の手順で追加のモジュール、つまりマウスとpyserialをダウンロードする必要があります。
Pythonプログラミング
ユーザーは、ラップトップ/コンピューターにpython3をインストールする必要があります。こちらからダウンロードできます。
(Windowsの場合)
インストール後、Pythonファイルの場所のパスをコピーします。
<図>コマンドプロンプトで次の手順を実行します。コマンドプロンプトを開き、次のように入力します-
1. cd
2. py –m pip install –-upgrade pip
3. py –mpipインストールマウス
4. py -m pip install pyserial
マウス モジュールは、マウスアクションと pyserial を実行するために使用されます モジュールは、arduinoからデータを送受信するために使用されます。必要なモジュールをすでにインストールしているので、これを入手しました
<図> <図>
実行
Bluetoothマウスコントロールアプリをスマートフォンデバイスにインストールします。
ArduinoスケッチをArduinoUNOにアップロードし、回路図に示されている回路に従います。
Python側 -
1.Pythonコードをコピーしてメモ帳ファイルに貼り付けます。 COMポートをArduinoUNOのCOMポートに変更し、「。py」として保存します。
<図> <図>2. Python IDLEを開き、メモ帳ファイルを開きます。
<図> <図> <図>3.スケッチを実行します。
<図>その後、図2.2の画面に戻ります。
スマートフォンアプリケーションを開いてBluetoothモジュールに接続すると、ジョイスティックの方向を変えるとカーソルが動くことに気付くでしょう。
コード
- Arduinoコード
- Pythonコード
Arduinoコード Arduino
int datareceived [5] {0,0,0,0}; // phoneintからバイトを格納するにはin_byte =0; int array_index =0; int l_prev =0、r_prev =0; //マウスの左クリックと右クリックの以前のステータスvoidsetup(){Serial.begin(9600); //シリアルモニターを開始します} int height =0、width =0; void loop(){int clicks =0; intsensitive =20; //感度を調整できますintxpos =0、ypos =0; if(Serial.available()> 0){//電話からバイトを受信しますin_byte =Serial.read(); //バイト単位で変数に格納if(in_byte ==(255)){//変数が0の場合、配列を0に変換します。array_index=0; } datareceived [array_index] =in_byte; //数値を配列に格納しますarray_index =array_index +1; if(datareceived [1]> =110)xpos =map(datareceived [1]、110,172,0、sensitive); //右に移動した場合if(datareceived [1] <=70)xpos =map(datareceived [1]、60,1,0、-sensitive); //左に移動した場合if(datareceived [2]> =110)ypos =map(datareceived [2]、110,255,0、sensitive); //下に移動した場合if(datareceived [2] <=60)ypos =map(datareceived [2]、70,1,0、-sensitive); //上に移動した場合if(datareceived [3] ==1 &&l_prev ==0)// 1つのボタンを押すと、クリックを認識する=1;それ以外の場合if(datareceived [3] ==2 &&r_prev ==0)clicks =2; else if(datareceived [3] ==3 || datareceived [3] ==4)clicks =datareceived [3]; // scrolll_prev =datareceived [3]; r_prev =datareceived [3]; if(xpos!=0 or ypos!=0 or clicks!=0)//ジョイスティックのいずれかが移動したとき、またはボタンが押されたとき、またはスクロールされたとき{ height =height + ypos; width =width + xpos; if(height> =799)height =799; if(height <=0)height =0; if(width> =1279)width =1279; if(width <=0)width =0; Serial.print(width); Serial.print( ":"); Serial.print(height); Serial.print( ":"); Serial.println(clicks); clicks =0;} }}
Pythonコード Python
import mouse、sysimport time import serialmouse.FAILSAFE =FalseArduinoSerial =serial.Serial( 'com3'、9600)#正しいCOMを指定してくださいporttime.sleep(1)#1秒の遅延1:data =str(ArduinoSerial.readline ().decode( 'ascii'))(x、y、z)=data.split( ":")#x軸とy軸のデータを読み取る(x、y)=(int(x)、int(y) )#intに変換mouse.move(x、y)#zの「1」の場合はカーソルを目的の座標に移動:mouse.click(button ="left")#zのマウスボタンelif「2」をクリック:マウス。 click(button ="right")elif '3' in z:mouse.wheel(delta =-1)#下にスクロールelif '4' in z:mouse.wheel(delta =1)#上にスクロール
回路図
製造プロセス