Управление подсветкой приборной панели... не получается...

CarismaGLX
CarismaGLX аватар
Offline
Зарегистрирован: 19.02.2013

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

И так логика примерно примерно такая:

1)  Включаем зажигание, сразу включаются подсветка стрелок, затем спустя 2 секунды запускается плавное включение подсветки шкал

2) Выключаем зажигание, все должно быть в обратном порядке, сначала плавно тухнут шкалы, спустя 2 секунды стрелки

3) Технические вопросы с подключением я все разобрал, управлять подсветкой буду через ULN2003, сигнал с зажигания буду получать через делитель.

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

int sigPin = 8;
int ALPin =  9;
int SLPin =  10;
int sigState = 0;
int brightness = 0;
int fade = 5;

void setup() {
  pinMode(ALPin, OUTPUT);     
  pinMode(SLPin, OUTPUT);  
  pinMode(sigState, INPUT);   
}

void loop(){
  sigState = digitalRead(sigPin);
  if (sigState == HIGH) {   
    digitalWrite(ALPin, HIGH);
    analogWrite(SLPin, brightness);
    if (brightness < 255) {
      brightness = brightness + fade;
    }
    delay(50);
  }
  else if (sigState == LOW) {
    analogWrite(SLPin, brightness);
    if (brightness > 0) {
      brightness = brightness - fade;
    }
    if (brightness == 0) {
      digitalWrite(ALPin, LOW);
    }
    delay(50);
  }
}

 

axill
Offline
Зарегистрирован: 05.09.2011

CarismaGLX пишет:

2) Выключаем зажигание, все должно быть в обратном порядке, сначала плавно тухнут шкалы, спустя 2 секунды стрелки

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

CarismaGLX
CarismaGLX аватар
Offline
Зарегистрирован: 19.02.2013

Логично... а как это реализовать? Ведь для полного цикла ей нужно постоянное питание, поэтому я брал сигнал при включении зажигания....

axill
Offline
Зарегистрирован: 05.09.2011

питание на ардуину подаем с ключа зажигания через диод, туда же через диод питание подаем с реле, которое при включении подключает 12В с контакта где напряжение есть всегда. Диоды нужны, чтобы развязать питание, чтобы реле не включало все зажигание. Реле включаем ардуиной сразу в setup(). После выключения зажигания гасим подсветку и отключаем реле

CarismaGLX
CarismaGLX аватар
Offline
Зарегистрирован: 19.02.2013

Такс, с диодами чтобы обратки не было, я разберусь, если я правильно понял у нас схема такая:

1) питание Ардуино (плюс с управляющего, и плюс постоянный)

2) пропадает плюс с управляющего исчезает плюс с постояннки

Что-то недопонял.... а как мне тогда завершить функцию плавного тушения если у меня оно все вырубит как только пройдет первый цикл уменьшения яркости по ШИМ?

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

ШИМ будет уменьшаться от 255 до 0 в каждом цикле (например), вот вставляем условие которое будет срабатывать при уровне ШИМ 0 (погасили подсветку) и в этом условии делаем все дела по обесточиванию.

CarismaGLX
CarismaGLX аватар
Offline
Зарегистрирован: 19.02.2013

Penni пишет:

ШИМ будет уменьшаться от 255 до 0 в каждом цикле (например), вот вставляем условие которое будет срабатывать при уровне ШИМ 0 (погасили подсветку) и в этом условии делаем все дела по обесточиванию.

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

kulibin900
Offline
Зарегистрирован: 29.01.2015

 

 

 

UB8JAK
Offline
Зарегистрирован: 28.01.2015

Если я все правильно понял, то схема подключения должна быть, примерно, такой:

                                          K1.1
к + Arduino <-----*--------/ -----------< + Аккумулятора
                                |     
                                |
                                |     D1
                                ----|<|---------------< + От замка зажигания

                                                K1
                                         +--+
к выходу ULN <-------------|     |------< + Аккумулятора
                                         +--+

а код, такой:

int lockPin = 7;  // Пин управления реле самоподхвата
int sigPin = 8;
int ALPin =  9;
int SLPin =  10;
int sigState = 0;
int brightness = 0;
int fade = 5;

void lightOn() {
         digitalWrite(ALPin, HIGH);
         delay(2000); // Задержка 2 сек. перед включением
      if (brightness < 255) {
      analogWrite(SLPin, brightness);
      brightness = brightness + fade;
    delay(50);
   }
}

void setup() {
  pinMode(ALPin, OUTPUT);     
  pinMode(SLPin, OUTPUT);  
  pinMode(sigState, INPUT); 
 digitalWrite(lockPin, HIGH); // Включаем реле  
 lightOn(); // Включаем подсветку
}

void loop(){
  sigState = digitalRead(sigPin);  // Проверяем состояние ключа зажигания

  if (sigState ==LOW) {
 lightOff();
     }   
}
  
