4輪ArduinoロボットをDabbleアプリでBluetooth制御しよう
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino UNO | 1 | |
| ブレッドボード | 1 | |
| シャーシ(ロボットフレーム) | 1 | |
| モーターマウント | 4 | M3ボルト・ナットで固定 |
| DCモーター | 4 | 左右各2個ずつ並列接続 |
| 車輪 | 4 | モーターシャフトに取り付け |
| L293D デュアルHブリッジドライバー | 1 | 4モーター駆動用 |
| HC-05 Bluetoothモジュール | 1 | スマホと通信 |
| DCターミナルブロック/ジャック | 1 | 外部バッテリー接続用 |
| ジャンパーワイヤー | 1セット | |
| バッテリー(7.4V〜12V推奨) | 1 | モーター駆動用外部電源 |
使用するアプリ
- Arduino IDE
- STEMpedia Dabble - Google Playからインストール(iOS版もあり)
プロジェクト概要
Arduino UNOとL293Dモータードライバー、HC-05 Bluetoothモジュールを搭載した4輪ロボットを、スマートフォンアプリ「Dabble」のゲームパッド機能で直感的に操作できるプロジェクトです。左右のモーターをそれぞれ並列接続し、差動駆動で前進・後進・左右旋回を実現します。年末のDIYプロジェクトとして、プレゼントにも最適な楽しい工作です。
組み立て手順
ステップ1: ボディの組み立て
- シャーシを裏返し、4箇所にモーターマウントをM3ボルト・ナットで固定
- DCモーターをマウントにM2ボルト・ナットで取り付け
- 各モーターシャフトに車輪を装着
- シャーシを表向きに戻す
ステップ2: Arduino搭載とブレッドボード配置
Arduino UNOをシャーシ上部に固定し、隣にブレッドボードを配置。すべての配線はブレッドボード上で行います。
ステップ3: モータードライバー(L293D)配線
L293Dは2つのHブリッジを内蔵し、最大4つのDCモーターを制御可能。左右のモーターをそれぞれ並列接続し、2チャンネルで駆動します。
接続ピン割り当て:
- ENA (Enable A) → Arduino D10 (PWM)
- ENB (Enable B) → Arduino D11 (PWM)
- IN1 (M1方向) → Arduino D4
- IN2 (M1方向) → Arduino D5
- IN3 (M2方向) → Arduino D6
- IN4 (M2方向) → Arduino D7
- VCC1 (ロジック電源) → Arduino 5V
- VCC2 (モーター電源) → 外部バッテリー+
- GND (全て) → Arduino GND、バッテリー-、共通接続
左側2モーターをOUT1/OUT2、右側2モーターをOUT3/OUT4に並列接続。
ステップ4: HC-05 Bluetoothモジュール接続
- HC-05 TX → Arduino D2 (SoftwareSerial RX)
- HC-05 RX → Arduino D3 (SoftwareSerial TX) ※分圧必要
- VCC → 5V、GND → GND
ステップ5: 外部バッテリー接続
DCターミナルブロック経由で外部バッテリーをL293DのVCC2/GNDに接続。ArduinoにはUSBまたは別途5Vレギュレーター経由で給電。
Arduinoスケッチ
Dabbleライブラリが必要です。ライブラリマネージャで「Dabble」を検索・インストール、またはGitHubから取得してください。
/*
* Dabbleアプリのゲームパッドモジュールで4輪ロボットを制御
* HC-05 Bluetoothモジュール使用、UNOの場合ボーレート38400以下推奨
* 接続: HC-05 TX→D2, RX→D3
* Written by Punit Chotaliya, STEMpedia
*/
#define CUSTOM_SETTINGS
#define INCLUDE_GAMEPAD_MODULE
#include <Dabble.h>
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(2, 3); // RX, TX
#define motor1_en 10 // 左モーターPWM
#define motor2_en 11 // 右モーターPWM
#define motor1_dir1 4 // 左モーター方向1
#define motor1_dir2 5 // 左モーター方向2
#define motor2_dir1 6 // 右モーター方向1
#define motor2_dir2 7 // 右モーター方向2
void setup() {
Serial.begin(9600);
BTSerial.begin(38400);
Dabble.begin(BTSerial); // SoftwareSerial渡し
for (unsigned int i = 4; i < 8; i++) {
pinMode(i, OUTPUT);
}
pinMode(motor1_en, OUTPUT);
pinMode(motor2_en, OUTPUT);
}
void loop() {
Dabble.processInput(); // アプリからのデータ更新
if (GamePad.isUpPressed()) {
Serial.println("UP");
forward();
} else if (GamePad.isDownPressed()) {
Serial.println("DOWN");
backward();
} else if (GamePad.isLeftPressed()) {
Serial.println("Left");
left();
} else if (GamePad.isRightPressed()) {
Serial.println("Right");
right();
} else {
Serial.println("Stop");
Stop();
}
}
void forward() {
analogWrite(motor1_en, 255);
analogWrite(motor2_en, 255);
digitalWrite(motor1_dir1, HIGH);
digitalWrite(motor1_dir2, LOW);
digitalWrite(motor2_dir1, HIGH);
digitalWrite(motor2_dir2, LOW);
}
void backward() {
analogWrite(motor1_en, 255);
analogWrite(motor2_en, 255);
digitalWrite(motor1_dir1, LOW);
digitalWrite(motor1_dir2, HIGH);
digitalWrite(motor2_dir1, LOW);
digitalWrite(motor2_dir2, HIGH);
}
void left() {
analogWrite(motor1_en, 255);
analogWrite(motor2_en, 255);
digitalWrite(motor1_dir1, LOW);
digitalWrite(motor1_dir2, HIGH);
digitalWrite(motor2_dir1, HIGH);
digitalWrite(motor2_dir2, LOW);
}
void right() {
analogWrite(motor1_en, 255);
analogWrite(motor2_en, 255);
digitalWrite(motor1_dir1, HIGH);
digitalWrite(motor1_dir2, LOW);
digitalWrite(motor2_dir1, LOW);
digitalWrite(motor2_dir2, HIGH);
}
void Stop() {
analogWrite(motor1_en, 0);
analogWrite(motor2_en, 0);
digitalWrite(motor1_dir1, LOW);
digitalWrite(motor1_dir2, LOW);
digitalWrite(motor2_dir1, LOW);
digitalWrite(motor2_dir2, LOW);
}
Dabbleアプリでの操作方法
- スマホでGoogle Playから「Dabble」をインストール
- アプリ起動 → Bluetoothアイコンタップ → HC-05とペアリング・接続
- モジュール一覧から「Gamepad」を選択
- 左側の方向ボタンで操作:
- ↑ 前進
- ↓ 後進
- ← 左旋回
- → 右旋回
- ボタン離すと自動停止
トラブルシューティング
- モーターが動かない:外部バッテリー電圧確認、L293DのVCC2接続確認、GND共通化確認
- 片側のみ動く:モーター並列配線の片側が外れている、またはドライバー出力不良
- Bluetooth接続不可:HC-05ボーレート確認(デフォルト38400/9600)、分圧回路確認、ペアリング解除後再ペアリング
- 動作が不安定:バッテリー容量不足、モーター起動時の電圧降下でArduinoリセット→コンデンサー追加や電源分離で対策
拡張アイデア
- 超音波センサー追加で障害物回避・自律走行
- ライントレースセンサーでライン追従
- サーボ搭載でカメラパン/チルト、FPVカメラ搭載
- Dabbleの他モジュール(LEDコントロール、ピンモニター、データロガー等)活用
- シャーシを3Dプリントで自作、見た目カスタマイズ
参考リンク
- Dabble公式ドキュメント: Gamepad Module
- Dabble Arduinoライブラリ: GitHub
- L293Dデータシート: TI公式
製造プロセス
- Bluetooth 制御 Raspberry Pi ロボットに音声フィードバックを追加して構築
- Arduino & Raspberry Pi でインターネット制御ビデオストリーミングロボットを構築
- Pythonで作るWi-Fi制御Raspberry Piロボット - ステップバイステップガイド
- Arduino MegaでPWM制御:プッシュボタン付きLEDフェード制御チュートリアル
- Android加速度センサーで操作するラジコン車両:Raspberry Pi・Arduino・モーターシールド連携
- ArduinoとHC-SR04で作るサーボ駆動障害物回避ロボット
- Arduino UNOで作る完全自律ライントラッカーロボット ─ 入門に最適な自作キット
- Arduinoベースのヌンチャク操作6自由度ロボットアームキット
- Arduino Nanoで音声制御ロボットを自作
- MobBob:Arduino製ロボットをAndroidスマホでシームレスに制御
- PiBot:Arduino駆動の精密ピアノ演奏ロボット