ジョイスティック制御のマウス
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 |
アプリとオンラインサービス
> |
| |||
|
このプロジェクトについて
マウスまたはトラックパッドを使用してコンピューターのカーソルを追跡する代わりに、ジョイスティックを使用してこれと同じアプリケーションを作成しました。ジョイスティックはカーソルを任意の方向(x軸とY軸)に移動でき、内蔵のジョイスティックのスイッチでクリック機能も実行します。
基本-
ジョイスティックは、x方向とy方向に配置された2つのポテンショメータで構成されています。 arduinoは、ジョイスティックから0から1023の範囲のアナログ値を読み取ります。したがって、ジョイスティックがデフォルト(中央)の位置にある場合、アナログ値も500に近くなります(0から1023の間)。
<図>arduinoスケッチは、ジョイスティックを中心から離すと、位置に応じて-sensitiveから+ sensitive値(デフォルトのvlaueセットは10)の範囲の値を出力するようにプログラムされています。したがって、ジョイスティックを1つの極端な位置に動かすと、arduinoは値10を出力し、ジョイスティックを他の極端な位置に動かすと、-10を出力します。
x方向とy方向に別々の値を出力するには、x方向とy方向の値の間に「:」を使用します。例:
<図>ジョイスティックボタン(SW)のステータスは、x値とy値の後にシリアルモニターに印刷されます(1/0)。
ラップトップ/コンピューターが値を認識するためには、Pythonのpyautoguiモジュールが必要です。
Pythonプログラミング
(2020年12月11日編集-ライブラリを「pyautogui」から「mouse」に変更)
ユーザーは、ラップトップ/コンピューターにpython3をインストールする必要があります。こちらからダウンロードできます。
インストール後、Pythonファイルの場所のパスをコピーします。
<図>コマンドプロンプトで次の手順を実行します。コマンドプロンプトを開き、次のように入力します-
1. cd
2. py –m pip install –-upgrade pip
3. py –mpipインストールマウス
4. py -m pip install pyserial
マウス モジュールは、マウスアクションと pyserial を実行するために使用されます モジュールは、arduinoからデータを送受信するために使用されます。必要なモジュールをすでにインストールしているので、これを入手しました
<図>Pythonプログラムは、Arduinoによって印刷されたデータを読み取り、 x を認識するように作成されています。 および y 方向の値とスイッチ(SW)のステータス。
カーソルの現在の座標は、マウス関数 mouse.get_position()
から取得されます。 これは、カーソルのX座標とY座標をピクセルの形式で提供します。
ジョイスティックを動かすと、arduinoによって提供されるアナログ値が現在のカーソルの位置に追加され、カーソルが目的の方向に移動します。
カーソルを指定された方向に移動するには、関数 mouse.move(X + x、Y + y)
この目的を満たします。
ここで、XとYは現在のカーソルの位置であり、xとyはarduinoによって提供されるインクリメント/デクリメント位置です。
例: mouse.moveTo(100,150)
カーソルをx軸で100ピクセル、y軸で150ピクセルに移動します。
SWステータスに基づいてクリック操作を実行するには、 mouse.click(button ="left")
使用されます。
最終実行
arduinoスケッチ(以下に表示)をarduino UNOにアップロードし、回路図に示されているようにジョイスティックをarduinoピンに接続します。
マウスとpyserialがコンピュータ/ラップトップにインストールされていることを確認したら、次の手順を実行します。
1.pythonスケッチをメモ帳ファイルにコピーします。 arduinoの正しいCOMポートを指定してください。デバイスマネージャから、arduinoボードが接続されているCOMポートを取得できます。変更を加えたら、ファイルを「.py」として保存します。
<図> <図>2. pythonのIDLE(python GUI)を開き、そこからメモ帳ファイルを開きます。
<図> <図>3.モジュールを実行します。
<図>その後、図4の画面に戻ります
エラーが表示された場合は、IDLEを再起動し、arduinoの正しいCOMポートについて言及しているかどうかを確認してください。
エラーがない場合は、ジョイスティックを動かすと、カーソルの動きが表示されます。
コード
- Arduinoコード
- Pythonコード
Arduinoコード Arduino
/////////////////////////////////ジョイスティック制御マウス////// by Shubham Santosh / //////////////////////////////////// void setup(){Serial.begin(9600); pinMode(9、INPUT); // SWピンdigitalWrite(9、HIGH);} int prev_state =0; // switchvoid loop()の以前の状態{int z =0、xpos =0、ypos =0; int x =analogRead(A0); int y =analogRead(A1); intsensitive =10; //快適さに基づいて感度を調整できますif(x> =550)//上に移動したときxpos =map(x、550,1023,0、sensitive); if(x <=450)//下に移動したときxpos =map(x、450,0,0、-sensitive); if(y> =550)//右に移動した場合ypos =map(y、550,1023,0、sensitive); if(y <=450)//左に移動した場合ypos =map(y、450,0,0、-sensitive); int curr_state =digitalRead(9); if(curr_state ==1 &&prev_state ==0)// SWが押されたときz =1;それ以外の場合、z =0; if(xpos!=0またはypos!=0またはz ==1)//ジョイスティックを動かしたときにのみ印刷します{Serial.print(xpos); //データを出力し、 ":" Serial.print( ":");で区切ります。 Serial.print(ypos); Serial.print( ":"); Serial.println(z); } prev_state =curr_state; delay(10); //通常の操作の場合}
Pythonコード Python
#ジョイスティック制御マウス#Shubham Santosh#最終編集済み2020年12月11日importマウス、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およびz(X、Y)=mouse.get_position()#カーソルの現在位置を読み取る(x、y)=(int(x)、int(y))#intに変換mouse.move(X + x、Yy )#zの「1」の場合はカーソルを目的の位置に移動します:#SWのステータスを読み取りますmouse.click(button ="left")#左ボタンをクリックします
回路図
製造プロセス