Автоматическое управление светом автомобиля

muhin_orsk
Offline
Зарегистрирован: 08.02.2016

Приветствую. Хочу сделать автоматическое включение дневных ходовых огней (ДХО) днем и ближнего света фар ночью, в своем авто. Так чтобы при определенном сопротивлении фоторезистора включались ДХО, а ближний свет фар отключался, и на оборот. Но как избежать частых ложных переключений (допустим в сумерках проезд под фонарем или отбрасывание тени от дворника при очистке лобового стекла)? При этом чтоб включение ближнего света фар происходило оперативно (например въезд в тонель) а обратное переключение на ДХО с задержкой в 1 минуту.

Это мой первый проект и ардуинка пока в пути, так что сильно прошу не ругаться и дать правильное направление мысли.

Заранее благодарен неравнодушным.

muhin_orsk
Offline
Зарегистрирован: 08.02.2016

Как реализовать гистерезис для избежания частых переключений, на границе заданного значения фоторезистора?

int SVET = 8; // ВЫХОД НА РЕЛЕ ВКЛЮЧЕНИЯ СВЕТА
int DHO = 7; // ВЫХОД НА РЕЛЕ ВКЛЮЧЕНИЯ ДХО 
int FOTO = A0;

void setup()
{
  pinMode(DHO, OUTPUT); // устанавливаем порт, как выход
  pinMode(SVET, OUTPUT); // устанавливаем порт, как выход
  pinMode(A0, INPUT);  // устанавливаем порт, как вход
}
void loop()
{
    if (analogRead(FOTO) > 200)
{
    digitalWrite(DHO, HIGH), digitalWrite (SVET, LOW);
}
    if (analogRead(FOTO) < 200) 
{
     digitalWrite(DHO, LOW) , digitalWrite (SVET, HIGH);
 }
  
}
SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
int SVET = 8;    // ВЫХОД НА РЕЛЕ ВКЛЮЧЕНИЯ СВЕТА
//#define SVET 8     // ВЫХОД НА РЕЛЕ ВКЛЮЧЕНИЯ СВЕТА
int DHO = 7;     // ВЫХОД НА РЕЛЕ ВКЛЮЧЕНИЯ ДХО
//#define DHO  7     // ВЫХОД НА РЕЛЕ ВКЛЮЧЕНИЯ ДХО
int fotoPin = A0;
//#define fotoPin A0
#define fotoLevel  200   // порог
#define fotoHister  20   // гистерезис
//==================================================================
void setup()
{
  pinMode( DHO, OUTPUT );      // устанавливаем пин, как выход
  digitalWrite( DHO, LOW );    // выкл. ДХО
  pinMode( SVET, OUTPUT );     // устанавливаем пин, как выход
  digitalWrite( SVET, LOW );   // выкл. СВЕТ
  pinMode(A0, INPUT);          // устанавливаем пин, как вход
}
//==================================================================
void loop()
{
  if ( analogRead( fotoPin ) > fotoLevel + fotoHister )
  {
    digitalWrite( DHO, HIGH );
    digitalWrite( SVET, LOW );
  }
  if ( analogRead( fotoPin ) < fotoLevel - fotoHister ) 
  {
    digitalWrite( DHO, LOW );
    digitalWrite( SVET, HIGH );
  }
}
//==================================================================

992 байта

