スマホのGセンサーで操作するBluetoothロボットカー:ArduinoとRemoteXYで実現
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino UNO(または互換ボード) | 1 | メイン制御 |
| HC-06 Bluetoothモジュール | 1 | スマホとの無線通信(HC-05も可) |
| L298N モータードライバーIC/モジュール | 1 | DCギアモーター2台駆動用 |
| 2輪ロボットカープラットフォーム | 1 | シャーシ、ギアモーター、車輪含む |
| 電源用バッテリー(例:7.4V LiPoや9V角形電池) | 1 | モーターとArduino用 |
使用アプリ・オンラインサービス
- RemoteXY:スマホアプリ用GUIエディター(Webエディター)、ライブラリ(ダウンロード)、モバイルアプリ(iOS/Android)
プロジェクト概要
スマートフォンの加速度センサー(Gセンサー)をジョイスティックとして使い、Bluetooth経由でロボットカーを直感的に操作するプロジェクトです。RemoteXYというサービスを利用することで、アプリ側のGUI設計とArduino側の通信コードを自動生成でき、専用アプリ開発なしでスマホ操作を実現できます。
製作手順
Step 1: ハードウェア組み立て
市販の2輪ロボットカーキットを組み立て、以下のように配線します。
- Arduino UNO
- HC-06 Bluetoothモジュール:TX→Arduino D2(SoftwareSerial RX)、RX→Arduino D3(SoftwareSerial TX)、VCC→5V、GND→GND
- L298Nモータードライバー:入力ピンをArduino D4〜D7、ENA/ENBをD9/D10(PWM)に接続
- 左右ギアモーターをL298N出力に接続
- バッテリーをL298Nの電源入力とArduinoのVIN/GNDに接続
Step 2: RemoteXYでGUI作成
- RemoteXYエディターを開く
- 「New Project」→ 接続タイプ「Bluetooth」を選択
- コントロールパネルに「ジョイスティック」を配置し、プロパティで「G-sensor」モードを有効化
- 必要に応じてスイッチ(LED制御用等)を追加
- 「Get source code」ボタンでArduinoスケッチを生成・ダウンロード
Step 3: ライブラリ導入とスケッチ準備
- RemoteXYライブラリ(
RemoteXY.h)をArduino IDEにインストール - ダウンロードしたスケッチを開き、一度コンパイル・書き込みしてBluetooth接続を確認
- この段階ではモーター制御コードは含まれていないので、次のステップで追加
Step 4: モーター制御機能の追加
生成されたスケッチのRemoteXY構造体には、ジョイスティックのX/Y値(-100〜100)とスイッチ状態が格納されます。これらを用いて左右モーターのPWM値を計算し、L298Nを駆動する関数Wheel()を実装します。
Step 5: スマホアプリで操作
- RemoteXYモバイルアプリをインストール
- アプリ起動後、BluetoothボタンからHC-06(通常「HC-06」や「INVOR」と表示)を選択してペアリング
- ジョイスティック画面でスマホを傾けると、カーが対応する方向に移動
完成スケッチ(モーター制御統合版)
/////////////////////////////////////////////
// RemoteXY include library
/////////////////////////////////////////////
#define REMOTEXY_MODE__SOFTWARESERIAL
#include <SoftwareSerial.h>
#include <RemoteXY.h>
#define REMOTEXY_SERIAL_RX 2
#define REMOTEXY_SERIAL_TX 3
#define REMOTEXY_SERIAL_SPEED 9600
unsigned char RemoteXY_CONF[] = {
3,0,23,0,1,5,5,15,41,11,
43,43,1,2,0,6,5,27,11,5,
79,78,0,79,70,70,0
};
struct {
signed char joystick_1_x; // -100..100
signed char joystick_1_y; // -100..100
unsigned char switch_1; // 1=ON, 0=OFF
unsigned char connect_flag;
} RemoteXY;
/////////////////////////////////////////////
// Motor pin definitions
/////////////////////////////////////////////
#define PIN_MOTOR_RIGHT_UP 7
#define PIN_MOTOR_RIGHT_DN 6
#define PIN_MOTOR_RIGHT_SPEED 10
#define PIN_MOTOR_LEFT_UP 5
#define PIN_MOTOR_LEFT_DN 4
#define PIN_MOTOR_LEFT_SPEED 9
#define PIN_LED 13
unsigned char RightMotor[3] = {PIN_MOTOR_RIGHT_UP, PIN_MOTOR_RIGHT_DN, PIN_MOTOR_RIGHT_SPEED};
unsigned char LeftMotor[3] = {PIN_MOTOR_LEFT_UP, PIN_MOTOR_LEFT_DN, PIN_MOTOR_LEFT_SPEED};
void Wheel(unsigned char *motor, int v) {
if (v > 100) v = 100;
if (v < -100) v = -100;
if (v > 0) {
digitalWrite(motor[0], HIGH);
digitalWrite(motor[1], LOW);
analogWrite(motor[2], v * 2.55); // 0-100 → 0-255
} else if (v < 0) {
digitalWrite(motor[0], LOW);
digitalWrite(motor[1], HIGH);
analogWrite(motor[2], (-v) * 2.55);
} else {
digitalWrite(motor[0], LOW);
digitalWrite(motor[1], LOW);
analogWrite(motor[2], 0);
}
}
void setup() {
pinMode(PIN_MOTOR_RIGHT_UP, OUTPUT);
pinMode(PIN_MOTOR_RIGHT_DN, OUTPUT);
pinMode(PIN_MOTOR_LEFT_UP, OUTPUT);
pinMode(PIN_MOTOR_LEFT_DN, OUTPUT);
pinMode(PIN_LED, OUTPUT);
RemoteXY_Init();
}
void loop() {
RemoteXY_Handler();
digitalWrite(PIN_LED, RemoteXY.switch_1 ? HIGH : LOW);
// 差動駆動: Y軸=前進/後退, X軸=旋回
Wheel(RightMotor, RemoteXY.joystick_1_y - RemoteXY.joystick_1_x);
Wheel(LeftMotor, RemoteXY.joystick_1_y + RemoteXY.joystick_1_x);
}
回路図
ポイントとトラブルシューティング
- Bluetoothモジュールのボーレート:HC-06デフォルトは9600bps。スケッチの
REMOTEXY_SERIAL_SPEEDと一致させてください。 - SoftwareSerialのピン:Arduino UNOではD2/D3を使用。他ボードではハードウェアシリアル(Serial1等)を使うと安定します。
- モーター電源:L298Nのロジック電源(5V)とモーター電源(VM)を分け、共通GNDにするのが基本です。
- ジョイスティック感度:RemoteXYエディターでジョイスティックの感度・デッドゾーンを調整可能です。
- 差動駆動の計算:
Right = Y - X,Left = Y + Xで、その場旋回・前進旋回が自然に行えます。
拡張アイデア
- 超音波センサーを追加して障害物回避機能を実装
- バッテリーモニター電圧をRemoteXYのテキストフィールドに表示
- スマホのカメラ映像をストリーミングしてFPV操作化
製造プロセス
- Bluetooth 制御 Raspberry Pi ロボットに音声フィードバックを追加して構築
- Pythonで作るWi-Fi制御Raspberry Piロボット - ステップバイステップガイド
- ArduinoだけでDTMFデコーダーを構築 – 外付けIC不要
- Arduinoで作るモニター用Ambilightシステム:没入感アップの自作ガイド
- SERENA:Arduino Mega 2560とTFT LCDタッチスクリーン搭載カスタムアラームシステム
- Arduinoとスマホで作るスマート電圧計 – 簡単DIYプロジェクト
- Android加速度センサーで操作するラジコン車両:Raspberry Pi・Arduino・モーターシールド連携
- 古いラジコンカーをXboxコントローラーで操作可能に - ArduinoとUSBホストシールドで実現
- Arduino Nanoで音声制御ロボットを自作
- MobBob:Arduino製ロボットをAndroidスマホでシームレスに制御
- Python 3からArduino UNOを制御 – シリアル通信でLED点滅デモ