Всем привет!
По результатам эксплуатации решил несколько доработать прошивку своей схемы автоматического включения/выключения света фар.
Но прежде хочу немного подробнее рассказать об этой схеме - на мой взuляд тут есть свои преимущества ( и недостатки ).
За пять лет езды на этом автомобиле два раза забывал выключить габариты и разряжал в "ноль" аккумулятор.
Аккумулятор кстати кальциевый - две полные разрядки для него как минимум очень нехорошо.
При невыключенных габаритах звучит конечно звуковой сигнал, но звучит однократно, не всегда можно расслышать
из-за всякого шума. Увидеть горящие габариты в солнечный день тоже непросто.
А один раз был остановлен гаишниками, т.к. забыл включить свет.
Поэтому и захотел сделать устройство автоматического включения и выключения света фар.
Как подвернулись под руку подходящие материалы, так и сделал.
Я считаю, что поставленной цели я добился - фары невозможно забыть включить -
они сами автоматически включатся при запуске двигателя - при любом положении переключателя МУС.
И фары невозможно забыть выключить -
если оставить переключатель МУС в положении "фары" или "габариты" то при повороте ключа в
положение "0" зажигание просто не выключится , и соответственно,
двигатель будет продолжать работать!
Если даже вытащить ключ зажигания, выйти из машины, захлопнуть дверь и попытаться закрыть с брелка двери
и поставить на сигнализацию - и это не получится - двигатель автомобиля продолжает работать ,
на сигнализацию не ставится.
Переключатель режимов работы световых приборов работает по-прежнему,
независимо от системы автоматического включения/выключения света фар.
Изменений в штатной проводке автомобиля нет.
Примененные ключевые элементы BUK202 - да, редкая в наших краях вещь,
но можно попробовать заменить на что-то более распространенное IRF4905, BTS555 ( c доработками).
Схема управления основана на Digispark.
Для тех кто не знает - Digispark -
это маленькая ( размером с пятикопеечную монету) простейшая ардуино-совместимая отладочная плата.
Можно купить по цене около 100 руб с бесплатной доставкой из Китая.
Для программирования установленного на ней микроконтроллера не требуется программатор,
даже кабель не требуется:
На плате имеется встроенный светодиод - удобно для визуального контроля.
Язык программирования в среде Ардуино (модификация Wiring) очень прост для понимания.
Вот по результатам эксплуатации в течение нескольких месяцев - решил немного доработать ПО.
Во-первых, сделал так, чтобы фары начинали загораться не сразу после пуска двигателя, а спустя примерно 3 секунды -
- за это время бортовое напряжение "устаканивается" - соответственно уменьшается вероятность перегорания ламп.
Во-вторых, сделал так, чтобы при падении бортового напряжения ниже порогового фары гасли не сразу, а продолжали гореть достаточно долго.
То есть теперь при резко заглохшем двигателе например при высокой скорости на неосвещенной трассе ночью можно безопасно вырулить на обочину - фары не погаснут.
Ну и несколько понизил порог включения света - при нагреве платы параметры "плывут".
Вот текущая версия ПО ( с комментариями ):
// auto light auto turn on/off version_2_2_2_1_digispark (C)alex---1967 oktober 2015
byte i=0;
int c0 = 0;
int s0 = 0;
int svet = 0;
int full_svet = -25; // параметр full_svet определяет режим работы фар
// если full_svet меньше 1 - фары выключены
// если от 1 до 49 - фары плавно загораются
// если больше 49 - фары горят постоянно
void setup()
{
pinMode(4, OUTPUT); // порт 4 на выход - управление силовым ключем
pinMode(1, OUTPUT); // порт 1 на выход - управление контрольным светодиодом
pinMode(2, INPUT); // порт 2 на вход - измерение бортового напряжения
}
void loop() // основной цикл
{ // начало основного цикла
c0 = 0; // обнуляем переменную
svet = -1; // пока напряжение ниже порогового, параметр svet будет отрицательным
for ( i=0; i < 32; i++) // определение значения бортового напряжения 32 раза подряд:
{
s0 = analogRead(A1); // читаем значение бортового напряжения ,
c0 = c0 + s0; // суммируем все значения в ранее обнуленную переменную,
}
c0 = c0 / 32; // сумму делим на 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 ) // если этот параметр не достиг значения 49 ...
{
digitalWrite(4,0); // ...выключаем свет фар
digitalWrite(1,0); // ...выключаем встроенный светодиод
delay(50 - full_svet); // потом пауза несколько миллисекунд
}
// если же параметр достиг значения 49, то фары не выключаем
} // продолжаем все с начала основного цикла
Перезалить прошивку можно было бы и не снимая МУС с авто, но т.к. ноутбука у меня нет, пришлось отсоединить разъём от МУС, снять МУС вместе с панелью, на которой МУС установлен, дома перепрошить и установить обратно.
Проверка в работе - все работает как и задумано.