工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

ArduinoとMPU-6050で作るジェスチャー制御ロボット(自作ハンドジェスチャーRCカー)

必要な部品と材料

Arduino UNO ×1
Arduino Nano R3 ×1
HC-05 Bluetoothモジュール ×2
MPU-6050(3軸ジャイロ/加速度センサ、SparkFunブレークアウト) ×1
DCモータ 12V ×2
ゴムタイヤ(車輪) ×1セット
L293D デュアルHブリッジモータドライバ(TI製) ×1
9V電池(汎用) ×2

必要な工具

使用するアプリとオンラインサービス

プロジェクト概要

MPU-6050 3軸ジャイロ/加速度センサを使ったジェスチャー制御カーの作り方です。このセンサの使い方、Arduinoとのインターフェース、Bluetoothモジュール経由でのデータ転送を理解すれば、さらに多くの応用が可能です。ここでは2つのHC-05 Bluetoothモジュール間の通信(マスター/スレーブ)に焦点を当てます。

ロボット本体の組み立てと配線は動画を参照してください。

接続図

ロボット側(カー・ユニット)と送信機側(リモート・ユニット)の接続図:

ArduinoとMPU-6050で作るジェスチャー制御ロボット(自作ハンドジェスチャーRCカー) ArduinoとMPU-6050で作るジェスチャー制御ロボット(自作ハンドジェスチャーRCカー)

PCBWayで基板発注も可能:PCBWayプロジェクトページ

Bluetoothモジュールの設定(マスター/スレーブ化)

HC-05は出荷時スレーブ設定です。スマホからデータを送るだけならペアリング(デフォルトPIN: 1234/0000)するだけでOK。ですが、モジュールから別のモジュールやスマホへデータを送るには設定変更が必要です。

このプロジェクトでは、MPU-6050で取得したデータをBluetoothモジュールからもう一方のBluetoothモジュールへ送信します。

スレーブ側(カー・ユニット搭載)の設定

  1. Arduinoと接続(配線図参照)
  2. 以下のスケッチを書き込み、ATコマンドモードで設定
#include 
SoftwareSerial BTSerial(10, 11); // RX | TX
void setup() {
  Serial.begin(9600);
  Serial.println("Enter AT commands:");
  BTSerial.begin(38400); // HC-05のATコマンドモード時のデフォルト速度
}
void loop() {
  if (BTSerial.available()) Serial.write(BTSerial.read());
  if (Serial.available()) BTSerial.write(Serial.read());
}
  1. モジュールのボタンを押しながら電源投入(LEDが2秒ごとにゆっくり点滅=ATコマンドモード)
  2. シリアルモニタを開く(ボーレート9600、改行コード「Both NL & CR」)
  3. ATと送信→OKが返ればOK
  4. 以下のコマンドを順次送信:
    • AT+ORGL(工場出荷状態にリセット)
    • AT+RMAAD(既存ペアリング解除)
    • AT+UART?(現在のボーレート確認)
    • AT+UART=38400,0,0(ボーレート38400に設定)
    • AT+ROLE?(役割確認:0=スレーブ、1=マスター)
    • AT+ROLE=0(スレーブに設定)
    • AT+ADDR?(モジュールのアドレス確認)→ このアドレスをメモ

マスター側(リモート・ユニット搭載)の設定

  1. 同様にArduino接続し、ATコマンドモードに入る
  2. 以下のコマンドを順次送信:
    • AT+ORGL
    • AT+RMAAD
    • AT+UART?
    • AT+UART=38400,0,0
    • AT+ROLE?
    • AT+ROLE=1(マスターに設定)
    • AT+CMODE=0(単一デバイスのみ接続、デフォルトは0)
    • AT+BIND="スレーブ側のアドレス"(スレーブとバインド)

ライブラリとソースコード

MPU-6050用のとライブラリが必要です。
ダウンロード:MediaFire(事前にインストール済みならスキップ)

カー・ユニットへの書き込み

USBでPC接続、正しいCOMポートとボードタイプを選択し、Gesture_controled_Robot__car_unit_を書き込み。書き込み中は電池とBluetoothモジュールを外してください。

