• もっと見る

<< 2024年04月 >>
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        
診療記録の検索
検索語句
種類別アーカイブ
タグクラウド
最新の診療記録
最新コメント
最新トラックバック
リンク集
※修理技術に関すること以外で、おもちゃ病院に関するご意見・ご感想等がありましたら、ぜひ下のブログからコメント入力してください。
ゆりかご日記
240118 赤外線リモコンカーのプロトコル分析(CH32Vマイコン換装) [2024年01月18日(Thu)]

2024年 最初の患者さま Q-STEER

実はおもちゃドクター手持ちの赤外線リモコンカー
240115_QST_TX (2).jpg

赤外線コントロールチョロQで、当時は携帯電話でのコントロールが人気だった。


【経緯】

2年前のドクター自主研修以来、ボタン電池を入れっ放しだったので、3台とも危機的状況になっていた。これでは、おもちゃドクター失格である。面目ない。

老後の趣味として、生き甲斐を得るために始めたが、現在の私の心境は「おもちゃドクターは私の全て」、ドクター失格したまま、ここで辞めるわけにはいかない。
周囲の皆さまに支えられ良き師に巡り合えたことで、数年前から60の手習いでマイコン換装の真似ごとを始めている。基礎知識が全くない私だが、今回はCH32Vマイコン換装に挑戦したい。

赤外線リモコンカー (2024 診療記録より)
症状:電池液漏れで危機的な状況
   これでは、おもちゃドクター失格
   ここで、辞めるわけにはいかない
治療:3セットのうち、1セットは
   液漏れが基板まで浸潤、修理不能
   2セット目は、COB不良だが
   CH32Vマイコンで換装する
   3セット目は、正常動作確認済。
   (ボタン電池は抜いておく)
退院:1月18日、治療完了して動作確認済
   当クリニックの広報活動に活用する


【送信機の解析】

1セットは修理不能で部品取り用、2セット目はCOB不良をマイコン換装で修理予定、3セット目は(元旦の地震で散らかった集中治療室を片付けていて発見)正常動作品。
このブログでは、2セット目の Q−STEER コントローラの基板回路を解析する。

典型的なボタン電池の液漏れ症状
漏れ出た電解液が基板にまで浸潤
240115_QST_TX (1).jpg

2台目は両面ともレジストでカバー
されていて、かろうじて基板は無事
240115_QST_TX (3).jpg

COB不安定のため回路解析を進める
COB貫通の配線は、導通点検で発見
Q_STEER_TX_pb.png

SW入力は正論理、IR出力も正論理
(電流値は正常動作品での測定値)
Q_STEER_TX.png


【マイコン換装回路】

そして、マイコン換装の回路図を作成、実機基板パターンを一部改造して取付ける。

CH32Vマイコン換装回路
周辺部品はできるだけ再利用
Q_STEER_TX_J4M6.png

さあ、あとは狭小スペースの中に、いかに上手く収めるかが問題。

【集中治療】

こんな簡単な回路でも私が回路図を書く理由は、いざ始まる手術治療に向けて集中力を高めるルーチンであり、思い違いによる単純ミスを防止する意味がある。

COB回路を切り離し、マイコンとの接続点を決定
SW入力を正論理でリビルドすると基板改造が簡単
Q_STEER_TX_cutting.png

赤外線LEDの制限抵抗を33Rに変更
マイコン直近にもセラコンを追加実装
240118_QST_TX (1).jpg

【ペアリング】

純正の Q-STEER コントローラは、スライドSWの切り替えで赤外線の信号を4種類に切り換え可能で、4人で4台まで同時に遊ぶことができる。

今回のマイコン換装ファームウェアでは、4種類をソフト実装でサポートする優れもの。
送信側ファームも、受信側ファームも1台で4種類のタイプに動的にペアリングできる。

//パワーオン後最初のキー入力でCH番号を記憶し、受信側にもCH番号設定を送信する。
//右折ボタンが押されていたらchA
//左折ボタンが押されていたらchB
//前進ボタンが押されていたらchC
//後退ボタンが押されていたらchD
//CH番号設定の指示データはCH番号+0b0000'


単4×3本で4.5V、電源条件を改良する
最初の操作キー入力で、ch番号を決める
240118_QST_TX (2).jpg

ケースのウラ面に注意事項を表示
実機スカイラインで、動作確認済
240118_QST_TX (3).jpg

使用部品は全て、国内で調達可能なものばかり、コスト計算すると 171円

【技術情報】

今回も、技術的なサポートは「名張市つつじが丘おもちゃ病院」大泉院長に依頼。
初歩的な質問や要望にも、迅速にご対応いただき、感謝申し上げる。

【CAULの続き】

3月のおもちゃDr.医局会の技術研修では、実際に赤外線リモコンの実機を操作したいので、チョロQ並みに小さいQステアより、少し大きめの「CAUL」の方が、研修用に向いていると思われる。

少し長文になるが、プロトコル分析の試み、失敗〜改修〜成功までの経過を、バーチャル診療として報告し、成果品ファームウェアを公開する。

2年ほど前に中古品を安価に入手してあった
この機会に、研修用プロジェクトに仕上げる
caul_01.jpg

実機送信機のIR信号を受光モジュールで録音
A/Bタイプのプロトコル分析、前進コードから
(画像クリックで拡大表示)
FWD_AB.jpg

リーダー長やビット幅が違い、スパンが不安定
最後のSTOPデータは4回連続送信(A/Bは2回)
F_STOP_CD.jpg

手持ちの実機送信機では、A/B/C/Dタイプの違いに加えて、個体差も相当あると考えられるが、エンコードルールは次のとおりと推測できる。

b0:前進
b1:後進
b2:左折
b3:右折
b4:バンド

