
①ファームウェアの書き込み中に左モータが回転する。
書き込み中にプルアップされるポートがモータ制御用に割り当てられているため。上の写真のようにプルダウン抵抗をつけると良い
②パワースイッチをONにしないと書き込みができない
マイコンボードにUSBを繋ぐとマイコンボード上のLEDが点灯するため、一見書き込みができそうに思えるが。この状態ではSTMマイコンに通電しておらず書き込みできない

①ファームウェアの書き込み中に左モータが回転する。
書き込み中にプルアップされるポートがモータ制御用に割り当てられているため。上の写真のようにプルダウン抵抗をつけると良い
②パワースイッチをONにしないと書き込みができない
マイコンボードにUSBを繋ぐとマイコンボード上のLEDが点灯するため、一見書き込みができそうに思えるが。この状態ではSTMマイコンに通電しておらず書き込みできない
資料が複数サイトにあって迷うので備忘録
RT社
Training Tracer Ver.2 Download Contents
組み立てマニュアル、Arduinoサンプルスケッチ
GitHub – rt-net/TrainingTracer_V2_Hardware: Training Tracer Ver.2のハードウェア資料です
CPUボードの改造箇所、回路図
MathWorks社
Line Trace for Micromouse with Simulink – File Exchange – MATLAB Central
Simulinkのモデル
GitHub – mathworks/Line-Trace-for-Micromouse
同上、MATLAB環境構築方法など
How to Make a Line-Following Robot Using STM32
解説動画
マイクロマウスで学ぶ!ロボティクス開発 × モデルベースデザイン入門
54分30秒~解説
ハーフマウスで50mAh程度のリポを使いたい場合に、それを1Cで充電できる充電回路がなかなか見つからない
市販のラジコン用充電器は最低でも100mAの充電電流になっている。
というわけで50mAで充電できるICを調査してみる
Microchip系のICはバッテリを4.2Vまで充電するためには、バッテリ電圧+1Vの電源電圧が必要そうな記載だし、実際に図表にもVDDが5.2Vと書かれている。
LiPoバッテリー充電コントローラ(MCP73831T) – 電子工作専科でも4.2Vまで充電できなかったことが示されている
USB等の5Vの電源動作時に4.2Vまで充電できるかどうかがあやしいので使うのは見送る
LTC4054L-4.2は5Vの電源でも4.2Vの充電ができそうだし、充電電流も10mA~150mAとハーフマウスのバッテリーにはちょうど良い範囲にあるが、割高感がある。
最近流行のTop Power ASIC社のICならTP4056XやTP4057もデーターシートに充電電流50mAの設定が記載されている
Amazonとかで格安で販売されているTP4056搭載の充電モジュールはどのメーカのセカンドソース品が乗っているかは分からないが、もしかしたら回路定数を変えると50mAにできるかもしれないし、ピンコンパチであるなら上記のTop Power ASIC社製のTP4056Xに置き換えて使えるかもしれない
この記事はマイクロマウス Advent Calendar 2025の2日目の記事です。1日目の記事は社畜博士によるロボトレース競技に使えるギヤ付きホイールの作り方の紹介でした。
マイクロマウス大会のスポンサーであるMathWorks社からMATLABのライセンスを提供してもらえているので、せっかくなのでMATLABを使って壁センサの線形化をやってみた。
ちなみに去年までは壁センサからの値の常用対数そのまま利用していて制御的には困っていなかったけれど、物理量(距離)への変換をしていないため、壁との距離を直観的に把握することができなかったことが少し不便だった。
ということでmatlabを使ってセンサの線形化をした手順の紹介
①治具を使って壁とロボットの距離を可変できるようにする

②壁との距離を変えながらセンサの値を取得する。今回はロボットの前後方向の中心が柱の位置にある場所を45mmとして、ロボットが区間の中心にある場所を90mmとした。L列に左前センサの値、R列に右前センサの値を記録する

③測定結果をテキストファイルに保存する

④matlabを立ち上げてデータのインポートボタンを押して、③で作ったテキストファイルを選択する

⑤インポートツールが立ち上がるので選択のインポートを押したのち、画面を閉じる

これで変数maekabeがmatlabにインポートされる

⑥matlabメイン画面のアプリのタブに移動して、アプリの一覧から曲線フィッターを選択して、曲線フィッターを立ち上げる
⑦データの選択を押して、X軸に変数maekabeのセンサの値の列を、Y軸に変数maekabeの壁との距離の列を選択する

⑧近似曲線から対数を選ぶとフィッティングされるので、右下の近似パラメーターの値a,bをメモする。

⑨マウスのソフトに組み込む
今回の実装では、自然対数の計算は遅いのでテーブルln_table[]を作成してそれを参照するようにし、
また、距離分解能が1mm刻みだと少し荒く感じたので、45mm=450になるように近似パラメーターa,bをそれぞれ10倍して反映させている

以上の手順によって、matlabを使うことで手早くセンサの線形化ができた
明日のAdvent Calendarはあこちゃんによる誰でも作れる、シリコンタイヤ !です