void lightOff() {
      if (brightness > 0) {
      analogWrite(SLPin, brightness);
      brightness = brightness - fade;
     delay(50);
    }
        delay(2000); // Задержка 2 сек. перед выключением
      digitalWrite(ALPin, LOW);
      digitalWrite(lockPin, LOW); //Выключаем реле, тем самым отключая всю систему.
}

 

UB8JAK
Offline
Зарегистрирован: 28.01.2015

Извиняюсь. Исправил код. В таком виде все работает:

int lockPin = 7;  // Пин управления реле самоподхвата
int sigPin = 8;
int ALPin =  9;
int SLPin =  10;
int sigState = 0;
int brightness = 0;
int fade = 5;

void lightOn() {
         digitalWrite(ALPin, HIGH);
         delay(2000); // Задержка 2 сек. перед включением
      while(brightness < 255) {
      analogWrite(SLPin, brightness);
      brightness = brightness + fade;
      delay(50);
   }
}

void setup() {
  pinMode(lockPin, OUTPUT);
  pinMode(ALPin, OUTPUT);    
  pinMode(SLPin, OUTPUT); 
  pinMode(sigPin, INPUT);
  digitalWrite(lockPin, HIGH); // Включаем реле 
 lightOn(); // Включаем подсветку
}

void loop(){
  sigState = digitalRead(sigPin);  // Проверяем состояние ключа зажигания
  if (sigState ==LOW) {
 lightOff();
     }  
}
   
void lightOff() {
      while(brightness > 0) {
      brightness = brightness - fade;
     analogWrite(SLPin, brightness);
     delay(50);
     }
        delay(2000); // Задержка 2 сек. перед выключением
      digitalWrite(ALPin, LOW);
      digitalWrite(lockPin, LOW); //Выключаем реле, тем самым отключая всю систему.
}

 

carduino.ru
Offline
Зарегистрирован: 06.12.2011

axill пишет:

CarismaGLX пишет:

2) Выключаем зажигание, все должно быть в обратном порядке, сначала плавно тухнут шкалы, спустя 2 секунды стрелки

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

А Вы в курсе какой ток потребляет ардуино?

Сравните ток ардуины с током  автомобильного блока управления  и автомобильной сигнализации. Зачем давать вредные советы?

CarismaGLX
CarismaGLX аватар
Offline
Зарегистрирован: 19.02.2013

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

carduino.ru если она будет потреблять более 50мА то за 3 дня в зиму она способна посадить АКБ, но я учту ваше предложение, замерю ток потребления, если он будет 10-20мА в режиме ожидания, то оставлю как есть! 

carduino.ru
Offline
Зарегистрирован: 06.12.2011

CarismaGLX пишет:

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

carduino.ru если она будет потреблять более 50мА то за 3 дня в зиму она способна посадить АКБ, но я учту ваше предложение, замерю ток потребления, если он будет 10-20мА в режиме ожидания, то оставлю как есть! 

10мА светодиод Power и 5мА сам контроллер ардуино. 24х15=360мА в сутки, 30х0,36=10,8А в месяц

Если установить импульсный стабиллизатор, то ток потребления ардуино из бортовой сети автомобиля будет меньше боле чем в два раза, менее 5А в месяц

Еще можно отключить светодиод Power  и потребление сократится еще на 2/3

 

CarismaGLX
CarismaGLX аватар
Offline
Зарегистрирован: 19.02.2013

carduino.ru пишет:

Еще можно отключить светодиод Power  и потребление сократится еще на 2/3

Это программно можно сделать? Или его выпаивать нужно?

carduino.ru
Offline
Зарегистрирован: 06.12.2011

Можно выпаять токоограничивающий резистор идущий на этот светодиод

Можно этот резистор заменить на другой(3,3к), что бы он ограничивал ток до 1-2мА 

светодиод будет светится только с низкой яркостью

CarismaGLX
CarismaGLX аватар
Offline
Зарегистрирован: 19.02.2013

Спасибо еще раз, я думаю лучше увеличить номинал сопротивления тогда... хотя ее и не видно будет, но 1-2мА думаю лучше чем 15-20 )))

UB8JAK
Offline
Зарегистрирован: 28.01.2015

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

nevkon
Offline
Зарегистрирован: 20.01.2015

Есть небольшое замечание по коду. Если эта система будет в автомобиле, то советую максимально избавляться от delay(). А то в результате можете удивиться скорости реакции на ваши действия.

CarismaGLX
CarismaGLX аватар
Offline
Зарегистрирован: 19.02.2013

Я думаю, пока не соберу все в кучу, ничего отладить не получится, для меня это как теория без практики, толку ноль, мне главное было узнать в какую сторону "копать", а там я уже разберусь! Тем более что я пальнул ардуинку, пока следующая приедет, недели три ждать, как раз за это время соберу приборку! ) Всем еще раз спасибо! )