メーターパネルで遊ぶ

部屋の装飾用にどうかしらん?



ついに2020年04月07日、新型コロナウイルス感染症対策として政府は「緊急事態宣言」を発令した。
東京、神奈川、千葉、埼玉、大阪、兵庫、福岡が対象地域だ。
その後04/16には全国が対象となった。

だから・・・・暇で暇で・・・・。

ヤフオクでX1で検索して遊んでいたら割とパーツが出てきた。
ある時期に特定車種のパーツがドカンと出回る場合の多くは、一台の車体を解体してバラ売りするパターンだ。
今回も同年式同型のX1をバラしたようで同じ業者から大量のパーツが出回っていた。
これぞグッドタイミング!

そんな中で見つけたメーターパネル。
おっ?これはインテリアにいいんでないかい!?
んで配線図を手に入れて照明を光らせて遊べば絶好の暇つぶしになるんでないかい!?
(久しぶりにPICで遊べるかも!!)

って事で速攻で落札。
2,000円也。

早速配線図をググってみたものの全く出て来ない。
X1を相棒にしてからの付き合いになるクルマ屋さんに聞いてみたら「それは無理!」との事。
「それ・・・って?」
「配線図を手に入れるのもメーターのLEDを光らせるのも、です」
「えっ?」

今の車のメーター周りは全てデジタル制御になっているので、
@回路を公開するとメーター巻き戻しなど悪用される可能性があるので、販売業者間でさえも有料でやりとりをしている。
AメーターのCPUはメインコンピュータとIDチェックをしながら作動するので単に電圧を掛けるだけではLEDまで信号が届かない。

もっと難しい事も教えてくれたが、要はメーターパネルだけ交換しても認証作業をしないと機能しないという事らしい。

な〜んだ・・・ま、考えてみりゃ、アセンブリ交換しただけで正常動作してしまったらすぐに走行距離0kmのクルマが出来ちゃうものなぁ・・・。
しかし照明や方向指示器ランプくらい灯いてくれてもよかったのになぁ・・・。
ま、LEDだってメーターパネルのCPU配下にあるのだから、そのCPUが上位のメインCPUと交信できない限り停止状態だとするならば、LEDまで電気が通るわけないのか・・・・。

あれ?まてよ・・・・だったら基板のLEDに直接配線して圧力掛ければ光るんじゃね?
あっ、絶対に多層基板だろうからLEDの足に直接配線しないとダメか?
そんな事できるのかなぁ・・・・。

早速バラしに掛かる。
メーターケースアセンブリはネジを1本も使っていないようだ。
全て爪だけでハマっている。

とか言いながら実はここまでバラすのに一時間掛かっている。
爪の位置と本数が複雑で、特に最後のコネクタとパネルの接合部は、コネクタの周囲に細い4本のピンが噛んでいた。
これを理解するまでに半分の時間を使ってしまったのだ。

やっと外れた基板の表側。
42個のLEDが見える。
そのうちメーター照明が8個、液晶パネルの上半分が9個、下半分が8個、指示ランプが17個となっている。

指示ランプ群の最下段にもう一つLEDが配置できるように半田盛りしてあるものの最初から実装されていない。
クルーズコントロール等の上位車種の装備用なのだろうか?

指示ランプ用の透過シート。
こうやって宙に浮かせないと透過部分が見えない。

警告ランプ用が13個で、フォグランプ用が2個あるのはフロントとリア用。
残りの4個が方向指示器用で左右2個とハザード用2個となっているが、これは外装パネルに矢印が抜かれているためにクリアとなっている。

基板の裏側。
4つのメーターは独立したステッピング・モーターで動作している事が判る。(当たり前だが)
バラすのに苦戦したコネクタは基板に直付けだった。

やはり多層基板だったのでLEDへの配線はかなり苦しい事になりそうかな?

基板上には、
@パネル専用のCPUチップ
A降圧レギュレータチップ
BCANコンロトーラチップ
Cダーリントン・トランジスタチップ
が見える。

驚いたことにCPUは富士通製だった!
(ドイツ車でも素子は日本製を使うのね!)
MB90390シリーズのF395HAをメインに据えている。
データシートがダウンロード出来たので何時でも見られるようにここに貼り付けておこう。

