先日M5StickC Plusを使ってスマホからのラジオコントロールに対応したロボットカー(下図)に、遊び心を取り入れて見たいと思います。
世の中、遊びが無いとギスギスとして、うまく回りませんから、大切な事だと思います。
前回、ロボットカーの制御システム「UNO 3.3V化328duino」に、音楽演奏と電飾の制御コマンドを追加しましたので、今回はラジオコントロール制御モジュールM5StickC Plusの機能を拡張します。
以下の記事にて、WiFi無線通信を使ったロボットカーのラジオコントロールに対応しました。
「#29-5 ロボットカーを組み立てよう(無線操縦)」
上の記事では、M5StickC Plusと、その開発環境の一つであるUIFlowを使いました。UIFlowには、Remote+と言うスマートホンとの連携機能があるので、これを使う事で、とても簡単にスマホからの無線操縦を実現することができました。
予言?予告?してあったのですが、ロボットカーに追加した演奏電飾機能を制御するため、スマホの制御ページにも、コントロールを追加して行きます。コントロールの操作に応じて、M5StickC PlusからUART経由で328duinoへ、シリアルモニタコマンドを送信すれば良いのです。
RGB LEDパネルの電飾を使って、自動車のウインカやヘッドライト、パトランプ等を模擬した表示を行う動作モードを実装しました。328duinoのシリアルモニタコマンドにて、動作モードを切り替えることができます。
M5StickC Plusとスマホを使ったラジオコントロールでも、動作モードを切り替えられるようにしておきたいと思います。
動作モードの切り替えにはボタンコントロールを使います。
後ほど、スマホの制御ページをご覧に入れますが、意外と各ボタンが幅(空間)を取るので、動作モードを増やす場合には要注意です。
現在のロボットカー無線操縦は、アナログジョイスティック操作で実装されています。
ジョイスティックの操作に従って繊細な操縦が可能、な、ハズなのですが、実際に操縦してみると、そう上手くは行かないことが判りました。普通は、速さを変えようとしてジョイスティックを操作すると、ブレてしまって方向も同時に変化してしまうからです(逆もまた然り)。
そこで、ジョイスティックを目いっぱい倒した時の最高速度、すなわち、モータを駆動するPWMの最大デューティ値を制限しようと考えました。スライダコントロールの取る値を0〜4の5段階に設定しておき、以下の通りとします。
ロウギアで136(=mtr_MIN_DUTY)、トップギアで255が最大値となる様に、ブラシDCモータを駆動するPWMの最大デューティ値を制限することで、走行速度を制御し易くする工夫です。
ラジオコントロールカーをアナログジョイスティック一本で自由自在に操縦できる「強者」ならまだしも、普通の人は進行方向を変えようとジョイスティックを操作すると、一緒に速さも変化してしまって、思った通りに操縦できません。
スライドコントロールを使ったギア制御によって、モータを駆動するPWMの最大デューティ値を制限すると、「強者」ではない「普通の人」でも、多少、操縦し易くなることを期待できます。
最後は、任意のコマンドを送信可能なコントロールです。
328duinoの制御プログラム(シリアルモニタコマンド)には実装されているけれど、M5StickC Plusのラジオコントロールプログラムに実装されていない機能は本来、操作不可能です。
スマホの制御ページにテキスト入力コントロールを配置しておき、入力されたコマンドをUART経由で328duinoのシリアルモニタへ送信する機能を設けておくと、任意のシリアルモニタコマンドを送信して、328duinoを制御する事が可能になります。
328duino側プログラムに実装した、全てのコマンドを実行可能です。つまり、今後、328duino側の制御プログラムに新たな機能(新コマンド)を追加した場合にも、実行可能と言う事です。グッと、拡張性が増して、応用も広がります。
こうなると、コマンドを実行した結果、328duinoからの応答(送信データ)も、M5StickC Plusで受信して確認できるようにしておきたいところです。M5StickC Plus側のプログラムでは、UART設定ブロックに於いて受信端子(rx)を指定せざるを得なかったため、既に受信端子が割り当たっています。
具体的な追加コードについては、完成したプログラムでご確認ください。詳細説明は割愛します。
前節までの検討結果を反映した、スマホの制御ページは以下図の様になりました。
上に配置したコントロールから順に解説して行きます。
そもそも、ジョイスティックコントロールが幅を取っているので、他の機能を追加したところ、上図の如く縦に長〜くなってしまいました。全てのコントロールを1画面内に収めることができないため、制御ページにスクロールバーが表示されてしまいます。スワイプしないと全てのコントロールにアクセスできないのは欠点と言えば欠点ですね……、止む無しです。
同時に操作したいコントロールがある場合、スワイプした時に、それらのコントロールが同時に1画面内に収まるよう設計する、といった工夫が必要でありましょう。まあ、工夫次第です。
「ハードウェア」と言っても、今回新たに追加する回路は、有りません。ここまで、何回かに分けて拡張しながら組み上げてきたので、回路図や接続表が色々な所に分散してしまいました。本ページで全ての回路図と接続表を統合しておこうと思います。
【制御モジュール、UNO 3.3V化328duino】
【モータドライバモジュール】
【R/C演奏電飾モジュール】
【タコメータモジュール】
前節に示した回路(モジュール)をブレッドボードなどに構築して、各モジュールを以下接続表に従い接続すると、ロボットカーの完成です。
R/C演奏電飾 モジュール |
接続 |
UNO 3.3V化 328duino |
接続 |
モータドライバ モジュール |
接続 | 電池ボックス |
Vcc | ← | Vcc | ← | Vs | ← | +電極(4.8V) |
Vss(※注1) | ||||||
GND | ⇔ | GND | ⇔ | GND | ⇔ | −電極 |
D5(OC0B) | → | ENB12 | ||||
D4 | → | IN1 | ||||
D6(OC0A) | → | IN2 | ||||
D7 | → | ENB34 | ||||
D8 | → | IN3 | 接続 | ロボットカー | ||
CN3 | → | モータ#1 | ||||
CN4 | → | モータ#2 | ||||
接続 |
タコメータ モジュール |
|||||
Vdd(※注2) | ← | Vdd(3.3V) | → | Vdd | ||
TXD | → | RXI | ||||
RXD | ← | TXO | ||||
CTS | ← | D16(RTS) | ||||
BUZO | ← | D9(OC1A) | ||||
RGBS | ← | D3(OC2B) | ||||
GND | ⇔ | GND | ||||
D12(PCINT4) | ← | TCHO1 | ||||
D17(PCINT11) | ← | TCHO2 |
ソフトウェアについても、まとめておきます。マイコンに書き込むプログラムは以下の通りです。
あと、制御ページを開くためのスマホが必要ですので、ご用意ください。最低限、WiFiネットワークに接続して、M5StickC Plusと通信できるスマホが必要です。
※制御ページのURLをPCのブラウザで開いて操作することもできます。ただし、一部動作しないコントロールが存在するなど、あまり使い勝手は良くありません。
前節回路図の通り、ロボットカーを組み立てたら、スマホでM5StickC PlusのTFTディスプレイに表示されたQRコードを読み取って、制御ページを開いてください。
以下に実験中の様子を示します。
前回の実験と同様な操作を、今回はスマホの制御ページからM5StickC Plus経由で実行してみましょう。シリアルモニタからコマンドを入力していた代わりに、ボタンやジョイスティックを操作するだけで、指示した通りに操縦することができましたか?
当方の実験中の様子を動画にしてみましたのでご確認ください。
市販のラジオコントロールカーの中にも、ヘッドライトくらいは点灯できるものがあるかもしれませんね?しかし、ウインカとかブレーキランプ、ハザードランプ、果ては非常灯やサイレンまで鳴らせる商品は見つかるでしょうか?コツコツと自力で組み上げたロボットカーならでは、だと思いませんか?