• 車種別
  • パーツ
  • 整備手帳
  • ブログ
  • みんカラ+

Tommym20の愛車 [スバル R1]

整備手帳

作業日:2020年7月5日

オートライト回路自作(修正あり)

他の整備手帳を見る 他の整備手帳を見る

目的 チューニング・カスタム
作業 DIY
難易度

中級

作業時間 12時間以上
1
以前パーソナルカーパーツさんのオートライト キットTATLIGHT-01と自作回路を使ってオートライト を組み込んでいましたが、やはり今一つTATLIGHT-01の動作が気に入らないので、PICを使った自作のオートライト回路を製作し組み込みました。
2
自作オートライト回路は、ソフトウエアで入力にLPFを入れ、オンオフのヒステリシス動作とタイマーを組み入れた構成にしました。
4つのボリュームはスモールのオンオフレベル、ライトのオンオフレベルそれぞれ調整できるようにしています。
3
最初にTATLIGHT-01とautoポジション付きのコラムスイッチを使って組み込んだ自作回路を載せます。
TATLIGHT-01だけでは思い通りになりませんので、リレー回路を作り純正然と動作するようにします。
オートライト回路自作後も基本このままです。TATLIGHT-01と同じコネクターで接続にしたのでインターフェース互換です。※ただしセンサーは違います。
あくまでも当方の車両CBA-RJ1、HIDライトモデルのみの適用となると思います。他がわかりませんので・・
同じモデルならこの回路とTATLIGHT−01を組み合わせれば実現できると思います。(自己責任でお願いします)
コラムスイッチコネクタは、そのままではピンが足りませんので、端子を別途購入しなければなりません。※配線コムさんにて購入
4
コラムスイッチは以下です。
◆品番84140-B2080(ダイハツムーヴ用)
このコラムスイッチをそのまま付けると、ライトが点いたままになります。それを回避した上で、AUTOライトが標準で装備されている車両と同じ動きになるようにしています。
手動ON/OFF/Passing全て通常通り動作します。
OFF時Hi/Lo切り替えても勝手にランプが点灯したりしません。
AUTO時TATLIGHT-01の動作通り作動します。もちろんパッシングも正常に動作します。
また純正ではキーオフ時に手動でライトを点灯できますので、そのように動作させます。
5
自作オートライト回路は図の通りです。
PICは12F1822を使っています。
これに伴いPICを一から勉強してみました。
と言っても動けばいいレベルですが・・
6
プログラム公表しておきます。
2つのPICは全く同じプログラムです。
/*
* File: main.c
* AUTO LIGHT CONTROL for 12F1822
* Ver 1.0
*/
#include <xc.h>

// PIC12F1822 Configuration Bit Settings
// CONFIG1
#pragma config FOSC = INTOSC // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = OFF // MCLR Pin Function Select (MCLR/VPP pin function is digital input)
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config CPD = OFF // Data Memory Code Protection (Data memory code protection is disabled)
#pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
#pragma config IESO = OFF // Internal/External Switchover (Internal/External Switchover mode is disabled)
#pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is disabled)
// CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
#pragma config PLLEN = OFF // PLL Enable (4x PLL disabled)
#pragma config STVREN = OFF // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will not cause a Reset)
#pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)


// クロック周波数指定
// __delay_ms()関数が使用する
#define _XTAL_FREQ 1000000
//100msを数えるための定数
#define T0COUT 158
// グローバル変数宣言
int ONflg;
unsigned char onCount; //onレベルカウント
unsigned char offCount; //offレベルカウント
unsigned char delay;
unsigned long sensor; // センサー値
unsigned long onlevel; // onレベル
unsigned long offlevel; // offレベル

