Android加速度センサーで操作するラジコン車両:Raspberry Pi・Arduino・モーターシールド連携
プロジェクト概要
Androidデバイスの加速度センサーで地形走行車両を遠隔操作するシステムです。Raspberry Pi 2 Model BをWebサーバーとして、Arduino 101をI2Cで接続し、DK Electronicモーターシールド経由でDCモーターを駆動します。Windows 10 IoT Core、Visual Studio 2015、CordovaベースのAndroidアプリで構成されています。
構成部品
- Androidデバイス
- Arduino 101
- Raspberry Pi 2 Model B
- DK Electronic モーターシールド
- 公式Raspberry Pi Wi-Fiドングル
- Trust 5V モバイルバッテリー
システムアーキテクチャ
- Androidアプリが加速度センサーデータをAJAXリクエストでRaspberry PiのWebサーバーに送信
- Raspberry Pi(Windows IoT Core)がデータを受信し、I2C経由でArduinoに転送
- Arduinoがデータを解析し、モーターシールドで2つのDCモーター(前進/後進、左/右)を制御
ステップ1:Arduino側 I2Cスレーブ実装
ArduinoをI2Cスレーブ(アドレス0x40)として設定し、Raspberry Piからのデータ受信時に割り込み関数I2CReceived()でモーター制御を行います。受信データの値域でX軸(前進/後進)とY軸(左/右)を区別し、さらに値の範囲で速度と方向を決定します。モーター速度は50〜254の範囲でマッピングされます。ArduinoはRaspberry PiのVoutピンから給電可能です。
Arduinoコード(抜粋)
#include
#include
#define MyAddress 0x40
AF_DCMotor motorhiz(3); // 前進/後進
AF_DCMotor motoryon(4); // 左/右
void setup() {
Wire.begin(MyAddress);
Wire.onReceive(I2CReceived);
motorhiz.setSpeed(254); motorhiz.run(RELEASE);
motoryon.setSpeed(254); motoryon.run(RELEASE);
}
void I2CReceived(int NumberOfBytes) {
ReceivedData = Wire.read();
int ReceivedDataInt = (int)ReceivedData;
// X軸データ (>=100): 100-103=停止, 105-=前進, 155-=後進
// Y軸データ (<100): 0-3=停止, 5-=前進(左), 55-=後進(右)
// 速度計算: (値-オフセット)*係数 + 50, 上限254
}
ステップ2:Raspberry Pi Webサーバー
Windows 10 IoT Core上で動作するWebサーバー(C#)がAndroidからのHTTPリクエストを受け、I2CでArduinoにデータを送信します。コードは「Code」セクションの「Windows IOT Web Server」を参照してください。
ステップ3:Androidアプリ
Visual Studio Cordovaで開発したAndroidアプリが加速度センサーを読み取り、定期的にWebサーバーへAJAX送信します。コードは「Code」セクションの「Android Remote Controller」を参照してください。
接続図
ArduinoとRaspberry PiのI2C接続:SDA↔SDA、SCL↔SCL、GND↔GND、Arduino VIN←Raspberry Pi 5V出力。モーターシールドはArduinoにスタックして使用します。
参考リンク
製造プロセス
- Raspberry PiでPIRモーションセンサーとLEDを制御
- Bridge Shield でスマートロボットを構築:Raspberry Pi と Arduino の統合
- Bluetooth 制御 Raspberry Pi ロボットに音声フィードバックを追加して構築
- Arduino & Raspberry Pi でインターネット制御ビデオストリーミングロボットを構築
- Raspberry Pi でジェスチャー制御ロボットを構築 – 加速度センサーと RF 通信でハンドフリー操作
- Raspberry Pi & Android スマホで Wi-Fi 制御ロボットを構築
- Pythonで作るWi-Fi制御Raspberry Piロボット - ステップバイステップガイド
- Arduino Unoベースの人間検知レスキューロボット:センサー統合ステップバイステップ
- Bluetooth操作のArduinoスパイボットを自作する
- Arduinoと1Sheeldで作る万能Androidリモコン──IR制御で家電を一括操作
- ラズベリーパイとNode-REDでAlexaからLEDを制御する - 簡単ステップバイステップガイド