新作の樹種部品が届いた。2.46g
熊本高専で行われた第34回マイクロマウス九州地区大会。
Simulinkで書いたロボトレースとマイクロマウスタックチャンを持って大会に参加
大会を運営してくださった熊本高専の皆様ありがとうございました。


RX671にASM330LHHを接続して
SPIの設定をRX スマート・コンフィグレータで自動生成して使いこなす。
SPIの設定は上の画像の通りで、関数の使い方は、
データの準備、送信用の配列と受信用のuint8_t 型の配列を準備します
送信用の配列:
配列の1番目には、アクセスするアドレスを格納します。
配列の2番目には、データ書き込みの場合に送信するデータを格納します。3番目以降の要素は空で構いません。
受信用の配列: 受信データは、配列の2番目以降に格納されます。
1バイト受信する場合、データは配列の2番目に格納されます。
2バイト受信する場合、データは配列の2番目と3番目に格納されます。
配列の1番目の要素には何も格納されません。
データの転送
1バイト送信/1バイト受信: アドレスを含めて合計2バイトを転送します。
送信: アドレス+1バイト
受信: 1バイト
1バイト送信/2バイト受信: アドレスを含めて合計3バイトを転送します。
送信: アドレス+2バイト
受信: 2バイト
自分用に1から書くほうが関数の使い勝手は良いけれど、自動生成によって簡単に設定を変えれることや他のマイコンへの移植を考えると積極的に使っていきたい。
uint8_t command_request[3];
uint8_t response_reply[3];
R_Config_RSPI0_Start();//RSPI0モジュールの開始
//1バイト書き込み
command_request[0]=0x12; //12h CTRL3_C
command_request[1]=0x01; //01 ソフトウェアリセット
R_Config_RSPI0_Send_Receive(command_request,2,response_reply);
wait_ms(1);//通信完了までややまつ
//1バイト読み込み
command_request[0]=(0x0F|0x80);//0Fh :who am I Reg(Hex) *読み取り時は最上位bitに1がつく
command_request[1]=0x00;//2バイト目は空データ
R_Config_RSPI0_Send_Receive(command_request,2,response_reply);//1バイト読み込む場合には2バイト送信する
wait_ms(1);//通信完了までややまつ
if(response_reply[1]==0x6B){SCI_printf("OK");}else{SCI_printf("NG");}
SCI_printf("\r\n");
command_request[0]=0x10;//加速度センサと温度計ON 10h
command_request[1]=0xA8;//2バイト目は書き込むデータ
R_Config_RSPI0_Send_Receive(command_request,2,response_reply);
wait_ms(1);
//2バイト読み込み
command_request[0]=(0x20|0x80);//読み取り:温度 //Reg(Hex) 20h *読み取り時は最上位bitに1がつく
command_request[1]=0x00;//2バイト目は空データ
command_request[2]=0x00;//3バイト目は空データ
R_Config_RSPI0_Send_Receive(command_request,3,response_reply);
wait_ms(1);
tmp_short=(response_reply[2]<<8|response_reply[1])/256+25;//2バイト目と3バイト目を使用する
SCI_printf("tmp=%d\n\r",tmp_short);

ライントレーサーロボットキットTypeRをMATLABに繋いだ備忘録
このキットにはArduino Nanoの互換品が搭載されているが、MATLABのハードウェアセットアップから自動で認識されない。ボードとポート番号を手動でセットアップすると接続確認とテストファームの書き込みはできるが、その後の目的のファームをSimulinkから書きこむところでエラーになる。
互換品でも例えばArduino Megaの互換品では書き込みもできるため、何かしらオリジナルのArduinoとの差が原因かもしれない。問題の互換品とオリジナルのArduino NanoではUSBシリアルICがFDTIとCH340とで異なる点が問題なのかもしれない
そうはいってもArduino NANOは古い設計であるしMCUのパワーも低いため改めてオリジナルを購入するのは気が引ける。そこで最新のR4世代のボードに乗せ換えた。最新のArduino NANO R4はまだMATLABが対応していないためR4 minimaに入れ替えるとハードウェアセットアップから自動で認識して問題なく書き込むことができた。
次にぶつかった課題は今度はI2C接続のジャイロセンサが反応しないこと、調べるとこちらArduino UNO R4でI2Cモジュールが使えない!?原因と解決事例紹介の症状のようで、ジャイロをレベルシフタ付きのBNO055使用 9軸センサーフュージョンモジュールキットに交換することで対処した

大阪電気通信大学で開催された2025年度マイクロマウス関西地区大会は、出走台数が100台を超える大盛況で、非常に規模の大きな大会となりました。スタッフ、来賓、そして参加者の皆様、本当にお疲れ様でした。
前日の試走では、直線距離や最終速度が合わず、まともに走行できない状態に。原因を調査し、タイヤの滑りや電気的な不具合を疑いましたが、特に問題は見つからず。最終的には、走行モジュールとはまったく関係のない、迷路解法のダイクストラ法の処理内で一時的に使用していた変数をintで複数回宣言していたものを、初回のみshortで宣言するよう修正したところ、なぜか解決するという不思議な結果に…。
個人成績は優勝でした。16×16区画の課題の過去最大難易度と言われる今回のレイアウトは、4輪マシンが有利だったように思います。