Показать сообщение отдельно
Старый 04.09.2015, 23:13   #808
Освоившийся
 
Аватар для alex---1967
 
Регистрация: 17.10.2010
Адрес: Краснознаменск
Возраст: 58
Пол: Мужской
Автомобиль: ВАЗ-11173-34-430
Сообщений: 161
Записей в дневнике: 24
Вес репутации: 5365 alex---1967 имеет репутацию за пределами доброй репутацииalex---1967 имеет репутацию за пределами доброй репутацииalex---1967 имеет репутацию за пределами доброй репутацииalex---1967 имеет репутацию за пределами доброй репутацииalex---1967 имеет репутацию за пределами доброй репутацииalex---1967 имеет репутацию за пределами доброй репутацииalex---1967 имеет репутацию за пределами доброй репутацииalex---1967 имеет репутацию за пределами доброй репутацииalex---1967 имеет репутацию за пределами доброй репутацииalex---1967 имеет репутацию за пределами доброй репутацииalex---1967 имеет репутацию за пределами доброй репутации
Re: Автоматическое включение света фар

В качестве управляющего элемента применил имеющуюся отладочную плату Digispark (ардуино-совместимая с микроконтроллером Attiny85 на борту).
В качестве силовых ключей применил ключи BUK202 - выпаял с одной неисправной платы. Специально пришлось докупить только стабилитрон на 18 вольт, остальная мелочь имелась в наличии. Учитавая, что лампы ближнего света частенько перегорают ( как известно, большей часть из-за броска тока при включении), сделал плавное зажигание ламп ( примерно в течение 2 сек). Габаритные огни включаются у меня сразу же после включения зажигания.

ПО достаточно простое - постоянно отслеживается напряжение на P2 - при повышении на входе напряжения до 13,5...13,8 вольт фары плавно загораются, при снижении напряжения - через некоторое время плавно гаснут.



// 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);
}

}
alex---1967 вне форума   Ответить с цитированием Вверх