旧ブログ「結果 Oh! Life」は新ブログ「新・結果オーライ」として生まれ変わりました♪

電動スライドドアの予約ロックの自作に挑戦③:回路図編

  • 2026.10.23
  • 車
電動スライドドアの予約ロックの自作に挑戦③:回路図編

前回の下調べ編からの続きです。

実は、ここまでの間にGoogle AIに相談しながらタイマーICを使って色々と試しましたが、スイッチとドアノブ操作時のアクションだけを拾うことはできませんでした。回路設計ができない僕の知能ではもちろん無理だけど、Google AIをもってしてもスイッチ配線の2-3Vだけに反応する回路が実現できなかったのです🥺
※ちなみに、エンジン始動時はこの2-3Vは3-4Vに上昇しますが、エンジン始動時にロックを掛けることはないので、2-3Vのみ対象にすれば都合が良いです☝

そこで、部品箱を漁っていたら、何か見慣れないICが出てきました。
Google AIに聞いたら、それはマイコンやん! それ持ってるなら早く言えよ!と叱られました🥺笑

8ピンのマイコンIC PIC12F683
8ピンのマイコンIC PIC12F683

Google AI曰く、マイコンにはA/Dコンバーターが入ってるから、電圧を範囲指定して特定の電圧だけ検知できるとのこと☝
ただ、問題はマイコンにプログラムを書き込むライターが必要とのこと。
どんなものか聞いたら、何か見覚えがあるなと思い、押し入れを漁ったら出てきました!

いつ買ったのか記憶にないPICkit3笑
いつ買ったのか記憶にないPICkit3笑

使った事もないし使い方も知らないけど、昔何か企んでいたようです🥺笑
さらに聞いたら、このメーカーがライター用ソフトを出してるとのことで、ダウンロードしてみたらライターが動きました✨
※但し最新バージョンではPICkit3の対応が廃止されていたので、旧バージョンを入れたら対応してました

PCにUSB接続すればソフトから書き込みが可能
PCにUSB接続すればソフトから書き込みが可能

ライター用ソフトはMPLAB X IDEと言うソフトで、ここへGoogle AIが書いてくれたプログラムを貼り、HEXファイルにコンパイルして、USBで繋いだPICkit3で書き込む、と言う流れになります。プログラムも使い方も全部Google AIが教えてくれたので、何も知らない僕でも書き込みできました☝笑
※ぶっちゃけつまずくことは多かったけど、ひとつずつ潰していったらクリアできました笑

MPLAB X IDEの画面
MPLAB X IDEの画面

ちなみに、Google AIが書いてくれたプログラム(C言語)はこちらです。
※僕が書いた訳じゃないのでクレームはGoogleへ☝笑
※何度もトライ&エラーして追加・修正の末に完成したコードです

#include <xc.h>

#pragma config FOSC = INTOSCIO
#pragma config WDTE = OFF
#pragma config PWRTE = ON
#pragma config MCLRE = OFF

#define _XTAL_FREQ 4000000

// ストライクゾーンを2.45Vの前後(2.20V-2.80V)に絞り込み
#define THRESHOLD_LOW  450   // 2.20V (下限) 1023/5*2.2≒450
#define THRESHOLD_HIGH 573   // 2.80V (上限) 1023/5*2.8≒573

// 通過ノイズを弾くため10回(100ms)連続一致を監視
#define ON_FILTER_COUNT 10

void main(void) {
    CCP1CON = 0x00;
    CMCON0  = 0x07;
    OPTION_REGbits.nGPPU = 1;
    WPU = 0x00;
    GPIO = 0x00;

    TRISIO = 0b00111011;

    ANSELbits.ANS0 = 1;
    ANSELbits.ADCS = 1;

    ADCON0bits.ADFM = 1;
    ADCON0bits.VCFG = 0;
    ADCON0bits.CHS  = 0;
    ADCON0bits.ADON = 1;

    GP2 = 0;
    __delay_ms(1000);

    unsigned int relay_timer = 0;
    unsigned int adc_val10 = 0;
    unsigned int low_voltage_counter = 0;

    while(1) {
        __delay_ms(10);

        ADCON0bits.GO_DONE = 1;
        while (ADCON0bits.GO_DONE == 1) {
            __nop();
        }
        adc_val10 = (unsigned int)((ADRESH << 8) | ADRESL);

        // 電圧範囲 & 100ms時間積分判定
        // 2.20V-2.80Vの電圧範囲のみカウントアップ
        if (adc_val10 >= THRESHOLD_LOW && adc_val10 <= THRESHOLD_HIGH) {
            low_voltage_counter++;

            // 10回(100ms)連続ならボタン操作とみなしてON!
            if (low_voltage_counter >= ON_FILTER_COUNT) {
                GP2 = 1;
                relay_timer = 1000;   // 10秒延長タイマー
                low_voltage_counter = ON_FILTER_COUNT;   // カウンターオーバーフロー防止
            }
        }
        else {
            // 範囲から一瞬でも外れたらリセット!
            low_voltage_counter = 0;

            if (relay_timer > 0) {
                relay_timer--;
                if (relay_timer == 0) {
                    GP2 = 0;
                }
            }
        }
    }
}

そして、マイコンへの書き込みに続いて、そのマイコンを使うための回路図もGoogle AIが描いてくれました。
と言っても、文章で教えてくれたものを僕が図面化しなきゃなりませんが💦

予約ロック回路図
予約ロック回路図

ホントに動くのかブレッドボードで試してみました。
実際に車両に繋いでみたら、スイッチ操作、外ハンドル操作、内ノブ操作のいずれにも反応してくれました✨
※実際には数え切れない回数のリベンジを経てます笑
※10秒は長くて煩わしいので5秒でテストしてます笑

車両での動作試験

無事、回路が成功したので、基板図も描きました。

基板への実装パターン例
基板への実装パターン例

左右のドアに付けたいので2ヶ作りました。

左右用に完成した2つの自作キット
左右用に完成した2つの自作キット

そして、スイッチ配線の2-3Vの反応とは別に、車両側の別のモードの電圧1Vや6Vに反応しないかどうか、12Vや0Vを与えてみて、それらが排除できていることを入念に確認しました。

0Vや12Vに反応せず、2-3Vの範囲のみに反応するかどうかの確認

そして、ついに予約ロック自作キットが完成しました✨

施行後に車両から分離可能なカプラー方式を採用
施行後に車両から分離可能なカプラー方式を採用

④実装編へつづく

このエントリーをはてなブックマークに追加