void main(void) {

// PICマイコン設定
OSCCON = 0b01011010; // 内部クロック周波数を1MHzに設定
ANSELA = 0b00000111; // RA0,1,2をアナログモードに設定
TRISA = 0b00001111; // RA0~3ピンを入力モードに設定(ただしRA3ピンは常に入力モード)

OPTION_REG = 0b00000111 ; // 内部クロックでTIMER0を使用、プリスケーラカウント値 1:128
TMR0 = T0COUT ; // タイマー0の初期化
TMR0IF = 0 ; // タイマー0割込フラグ(T0IF)を0にする
TMR0IE = 1 ; // タイマー0割込み(T0IE)を許可する
GIE = 1 ; // 全割込み処理を許可する

// 変数宣言
unsigned long sen0; // センサー前値
unsigned long on0; // onレベル前値
unsigned long off0; // offレベル前値
unsigned char k; //LPF係数

k = 90; //LPF係数設定
//初期値
onCount = 0;
offCount = 0;
LATA4 = 0;
LATA5 = 0;
ONflg = 0;
delay = 0;

while(1){
// ADコンバータ設定0
ADCON0 = 0b00000001; // RA0(AN0)をADコンバータピンに設定し、ADコンバータ機能をEbableにする
ADCON1 = 0b10000000; // 結果数値は右寄せ、ADコンバータクロックはFOSC/2、基準電圧はVDD
// ADコンバータ読み取り開始
GO = 1;
// 読み取り完了待ち
while(GO);
sensor = (k * sen0)/100 + ((100-k) * ADRES)/100;
sen0 = sensor;
// ADコンバータ設定1
ADCON0 = 0b00000101; // RA1(AN1)をADコンバータピンに設定し、ADコンバータ機能をEbableにする
ADCON1 = 0b10000000; // 結果数値は右寄せ、ADコンバータクロックはFOSC/2、基準電圧はVDD
// ADコンバータ読み取り開始
GO = 1;
// 読み取り完了待ち
while(GO);
onlevel = (k * on0)/100 + ((100-k) * ADRES)/100;
on0 = onlevel;
// ADコンバータ設定2
ADCON0 = 0b00001001; // RA2(AN2)をADコンバータピンに設定し、ADコンバータ機能をEbableにする
ADCON1 = 0b10000000; // 結果数値は右寄せ、ADコンバータクロックはFOSC/2、基準電圧はVDD
// ADコンバータ読み取り開始
GO = 1;
// 読み取り完了待ち
while(GO);
offlevel = (k * off0)/100 + ((100-k) * ADRES)/100;
off0 = offlevel;
//LATA出力
if((ONflg == 1) && (RA3 == 1)){
LATA4 = 1;
LATA5 = 1;
}else{
LATA4 = 0;
LATA5 = 0;

}
}
// 以下の命令は実行されない
return;
}
void __interrupt() isr(void){
if(delay >= 30){
if (TMR0IF == 1) { // タイマー0の割込み発生か?
TMR0 = T0COUT ; // タイマー0の初期化
TMR0IF = 0 ; // タイマー0割込フラグをリセット
// sensor値がonレベルより低ければLATA5,6をon
if(sensor < onlevel){
if(ONflg == 0){
if(onCount < 10){
onCount ++;
if(onCount >= 10){
ONflg = 1;
onCount = 0;
}
}
}

// sensor値がoffレベルより高ければLATA5,6をoff
}else if(sensor > offlevel){
if(ONflg == 1){
if(offCount < 30){
offCount ++;
if(offCount >= 30){
ONflg = 0;
offCount = 0;
}
}
}
}else{
onCount = 0;
offCount = 0;
}
}
}else{
delay ++;
}
}
7
純正品と84140-B2080の調べた接点表を載せておきます。

イイね!0件




関連コンテンツ

関連整備ピックアップ

H4バルブ交換

難易度:

ヘッドライトユニット交換

難易度:

テリキの。

難易度:

擦った。

難易度:

右フロントウインカー交換

難易度:

LEDウインカー入れ替え

難易度:

関連リンク

この記事へのコメント

2020年7月20日 20:32
今晩は
PICを一からでいきなりの完成ですか?
凄いにつきます。
コメントへの返答
2020年7月20日 22:18
コメントありがとうございます!
PICの勉強にツール・ラボさんとというサイトでざっくり勉強させていただいて、あとは見様見真似でやってみました。ツール・ラボさんは素晴らしいサイトです。動作的には悪くはないのですが、センサーの取り付け方が良くないのか、夕方横からの日差しだと点灯してしまうことがあります。センサーの取り付け方も一工夫必要そうです。

プロフィール

Tommym20です。よろしくお願いします。
みんカラ新規会員登録

ユーザー内検索

愛車一覧

スバル R1 スバル R1
スバル R1に乗っています。 13年6回目の車検を受けようと決断してから初めてみんカラと ...
ヘルプ利用規約サイトマップ

あなたの愛車、今いくら?

複数社の査定額を比較して愛車の最高額を調べよう!

あなたの愛車、今いくら?
メーカー
モデル
年式
走行距離(km)
© LY Corporation