// カー・ユニット側スケッチ(Shubham Shinganapure作)
int lm1=8, lm2=9, rm1=10, rm2=11;
char d=0;
void setup() {
  pinMode(lm1,OUTPUT); pinMode(lm2,OUTPUT);
  pinMode(rm1,OUTPUT); pinMode(rm2,OUTPUT);
  Serial.begin(38400);
  sTOP();
}
void loop() {
  if(Serial.available()>0) {
    d=Serial.read();
    if(d=='F') ForWard();
    if(d=='B') BackWard();
    if(d=='L') Left();
    if(d=='R') Right();
    if(d=='S') sTOP();
  }
}
void ForWard()  { digitalWrite(lm1,HIGH); digitalWrite(lm2,LOW); digitalWrite(rm1,HIGH); digitalWrite(rm2,LOW); }
void BackWard() { digitalWrite(lm1,LOW); digitalWrite(lm2,HIGH); digitalWrite(rm1,LOW); digitalWrite(rm2,HIGH); }
void Left()     { digitalWrite(lm1,LOW); digitalWrite(lm2,HIGH); digitalWrite(rm1,HIGH); digitalWrite(rm2,LOW); }
void Right()    { digitalWrite(lm1,HIGH); digitalWrite(lm2,LOW); digitalWrite(rm1,LOW); digitalWrite(rm2,HIGH); }
void sTOP()     { digitalWrite(lm1,LOW); digitalWrite(lm2,LOW); digitalWrite(rm1,LOW); digitalWrite(rm2,LOW); }

リモート・ユニットへの書き込み

remoteスケッチを開き、リモート・ユニット(Arduino Nano + MPU-6050 + マスターHC-05)に書き込み。

// リモート・ユニット側スケッチ(MPU-6050 DMP使用、ジェスチャー→Bluetooth送信)
#include "I2Cdev.h"
#include "MPU6050_6Axis_MotionApps20.h"
#include 
#include 
SoftwareSerial BTSerial(10, 11); // RX | TX
MPU6050 mpu;
#define OUTPUT_READABLE_YAWPITCHROLL
bool dmpReady = false;
uint8_t mpuIntStatus, devStatus;
uint16_t packetSize, fifoCount;
uint8_t fifoBuffer[64];
VectorFloat gravity;
Quaternion q;
float ypr[3];
volatile bool mpuInterrupt = false;
void dmpDataReady() { mpuInterrupt = true; }
int bt=8; int x=1;
void setup() {
  Wire.begin(); TWBR=24;
  Serial.begin(115200); BTSerial.begin(38400);
  mpu.initialize();
  devStatus = mpu.dmpInitialize();
  mpu.setXGyroOffset(220); mpu.setYGyroOffset(76);
  mpu.setZGyroOffset(-85); mpu.setZAccelOffset(1788);
  if(devStatus==0) {
    mpu.setDMPEnabled(true);
    attachInterrupt(0, dmpDataReady, RISING);
    mpuIntStatus = mpu.getIntStatus();
    dmpReady = true;
    packetSize = mpu.dmpGetFIFOPacketSize();
  }
  pinMode(bt,INPUT);
}
void loop() {
  if(digitalRead(bt)==HIGH) { x++; delay(150); }
  if((x%2)==0) {
    if(!dmpReady) return;
    while(!mpuInterrupt && fifoCount= 25) BTSerial.write('B');  // 後傾 → 後退
      else if(ypr[2]*180/M_PI <= -25) BTSerial.write('L'); // 左傾 → 左旋回
      else if(ypr[2]*180/M_PI >= 20) BTSerial.write('R');  // 右傾 → 右旋回
      else BTSerial.write('S');                              // 水平 → 停止
    }
  } else {
    BTSerial.write('S');
  }
}

完成と動作確認

スレーブBluetoothをカー・ユニットに、マスターBluetoothをリモート・ユニットに装着。電源を入れれば遊べます!

ArduinoとMPU-6050で作るジェスチャー制御ロボット(自作ハンドジェスチャーRCカー)

役に立ったらいいね・シェア・コメントを。YouTubeチャンネル登録もお願いします。Thank you!

回路図

ArduinoとMPU-6050で作るジェスチャー制御ロボット(自作ハンドジェスチャーRCカー)

製造プロセス

  1. Raspberry Pi と Arduino を連携させてロボットを自作:ステップバイステップガイド
  2. 自宅で作るDIY宿題自動筆記マシン:AxiDraw風ペンプロッターの自作ガイド
  3. ArduinoとHC-SR04で作るサーボ駆動障害物回避ロボット
  4. Arduino UNOで作る完全自律ライントラッカーロボット ─ 入門に最適な自作キット
  5. Arduinoで作るパンチングキーボードボタン:ストレス解消カスタムキー
  6. 自律型ホームアシスタントロボット「O'nine」の構築 – ROS、Alexa、ロボットアーム完全ガイド
  7. Arduinoで楽器演奏:音階生成のステップバイステップガイド
  8. Arduinoと超音波センサーで自動ドアを制御:LCD・ブザー付き完全ガイド
  9. Arduinoロボットアーム「LittleArm」をAndroidアプリでBluetooth制御
  10. Bluetooth制御Arduinoカー完全自作ガイド – 3Dプリント&Arduino Nanoで作る2輪ロボット
  11. Arduino向けスマート屋内ナビゲーションロボットキット