120ピン16ビットCPUで512KBのROMと30KBのRAMを実装している。
CAN通信用のRXとTXが2発づつ、PWMはステッピング制御用に6発も備えている。
サウンドジェネレータがI/Oあって方向指示器音やリバース音を生成しているようだ。
88ピンものデジタルI/Oがあり、そのうち15ピンはアナログ制御できるようだ。

PIC使いからすればなんとも贅沢なCPUである。
しかしこれで各LEDはこのCPUに焼かれたプログラムから制御されていることが確定したので、コネクタに12Vを通電しても全く反応しないであろうことが判明したわい。(やれやれ・・・・)

CPUが5V仕様なので、降圧レギュレータの型番4275A5Gのデータシートを調べてみるとやはりアウト5Vだった。
と言うことは基板のコネクタまでは12Vで、基板の入り口で5Vに降圧してるということだ。
基板全体が5Vで駆動していると判明してホッとした。
これなら何とかなりそうだぞ!

久々に取り出した自作の100V-5Vコンバータ。
ブレッドボードを3連結してもこの1つで給電できるように電源を5連装した5V安定化電源だ。

テスト用に在庫のLEDが2V用しか無かったので、分圧抵抗で2Vを作り出す。
抵抗の分圧則より、手持ちの抵抗のうち2V生成に近似する2種類は110Ωと160Ωがあったので、
110/(160+110)*5=2.03V
となる。

テスト開始。
予想通り連動して作動するパターンが多く、2Vでは電圧不足気味。
そこで分圧抵抗2Vと直だし5Vの両方を使ってテスト。

最初はダイオードを噛ませて整流しながら正負を確認する。
その結果この基盤はパネルの上側及び右側が正だと判明。
ただしウィンカー及びハザードのLEDのみ下側が正だった。(理由は判らん!)



その結果こうなった。(→)

Cの一部とFはフルカラーLEDが採用され足が4本出ている。
Eはハイビーム用だがなんと!青色フィルムではなく青色LEDが使われていた。今では当たり前なのか?とても贅沢な気分である。

それぞれのグループで何個のLEDを並列にするか?で電圧が異なるため、現時点では正確な値は出せないが、ざっくりと5Vと2Vに別けてみた。
「連動時に決める」はそれぞれが単独で稼働しているため、実際に並列接続してみないとなんとも言えない。

LED42個、50本の足のうち、プラス8本、マイナス21本に配線をする。
プラスを赤数字の位置にしてみた。

ふむ、これなら一番小さなCPUでよいな。
もしハザードを点滅させないならプログラムも不要だからCPU自体が不要となるが、それではさすがに面白くないので、
@ハザード用出力
Aメーター照明用出力
B液晶用出力
C警告灯出力用×2
くらいを考えておけばよいだろう。

手持ちのCPUを確認してみたら8年前に作った白バイのプラモデルに使った12F683が在庫してあったのでこれを使おう。
12F683はCCPがあるのでメーター照明をディレイでもさせてみるか!!

秋月で買っても120円だから安いオモチャだ。
(でも当時は80円だった記憶が・・・)

先ずはブレッドボード上でプログラムを完成させてしまおう。
最新のROMライター及びC言語は、自分が現在使用しているライター(MPLAB IDE V8.85)とC言語(HI-TECH_C V9.83)とはまるで世界が異なっているであろうなので恐ろしくてアップグレードする勇気がない!
とは言うものの、それらの取扱すら完全に忘れているのでもう一度ここでおさらいして次回に繋げるようにここにメモしながら進めよう。

(注!)もうBMちゃんの話とは完全に離れてしまうので電子工作に興味のある人だけ読み進めてね!

前提その1
MPLAB IDEはインストール時に同時にPICCもインストールする選択にチェックしておけばHI-TECH_Cもリストに出てくるようになるので問題ない。(現在インストール済)
尚、2020年現在の最新のダウンロード先を調べたらここだった。

