こんにちは、プロコアラです。
電子工作をやるのであれば、やはり動くものを作った方が楽しいですよね。
ということで、ラジコンカーを作成していきます。
プロジェクト概要
機能ブロック図
機能ブロックは大体こんな感じです。
ラズパイとmbedとの通信は、GPIOを使います。
実際の作業
部品の調達
モーター制御は、mbedとモータードライバICを使用します。
PS3コントローラとの通信はBluetoothドングルが必要です。
今回使用した部品はページの最下部に載せています。
電子工作では、実績のある部品を使用することが大切です。
まとめて購入した方がお得になりますので、作成時は検討してみてください。
組み立て
フレームは拡張性を考慮して、レゴブロックを使用しました。
体内に潜在するごく僅かな工作センスとありったけの童心を活用し
レゴテクニックのパーツで自由にフレームを組みます。
タミヤのツインモーターとボールキャスターを使って
高速に旋回できるようにしています。
レゴブロックとの結合は、M3のネジとスタッドを使用します。
レゴは普通のネジとも繋がるんですね。さすがレゴ!
ノイズ対策
モーターは、ノイズキラーコンデンサを付けておきます。
これが無いとモーターのノイズで他のCPUやICが正しく動作しなくなるためです。
次のようにノイズキラーコンデンサを付けて、問題なく動作しました。
1)+極と-極(0.1uF)
2)+極とモーターの金属部分 (0.1uF)
3)ー極とモーターの金属部分 (0.1uF)
ちなみに、これを付けないとプログラムが暴走してしまい、
モーターが回りっぱなしになってしまいました。
電子部品の配線
mbedとモータードライイバICのL293Dをブレッドボード上に配線していきます。
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; // buf[0] = 0x03; // buf = 0x01; u8 buf; 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接続されます。