//int SVET = 8;    // ВЫХОД НА РЕЛЕ ВКЛЮЧЕНИЯ СВЕТА
#define SVET 8     // ВЫХОД НА РЕЛЕ ВКЛЮЧЕНИЯ СВЕТА
//int DHO = 7;     // ВЫХОД НА РЕЛЕ ВКЛЮЧЕНИЯ ДХО
#define DHO  7     // ВЫХОД НА РЕЛЕ ВКЛЮЧЕНИЯ ДХО
//int fotoPin = A0;
#define fotoPin A0
#define fotoLevel  200   // порог
#define fotoHister  20   // гистерезис
//==================================================================
void setup()
{
  pinMode( DHO, OUTPUT );      // устанавливаем пин, как выход
  digitalWrite( DHO, LOW );    // выкл. ДХО
  pinMode( SVET, OUTPUT );     // устанавливаем пин, как выход
  digitalWrite( SVET, LOW );   // выкл. СВЕТ
  pinMode(A0, INPUT);          // устанавливаем пин, как вход
}
//==================================================================
void loop()
{
  if ( analogRead( fotoPin ) > fotoLevel + fotoHister )
  {
    digitalWrite( DHO, HIGH );
    digitalWrite( SVET, LOW );
  }
  if ( analogRead( fotoPin ) < fotoLevel - fotoHister ) 
  {
    digitalWrite( DHO, LOW );
    digitalWrite( SVET, HIGH );
  }
}
//==================================================================

966 байт - это про использование #define :)
это ответ на #1.....

Но как избежать частых ложных переключений (допустим в сумерках проезд под фонарем или отбрасывание тени от дворника при очистке лобового стекла)? При этом чтоб включение ближнего света фар происходило оперативно (например въезд в тонель) а обратное переключение на ДХО с задержкой в 1 минуту.
Как ? Разработать алгоритм и реализовать его программно :)

UserDead
UserDead аватар
Offline
Зарегистрирован: 29.11.2015

Чур. Может поставить два фоторезистора. И усреднить показатель? Или сделать условие мол не один должен "увидеть" темноту а два сразу. Один к примеру на лобовом, другой на заднем.

И не сразу. А таймаут для темноты к примеру 5 сек. Если через 5 сек не посветлеет (уровень поднимается верно?!) то уже думаем про переключение.

muhin_orsk
Offline
Зарегистрирован: 08.02.2016

SU-27-16, 

А зачем ты в SETUPе выключил свет и дхо? Это обязательно?

и напиши мне свой номер телефона я тебе "спасибо" отправлю

Stas046
Offline
Зарегистрирован: 10.12.2014

Надеюсь далее теории этот "проэкт" не продвинется, ибо опасность подобной "балалайки" гораздо выше "нужности". Задумайтесь о возможных последствиях если подобный девайс сбойнет ночью на трассе.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

не обязательно !
просто для определения первоначального состояния системы = "инициализация переменных"
неинициализированные переменные приводят к гемору....
"спасибо" и здесЯ хватит :)
но если сильно нано - не проблема....

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Stas046 пишет:

Надеюсь далее теории этот "проэкт" не продвинется, ибо опасность подобной "балалайки" гораздо выше "нужности". Задумайтесь о возможных последствиях если подобный девайс сбойнет ночью на трассе.

согласен !!!!!!!!!!!!!!
но можно добавить кнопку "штатная работа" - отключение ардуины
хотя и это не правильно....
правильно - не вмешиваться в работу систем от которых зависит безопасность !!!!!

muhin_orsk
Offline
Зарегистрирован: 08.02.2016

Stas046 пишет:

Надеюсь далее теории этот "проэкт" не продвинется, ибо опасность подобной "балалайки" гораздо выше "нужности". Задумайтесь о возможных последствиях если подобный девайс сбойнет ночью на трассе.

Я полностью поддерживаю Ваши опасения. НО Сломаться может все, что угодно и я делаю так, чтоб вернуться к стоку можно легко и не принужденно без инструмента и запар.

 

Stas046
Offline
Зарегистрирован: 10.12.2014

Некоторые "легко и не принужденно" едут под красный на перекрестках и переездах пытаясь съэкономить пару минут. Вы хотите съэкономить на нажатии\повороте кнопки\ручки??  При обгоне, ночью, сей девайс отключает свет: Не сцать! -говорите вы- Где там моя кнопка перехода на сток?!.  Такая ситуация возможна? Сама мысль о такой возможности...  оно вам надо? Сломаться может все, спору нет, но вы хотите в разы  повысить эту возможность.

Именитые автоконцерны отзывают автомобили по соображениям безопасности, а там работают коллективы высококлассных специалистов. А вы можете быть уверены в надежности вашего "колхоза" ?

 Мой водительский стаж однозначно говорит: в топку такие эксперементы!!

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Я дико извиняюсь, но перестраховщики несут откровенный бред!