前提その2
プログラムソースとなるC言語はHI-TECH_Cを使用するが、そのインストールはMPLAB IDEで認識させるためなので一度インストールしてヘッダやライブラリを配置したらもう必要ない。(現在インストール済)
こちらも2020年現在の最新のダウンロード先を調べたらここだった。

前提その3
ROMライターに付属のソフトウェア「PICKIT2 V2」を同じ場所にインストールしておく。
MPLABとは別に独立したソフトウェアだが、同作業の工程で必須なものだから一緒に入れておくと便利。
2020年現在の最新版はハードウェアのバージョンがV4になっていた。
いずれも進化してるな〜!

ツールのインストールが終了したらここからが本番。

@プロジェクトを生成する

インストール配下のMPLAB.exeを起動する。(例:"D:\MPLAB\MPLAB IDE\Core\MPLAB.exe")

プロジェクトを新規作成する。

a)Project→Project Wizard

b)使用するCPUを選択する。

c)HI-TECH_Cコンパイラを選択する。

d)ファイルを置くフォルダを選択する。

e)mcp、mcs、mcwの3つのファイルが生成される。

f)File→Add New File to Project

g)コーディング画面が表示されるのでプログラム作成開始!



Aプログラムコーディング
HI-TECH_CはANSI-Cに準拠しているので普通にテキストエディタでC言語を記述すればよいだけ。
HI-TECH_C特有の「おまじない」はコピーするとして、命令文法はその都度調べれば良いべぇ。
ここではファイル名をBMW01.cとして、以下はこれからの基本となるソースの原本とする。

// ========================================================
// BMWメーターパネルLED用プログラム V1.0
// 2020.04.29
// PIC12F683(内部クロック使用)
// PICCからXC8Compilerへ
// ========================================================

#include<pic.h>
#include<math.h>
//--------------------------ディレイ変数定義とそのヘッダ宣言------------
#define	MHz 000000					//PICCProの内部関数「__delay_ms(ミリ秒)」を扱う為の
#define	_XTAL_FREQ	8MHz				//周波数宣言(おまじないでよい)
#include<htc.h>						//セットだから.hは周波数宣言後に指定しないと動かない
//--------------------------コンフィグレーション設定------------
__CONFIG(FOSC_INTOSCIO & FCMEN_OFF & IESO_OFF & BOREN_OFF & CPD_OFF & CPD_OFF & MCLRE_ON & PWRTE_OFF & WDTE_OFF);
//--------------------------汎用変数定義----------------------------------
int n=0;
int i=0;
int flg=0;
//--------------------------初期設定-----------------------------------
static void init1(){
	OSCCON=0b01100001;	//内部クロックを8MHzで使う設定
	ANSEL=0x00;		//GP0-5=全てデジタル使用
	TRISIO=0x00;		//GP0-5=全て出力(GP3のみ入力専用)

	CCP1CON=0b00001100;	//PWMモード
	T2CON=0b00000110;	//TMR2有効、プリスケール*16
	PR2=0x3f;		//PWM周期

	GPIO=0b00000000;	//GP0-5=全ピンOFF
}
//--------------------------タイマー-----------------------------------
static void Timer_GO(unsigned int TimerCount){
	while(TimerCount--){		//TimerCount=10で1秒
		__delay_ms(98);		//8MHzでの1msの値は98
	}
}
//--------------------------初期動作ー-----------------------------------
static void init3(unsigned int init3Count){
	while(init3Count--){
		GPIO=0b00110111;Timer_GO(5);
		GPIO=0b00000000;Timer_GO(5);
	}
	Timer_GO(5);
}
//--------------------------メーターパネル(PWM)-------------------------------
static void roop1(){
	i=0;
	n=150;
	flg=0;
	while(n>0){
		CCPR1L=n;
		Timer_GO(1);
		n--;
		i++;
		if(i==5){			//ハザード処理
			if(flg==0){
				GPIO=0b00110110;
				flg=1;
			}else{
				GPIO=0b00110111;
				flg=0;
			}
			i=0;
		}
	}
	i=0;
	n=0;
	flg=0;
	while(n<150){
		CCPR1L=n;
		Timer_GO(1);
		n++;
		i++;
		if(i==5){			//ハザード処理
			if(flg==0){
				GPIO=0b00110110;
				flg=1;
			}else{
				GPIO=0b00110111;
				flg=0;
			}
			i=0;
		}
	}
}
//--------------------------メインルーチン-------------------------------
main(){
	init1();
	init3(3);
	GPIO=0b00110111;
	while(1){
		roop1();
	}
}