だが、同じ個体でもスパン長やフレーム間隔が違っている理由は、全く分からない。
個体差やch切り替え配線による誤差の範囲なんだろうか?
Q−STEERと同じタカラトミー製であり、それに類似した仕様で、リーダー長とフレーム長はタイプ共通であると仮定すると、やはり A/BC/D タイプの2通りに集約できる。
Q−STEERファームウェアで、待ち時間だけをCAUL仕様に改変すれば、何とかなりそうな気がする。(エンコードルールの整理は必要だが)

そこで、プロトコル分析資料を整理して、開発者にCAUL仕様へのカスタマイズをお願いし、丁寧なご指導をいただいた。
単に正解だけを示すのではなく、初心者のペースに合わせ、あえて少しずつヒントをもらえたので、とても勉強になった。(何回失敗しても、迅速なサポートが心強かった。)


送信側(コントローラ)
のカスタマイズ版の当初仕様は、次のとおり

//CAUL仕様の個別設定値・エンコードテーブルのカスタマイズ(2024/1/8 ToyDr.わたなべ)
// WCH_Q_STEERの個別設定値を参考に、CAUL仕様に改変する
// 変更後の設定値はオリジナルの下段に、カスタマイズ版として追記する
// CAULでは、ターボSWはないが、本ファームウェアではポート構成を変更していない
// 単に、ターボSW信号が入ってこないだけで、将来の改造の余地として残しておく

//ペアリング相手は、chAとchBか、chCとchDかのどちらかを、実装時に宣言する
// CH番号は(Q-STEER同様) b5・b4 で設定するが、エンコードでは b5は送信しないことに留意
// ペアリングの相手が、chCとchDのとき、STOPコードは4回連続送信する


受信側(車体用)
のカスタマイズ版の当初仕様は、次のとおり

//CAUL仕様の個別設定値・デコードテーブルのカスタマイズ(2024/1/8 ToyDr.わたなべ)
// WCH_Q_STEERの個別設定値・デコードテーブルを参考に、CAUL仕様に改変する
// 変更後の設定値はオリジナルの下段に、カスタマイズ版として追記する
// CAULでは、ターボ出力はないが、本ファームウェアではポート構成を変更していない
// 単に、ターボ信号が出力されないだけで、将来の改造の余地として残しておく


【当初カスタマイズ】

CAUL仕様のプロジェクトで、タイプ別の最適設定値を割出すために、エクセル表で読取り数値を集計してタイプ別に平均値をとり、個体差にも配慮して上限値・下限値を自動計算させた。
CAUL仕様のカスタマイズ版は、試作〜失敗〜のたびに、開発者にアドバイスを求め、改修〜試作〜報告を経て取り敢えずは試作成功して、試作基板同士での送受信動作を確認することができた。

「取り敢えず」というのは、A/B/C/D タイプを A/BC/D の2通りに集約して、実装時に宣言することでタイプ別のペアリング相手を設定するので、1台では2種類のタイプにしか対応できない。例えば、A/B タイプの送信側ファームで C/D タイプの実機車体は操縦できない。

//ペアリングの相手は、chAとchBか、chCとchDかのどちらかを、実装時に宣言する
//define TYPE_CD // chCとchDのときに宣言する
// chAとchBのときは宣言しない

開発者に試作成功を報告すると、さらなる改善の方向性が示された。

「タイミングを眺めると、リーダー部の長さで
 A/BかC/Dタイプかを切り分けられますね。
 タイプ別を動的に判別すればいいと思います。」

リーダー長と、バンド番号を判別し、なおかつ、即座に動的に個別設定値を書き換える、そんな芸当が可能なのか?

(カスタマイズと言うより、開発と言うべきか)私には難しいと思い、あらためて開発者にそんな芸当を織り込んだCAULファームウェアの開発を依頼した。

【カスタマイズ進化版】

開発者からのヒントを参考に、先に送信側ファームの進化版を作ってみる。
「ペアリング」の条件分岐設定の部分に、タイプ別の個別設定値を代入する方法。

深夜の試作は残念ながら失敗、集中力の限界でほぼ諦めモード、さすがにその時は正直言って、かなり落ち込んだ。
翌朝、開発者から単純ミスのご指摘で息を吹き返し、改修後の試作成功
送信側ファームを修正して1台の試作基板から両タイプの実機操縦を実現。
(AタイプとCタイプの両方で、動作確認済。)

受信側ファームでは、タイプ別の個別設定項目を変数に持ち、リーダー長によりタイプを判別したら該当の最適設定値を代入する作戦。(変数名が大文字なのはご容赦を)
メインループ前に「ペアリング相手タイプ判別ループ」を置くが、これが全く動かず
開発者が言う「悩みを楽しむ」ような余裕はなく、またヒントを頂戴する。
for〜breakで抜けたり、continueで頭に戻ったりと、初心者には大変勉強になる。

やっと受信側ファームの進化版試作成功し、実機送信機を使って試作受信基板を操作できることを(AタイプとCタイプとで)確認済。

治療完了した Q-STEER送信機の隠れ機能を紹介
プログラム書き換えで CAUL進化版に変身できる
240202_QST.jpg


【ダウンロード】

下記リンクから、プロトコル分析資料と成果品プロジェクトをダウンロードできる。

プロトコル分析資料は、CAULのほか、COKEも同梱している。


気分転換で、赤外線リモコンカーのプロトコル分析を、別のおもちゃでも実施している。
COKEの愛称で有名な飲料自動販売機とデリバリー車がセットで、4つのタイプ。

IR_COKE.jpg

送信機本体が健全なうちに、ここまで分析しておけば、いざという時も安心。


トラックバック
※トラックバックの受付は終了しました
コメント