250817 街をきれいに清掃車、プログラム編(マイコン換装) #おもちゃ病院 #おもちゃドクター #糸魚川 #クラブハウス美山[2025年09月21日(Sun)]
患者さまは、街をきれいに清掃車 SmartAngel(西松屋)
前々回は、周辺部品や基板の部品を徹底検証するも、基板上COB故障と診断した報告
前回投稿は、このおもちゃ本来の元々の動作シナリオを解析した報告
この続報では、マイコン換装用ファームウェア開発と実際の基板作成について、報告する
(以前と重複したり修正した記述はご容赦を)
【プログラム開発】
基板故障の場合でも諦めず、マイコン換装という選択肢を提案できる
(他の治療手段を尽くしたうえで、お客さまの納得診療が前提)
おもちゃクリニックゆりかご では、先進おもちゃ病院の治療記録の内容を中古品でシミュレーション治療するなどして、治療技術の向上を図っている
オルゴール演奏だけでなく音声再生もでき、音に合せてLEDチカチカやモーター制御も可能
多くのサンプルプログラムが公開されていて、自分の開発環境にあったものを適宜選択できる
最初は丸ごとコピーからスタート、そこから必要な機能に絞り込んだプログラム要件を提示して、ご指導・添削を開発者にメールで依頼することから始まる
依頼元の当方における「カスタマイズ要件の整理」が、アプリの出来栄えに関わって来る
今回依頼の際に提示した プロジェクト仕様要件は、前回(動作シナリオ解析)報告のとおり
開発者とのメール応答で詳細を固めていくことになるが、毎度、仕事が速いのには驚かされる
(当方での評価基板の 試作が間に合わないほど、しかも無償!)
後日、完成されたファームウェアは、設計要件とともに、開発者のブログで公開されている
開発者としては 意外なほどスムーズ に開発が進められたとのこと
【シーケンス定義】
動作シナリオの再現では、シーケンス定義は依頼元ドクターが記述 できるような枠組みで、ご指導いただいたので、納得できるまでやり直して 「ファイナルアンサー」 まで漕ぎついた
//動作シーケンス定義の枠組み
struct SEQ
{
short tim; //正値は当シーケンスの経過時間[固有処理コールバック周期]
//0はシーケンスの終わり
//-1はリピート開始
//-2はリピート終了
unsigned char mtr; //モーター制御(0=ブレーキ、1=正転、2=逆転)
//timが-1のときはリピート回数を指定する
unsigned char led0; //LED0制御(0=消灯、1=点灯)
unsigned char voiceS; //音声S制御
//(0=操作無し、1〜254=再生開始、255=再生停止)
};
完成版の「動作シーケンスの定義」を、前進走行とバック走行を抜粋して紹介する
解析画像とソースコードを見比べていただくと、分りやすい
動作シーケンスは文言で表現するより、記号化した形式で提示するのが正確で合理的
開発者からのリピート分岐の機能提供は、大変ありがたかった
//動作シーケンスの定義 (Dr.W)
static const struct SEQ seq1[]= //前進走行
{
{64/KOYUU_PR,1,1,1}, //音声S1再生開始
{-1,8,0,0}, //リピート開始、8回
{96/KOYUU_PR,0,1,0},
{64/KOYUU_PR,2,1,0},
{96/KOYUU_PR,0,1,0},
{64/KOYUU_PR,1,0,0},
{96/KOYUU_PR,0,0,0},
{64/KOYUU_PR,2,0,0},
{96/KOYUU_PR,0,1,0},
{64/KOYUU_PR,1,1,0},
{-2,0,0,0}, //リピート終了
{32/KOYUU_PR,0,0,2}, //音声S2再生開始
{256/KOYUU_PR,1,1,0},
{-1,18,0,0}, //リピート開始、18回
{256/KOYUU_PR,1,0,0},
{256/KOYUU_PR,1,1,0},
{-2,0,0,0}, //リピート終了
{32/KOYUU_PR,0,1,9}, //音声S9再生開始
{160/KOYUU_PR,0,0,0},
{160/KOYUU_PR,0,1,0},
{160/KOYUU_PR,0,0,0},
{160/KOYUU_PR,0,1,0},
{160/KOYUU_PR,0,0,0},
{160/KOYUU_PR,0,1,0},
{160/KOYUU_PR,0,0,0},
{0,0,0,255},
};
static const struct SEQ seq2[]= //バック走行
{
{320/KOYUU_PR,0,1,3}, //音声S3再生開始
{-1,6,0,0}, //リピート開始、6回
{512/KOYUU_PR,2,0,0},
{512/KOYUU_PR,2,1,0},
{-2,0,0,0}, //リピート終了
{32/KOYUU_PR,0,1,9}, //音声S9再生開始
{160/KOYUU_PR,0,0,0},
{160/KOYUU_PR,0,1,0},
{160/KOYUU_PR,0,0,0},
{160/KOYUU_PR,0,1,0},
{160/KOYUU_PR,0,0,0},
{160/KOYUU_PR,0,1,0},
{160/KOYUU_PR,0,0,0},
{0,0,0,255},
};
【ダウンロード】
完成したプロジェクトは 清掃車の音声データをインデックスに追加、シーケンス制御を追加した PUYA電子オルゴール(音声再生)は、回路図なども同梱して当方共有フォルダで公開する
なお、これらのプロジェクト(オリジナル音源以外)は、複製・改変・再配布は自由であることを、あらためて付け加えておく
清掃車のディレクトリは
orgel1_4_SEISOSYA\orgel_SW_F002A_16
プロジェクトは PY32F002.uvprojx
メーカーHPでは、同じシリーズに「はたらく車トラック」もラインナップされている
今回のマイコン換装ファームウェアは、トラックにも流用できると思う
・GPIO機能に変更するツール「PY_GPIO」
・NRST機能に戻すツール「PY_NRST」
【マイコン換装】
メールで数回の応答を繰り返して、ほぼ完成が見えてきたので、
途中経過を開発者にも動画で情報提供する
当クリニック医局会においてもマイコン換装に至る経過を報告し、
もしもの再入院時にも慌てぬよう、情報共有を図っておく
モーター制御出力やLEDドライバ用出力は、ここではLEDで代用
評価版の回路図を再掲しておく
部品配置図は、部品面と半田面とを並べている
右側の青LEDは見づらいので黄LEDに要交換
半田付け失敗跡あるが、動作は確認済
私は秋月の両面ユニバ基板を愛用しているが、高価なのが玉にキズ
(なので、コスト計算では除外している)
電源とLEDドライバ基板の回路図・配置図も再掲
LED出力の電流制限抵抗は、現物に合わせて調整
青LEDはVfが高いハズと、制限抵抗を省略
大失敗! LEDを一つを焼損してしまった!
配置図と実物とは、若干の違いがあるので要注意
あとで、電流制限抵抗10オームを追加している
元基板は故障COBを縁切り、要改造
撤去したコンデンサとモータードライバ、何と小さい事か
改造配線が完了後、MX612を半田付けする
既存のSW接点に支障ないよう、ウラ面から配線
このあと元基板、電源+LEDドライバ基板、マイコン基板をリード配線して完成となるが、
その前に、お客さまに ここまでの治療経過を報告する
子どもさんには、退院まで、もう少々 お待ちいただきたい
【組み上げ、動作確認】
(※動画を作成後に、字幕のSW番号に間違いがあることに気付いた
誠に申し訳ないが、ここでお詫びして訂正させていただきたい)
一番最初の「ピヨピヨ」音は、「SW0」ではなくて「電源スイッチ」オンの起動音声で、
その次の音声は、「SW1」ではなくて、これこそ「SW0」オンの前進走行モードです。
元の清掃車本体に組み込んでの動作確認も無事クリア、これにて完治
約1か月の長期入院で、子どもさんには寂しい思いをさせてしまったが、
9月21日、「おもちゃ修理工房みやま」にて、直接お渡しして退院済
子どもさんは大喜び、ママさんは大感激!!


お客さまの声が、おもちゃドクターの励みになります。
清掃車の退院と入れ替わりに入院した レジスター も、無事に完治しましたよ。
今後とも大事に遊んでくださいませ。