Bソースをコンパイルする

a)Project→Build

b)最後に「Build successful!」と出たら成功。失敗ならソースのシンタックスを確認だな!

この時点でソースファイルのあるフォルダにはやたらにファイルが増えているのだが、hexファイルが存在していればOKだ。

CROMライターにCPUをセットする

久しぶりに取り出した「AKI-PIC2」。
ホコリまみれだったので先ずは掃除。

CPUはレバーと逆の左角が1ピン。
レディ状態を示す緑LEDが点灯すれば準備OK。
足を間違えるとソフトウェアで認識されないので注意!

DCPUに焼く

ROMライターに付属のソフトウェア「PICkit2V2.exe」を起動する。

CPUが正しくセットされていれば「Device」にCPU名が表示されているハズ。
PICkit2 connected
PIC Device Found
と表示されていれば正常なので先に作ったプログラムを呼び出す。

File→Inport Hex
で先程コンパイルしたhexファイルを選択してから「Write」ボタンを押下する。

数秒ほどゴチャゴチャとメッセージが流れたあとで、
Programming Successful
と表示されたらCPUへプログラムが正常に焼きこまれた事を示す。

これでベースとなるCPUが完成したのであとはこれを改造するだけだ。



E改造

改造するためにソース変更を行った場合には、自動的にMPLABのほうで「ソースに変更があったよ〜!どする?」と聞いてくるので、「Bソースをコンパイルする」からの作業を繰り返せば良い。

F呼び出し

次回、MPLAB起動時にはプロジェクトを呼び出す必要がるので、

a)Project→Open

からmcpファイルを呼び出した後にテキストエディタで再開する。

G配線

さて、いよいよ配線の段になってふと考えた。
表面への配線は前面カバーが基板とギリギリなため電線を這わせることはやめたほうがよさそうだと。

ここで閃いたのは「裏面にあるCPUのデジタルI/Oピンは直接LEDに配線されているのではないか?」ということ。
早速テストしてみたが回路中の抵抗やらコンデンサやらで電圧不足や不通電が生じていた。
こりゃだめだ。

しかしCPUからは絶対に接続されているはずなので改めて基板を見る。じっと見る。何時間も見る。
すると表面と裏面を貫通している導体穴が無数にあるのだが、これが必ず何処かで結線されていることを発見!

こそでこの300箇所ほどある穴に+-を接続してテストしてみた。
その結果がこれだ(→)
(小さすぎて見えないので大きな画像で保存。クリックしてね→)

例えばメーター照明だと右端の赤い丸と右下の赤い丸を接続すれば8個のLEDが同時点灯する。
これで全ての配線が裏面だけで済みそう。

そこでamazonで見つけたスリムワイヤーという電気銅を購入。
手芸用らしいが銅線なので微細な基板にはピッタリ。
163円也

しっかしamazonの激安品はあわせ買い対象品が多いからそのたびにアリエールとレノアが増えていくよ!(そんなに洗濯せんわ!!)

なんとこの銅線、基板の穴にピッタリの太さだった。
あっぶね〜、0.25mm買ってたらアウトだった・・・。

グループ毎のマイナスをこの銅線で結線していく。
基本的に基板は保護膜で覆われていてショートすることはないので抵抗やコンデンサを避けながら配線する。
銅線はピンセットでそっと曲げてやればそのまま変形するので配線が楽だ。
今回のハンダは端子間が狭いので15Wのコテを使った。
しかしそれでもコテ先のほうが遥かに大きいので僅かでも動かないようにセロファンテープで固定しながら作業を進める。

作業途中の全体像。
少なくともソフトウェアシステム開発屋の机ではないわな・・・・。

今回の配線は総数で12本になるため在庫してあったフラットケーブルを使用した。
この細さだとストリッパーも使えないから面倒臭いのよね。
カッターで一本つづ剥いていく。

