Управление подсветкой приборной панели... не получается...
- Войдите на сайт для отправки комментариев
Здравствуйте уважаемые Ардуинщики, у меня к Вам вопрос, так как перекопав весь форум я всетаки пришел к тому что надо создать тему, ибо я ничего не понял... я только начинающий в этом, пришло мне в голову сделать мини блочек управления подсветкой приборки, но без участия кучи конденсаторов и резисторов... колхозно да и трудно подстраивать, заказал Ардуинку с Китая и ковыряюсь теперь... вроде все написал, работает, НО требуется задержка, в ней как раз таки я и закопался по самую...
И так логика примерно примерно такая:
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);
}
}
2) Выключаем зажигание, все должно быть в обратном порядке, сначала плавно тухнут шкалы, спустя 2 секунды стрелки
после завершения этой задачи не забудьте обесточить ардуину, иначе она быстро разрядит ваш аккумулятор на стоянке.
Логично... а как это реализовать? Ведь для полного цикла ей нужно постоянное питание, поэтому я брал сигнал при включении зажигания....
питание на ардуину подаем с ключа зажигания через диод, туда же через диод питание подаем с реле, которое при включении подключает 12В с контакта где напряжение есть всегда. Диоды нужны, чтобы развязать питание, чтобы реле не включало все зажигание. Реле включаем ардуиной сразу в setup(). После выключения зажигания гасим подсветку и отключаем реле
Такс, с диодами чтобы обратки не было, я разберусь, если я правильно понял у нас схема такая:
1) питание Ардуино (плюс с управляющего, и плюс постоянный)
2) пропадает плюс с управляющего исчезает плюс с постояннки
Что-то недопонял.... а как мне тогда завершить функцию плавного тушения если у меня оно все вырубит как только пройдет первый цикл уменьшения яркости по ШИМ?
ШИМ будет уменьшаться от 255 до 0 в каждом цикле (например), вот вставляем условие которое будет срабатывать при уровне ШИМ 0 (погасили подсветку) и в этом условии делаем все дела по обесточиванию.
ШИМ будет уменьшаться от 255 до 0 в каждом цикле (например), вот вставляем условие которое будет срабатывать при уровне ШИМ 0 (погасили подсветку) и в этом условии делаем все дела по обесточиванию.
Благодарю за ответ, а можно как нибудь понаглядней, мне бы сам код увидеть чтобы понять, у меня больше тяга к практике чем теории, пока сам не увижу и не потыкаю, то от прочитанного я много чему не научусь....
Если я все правильно понял, то схема подключения должна быть, примерно, такой:
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); //Выключаем реле, тем самым отключая всю систему. }Извиняюсь. Исправил код. В таком виде все работает:
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); //Выключаем реле, тем самым отключая всю систему. }2) Выключаем зажигание, все должно быть в обратном порядке, сначала плавно тухнут шкалы, спустя 2 секунды стрелки
после завершения этой задачи не забудьте обесточить ардуину, иначе она быстро разрядит ваш аккумулятор на стоянке.
А Вы в курсе какой ток потребляет ардуино?
Сравните ток ардуины с током автомобильного блока управления и автомобильной сигнализации. Зачем давать вредные советы?
UB8JAK Спасибо за помощь, понял свою ошибку, я не знал что кроме функций SETUP и LOOP можно создавать другие.....
carduino.ru если она будет потреблять более 50мА то за 3 дня в зиму она способна посадить АКБ, но я учту ваше предложение, замерю ток потребления, если он будет 10-20мА в режиме ожидания, то оставлю как есть!
UB8JAK Спасибо за помощь, понял свою ошибку, я не знал что кроме функций SETUP и LOOP можно создавать другие.....
carduino.ru если она будет потреблять более 50мА то за 3 дня в зиму она способна посадить АКБ, но я учту ваше предложение, замерю ток потребления, если он будет 10-20мА в режиме ожидания, то оставлю как есть!
10мА светодиод Power и 5мА сам контроллер ардуино. 24х15=360мА в сутки, 30х0,36=10,8А в месяц
Если установить импульсный стабиллизатор, то ток потребления ардуино из бортовой сети автомобиля будет меньше боле чем в два раза, менее 5А в месяц
Еще можно отключить светодиод Power и потребление сократится еще на 2/3
Еще можно отключить светодиод Power и потребление сократится еще на 2/3
Это программно можно сделать? Или его выпаивать нужно?
Можно выпаять токоограничивающий резистор идущий на этот светодиод
Можно этот резистор заменить на другой(3,3к), что бы он ограничивал ток до 1-2мА
светодиод будет светится только с низкой яркостью
Спасибо еще раз, я думаю лучше увеличить номинал сопротивления тогда... хотя ее и не видно будет, но 1-2мА думаю лучше чем 15-20 )))
А чем вам не нравится вариант с полным отключением? Контроллоер же больше никаких функций, кроме управления подсветкой, не выполняет.
Есть небольшое замечание по коду. Если эта система будет в автомобиле, то советую максимально избавляться от delay(). А то в результате можете удивиться скорости реакции на ваши действия.
Я думаю, пока не соберу все в кучу, ничего отладить не получится, для меня это как теория без практики, толку ноль, мне главное было узнать в какую сторону "копать", а там я уже разберусь! Тем более что я пальнул ардуинку, пока следующая приедет, недели три ждать, как раз за это время соберу приборку! ) Всем еще раз спасибо! )