ゴールデンウィークだが手元にマシンがなく走りに行けず・・・
時間はあるので前から興味のあったM5StickC PLUS2を使い、ラジコンに使えそうなツールを作ってみようと久々の電子工作!!
DSC_1249
秋月電子通商で購入、amazonでも販売しているようだ。
(レビューがないようなので、購入は自己責任でご判断ください。)
M5StickC Plus2 IoT 開発キット IoT
M5Stack









M5StickC PLUS2は小さなボディに液晶画面と様々な機能を搭載している。
 (詳細機能については、SwitchScience製造元ドキュメントで。)
arduino環境で開発でき、ネットにも丁寧に使い方を紹介してくれているページやサンプルプログラムがいろいろある。
サンプルプログラムを見ながら、思い付きでラジコンで使えそうな機能をいくつかまとめて搭載してみた。

「RC Tool」搭載機能
①回転計
②時計
③ストップウォッチ
④角度計測
⑤バッテリーレベル表示


Aボタン:各機能で使用
Bボタン:機能切り替え
Cボタン:OFF時長押しで電源オON、ON時押下で電源OFF
Dボタン:拡張基板に追加。回転計モード時、押下中回転数計測
RCTool

【①回転計】
概要
:タイヤの回転数を反射型フォトセンサで計測。

タイヤに張った反射テープを反射型フォトセンサで検出
センサ立ち上がりから次の立ち上がりまでの時間から、回転数(rpm)を算出する。
狙いの回転数は、SuperGTの4000rpm
4000rpmのタイヤ回転周期は15msec
4000rpmと4001rpmの周期の差は、3.75μsec
ポートのポーリングではこの差は検出不可のため割り込み処理にて計測

用途
:ラジコンのタイヤ回転数チェック
SuperGTではタイヤ回転数制限があったりするようだし、タミチャレでもタイヤ回転数をチェックすることでモーター、バッテリーの状態確認に役立てられるかと思い搭載。

使い方
:タイヤトレッドor側面に反射テープを貼り付け(アルミテープを想定)。
拡張基板のボタン押下した状態で反射テープの回転を計測。
計測中は、最新回転数、最大値、直近10データの平均値を表示
また、補助として受光センサ部の電圧(A/Dの内部数値)を表示。
これを見ながらボリューム抵抗や対象物との距離で感度調整出来るようにしておいた。
(マシンがなくて実機でのテストができてないので、都度改修予定)
DSC_1227

回路
:反射型フォトセンサ(Rohm製RPR-220)を使用。
発光側の赤外線LEDには5.0V、100Ω、Vf=1.34Vtyp.で、約36mAで常時点灯。
省電力のため、出力ポートでLED点灯をON/OFFできるようにしてもよかったかも。
受光側センサはコレクタを3.3V、エミッタとGND間に30kΩ+50kΩボリューム抵抗を接続。
ボリュームで感度調整
センサのエミッタをM5stickCPLUS2のG36/G25ポートに接続。
G36をアナログ入力に設定して電圧を読み取りセンサ感度を可視化。
G25をデジタル入力&割込ポートに設定してマイクロ秒オーダで信号の立上り時間をカウントできるようにした。
(ネット検索ではこのポートを割込み機能に設定できるかどうかの記述は見つけられなかったが、コンパイルでき、それっぽく動いてそうなので良しとした。)
 ↓拡張基板の回路図
回転計用拡張基板回路図_20240506

 ↓拡張用のProtoHat :ケースと蛇の目基板のセット
DSC_1194
 ↓ケースサイズの割に実装エリアが狭い
DSC_1196

 ↓ケースの開口部に合わせ部品を配置
  スイッチはボタン部分の背が高い9.5mmタイプのタクトスイッチ
DSC_1199
 ↓配線は空中配線で無理やり接続
DSC_1200
 ↓ギリギリタクトスイッチの頭が1mm弱飛び出す。
  ボリューム抵抗もアクセス可能
  反射センサはあえて1.5mmほど飛び出させた。
DSC_1247

結果表示
:ボタンを離すと結果を表示
直近100個のデータを保存しており、その平均値を表示
また、その100個のデータを昇順でソートし
 最大10データの平均値
 中央10データの平均値(分布のピークではない)
 最小10データの平均値
を表示(数値が結構ばらつくので平均値表示にしてみた。)
DSC_1228

データ表示
:デバッグ用に結果表示中にAボタン押下するとデータ100個をソートしたものを表示できるようにしておいた。
最小のフォントサイズ8pxだがなんとか読める。(老眼にはつらいが…)
DSC_1229

【②時計】
概要
:時刻、年月日、曜日の表示
時刻合わせはWiFiを使ってNTPサーバから時刻を取得し補正
こちらのサイトのソースを参考にした。→「M5StickC Plusで時報付きの時計を作る
ただし、1世代前のM5StickCPLUS用でありそのままではコンパイルできなかった。
RTC関連のライブラリが違うようであった。
Arduinoのスケッチ例-M5StickCPLUS2-BASIC-rtc.ino109行あたりを参考に修正。

用途
:時刻の確認

使い方
:Aボタン押下で時刻補正(ただしプログラム上に登録したWiFi接続環境のみで有効)
毎正時に時刻の数だけ音が鳴る
DSC_1230

ボタンA押下でWiFiに接続。NTPサーバから時刻を取得&補正。
このとき何故か9時間ずれることがあるが、数回やり直しで正常な時間に補正される。
DSC_1234

【③ストップウォッチ】
概要
:ワンボタンの簡易ストップウォッチ
スタートと停止のみ。ラップタイム記録はできない。
プログラムはスイッチ押下をループで監視しているだけなので、1000分の1表示だが実際はかなり時間分解能は低い。
そのうち改良しようかな。

用途
:走行タイム計測

使い方
:Aボタンを押下でスタート、Aボタン押下で計測停止
DSC_1235

【④角度計測】
概略
:内蔵の加速度センサを使って角度を表示

用途
:タイヤのキャンバー角度計測を想定

使い方
:本体を立てて計測。
加速度センサは温度などで数値がドリフトするので、Aボタン押下で補正出来るようにした。
DSC_1242
DSC_1245

【⑤バッテリーレベル】
概要
:バッテリーの充電状態を表示
 0〜30%以下:赤色文字
  〜60%以下:橙色文字
  〜100% :緑色文字
用途
:過放電防止

使い方
:たまにチェックして放電しきらないように注意
 これは、タイトル部に常時表示したほうが良いかも。
DSC_1241~2
DSC_1240~2
DSC_1248~2

ひとまず、このGW中に組み込めたのは以上の5機能。
組み込みまでで実機テストはこれから。
使いながら改良、機能追加していこう。