Вы почему считаете своего собеседника кретином? Вы полагаете заранее, что он не способен разработать устройство с защитой от сбоя?

Ведь, в данном случае, достаточная защита состоит в том, что при разбивании ардуины молотком и травлении ее кислотой - должен остаться включенным и ни от чего не зависящим, ближний свет фар.

Вы, уважаемый Стас046, полагаете, что автор гаджета не додумается до такого? Вы настолько круты, а окружающие Вас люди попадались настолько тупые? Вот ведь в жизни не повезло.

---------------------

Сорри, а ничего, что все наши поделки мы в розетку включаем, и часто, не сертифицированным РосТестом, а самодельным (О УЖОС, НА!) блоком питания? А если пожар? А если это паранойя?

---------------------

Так называемые "профессиональные" изделия волнуют не пользователя, а только страховые компании, которые с радостью откажут в страховке, при обнаружении в доме или автомобиле чего то, без соотв. сертификата. Если Вы не застрахованы - то Вы никак не можете быть рабом этих параноидальных правил.

=====================

Я при редактировании добавлю, оффтоп, просто история про косность.

Я на свою Мазду с дизелем на 2.5 л менял гдушитель. Родной - 15 тыр, до "крымнаша", теперь уж и не знаю сколько. По объему двигателя ближайший  - Волга или Газель - 1500р до сих пор. Половина иномарок ездят на отечественных глушаках.

Сколько на авто-форуме псевдо-знатоков, которые пишут с апломбом, что НИ В КОЕМ случае! и т.д. и т.п. Вы похоже из таких, да? Запчасти - только оригинал, даже винты, и те нужно ставить "одобренные производителем", да?

Это идет либо от невежества, ну не знают люди, как глушитель работает, либо от пАнтов: не можешь купить оригинал за 15 - продавай тачку, нищеброд! ;)

============================

И, в качестве постскриптума, старый афоризм: профессионалы - построили Титаник, Ноев Ковчег был построен любителем!

Всем удачи!

muhin_orsk
Offline
Зарегистрирован: 08.02.2016

Stas046 пишет:

Некоторые "легко и не принужденно" едут под красный на перекрестках и переездах пытаясь съэкономить пару минут. Вы хотите съэкономить на нажатии\повороте кнопки\ручки??  При обгоне, ночью, сей девайс отключает свет: Не сцать! -говорите вы- Где там моя кнопка перехода на сток?!.  

Вас Уважаемый не туда понесло.... Вы меня приписываете к неким шальным нарушиелям, а у меня стаж 15 лет последние 3 года вообще без штрафов. Я уважаю Ваше беспокойство за участников дорожного движения и постораюсь сделать так чтоб не проезжать мимо Вас ночью с  моим колхозом. Данный девайс не экономит мое время, а не дает забыть включить ходовые огни когда это нужно (так как последний раз меня остановил именно за это) ну и за одно включит свет вечером.

Благодарю Всех, кто откликнулся по моей проблеме. Мира и добра!

Особенно СПАСИБО SU-27-16, напиши все таки телефончик...

Тему можно закрывать

UserDead
UserDead аватар
Offline
Зарегистрирован: 29.11.2015

А товарищ прав. Понимаете есть разница между тем чтобы отдать управление дуне и просто запаралелить дуню в качестве вторичного управляющего устройства. И все так будет доступно из самого знатного (старого знатного советского тумблера?!) ну максимум два тумблера с вкл и откл. Подумаешь нельзя будет отключить при сбое. Проблема-то. 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Особенно СПАСИБО SU-27-16, напиши все таки телефончик...
89602489500

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

UserDead пишет:

А товарищ прав. Понимаете есть разница между тем чтобы отдать управление дуне и просто запаралелить дуню в качестве вторичного управляющего устройства. И все так будет доступно из самого знатного (старого знатного советского тумблера?!) ну максимум два тумблера с вкл и откл. Подумаешь нельзя будет отключить при сбое. Проблема-то. 

