スマートフォンによる簡単な2WDカーのコントロール
<スマホアプリによる2WDモータカーコントロール>
スマートフォンのBluetoothアプリを使って、2WDのロボットカーの制御を
検討して見ました。スマートフォンのアプリとしては、AndroidとiOSで
同じものを提供している2種類を選び、その2種類が同一のソフトで対応
可能なものにして操作上の違い等も確認しました。その時の、状況は次の
様なものでした。
[スマートフォンアプリ]
スマートフォン側のアプリとしては、Android/iOS両方に同じものが有る
次の2つを利用しました。
[主要部品]
使用した部品としては下記のもので、長方形の車体にはSTM8S103Fを
円盤型の車体にはArduino Pro Miniをそれぞれ使用しました。
[構成]
部品を取り付けた状態の車体はそれぞれ下記の様になりました。
1.コントロール用スマホのアプリとしては、BLEJoystick と
LOFI control を使用
2.2WDの車体としては、長方形と円盤型のものを使用
3.CPUとしては、長方形の車体にはSTM8Sを円盤型には
Arduino Pro Miniをそれぞれ使用
4.DCモータ駆動用のHブリッジは L9110 を利用
5.Bluetooth-4.0のデバイスとしてはHM-10を利用
6.駆動用の電源は、Ni-MHを4本(1.2Vx4)にして対応
7.DCモータ駆動時の電圧低下補正用にDC to DC の
ステップアップコンバータを利用
[動作状況]
<テスト内容>
動作の検証に関しては次の事を目標としました。
1.Bluetooth-4.0のデバイスHM-10とのインターフェイスの
動作を確認
2.2つのスマホアプリからのデータ出力のフォーマットを
確認
3.スマホのアプリを利用してロボットカーを制御する状況を
確認
結果としては、ほぼ期待通りの制御ができる事を確認しました。
ただし、2つのアプリで走行方向制御の方法が異なる為、操作に
関しては好みがあるかと思いました。また、Bluetooth-4.0が
簡単に利用できる事も確認できました。
[機器の接続]
[Bluetoothデバイスとの接続]
Bluetoothデバイス HM-10 のアクセスに関しては、下記の様になっていて、
HM-10のBluetoothの無線接続が無効の場合、CPUとHM-10間のATコマンド
が有効となりBluetoothの無線接続が行われている場合は、無線接続
デバイスとのやりとりとなっています。その為、ATコマンドを有効に
するためのスイッチ等は付いていません。
有効なATコマンドの種類に関しては、Bluetooth無線接続が無効の状態で、
HM-10に"AT+HELP"のコマンドを送れば、有効なコマンドのリストが
返送されます。
[Applicationからの出力]
2つのスマホのアプリケーションのデータ出力はそれぞれ異なっており、
BLEJoystickでは1バイト毎に、LOFI controlでは画面上の6個の
アイテムをひとつにまとめて、12バイトのパケットで送っています。
また、LOFI controlではアイテム毎に2バイトを割り付けており、
最初のバイトがアイテム識別用で、次がアイテムのデータとなって
います。
[ホイールの交換]
もともと付いている駆動部分以外のホイールでは、前進と行進を切り
替えると、車体が大きく振れるので、下記の様な別なものと交換しま
した。これにより、前進と行進の切り替え時の振れは止める事が
できました。
[DCモータ制御用PWM]
車輪用のDCモータの駆動に関しては、モータ毎に2つの出力ポートを
用意し、1つはレベルをもう一つはPWMとして、モータの電源を
コントロールする様にしています。なお、CPU全てのポートがPWM
出力用にできる訳ではないので、回転方向の切り替えに関しては、
それぞれのポートの極性を切り替える方法で対応しています。また、
PWMに関しては、モータの起動に、有る程度の時間と電圧が必要と
なるため、低速時にはPWMの周波数を下げています。ただし、
そのままではガタガタするので、目標速度に応じて、PWMの周波数も
動的に変える様にしました。
[CPU基板の電源]
DCモータを駆動すると、モータの負荷により電源電圧が低下し、
CPU等が暴走状態となる場合があるので、DC to DCのステップ
アップコンバータを使って、CPU関連のデバイスの電源電圧を
保証する様にしています。
[コードの書き込み]
それぞれにCPUのコード書き込みに関しては、下記の様に行いました。
なお、STM8S103Fに関しては、IDEを使わないでライターブログラムで
Hexコードを書き込む事で対応できます。
[コードの構成]
STM8S用に関しては、Arduinoのコードを少しの変更で利用できる様に、
ラッパーを用意し、それにより、メインの部分はほぼそのまま使える
様にしています。
[コードダウンロード]
Code download URL : https://drive.google.com/open?id=1uAgdqboBhSCWWrrdcUTOZzy8lqJpobLc