Bluetooth操作のArduinoスパイボットを自作する
必要な部品と材料
- Arduino UNO × 1
- HC-06 Bluetoothモジュール × 1
- Arduino Proto Shield(またはピンヘッダ付きユニバーサル基板) × 1
- Adafruit Motor/Stepper/Servo Shield V2 × 1
- SM-S4306R 連続回転サーボ × 1
- DCモーター(汎用) × 4
- モータータイヤ × 4
- ジャンパワイヤ(汎用) × 8
- 単4電池ホルダ(4本用) × 2
- 単4電池 × 8
- スマートフォン(Nokia Lumia 520使用) × 1
- スマートフォンホルダー × 1
- 自作シャーシ(木板使用) × 1
使用するアプリとオンラインサービス
- Johnny-Five(Node.jsロボティクスフレームワーク)
プロジェクト概要
簡単な紹介
Bluetoothで操作する4輪ロボットカーです。スマートフォンを搭載してIPカメラとして利用できます。Node.js製Webサーバーで操作画面とカメラ映像をブラウザ表示し、JavaScriptで制御します。

サーバー起動後、操作説明とカメラビューを備えたレスポンシブな画面が表示されます。

シャーシの製作
今回は自作シャーシに挑戦しました。ドリルなどがなければ市販のプラスチックシャーシを使うのが無難です。自作する場合、差動操舵で旋回するならタイヤ同士をできるだけ近づけるのが鉄則です。参考:4-Wheel-Drive Robot Design
DCモーターの固定には結束バンド(150/3.5)を使用。タイヤ取り付け穴は精密に開け、モーター1つにつき2本の結束バンドで固定しました。それでもモーターが真っ直ぐ固定できず、前進/後退時に左右にズレることがあります。
バッテリー
8本の単4電池を1つの電源としてまとめました。シャーシに8本ホルダのスペースがなかったため、4本ホルダ2個をネジで連結し、プラスチックに穴を開けて固定しました。
電源供給
Arduino Unoには8本の単4充電池で給電。モーターシールドにはジャンパーを外してArduinoからの給電を遮断し、シールドの電源ピンから別途給電することも可能です。詳細はAdafruit公式ガイドを参照。
無線接続
HC-06 BluetoothモジュールでPCと通信。配線を最小限にするため、プロトシールドにモジュールを載せ、裏面で配線・ピンヘッダをハンダ付けして着脱可能なカスタムシールドを作成しました。


セットアップ手順:Johnny-Five公式Wiki
動作
前進・後進・差動操舵による旋回が可能。カメラホルダーは連続回転サーボで取り付け、車体を動かさずに見回せます。短いデモ動画を参照してください。
スマートフォン
Nokia Lumia 520と「Win IP Camera」アプリを使用。ストアリンク
コードについて
JavaScript開発者としてNode.js製Webサーバーとフロントエンドをモジュール化しました。エントリーポイント例:
var boardModule = require('./src/boardModule'),
servoModule = require('./src/servoModule'),
motorModule = require('./src/motorModule');
boardModule.initBoard().then(function() {
motorModule.initMotors();
servoModule.initServo();
});
フロントエンドもモジュール分割:
import {moveWheels, stopWheels} from './wheelsControl';
import {moveServo, stopServo} from './servoControl';
document.onkeydown = checkKeyDown;
document.onkeyup = checkKeyUp;
function checkKeyDown(e) {
moveWheels(e.keyCode);
moveServo(e.keyCode);
}
function checkKeyUp(e) {
stopWheels(e.keyCode);
stopServo(e.keyCode);
}
全コードはGitHubリポジトリで公開。
使用ライブラリ
- express.js - Node.jsアプリ拡張
- johnny-five - Arduino JavaScript制御API
- socket.io - バックエンド/フロントエンド間WebSocket通信
- susy - レイアウトとレスポンシブデザイン
- Google Material Design - マテリアルUI要素
- gulpJS - タスク自動化
- BabelJS - ES6トランスパイル
- Browserify - モジュールサポート
最後に
IoT初心者の第一作です。最適解ではないかもしれませんが、何か参考になれば幸いです。
コード
GitHubリポジトリ
https://github.com/dominikfilkus/arduino-spybot-V2
回路図
arduino-spybot.fzz(Fritzingファイル)
製造プロセス
- ILI9341 2.4インチTFTタッチシールドでのビットマップアニメーション実装ガイド
- Web制御DMX照明システム:Arduino Megaマスターコントローラー
- FlickMote:ジェスチャー操作のIRリモコンでスマートホームを制御
- 自作Arduino TV-B-Gone:全テレビ対応の万能リモコン
- 12メートル先から見える大型LEDマスタークロック(アラーム機能付き)を自作しよう
- HSVクロック:Arduino愛好家向けの鮮やかでカスタマイズ可能な時計
- Android加速度センサーで操作するラジコン車両:Raspberry Pi・Arduino・モーターシールド連携
- ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
- Arduinoプロジェクトのための最適化電源ソリューション
- Arduino三目並べ:MAX7219 LEDマトリクスと段ボールケースで自作
- スマートArduino四足歩行ロボットの製作:ステップバイステップガイド