да !

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

muhin_orsk пишет:

Как реализовать гистерезис для избежания частых переключений, на границе заданного значения фоторезистора?

Покажу именно на Вашем примере, чтобы Вы поняли суть. В промежутке значений фоторезистора от 195 до 205 ничего переключаться не будет. 

int SVET = 8;
int DHO = 7;
int FOTO = A0;

void setup()
{
  pinMode(DHO, OUTPUT); 
  pinMode(SVET, OUTPUT); 
  pinMode(A0, INPUT); 
}
void loop()
{
    if (analogRead(FOTO) > 205) // меняем 200 на 205
{
    digitalWrite(DHO, HIGH), digitalWrite (SVET, LOW);
}
    if (analogRead(FOTO) < 195)  // меняем 200 на 195
{
     digitalWrite(DHO, LOW) , digitalWrite (SVET, HIGH);
 }
  
}

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Jeka_M пишет:

muhin_orsk пишет:

Как реализовать гистерезис для избежания частых переключений, на границе заданного значения фоторезистора?

Покажу именно на Вашем примере, чтобы Вы поняли суть. В промежутке значений фоторезистора от 195 до 205 ничего переключаться не будет. 

int SVET = 8;
int DHO = 7;
int FOTO = A0;

void setup()
{
  pinMode(DHO, OUTPUT); 
  pinMode(SVET, OUTPUT); 
  pinMode(A0, INPUT); 
}
void loop()
{
    if (analogRead(FOTO) > 205) // меняем 200 на 205
{
    digitalWrite(DHO, HIGH), digitalWrite (SVET, LOW);
}
    if (analogRead(FOTO) < 195)  // меняем 200 на 195
{
     digitalWrite(DHO, LOW) , digitalWrite (SVET, HIGH);
 }
  
}

 


а чем отличаеццца от моего ?

Stas046
Offline
Зарегистрирован: 10.12.2014

Автоматическое включение дхо это одно, ну а ближний то вечером по-старинке включить? не? У меня самого стоит самодельная включалка дхо(шим на дальнем), включается через 5 сек после старта двигла и выключается при включении габаритов или ручника, за 2,5 года никаких проблем, устраивает более чем. А решать ардуинке ночь сейчас или день, тоннель или птичья какашка на стекле.... Лепить тумблер для принудиловки... а смысл тогда всей этой мудреной автоматики с датчиками?

 

Sync
Offline
Зарегистрирован: 12.01.2016

Автор - поставь просто 5 контактные реле вместо 4 контактных на управление светом, тогда не придётся управлять 2 выходами, а переключающися контакт (30 у стандартного автореле) заведи через замок зажигания. При включенном реле будут включены ДХО, при выключенном - фары (или наоборот, кому как нравится). Это намного проще и надёжнее, чем мутить какую-то схему защиты.

muhin_orsk
Offline
Зарегистрирован: 08.02.2016

Все уже установленно и залит скетч. Подрулевой переключатель работает ШТАТНО напрямую к реле габаритов и света. К переключателю запаралелина ардуинка, которая в автоматическом режиме (который можно отключить кнопкой) включает дхо днем и свет ночью.  Просто садясь в машину не нужно парится горят ли ДХО или ближний свет фар вечером. ДА МОЖНО БЫЛО ПОСТАВИТЬ РЕЛЕ, но вопрос был по гистерезису, а не как мне жить... и в кокого Бога верить... 

fuso
Offline
Зарегистрирован: 14.02.2016

Jeka_M пишет:

muhin_orsk пишет:

Как реализовать гистерезис для избежания частых переключений, на границе заданного значения фоторезистора?

Покажу именно на Вашем примере, чтобы Вы поняли суть. В промежутке значений фоторезистора от 195 до 205 ничего переключаться не будет. 

int SVET = 8;
int DHO = 7;
int FOTO = A0;

