最近、ジェスチャー制御のラップトップまたはコンピューターが非常に有名になりつつあります。この手法はLeapMotionと呼ばれ、コンピューター/ラップトップの前で手を振るだけで、コンピューター/ラップトップの特定の機能を制御できます。それを行うのはとてもクールで楽しいですが、これらのラップトップは本当に非常に高価です。したがって、このプロジェクトでは、ArduinoとPythonのパワーを組み合わせて、独自のジェスチャーコントロールラップトップ/コンピューターを構築してみましょう。
2つの超音波センサーを使用して手の位置を特定し、その位置に基づいてメディアプレーヤー(VLC)を制御します。これをデモンストレーションに使用しましたが、プロジェクトを理解したら、数行のコードを変更するだけで何でもでき、お気に入りのアプリケーションを好きな方法で制御できます。
前提条件:
ArduinoとPythonを組み合わせたいくつかのプロジェクトについてはすでに説明しました。したがって、Pythonとそのシリアルライブラリをすでにインストールしていて、LEDの点滅などのいくつかの基本的なプロジェクトを正常に試したことがあると思います。そうでない場合でも、このArduino-Python LedControllingチュートリアルに戻ってそれを実行できることを心配しないでください。したがって、先に進む前に、Pythonとpyserialライブラリがインストールされていることを確認してください。
プロジェクトの背後にあるコンセプト:
プロジェクトの背後にあるコンセプトは非常に単純です。モニターの上に2つの超音波(US)センサーを配置し、Arduinoを使用してモニターと手の間の距離を読み取ります。この距離の値に基づいて、特定のアクションを実行します。コンピューターでアクションを実行するには、Pythonpyautoguiライブラリを使用します。Arduinoからのコマンドは、シリアルポート(USB)を介してコンピューターに送信されます。このデータは、コンピューター上で実行されているpythonによって読み取られ、読み取られたデータに基づいてアクションが実行されます。
回路図:
ハンドジェスチャでPCを制御するには、2つの超音波センサーをArduinoに接続するだけです。米国のセンサーは5Vで動作することがわかっているため、Arduinoのオンボード電圧レギュレーターから電力が供給されます。ArduinoをPC /ラップトップに接続して、モジュールに電力を供給したり、シリアル通信を行ったりすることができます。接続が完了したら、以下に示すようにモニターに配置します。両面テープを使ってモニターに貼り付けましたが、自分の創造性を生かすことができます。所定の場所に固定した後、プログラミングを進めることができます。
Arduinoのプログラミング:
Arduinoは、USセンサーからの手の距離を読み取るようにプログラムする必要があります。完全なプログラムは、このページの末尾に与えられています。すぐ下にプログラムの説明をしました。超音波センサーを初めて使用する場合は、Arduinoおよび超音波センサーベースの距離測定を実行してください。
距離の値を読み取ることで、ジェスチャーで制御される特定のアクションに到達できます。たとえば、このプログラムでは、5つのアクションをデモとしてプログラムしました。
アクション1:両手をセンサーの前に特定の遠距離に置くと、VLCプレーヤーのビデオが再生/一時停止する必要があります。
アクション2:右手をセンサーの前に特定の遠距離に置くと、ビデオは1ステップ早送りする必要があります。
アクション3:左手をセンサーの前に特定の遠距離に置くと、ビデオは1ステップ巻き戻されます。
アクション4:右手をセンサーの前に特定の近距離で置き、センサーに向かって移動した場合はビデオを早送りし、離れた場合はビデオを巻き戻します。
アクション5:左手をセンサーの前に特定の近距離で置き、センサーに向かって移動するとビデオの音量が上がり、離れると音量が下がります。
上記のアクションを実行するためにプログラムがどのように記述されているかを見てみましょう。したがって、すべてのプログラムと同様に、以下に示すようにI / Oピンを定義することから始めます。2つのUSセンサーは、デジタルピン2、3、4、および5に接続され、+ 5Vピンから電力が供給されます。トリガーピンは出力ピンで、エコーピンは入力ピンです。
ArduinoとPython間のシリアル通信は、9600のボーレートで行われます。
const int trigger1 = 2; // 1番目のSesnorのトリガーピンconstint echo1 = 3; // 1番目のSesnorのエコーピンconstint trigger2 = 4; // 2番目のSesnorのトリガーピンconstint echo2 = 5; // 2番目のSesnorのエコーピンvoidsetup(){Serial.begin(9600); pinMode(trigger1、OUTPUT); pinMode(echo1、INPUT); pinMode(trigger2、OUTPUT); pinMode(echo2、INPUT); }
アクションを完了する前に、センサーと手の間の距離を毎回計算する必要があります。したがって、何度も実行する必要があります。つまり、このコードを関数として使用する必要があります。センサーと手の間の距離を返す calculate_distance() という名前の関数を作成しました。
/ * ###距離を計算する関数### * / voidcalculate_distance(int trigger、int echo){digitalWrite(trigger、LOW); delayMicroseconds(2); digitalWrite(トリガー、HIGH); delayMicroseconds(10); digitalWrite(trigger、LOW); time_taken = pulseIn(echo、HIGH); dist = time_taken * 0.034 / 2; if(dist> 50)dist = 50; }
メイン ループ 内で、距離の値を確認し、上記のアクションを実行します。その前に、現在の距離値で更新される2つの変数 distL と distR を使用します。
compute_distance(trigger1、echo1); distL = dist; //左センサーの距離を取得calculate_distance(trigger2、echo2); distR = dist; //右センサーの距離を取得します
両方のセンサー間の距離がわかっているので、事前定義された値と比較して、特定のアクションに到達できます。たとえば、両手が40 mcの距離にある場合、ビデオを再生/一時停止します。ここでは、「再生/一時停止」という単語がシリアルポートを介して送信されます
if((distL> 40 && distR> 40)&&(distL <50 && distR <50))//両手を検出{Serial.println( "Play / Pause"); 遅延(500);}
右手だけがモジュールの前に配置されている場合は、ビデオを1ステップ早送りし、左手だけの場合は1ステップ巻き戻します。アクションに基づいて、ここでは「巻き戻し」または「転送」という単語がシリアルポートを介して送信されます
if((distL> 40 && distL <50)&&(distR == 50))//左手を検出{Serial.println( "Rewind"); delay(500);} if((distR> 40 && distR <50)&&(distL == 50))//右手を検出{Serial.println( "Forward"); 遅延(500);}
ボリュームとトラックの詳細な制御では、誤ったトリガーを防ぐために異なる方法を使用します。音量を制御するには、左手を約15 cmの距離で、センサーに向かって移動して音量を下げ、センサーから遠ざけると音量を上げることができます。そのためのコードを以下に示します。アクションに基づいて、ここでは「Vup」または「Vdown」という単語がシリアルポートを介して送信されます
//左ロック-制御モードif(distL> = 13 && distL <= 17){delay(100); //ハンドホールド時間calculate_distance(trigger1、echo1); distL = dist; if(distL> = 13 && distL <= 17){Serial.println( "Left Locked"); while(distL <= 40){calculate_distance(trigger1、echo1); distL = dist; if(distL <10)//手で押し込んだ{Serial.println( "Vup"); delay(300);} if(distL> 20)//手で引き出した{Serial.println( "Vdown"); 遅延(300);}}}}
右側のセンサーにも同じ方法を使用して、ビデオのトラックを制御できます。つまり、右手をセンサーに向かって動かすとムービーが早送りされ、センサーから離れるとムービーが巻き戻されます。アクションに基づいて、ここでは「巻き戻し」または「転送」という単語がシリアルポートを介して送信されます
これで、ページの最後にあるこのジェスチャー制御PCの完全なコードを読み、全体として控えめに言ってから、ArduinoIDEにコピーすることができます。
Pythonのプログラミング:
このプロジェクトのPythonプログラムは非常にシンプルです。正しいボーレートを介してArduinoとのシリアル通信を確立してから、いくつかの基本的なキーボードアクションを実行する必要があります。pythonでの最初のステップは、インストールすることですのp yautoguiの モジュールを。プログラムはpyautoguiモジュールなしでは動作しないため、必ずこの手順に従ってください。
Windows用のpyautoguiモジュールのインストール:
以下の手順に従って、 Windows 用の pyautogui をインストールします。他のプラットフォームを使用している場合も、手順はほぼ同じです。コンピューター/ラップトップがインターネットに接続されていることを確認し、以下の手順に進みます
ステップ1: Windowsコマンドプロンプトを開き、ディレクトリをpythonをインストールしたフォルダに変更します。デフォルトでは、コマンドは次のようになります。
cd C:\ Python27
ステップ2: pythonディレクトリ内で、コマンド python –m pip install –upgradepipを使用してpip をアップグレードします。Pipは、Pythonモジュールを簡単にインストールするのに役立つPythonのツールです。このモジュールがアップグレードされたら(下の図を参照)、次の手順に進みます。
python –m pip install –upgrade pip
ステップ3:コマンド「 python–m pip install pyautogui 」を使用して、pyautoguiモジュールをインストールします。プロセスが成功すると、次のような画面が表示されます。
python –m pip install –upgrade pip
今すぐこと pyautogui モジュールと pyserial (前のチュートリアルでインストール)モジュールはPythonで成功したインストールされている、我々は、Pythonプログラムを続行することができます。完全なPythonコードは、チュートリアルの終了時に与えられるが、以下のように同様の説明です。
このプロジェクトに必要な3つのモジュールすべてをインポートしましょう。それらはpyautogui、シリアルpython、そして時間です。
シリアルのインポート#シリアル通信用にインポートされたシリアルインポート時間#遅延関数を使用するために必要
次に、COMポートを介してArduinoとの接続を確立します。私のコンピューターでは、ArduinoはCOM 18に接続されています。デバイスマネージャーを使用して、Arduinoが接続されているCOMポートを見つけ、それに応じて次の行を修正します。
ArduinoSerial = serial.Serial( 'com18'、9600)#arduinoSerialDataというシリアルポートオブジェクトを作成しますtime.sleep(2)#通信が確立されるまで2秒間待ちます
無限の while ループ内で、COMポートを繰り返しリッスンし、キーワードを事前定義された作品と比較し、それに応じてキーボードを押します。
while 1:incoming = str(ArduinoSerial.readline())#シリアルデータを読み取り、ラインとして出力します。incoming:pyautogui.typewrite(、0.2)if'Rewind 'incoming:pyautogui。 hotkey( 'ctrl'、 'left')if'Forward 'in着信:pyautogui.hotkey(' ctrl '、' right ')if'Vup' in着信:pyautogui.hotkey( 'ctrl'、 'down')if '着信のVdown ':pyautogui.hotkey(' ctrl '、' up ')
ご覧のとおり、キーを押すには、コマンド 「pyautogui.typewrite(、0.2)」 を使用するだけで、キースペースを0.2秒間押すことができます。ctrl + Sのようなホットキーが必要な場合は、ホットキーコマンド 「pyautogui.hotkey( 'ctrl'、 's')」 を使用できます 。
これらの組み合わせを使用したのは、VLCメディアプレーヤーで動作するため、ジェスチャーを使用してコンピューター内のあらゆるものを制御する独自のアプリケーションを作成するために、任意の方法で調整できるためです。
動作中のジェスチャ制御コンピュータ:
上で定義したように接続を確立し、ArduinoボードにArduinoコードをアップロードします。次に、以下のpythonスクリプトを使用して、ラップトップ/コンピューターでプログラムを起動します。
これで、VLCメディアプレーヤーを使用してコンピューターで任意のムービーを再生し、以下のビデオに示すように、手を使用してムービーを制御できます。
あなたがプロジェクトを理解し、それで遊んで楽しんだことを願っています。これは単なるデモであり、創造性を利用して、この周りにもっとクールなジェスチャー制御のものを構築できます。これが役に立ったかどうか、コメントセクションでこれを使用して何を作成するかをお知らせください。喜んでお知らせします。