За пять лет езды на этом автомобиле
два раза забывал выключить габариты и разряжал в "ноль" аккумулятор. Один раз был остановлен гаишниками,
т.к. забыл включить свет. Поэтому сделать устройство
автоматического включения и выключения света фар давно руки чесались, а после
того, как летом 2015 досталась одна неисправная плата, на которой обнаружились подходящие
исправные радиоэлементы - ключи BUK202 - решил-таки сделать такой девайс:
Ключи BUK202 рассчитаны на 9 ампер,
для двух фар нужно около 10А, и охлаждение под панелью приборов не очень
хорошее, поэтому поставил параллельно два таких ключа на общий радиатор из
алюминиевой пластинки 7 на 1,5 см. При длительных поездках радиатор нагревается
примерно до 50 градусов. (летом, температура в салоне около 30 гр.)
В качестве
управляющего элемента применил имеющуюся маленькую простейшую отладочную плату Digispark (ардуино-совместимая
с микроконтроллером Attiny85 на борту):
Специально пришлось докупить только
стабилитрон на 18 вольт, остальная мелочь имелась в наличии. Учитывая, что лампы
ближнего света частенько перегорают ( как известно, большей часть из-за броска
тока при включении), сделал плавное зажигание ламп ( примерно в течение 2 сек).
Габаритные огни включаются у меня сразу же после включения зажигания. Переключатель режимов
работы световых приборов работает по-прежнему, независимо от системы
автоматического включения/выключения света фар. Я считаю, что
поставленной цели я добился - фары невозможно забыть включить - они сами
автоматически включатся при запуске двигателя - и невозможно забыть выключить -
если оставить переключатель в положении "фары" или "габариты" то при повороте
ключа в положение "0" зажигание просто не выключится , и соответственно,
двигатель будет продолжать работать. ПО достаточно простое
- постоянно отслеживается напряжение на P2 - при повышении на входе
напряжения до 13,5...13,8 вольт( это около 3,2 V на порту Р2) фары плавно загораются, при снижении напряжения
- через некоторое время плавно гаснут. Встроенный светодиод на
отладочной плате Digispark используется для контроля работы устройства: Первоначальная версия
ПО: Данное устройство
установлено в пластмассовый корпус, прикреплено непосредственно к МУС и
соединено с МУС короткими проводами. В штатной проводке изменений нет. Октябрь 2015 г. - по
результатам эксплуатации в течение нескольких месяцев - решил немного доработать
ПО. Во-первых, сделал
так, чтобы фары начинали загораться не сразу после пуска двигателя, а спустя
примерно 3 секунды ( за это время бортовое напряжение "устаканивается" -
соответственно уменьшается вероятность перегорания ламп). Во-вторых, сделал
так, чтобы при падении бортового напряжения ниже порогового фары гасли не сразу,
а продолжали гореть достаточно долго. То есть теперь при резко заглохшем
двигателе например при высокой скорости на неосвещенной трассе ночью можно
безопасно вырулить на обочину - фары не погаснут. Июль 2022 г. -
результатами работы в общем доволен, лампы фар стали перегорать раза в два реже. Заметил, что
когда лампа все-таки перегорает - происходит это всегда в самый начальный момент
включения фар. Поэтому решил добавить еще простейший RC-фильтр:
// auto light auto turn on/off version_1_3_2_digispark (C)alex---1967 2015
byte i=0;
int c0 = 0;
int s0 = 0;
int svet = 0;
int full_svet = 0;
void setup()
{
pinMode(4, OUTPUT);
pinMode(1, OUTPUT);
pinMode(2, INPUT);
}
void loop()
{
c0 = 0;
svet = -1;
for ( i=0; i < 32; i++)
{
s0 = analogRead(A1);
c0 = c0 + s0;
}
c0 = c0 / 32;
if ( c0 > 560 ) { svet = 1; }
full_svet = full_svet + svet;
if ( full_svet > 250 ) { full_svet = 250; }
if ( full_svet < 0 ) { full_svet = 0; }
if ( full_svet > 1 )
{
digitalWrite(4,1);
digitalWrite(1,1);
delay(1 + full_svet / 16);
}
if ( full_svet < 49 )
{
digitalWrite(4,0);
digitalWrite(1,0);
delay(50 - full_svet);
}
}
// auto light auto turn on/off version_2_2_2_1_digispark (C)alex---1967 2015
byte i=0;
int c0 = 0;
int s0 = 0;
int svet = 0;
int full_svet = -25;
void setup()
{
pinMode(4, OUTPUT);
pinMode(1, OUTPUT);
pinMode(2, INPUT);
}
void loop()
{
c0 = 0;
svet = -1;
for ( i=0; i < 32; i++)
{
s0 = analogRead(A1);
c0 = c0 + s0;
}
c0 = c0 / 32;
if ( c0 > 558 ) { svet = 1; }
full_svet = full_svet + svet;
if ( full_svet > 25000 ) { full_svet = 25000; }
if ( full_svet < -25 ) { full_svet = -25; }
if ( full_svet > 1 )
{
digitalWrite(4,1);
digitalWrite(1,1);
delay(1 + full_svet / 16);
}
if ( full_svet < 49 )
{
digitalWrite(4,0);
digitalWrite(1,0);
delay(50 - full_svet);
}
}