
前回の予想をもとにAmazonで販売されているTP4056搭載の充電モジュールを購入してみる。
ラッキーなことにモジュールがVカットで割板されていなくて機構は3つ繋げた状態で使用することができた。ちなみに電源は基板の裏面でUSBからの給電をジャンパして3つのモジュールに振り分けている。
モジュールに搭載されているICはTP4056Xではないようで充電電流はデータシートの値の抵抗にしてもずれていた。といっても電流を実測しながら抵抗値を調整するとターゲットの電流に設定できた。
100mA未満のセル毎に充電するにはこれで十分なように思う。
マイクロマウス
大会に出せなかった機体

2025年大会用に開発してたけど運動性のが悪くお蔵入りした機体。
マイコンをRX631からRX671に変更してスマートコンフィギュレーターのコードを利用するソフト開発に移行したのと、バッテリを3セル構成にして高速域での加速性能向上、機体ヨー慣性を減らしてターン速度を上げようと試みた。しかし、左右のターン特性が大きく異なるのと、ターンの再現性が低く大会には持ち込めなかった
吸引力不足もMK07-3.3を10V駆動で使っても、同じファンをCL-0614-10250-7の6.5V駆動に比べて吸引力が劣っていた。

また、ジャイロを別基板にして振動を逃がす構成にチャレンジするも、ジャイロ子基板を固定する両面テープの面積を小さくしすぎて、基板間のワイヤーの張力にスポンジが負けて水平に設置できなかった
マイクロマウス2025

大会を運営してくださった皆様ありがとうございました
運よく5回完走でき3位入賞と、マイクロマウスタックチャンでも特別賞を頂きました
試走日の土曜日は試走時間のロスタイムに駆け込み何度か探索走行を確認。探索していると変なところでターンして壁にぶつかる。撤収前に一度だけ発生時の様子を録画することができたのでマウスパーティに向かう。
その夜に録画とプログラムを見返していると、右ターン中に左壁の壁切れの検出を無効にしそびれていて、その影響で直線に入った直後に壁切れが起きたとして距離補正が誤動作していた。ただし、このバグは2023年から入っていたようなので、今までは運よくターン中の壁の反射が低くて壁切れ条件を満たしておらず、処理が漏れていても問題なかったのが、今回の大会環境では壁の反射量が大きかった為に壁切れ判定が動作して露呈したようだ
大会本番、出走順が真ん中くらいだと全面探索した人が少なくて誰も走っていない箇所を走るとタイヤへの埃の付着が多い。ちょっとオートスタートは厳しいかなと思っていた矢先にリタイヤ。それでもほぼ全面探索ができており、最短経路ではないけれどそこそこいい経路までは取得できていた。

黄色が最短経路候補の未探索区間。
2~4走目は直線速度、加速度、ターン速度の様子を見ながら走行して5走目は最大パラメータで完走できた。
直線速度6.5m/s,直線加速度40m/ss~20m/ss,斜め速度5m/s,斜め加速度30m/ss~20m/ss,90°ターン2m/s,180°ターン1.8m/s,その他が1.7m/s。ターンの最低速度は去年よりも0.1m/s速いが、数字上同じの加速度は去年よりもリミットを早めにかけているので遅いし、電圧不足で最大速度まで到達していたかも不明。
素晴らしい大会を運営してくださった皆様、ありがとうございました。
小容量リポの充電回路
ハーフマウスで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につなぐ

ライントレーサーロボットキット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軸センサーフュージョンモジュールキットに交換することで対処した
