エンジニア「くがとしお」のレベル上げ

エンジニアとして色々なことができるように資格取得、電子工作、アプリ開発を頑張ります。

【車型ロボ Rev.1.0】PS3コントローラで操作可能なmbedラジコンカー

      2016/04/26

DSC01839

目標にしていた通り、1月はロボット製作を行っていきます。
電子工作をやるのであれば、やはり動くものを作った方が楽しいですよね。
ということで、ラジコンカーを作成していきます。

プロジェクト概要

スケジュール

以下のようなスケジュールを考えています。
今回は、Rev.1.0の製作を紹介します。

Rev. 主な機能
1.0 PS3コントローラーで操作可能なラジコンカー(mbed) ←今ここ
1.1 音声案内機能追加(Raspberry Pi 2)
2.0 画像処理による自動ブレーキアシスト追加(Raspberry Pi 2)
3.0 未定

機能ブロック図

Rev.1.0の機能ブロックは大体こんな感じです。

diagram_rev1

 

スポンサードリンク

実際の作業

部品の調達

モーター制御は、mbedとモータードライバICを使用します。
PS3コントローラとの通信はBluetoothドングルが必要です。

今回使用した部品はページの最下部に載せています。

部品一覧はこちら(ページ下部へ移動します)

電子工作では、実績のある部品を使用することが大切です。
まとめて購入した方がお得になりますので、作成時は検討してみてください。

 

組み立て

フレームは拡張性を考慮して、レゴブロックを使用しました。
体内に潜在するごく僅かな工作センスとありったけの童心を活用し
レゴテクニックのパーツで自由にフレームを組みます。

タミヤのツインモーターとボールキャスターを使って
高速に旋回できるようにしています。
レゴブロックとの結合は、M3のネジとスタッドを使用します。
レゴは普通のネジとも繋がるんですね。さすがレゴ!すごいー!(ノ)゚Д゚(ヽ)

DSC01754

 

ノイズ対策

モーターは、ノイズキラーコンデンサを付けておきます。
これが無いとモーターのノイズで他のCPUやICが正しく動作しなくなるためです。

次のようにノイズキラーコンデンサを付けて、問題なく動作しました。
1)+極と-極(0.1uF)
2)+極とモーターの金属部分 (0.1uF)
3)ー極とモーターの金属部分 (0.1uF)

ちなみに、これを付けないとプログラムが暴走してしまい、
モーターが回りっぱなしになってしまいました。

DSC01757

 

電子部品の配線

mbedとモータードライイバICのL293Dをブレッドボード上に配線していきます。

MBED_rev1

 

usb_pin

USB pin no. USB 接続先
1 VCC 5V
2 D- mbed p32 USB D-
3 D+ mbed p31 USB D+
4 GND GND

プログラミング

mbedデベロッパーズサイトにある「PS3_BlueUSB」を使います。
PS3コントローラとの通信を簡単に実装できます。
というよりも、そのままです。

(1) プロジェクトをインポート
(2) ビルド後、mbedにダウンロード
(3) BluetoothドングルをUSBソケットに挿入します。
(4) mbedとターミナルソフトでシリアル通信を行います。
(5) シリアル通信にMACアドレスが表示されるため、コピーする。
Local Address: XX:XX:XX:XX:XX:XX
(6) AutoEvents.cppの261行目付近にあるMACアドレスを先ほど調べたMACアドレスに変更します。
u8 my_mac[6] = {0x00, 0x1B, 0xDC, 0x06, 0x49, 0xBE};
(7) ビルド後、mbedにダウンロード
(8) PS3コントローラをUSBソケットに挿入します。
(9) mbedをリセットすると、PS3コントローラにBluetoothドングルのMACアドレスが登録されます。
(10) hci.cppを以下のように修正します。

int HCI::WriteScanEnable()
{

// u8 buf[2];
// buf[0] = 0x03;
// buf[1] = 0x01;

u8 buf[1];
buf[0] = 0x03;

SendCmd(HCI_OP_WRITE_SCAN_ENABLE,buf,sizeof(buf));
return 0;
}

 

int HCI::AcceptConnection(const BD_ADDR* addr)
{
// u8 buf[6+4];
u8 buf[6+1];
memset(buf,0,sizeof(buf));
memcpy(buf,addr,6);
// buf[7] = 0;
buf[6] = 0;

SendCmd(HCI_OP_ACCEPT_CONN_REQ,buf,sizeof(buf));
return 0;
}

(11) ビルド後、mbedにダウンロード
(12) BluetoothドングルをUSBソケットに挿入します。
(13) PS3コントローラの真ん中のPSボタンを押すと、Bluetooth接続されます。

デモ

これで、Rev.1.0 PS3リモコンで制御できるラジコンカーが完成しました。
デモ走行は下記動画をご覧ください。(音が出ます。)

電子工作

使用部品一覧

今回使用した部品を参考までに記載しておきます。
今回使用したプログラムは、下記部品を使用することを前提に作成されています。
・mbed NXP社製 LPC1768
・モータードライバIC STMicro社製 L293D

電子工作をする場合、実績が有る部品を使用することが大切です。
自身が無い方は、上記部品だけでも同じ部品を使用することを推奨します。

制御対象

制御対象となるラジコンの部品は以下の通りです。

フレーム
拡張性を考慮し、レゴテクニック系のパーツでフレーム部分を組み立てます。
今回のラジコンのフレームであれば、1000円程度の商品が2,3個あれば足りると思います。

資金に余裕があるのであれば、レゴテクニックの大きな商品を買っておくと
色々とやりたいことができるのでオススメです。
レゴは、世代を超えて遊べることができるので買っておいても損はないと思います。

タイヤ

タイヤはタミヤのスポーツタイヤを使います。

モーター

ラジコンが左右に曲がることができるようにモーターを2つ使います。
今回は、タミヤのツインモーターを使います。

ボールキャスター

高速に旋回できるようにタミヤのボールキャスターを使います。

電子部品

mbed

mbedは、アナログI/O、PWMを複数持っています。
ラズパイ2は、アナログ処理、リアルタイム処理が 苦手のため、mbedで行います。

モーター制御、PS3コントローラとのBluetooth通信を行います。

モータードライバIC L293D

モーター制御を簡単にするICです。
2つのモーターの正転、逆転を簡単に制御できます。
僕はこちらから購入しました。

Bluetooth dongle

PS3コントローラーとBluetooth通信を行うための部品です。
PLANEX Bluetooth USBアダプターBT Micro4 を使用します。

電源

ブレッドボード用 電源モジュール

モバイルバッテリーの電源をブレッドボードに供給するための部品です。
あると便利です。僕はこちらを使用しました。

 - 電子工作 , ,

PAGE TOP