void setup()
{
  pinMode(DHO, OUTPUT); 
  pinMode(SVET, OUTPUT); 
  pinMode(A0, INPUT); 
}
void loop()
{
    if (analogRead(FOTO) > 205) // меняем 200 на 205
{
    digitalWrite(DHO, HIGH), digitalWrite (SVET, LOW);
}
    if (analogRead(FOTO) < 195)  // меняем 200 на 195
{
     digitalWrite(DHO, LOW) , digitalWrite (SVET, HIGH);
 }
  
}

 

можно вопрос: а если значение будет долгое время между 195 и 205, как прописать что бы выполнялась преведущая команда?

muhin_orsk
Offline
Зарегистрирован: 08.02.2016

Только если при запуске скетча  занчения будут в приделах 195-205 то ничего гореть не будет. А если до этого уже что то горело, то программа отрабатывает гистерезис. Так что подход с выполнение предыдущей команды скорее всего не пойдет. 

muhin_orsk
Offline
Зарегистрирован: 08.02.2016

SU-27-16 пишет:


//int SVET = 8;    // ВЫХОД НА РЕЛЕ ВКЛЮЧЕНИЯ СВЕТА
#define SVET 8     // ВЫХОД НА РЕЛЕ ВКЛЮЧЕНИЯ СВЕТА
//int DHO = 7;     // ВЫХОД НА РЕЛЕ ВКЛЮЧЕНИЯ ДХО
#define DHO  7     // ВЫХОД НА РЕЛЕ ВКЛЮЧЕНИЯ ДХО
//int fotoPin = A0;
#define fotoPin A0
#define fotoLevel  200   // порог
#define fotoHister  20   // гистерезис
//==================================================================
void setup()
{
  pinMode( DHO, OUTPUT );      // устанавливаем пин, как выход
  digitalWrite( DHO, LOW );    // выкл. ДХО
  pinMode( SVET, OUTPUT );     // устанавливаем пин, как выход
  digitalWrite( SVET, LOW );   // выкл. СВЕТ
  pinMode(A0, INPUT);          // устанавливаем пин, как вход
}
//==================================================================
void loop()
{
  if ( analogRead( fotoPin ) > fotoLevel + fotoHister )
  {
    digitalWrite( DHO, HIGH );
    digitalWrite( SVET, LOW );
  }
  if ( analogRead( fotoPin ) < fotoLevel - fotoHister ) 
  {
    digitalWrite( DHO, LOW );
    digitalWrite( SVET, HIGH );
  }
}
//==================================================================

 

Надо попробовать по скетчу su-27-16 в SETUP прописать, что digitalWrite( DHO, HIGH)

Тогда при запуске ардуинки попадая в диапазон гистерезиса будут гореть ДХО, а потом, когда значение резистора сместится в сторону ниже 195 или  выше 205 начнет все работать автоматически

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

muhin_orsk пишет:

SU-27-16 пишет:


//int SVET = 8;    // ВЫХОД НА РЕЛЕ ВКЛЮЧЕНИЯ СВЕТА
#define SVET 8     // ВЫХОД НА РЕЛЕ ВКЛЮЧЕНИЯ СВЕТА
//int DHO = 7;     // ВЫХОД НА РЕЛЕ ВКЛЮЧЕНИЯ ДХО
#define DHO  7     // ВЫХОД НА РЕЛЕ ВКЛЮЧЕНИЯ ДХО
//int fotoPin = A0;
#define fotoPin A0
#define fotoLevel  200   // порог
#define fotoHister  20   // гистерезис
//==================================================================
void setup()
{
  pinMode( DHO, OUTPUT );      // устанавливаем пин, как выход
  digitalWrite( DHO, LOW );    // выкл. ДХО
  pinMode( SVET, OUTPUT );     // устанавливаем пин, как выход
  digitalWrite( SVET, LOW );   // выкл. СВЕТ
  pinMode(A0, INPUT);          // устанавливаем пин, как вход
}
//==================================================================
void loop()
{
  if ( analogRead( fotoPin ) > fotoLevel + fotoHister )
  {
    digitalWrite( DHO, HIGH );
    digitalWrite( SVET, LOW );
  }
  if ( analogRead( fotoPin ) < fotoLevel - fotoHister ) 
  {
    digitalWrite( DHO, LOW );
    digitalWrite( SVET, HIGH );
  }
}
//==================================================================

 

