ジェスチャー制御ロボット:Arduino UNOでハンズフリー操作
コンポーネントと用品
| Arduino UNO | × | 1 |
| SparkFun 3軸加速度センサー ブレークアウト - ADXL335 | × | 1 |
| RFモジュール 434MHz | × | 1 |
| HT12D(デコーダーIC) | × | 1 |
| HT12E(エンコーダーIC) | × | 1 |
| SparkFun デュアルHブリッジ モータードライバー L298 | × | 1 |
| 汎用プロトタイピングPCB | × | 1 |
| リニアレギュレーター 7805 | × | 2 |
| DCモーター(汎用) | × | 1 |
アプリとオンラインサービス
- Arduino IDE
このプロジェクトについて
更新:このプロジェクトの更新版はこちらで見つかります
イントロ
手で全てをコントロールできたら最高ですよね!椅子に座ったまま、ボスのように色々なものを操作できる。そんなクールなDIYハンドジェスチャー認識ロボットを作りました。手のジェスチャーでコマンドを出せばそれに従います。一見複雑そうですが、実はとてもシンプルです。このロボットは、以前作ったRFモジュールを使ったRCカーの改良版です。
ここでもロボットは送信機(トランスミッター)と受信機(レシーバー)の2部構成です。受信機側の回路は前回と同じで、送信機側に少し変更があります。ここでは送信機側をプログラムする必要があるため、Arduinoをプログラミングプラットフォームとして使います。ジェスチャー認識には加速度センサーを使います。さあ、作っていきましょう!
ロボットの動作デモ
これは何?どう動くの?
加速度センサー(ADXL335)とは?

簡単に言うと、加速度センサーは3軸(X、Y、Z)の加速度を測定するデバイスです。ここで使っているADXL335は3軸対応です。
ほぼすべてのスマートフォンに加速度センサーが搭載されています(スマホから取り出すわけではありません)。スマホのモーションゲーム(例:テンプルラン)で、スマホを左右に傾けるとキャラクターが左右に動くあれです。あれも加速度センサーで実現しています。
スマホにはジャイロスコープという別のセンサーもありますが、今回は不要です。
どうやってジェスチャーを認識する?

ロボットの脳はArduino Uno(ATmega328)で、あらかじめプログラムされたコードが走っています。手のジェスチャー/動きは、加速度測定デバイスである加速度センサー(ADXL335)で認識します。
加速度センサーが手のジェスチャー時にX、Y、Z座標を読み取り、Arduinoに送ります(ここではZ軸は不要で、XとYの2座標のみ使用、Zは無視)。Arduinoは座標値をチェックし、4ビットコードをエンコーダーIC(HT12E)に送信。エンコーダーがデータをトランスミッターに渡し、無線で送信。レシーバーで受信した4ビットコードをデコーダーIC(HT12D)が受け取り、モータードライバーIC(L298)に渡します。モータードライバーが2つのモーターを必要な方向に回転させます。
電源回路を作る
まず電源回路から始めます。送信機用と受信機用の2つの電源回路が必要です。受信機側は12V電源が必要(12Vモーターを使用のため)、送信機側は9V電池で動作可能です。

右側が受信機側の電源回路図です。この図に従って配線してください。1kΩ抵抗を介してLEDを追加すれば、電源状態を示せます。

- IC 7805:12Vを5Vに降圧(12Vが手に入らない場合は9Vでも可)
- 0.1μFと470μFのコンデンサ
- ステータスLED用1kΩ抵抗
注意: 7805にはヒートシンクを使用してください。7V(12V-5V)を降圧するため大量の熱が発生し、レギュレーターが焼損する恐れがあります。
送信機(リモコン)を作る
送信機部は、手のジェスチャーを検出する加速度センサーと、データをArduinoに送る部分で構成されます。Arduinoは加速度センサーから受け取ったデータに基づいてエンコーダーICにデータを送り、トランスミッターから送信されます。以下の回路図通りに配線してください:

重要: 一部の加速度センサーは3.3V電源で動作し、5Vでは破損する可能性があります。正しい電圧についてはサプライヤーのドキュメントで確認してください。
これは送信機のイメージ図です:

Arduinoにコードをアップロード
更新版のコードはこちらです。(注:元記事ではコードが省略されています。GitHub等で完全版を参照してください)
受信機を作る

受信機回路は、2つのIC(HT12Dデコーダー、L293Dモータードライバー)、RFレシーバーモジュールで構成されます。
上記の受信機回路図通りに配線してください。受信機基板には2つのLEDがあり、1つは受信機への給電時、もう1つは送信機への給電時に点灯します。HT12D付近のLEDが点灯すれば有効な伝送(VT)が行われています。点灯しない場合は配線かRF-TX-RXモジュールに問題があります。
受信機側の詳細については、この記事を参照してください。
どんなジェスチャーを認識する?
このロボットは5種類のジェスチャーを認識します:前進、後退、左、右、停止。下の写真を見ると分かりやすいです。





ジェスチャー制御ロボットの操作を楽しんでください!
小型化して永続化する
Arduino Unoを手に装着するには大きすぎます。また、別のプロジェクトでArduinoを使いたいときに外すと、古い作業が失われてしまいます。それが嫌なので、永続化する方法を考えました。この記事で、Arduinoプロジェクトを小型化する方法を解説しています。

スタンドアロン版のPCBレイアウトはこちらからダウンロード(ミラー版):
- standalone_etch_copper_top_mirror1.pdf
- standalone_etch_copper_top1.pdf
Atmega8 MCUにコードを移植したビデオです。MCUの出力をLEDで示しています。
新しいプロジェクトは私のブログで公開しています。
質問があればこちらにコメントをどうぞ。ブログの方を定期的にチェックしているので、そちらの方が返信が早いです。
製造プロセス
- Bluetooth 制御 Raspberry Pi ロボットに音声フィードバックを追加して構築
- Raspberry Pi でジェスチャー制御ロボットを構築 – 加速度センサーと RF 通信でハンドフリー操作
- Windows 10 IoT Coreで音声制御ロボットを構築 - Raspberry Pi 2編
- Pythonで作るWi-Fi制御Raspberry Piロボット - ステップバイステップガイド
- ROObockey:精密照準アシスト付きリモコンストリートホッケーロボット
- ジェスチャー制御 RGB テーブルランプ – インタラクティブなハンズフリー照明
- DIY Arduino USBゲームコントローラー - 高性能ゲームパッドを自作
- スマートArduino水筒:リアルタイム監視とアラート機能付き
- Arduino Nanoで音声制御ロボットを自作
- Ethernet制御ロボットアーム - WIZ750SRとAndroidアプリでリモート操作
- 手誘導協働ロボット:安全規格解説