配線箇所はパソコンの拡大写真を見ながら確認していく。

全ての結線を確認したら断線とショート防止にコーキングする。

そこで役立つのがグルーガン。
これは本当に便利な利器で昔からあるのだが、100均ショップで扱うようになってからはもう消耗品感覚で使っている。

だってホットボンドが100円で買えるんだよ!!信じられないよ・・・・。
壊れても、グルーが切れても、すぐに買いに行けるし!本当に便利な世の中だよ・・・・。

またホットボンドの材質はエチレンビニルなのでベチャっと付けても電気的には何ら問題なく、まったく安心・安全な接着剤だ。

これは表面側。
どうしても裏面から配線できない数箇所のみ表面に配線する。

一箇所だけ都合のよい場所の穴がトランジスタで塞がれていてビックリ。
確かに全ての表裏が貫通してるなんてどこにも書いてないけど・・・・(んじゃ、なんで穴あいてるんだ!?不思議)

裏面の配線も完成。
ホットボンドでケーブルを一纏めに固定することで多少雑に扱っても断線の心配がなくなった。
ここまでは細心の注意を払って、そ〜と、そ〜と・・・やってきたので・・・ふぅ〜!

最後に配線をチェックしたらいよいよ最終工程だ。

各LEDの耐圧は精々2.5V程度であると思われるが、可能な限り共有して直列に配線した結果、5.0Vのみでうまく点灯してくれた。

ただしハイビーム用の青色LEDだけはやはり光量が足りずに、別回路で5V直結とした。

フルカラーLEDは出来るだけオレンジで統一したが配線的に面倒な引き回しになるものはやむを得ずに赤で我慢する。

ちなみにガムテープはフラットケーブル自体が重量があるので重みと取り回し辛さで配線にダメージが出ないように仮固定している。

裏ケースに穴を開けてフラットケーブルを引き回してから基板をはめ込む。

表ケースをはめ込む。
こちらも爪だけなので楽だ。

液晶のバックライトは意外に暗いんだな。
実際にはパソコンのディスプレイと同じで白い文字を表示するには好都合の暗さだけど夜間時(ライト点灯時)にはこのバックライトを使ってオレンジ色で表示させている。
だからやはり液晶に通電させないと効果が出ないようだ。
かといってこの液晶の型番が判らないのでプログラムのしようもない。
ま、いっか!

透過シートとメータ及び針をセットしてみる。

あっ!リセットボタンの左右を間違えて装着してしまった!
何で両方にあるんだ?不明。

ハザード(方向指示器)の矢印は表カバーに刻まれているので、単に緑色の丸が光っているだけ。

配線が面倒で赤にしたのはシートベルトだった。
念のため実車で確認してみたら本当に赤だった。
では何でわざわざフルカラーなんだ?
黄色が点灯する場合ってなんだろう?

メーター針のステッピングモーターはCPUで管理しているので稼働は諦めた。
もちろん別回路を設計すればよいだけだが、なんだか面倒になってやめてしまった。
よってなんかいい感じのところでセット。

表カバーを装着して終了。

完成した写真はTOPの表題の画像になるが、液晶が暗いので下斜めからも撮影してみた。
ほら、ちゃんと光ってるのが判るでしょ!?

ハザードが見えるように動画にしてみた。
まだ固定してないので取り敢えずパソコンのディスプレイの上で点灯式。

スマホのビデオの焦点が合ってない!!
撮り直すのも面倒なのでこのまま雰囲気を楽しむということで!(^_^;

まぁ、楽しかったが新たにダウンコンバータ作るほどのオモチャでもないし、ブレッドボード上でしばらく遊んだら絶対にお蔵入りだな・・・。

ここまでの制作時間は解体から5日間。
費用は中古のメーターパネル2,000円と銅線163円の2,163円のみ。
これで5日間暇つぶし出来たんだから良しとしよう!

しかし・・・やっべ〜、また暇になっちまった・・・・。
(この連休もコロナの影響で外出られないし、また別の工作でも考えるかな・・・)



【おしまい】