公開日:2024/04/13
title.png

29th Season


#29-10 ロボットカーを組み立てよう(演奏電飾)3

 先日M5StickC Plusを使ってスマホからのラジオコントロールに対応したロボットカー(下図)に、遊び心を取り入れて見たいと思います。

a295_expr.jpg

 世の中、遊びが無いとギスギスとして、うまく回りませんから、大切な事だと思います。

 前回、ロボットカーの制御システム「UNO 3.3V化328duino」に、音楽演奏と電飾の制御コマンドを追加しましたので、今回はラジオコントロール制御モジュールM5StickC Plusの機能を拡張します。

ラジオコントロール制御システムの拡張

 以下の記事にて、WiFi無線通信を使ったロボットカーのラジオコントロールに対応しました。

  「#29-5 ロボットカーを組み立てよう(無線操縦)

 上の記事では、M5StickC Plusと、その開発環境の一つであるUIFlowを使いました。UIFlowには、Remote+と言うスマートホンとの連携機能があるので、これを使う事で、とても簡単にスマホからの無線操縦を実現することができました。
 予言?予告?してあったのですが、ロボットカーに追加した演奏電飾機能を制御するため、スマホの制御ページにも、コントロールを追加して行きます。コントロールの操作に応じて、M5StickC PlusからUART経由で328duinoへ、シリアルモニタコマンドを送信すれば良いのです。

動作モードの切り換え

 RGB LEDパネルの電飾を使って、自動車のウインカやヘッドライト、パトランプ等を模擬した表示を行う動作モードを実装しました。328duinoのシリアルモニタコマンドにて、動作モードを切り替えることができます。

 M5StickC Plusとスマホを使ったラジオコントロールでも、動作モードを切り替えられるようにしておきたいと思います。
 動作モードの切り替えにはボタンコントロールを使います。

 後ほど、スマホの制御ページをご覧に入れますが、意外と各ボタンが幅(空間)を取るので、動作モードを増やす場合には要注意です。

4速ギア

 現在のロボットカー無線操縦は、アナログジョイスティック操作で実装されています。

 ジョイスティックの操作に従って繊細な操縦が可能、な、ハズなのですが、実際に操縦してみると、そう上手くは行かないことが判りました。普通は、速さを変えようとしてジョイスティックを操作すると、ブレてしまって方向も同時に変化してしまうからです(逆もまた然り)。

 そこで、ジョイスティックを目いっぱい倒した時の最高速度、すなわち、モータを駆動する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)を指定せざるを得なかったため、既に受信端子が割り当たっています。

 具体的な追加コードについては、完成したプログラムでご確認ください。詳細説明は割愛します。

スマホの制御ページ設計

 前節までの検討結果を反映した、スマホの制御ページは以下図の様になりました。

a29a_rcar_rc.png

 上に配置したコントロールから順に解説して行きます。

 そもそも、ジョイスティックコントロールが幅を取っているので、他の機能を追加したところ、上図の如く縦に長〜くなってしまいました。全てのコントロールを1画面内に収めることができないため、制御ページにスクロールバーが表示されてしまいます。スワイプしないと全てのコントロールにアクセスできないのは欠点と言えば欠点ですね……、止む無しです。
 同時に操作したいコントロールがある場合、スワイプした時に、それらのコントロールが同時に1画面内に収まるよう設計する、といった工夫が必要でありましょう。まあ、工夫次第です。

ハードウェア

 「ハードウェア」と言っても、今回新たに追加する回路は、有りません。ここまで、何回かに分けて拡張しながら組み上げてきたので、回路図や接続表が色々な所に分散してしまいました。本ページで全ての回路図と接続表を統合しておこうと思います。

【制御モジュール、UNO 3.3V化328duino
a28a_schem.png

モータドライバモジュール
ar63_schem2.png

R/C演奏電飾モジュールupd
a298_schem.png

タコメータモジュール
a303_schem.png

ネットリスト

 前節に示した回路(モジュール)をブレッドボードなどに構築して、各モジュールを以下接続表に従い接続すると、ロボットカーの完成です。

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
BUZO D9(OC1A)
RGBS D3(OC2B)
  GND GND
D12(PCINT4) TCHO1
A3[D17](PCINT11) TCHO2

プログラム

 ソフトウェアについても、まとめておきます。マイコンに書き込むプログラムは以下の通りです。

 あと、制御ページを開くためのスマホが必要ですので、ご用意ください。最低限、WiFiネットワークに接続して、M5StickC Plusと通信できるスマホが必要です。

制御ページのURLをPCのブラウザで開いて操作することもできます。ただし、一部動作しないコントロールが存在するなど、あまり使い勝手は良くありません。

自由度を広げる実験

 前節回路図の通り、ロボットカーを組み立てたら、スマホでM5StickC PlusのTFTディスプレイに表示されたQRコードを読み取って、制御ページを開いてください。
 以下に実験中の様子を示します。

a29a_expr.jpg


 前回の実験と同様な操作を、今回はスマホの制御ページからM5StickC Plus経由で実行してみましょう。シリアルモニタからコマンドを入力していた代わりに、ボタンやジョイスティックを操作するだけで、指示した通りに操縦することができましたか?

 当方の実験中の様子を動画にしてみましたのでご確認ください。




 市販のラジオコントロールカーの中にも、ヘッドライトくらいは点灯できるものがあるかもしれませんね?しかし、ウインカとかブレーキランプ、ハザードランプ、果ては非常灯やサイレンまで鳴らせる商品は見つかるでしょうか?コツコツと自力で組み上げたロボットカーならでは、だと思いませんか?


btn_arduino.png

btn_prev.png btn_next.png

home