Надо попробовать по скетчу su-27-16 в SETUP прописать, что digitalWrite( DHO, HIGH)

Тогда при запуске ардуинки попадая в диапазон гистерезиса будут гореть ДХО, а потом, когда значение резистора сместится в сторону ниже 195 или  выше 205 начнет все работать автоматически

как тибе надо - так логику работы и пропиши.....
спросил про гизтерезис - я ответил....
гизтерезис , кстати , можно менять по ситуации :)- ( прописать не дафайном , а интом - и менять программно )
...как и начальное включение того или другого ОГНЯ

при запуске анализ освещённости от 196 до 204 - на вашее усмотрение , чё включить -
- далее в лупе всё решится само сабой

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Мне что-то кажется, что для данной задачи нужен не гистерезис, а асимметричный фильтр или амплитудный детектор. Т.е. чтобы прибор не реагировал на непродолжительные вспышки света, причем даже в том случае, если они разделяются еще более непродолжительными интервалами затенения. Правда, возможны будут ложные срабатывания при проезде туннелей и под эстакадами.

redx
Offline
Зарегистрирован: 16.09.2017

извиняюсь за то,что ворошу старую тему, но хочу внести маленький совет по расположениё датчиков

их лучше размещать не только на лобовом стекле, но и на заднем, и анализировать усредненные показания сразу двух датчиков и более, тогда меньше будет вероятность отключения ближнего света от фар встречного транспорта. я еще бы внес отдельный датчик, анализирующий наличие яркого света впереди, т.е. фары встречки, чтоб не отключать ближний в такой ситуации, когда втомобиль осветили ярким световым потоком спереди или сзади. лучше вообще сделать общие датчики направленными, чтобы на нихтне влияли фары других авто

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

по правилам, ближний свет должен быть включен ВСЕГДА. И ничего городить не надо. 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

DetSimen пишет:

по правилам, ближний свет должен быть включен ВСЕГДА. И ничего городить не надо. 

Отнюдь.

19.4. Противотуманные фары могут использоваться:

  • в условиях недостаточной видимости с ближним или дальним светом фар;
    (в ред. Постановления Правительства РФ от 10.05.2010 N 316)
  • в темное время суток на неосвещенных участках дорог совместно с ближним или дальним светом фар;
  • вместо ближнего света фар в соответствии с пунктом 19.5 Правил.
    (в ред. Постановления Правительства РФ от 10.05.2010 N 316)

19.5. В светлое время суток на всех движущихся транспортных средствах с целью их обозначения должны включаться фары ближнего света или дневные ходовые огни.
(п. 19.5 в ред. Постановления Правительства РФ от 10.05.2010 N 316)

Если Вы прочитаете стартовый пост темы, то обнаружите, что ТС интересуется именно переключением между допускаемыми ПДД режимами.

muhin_orsk
Offline
Зарегистрирован: 08.02.2016

DetSimen пишет:

по правилам, ближний свет должен быть включен ВСЕГДА. И ничего городить не надо. 

Дело было вечером. Возил супругу по магазинам и приходилось частенько останавливаться и просто забыл включить свет, за что сразу был остановлен встречной машиной ГИБДД. Штраф мне тогда не выписали, но надо было делать так чтоб не забывал.

За год эксплуатации система себя показала хорошо, ее я просто запаралелил к штатному переключателю света, так что штатный переключатель как и раньше выполняет свои функции. Одного датчика достаточно, никаких ложных включений или выключений нет (благодаря гистерезису). Днем включаются дхо, вечером и ночью свет. Фоторезистор засунул под линзу от дверного глазка и аккуратно положил на панель. Функцию переключения ближнего и дальнего сделать сложно, ведь в городе дальним пользоваться нельзя, да и если на трассе забудешь выключить дальний, то встречные тебе вежливо напомнят )))).