OpenCV、ビジュアルベーシックC#などの他のプログラミングではなく、Arduinoを使用するだけで顔追跡ロボットアームまたはロボットを構築したいと思ったことはありませんか?次に、このプロジェクトでは、ArduinoとAndroidのパワーを組み合わせて顔検出を実装します。このプロジェクトでは、モバイルカメラはサーボの助けを借りてあなたの顔と一緒に動きます。ここでAndroid携帯電話を使用する利点は、カメラモジュールに投資する必要がなく、画像検出作業全体をiPhone自体で実行できることです。これを機能させるために、Arduinoをコンピューターに接続する必要はありません。ここでは、ArduinoでBluetoothモジュールを使用してモバイルとワイヤレスで通信しました。
このプロジェクトで使用されるAndroidアプリケーションはProcessingAndroidを使用して作成されました。APKファイルをダウンロードしてアプリケーションを直接インストールするか(リンクについてはさらに読む)、プログラミングキャップを付けて、指定された処理コードを使用して独自のより魅力的なAndroidアプリケーションを作成できます。さらにチュートリアルで。以前の処理プロジェクトを確認して、処理の詳細をご覧ください。
このチュートリアルの終わりまでに、顔を追跡してそれに沿って移動できるミニチルトおよびスパンロボットアームができあがります。これを(さらに進歩させて)使用して、vlogビデオを録画したり、携帯電話の背面カメラで自分撮りをしたりすることもできます。これは、顔がモバイル画面の真ん中に正確に配置されるためです。そう!!面白そう?このチュートリアルの最後にあるデモビデオをチェックして、機能することを確認してください。どうすれば構築できるか見てみましょう…
私はこのプロジェクトができるだけ簡単に機能するように最善を尽くしました。ハードウェアやコーディングに関する知識が最小限であれば、このガイドラインを使用してこのプロジェクトをすぐに機能させることができます。ただし、一度作成したら、コードを理解して、何がどのように機能するのかを実際に理解できるようにすることをお勧めします。
必要な材料:
- Arduino Nano
- サーボモーターSG90– 2Nos
- まともなカメラとAndroid携帯
- HC-05 / HC-06Bluetoothモジュール
- プログラミング用コンピュータ
- 3Dプリンター(オプション)
- 9V電池
必要な部品の3Dプリント(オプション):
携帯電話をパンおよびチルトするには、モバイルホルダーやいくつかのサーボブラケットなどの機械的構造が必要です。私は3Dプリンターを持っているので、これらの部品を3D印刷することにしたので、段ボールを使用して作成できます。
3D印刷は、プロトタイププロジェクトを構築したり、新しい機械設計を実験したりするときに大きく貢献できる素晴らしいツールです。3Dプリンターの利点やその仕組みをまだ発見していない場合は、3D印刷の初心者向けガイドを読むことができます。
3Dプリンターを所有しているか、アクセスできる場合は、ここからダウンロードできるSTLファイルを使用して、直接印刷して組み立てることができます。ただし、携帯電話ホルダーのようないくつかの部品は、お使いの携帯電話の寸法に基づいていくつかの変更が必要な場合があります。 MOTOG携帯電話用にデザインしました。私はすべての部品を印刷するために私の非常に基本的なプリンターを使用しました。プリンターは3dingのFABXv1で、10立方センチメートルの印刷量で手頃な価格で提供されます。安い価格には、印刷解像度が低く、SDカードや印刷再開機能がないというトレードオフが伴います。 Curaというソフトウェアを使用してSTLファイルを印刷しています。資料の印刷に使用した設定を以下に示します。同じものを使用することも、プリンターに基づいて変更することもできます。
必要な材料をすべて印刷したら、ネジとホットグルーを使用して所定の位置に固定できます。組み立てが完了すると、次のようになります。
回路図とハードウェア:
このスマートフォンでの顔追跡プロジェクトの回路を下の画像に示します。
回路は2つのサーボモーターで構成されており、そのうちの1つは携帯電話を左右に動かすために使用され、もう1つは携帯電話を上下に傾けるために使用されます。サーボが移動しなければならない方向は、それ自体がBluetooth(HC-05)モジュールから情報を取得するArduinoNanoによって指示されます。回路全体は9V電池で駆動されます。
この回路はブレッドボードに簡単に接続できます。または、ここで行ったように、これらを小さなパフォーマンスボードにはんだ付けすることもできます。
Androidアプリケーションのセットアップ:
先ほど申し上げたように、このプロジェクトの背後で機能している主な頭脳はこのAndroidアプリケーションです。このAndroidアプリケーションは、ProcessingAndroidを使用して開発されました。このアプリケーションを携帯電話に直接インストールし、以下の手順に従って起動できます。
- ここからAPKファイルをダウンロードします。
- 上記の回路の電源を入れます。
- お使いの携帯電話の設定で「HC-05」という名前のBluetoothモジュールを検索します
- 「HC-05」以外の名前を付けた場合は、HC-05に戻してください。そうしないと、アプリケーションが機能しなくなります。
- パスワード「1234」または「0000」を使用してBluetoothモジュールとペアリングします。
- 次に、アプリケーションをポートレートモードで起動します。カメラの画面が表示され、画面の上部に「接続先:HC-05」も表示されます。
- カメラを顔の上に移動してみると、カメラの上部に緑色のボックスが表示され、その位置が以下に示すように画面の左上隅にも表示されます。
独自のAndroidアプリケーションをコーディングする必要のない多くの進歩をもたらすことで、このArduino顔追跡プロジェクトを次のレベルに引き上げることができます。Androidアプリケーションの作成は難しいように聞こえるかもしれませんが、Processingの助けを借りて私を信じてください。すぐに学ぶことができます。このアプリケーションの構築に使用される完全な処理コードは、ここからダウンロードできます。あなたはあなた自身の創造性でどんな進歩も自由に行うことができます。処理の詳細については、以下のプロジェクトを確認してください。
- Arduinoと処理を使用したバーチャルリアリティ
- Arduinoを使用したピンポンゲーム
- 処理を使用したスマートフォン制御のFMラジオ。
- 処理と超音波センサーを使用したArduinoレーダーシステム
Arduinoのプログラミング:
Androidアプリケーションは、画面上の顔とその位置を検出します。次に、顔が画面の中央に来るように、顔の位置に基づいて移動する方向を決定します。この方向は、Bluetoothモジュールを介してArduinoに送信されます。
このプロジェクトのArduinoプログラムは非常に単純で、Bluetoothモジュールから受け取った値に基づいて2つのサーボモーターの方向を制御する必要があります。完全なコードは、このチュートリアルの最後に見つけることができ、私はまた、以下のいくつかの重要な行を説明しました。
以下のコード行は、ピンD12をRX、D11をTXとしてシリアル接続を確立します。したがって、ピンD12はBTモジュールのTXに接続し、ピンD11はBTモジュールのRXに接続する必要があります。
SoftwareSerial cam_BT(12、11); // RX、TX
次に、Bluetoothモジュールを9600のボーレートで初期化しました。モジュールも同じボーレートで動作することを確認してください。それ以外の場合は、それに応じて変更します。
cam_BT.begin(9600); // 9600 baudrateでBluetooth通信を開始しますcam_BT.println( "コマンドを実行する準備ができました");
以下の行は、Bluetoothモジュールを介して入ってくるものを示しています。また、データは変数「BluetoothData」に保存されます。
if(cam_BT.available())// Bluetooth経由で着信するものを読み取る{BluetoothData = cam_BT.read(); Serial.print( "BTからの着信:"); Serial.println(BluetoothData); }
Bluetoothから受信したデータに基づいて、モーターの方向が制御されます。モーターを左に回すと、モーターは前の位置から2の値だけデクリメントされます。腕を速く動かす必要がある場合は、この値を2から4または6に増やすことができます。ただし、カメラが不安定になるようなジャークが発生する可能性があります。
if(BluetoothData == 49)//左に曲がる{pos1 + = 2; Servo1.write(pos1);} if(BluetoothData == 50)//右折{pos1- = 2; Servo1.write(pos1);} if(BluetoothData == 51)//ターンアップ{pos2- = 2; Servo2.write(pos2);} if(BluetoothData == 52)//ターンダウン{pos2 + = 2; Servo2.write(pos2);}
ワーキング:
ハードウェア、コード、Androidアプリケーションの準備ができたら、アクションを実行します。Arduinoに電力を供給し、Androidアプリケーションを開くだけです。アプリケーションは自動的にHC-05(HC-05という名前である必要があります)Bluetoothモジュールに接続し、顔が検出されるのを待ちます。携帯ホルダーに携帯電話を置き、その前に座るだけです。あなたの顔が画面の中央に置かれるようにあなたのサーボモーターがあなたの電話を動かしているのに気付くはずです。カメラの範囲内を動き回ると、携帯電話があなたの動きに追従します。写真を置いたり動かしたりして試すこともできます。
プロジェクトの完全な動作は、以下のビデオに示されています。あなたはたくさん作ることができます