概要
車に取り付けた1,200Wのインバーターをエンジンの始動に連動してON/OFFできるように
マイコンを利用した機器を作製しました。
インバーターには純正の有線スイッチが付属しており、このスイッチに並列に回路を
割り込ませることで制御をしています。このスイッチは長押しが必要で、その動作を
プログラムで再現しています。
エンジン始動の検知は車の純正AC電源(100W)にUSBアダプタを取り付け、
この5V出力で検知しています。また、エンジン停止は5Vが停止することで検知します。
環境
エディタ:VisualStudioCode(拡張機能:PlatformIO IDE)
マイコン:Seeed Studio XIAO RP2040
回路図/動作説明
■エンジン始動時の動作
・車両の純正AC電源を介してUSBアダプタからの電源供給でマイコンが動作開始します。
・約10秒でフォトリレーをON(有線リモコンSWを押す動作再現)
・2秒後にフォトリレーをOFF(有線リモコンSWを離す動作再現)
⇒この時点でインバーターがONになる。
・2秒後に負荷接続用リレーをONにする。
■エンジン停止時の動作
・USBアダプタの電源供給が無くなるため負荷接続用リレーが切れます。
・マイコンは5V電源ラインに取り付けた電気二重層コンデンサにより動作を継続します。
(ダイオードを設けることで、負荷接続用リレー側への電流を遮断しています)
・USBアダプタの電源供給が無くなったことを検知し、
フォトリレーをON(有線リモコンSWを押す動作再現)
・2秒後にフォトリレーをOFF(有線リモコンSWを離す動作再現)
⇒この時点でインバーターがOFFになる。
数秒間のマイコンの動作を維持させるため1.5Fの電気二重層コンデンサを使用しています。
実験では15秒くらいはマイコンを駆動できています。
※回路図にある「インバーターUSB接続」はこれはエンジン始動時に
すでにインバーターがONの場合を検知するために設けました。
しかし、よくよく考えるとエンジンが掛っているとき以外はインバーターを
使用しないためこの「インバーターUSB接続」未使用にしました。
■使用部品
秋月電子通商で下記部品を購入。汎用基板、SWは手持ちを利用。
・大電流大型リレーモジュールキット 5V版
・プラスチックケース SW-125B
・電気二重層コンデンサー1.5F5.5V(タテ型)
・フォトカプラ フォトリレー 40V2A TLP241A
・ショットキーバリアダイオード 45V2A SBM245L
・極性統一DCジャック 電圧区分2 パネル取付型 MJ-17
・抵抗内蔵5mmLED 5V 黄緑色
プログラムコード
#include <Arduino.h>
#include <Adafruit_NeoPixel.h> //マイコン内蔵フルカラーLED用ライブラリ
int state=0;//現在の状態保持 0:停止中 1:駆動中
//フルカラーLED使用設定
int Power = 11;
int PIN = 12;
#define NUMPIXELS 1
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
void start_seq(){
//インバーターがOFFの場合ONにする、ONの場合は何もしない
if(digitalRead(27)==LOW){
digitalWrite(28, HIGH);
delay(2000);
digitalWrite(28, LOW);
delay(2000);
}
//ACリレーON
digitalWrite(1, HIGH);
}
void stop_seq(){
//ACリレーOFF
digitalWrite(1, LOW);
delay(2000);
//インバーターOFF
digitalWrite(28, HIGH);
delay(2000);
digitalWrite(28, LOW);
}
void setup() {
//user LED消灯設定
pinMode(16,OUTPUT); //赤
pinMode(17,OUTPUT); //緑
pinMode(25,OUTPUT); //青
digitalWrite(16, HIGH);//赤消灯(負論理)
digitalWrite(17, HIGH);//緑消灯(負論理)
digitalWrite(25, HIGH);//青消灯(負論理)
//出力ピン設定
pinMode(28,OUTPUT);//インバーターON/OFF制御
pinMode(1,OUTPUT);//ACリレー制御
digitalWrite(28, LOW);
digitalWrite(1, LOW);
//入力ピン設置
pinMode(26,INPUT);//USBアダプタ状態入力(≒エンジン始動検知)
pinMode(27,INPUT);//インバーター状態入力
//マイコン内蔵フルカラーLED用設定
pixels.begin();
pixels.setBrightness(10); //明るさ調整 0~255
pinMode(Power,OUTPUT);
digitalWrite(Power, HIGH);
}
void loop() {
if(state==0){
if(digitalRead(26)==HIGH){
delay(10000);//スタート時間遅延10秒
start_seq();
state=1;//駆動中フラグセット
//LED点灯
pixels.clear();
pixels.setPixelColor(0, pixels.Color(0,191,255));//青
pixels.show();
}
}else{
if(digitalRead(26)==LOW){
stop_seq();
state=0;//駆動中フラグリセット
//エンジン停止したにも関わらず、インバーターがONにならないよう
//念のためUSBアダプタの電荷が切れるまで待機する10秒程度
delay(10000);
pixels.clear();
pixels.show();
}
}
delay(10);
}