Автоматическая регулировка яркости светодиодной подсветки в Chevrolet Aveo(Sonic) 15

Яркость подсветки изменяется автоматически в зависимости от освещения.

Принцип работы: Микроконтроллер анализирует с фоторезистора текущее освещение и при помощи двух транзисторов коммутирует провода управляющие яркостью подсветкой.


Радиодетали:
— МК 45 1шт. ebay
— фоторезистор 1шт. ebay.
— транзистор полевой 2шт. IRFZ44N ebay
— стабилизатор напряжения 1шт. LM317T ebay
— резисторы:
100 КОм 1шт.
680 Ом 1шт.
220 Ом 1шт.
2.2 КОм 1шт.
4.7 КОм 1шт.
— конденсатор 1Mf 2шт. 16V и 6.3V.

Схема подключения

39fgb8s-960.jpg c57gb8s-960.jpg ef7gb8s-960.jpg

Безымянный.png

Код для

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
//http://bigbarrel.ru/
int li;//новое значение яркости
int li_old;//старое значение яркости
int sensorValue = 0;//значение освещенности с фоторезистора
int pin1 = 3;//управление транзистором 1(2вывод) - уменьшение яркости
int pin2 = 4;//управление транзистором 2(3вывод) - увеличение яркости
int aa0 = 1;//пин подключенного резистора
int pinLed = 0;//пин входящего сигнала с подсветки
int er; //коррекция ошибки определения текущей подсветки при отключении питания или отключения контроллера
int sensorValuej;
int li_n;
 
void setup ()
{
  pinMode(1,OUTPUT);
  pinMode(pin1,OUTPUT);
  pinMode(pin2,OUTPUT);
  int oValue = 0;
  pinMode(pinLed,INPUT);//инициализируем 6 вывод контроллера как входящий сигнал со светодиодной подсветки
  digitalWrite(1,HIGH);//Зажигаем светодиод
  delay(2000);
  digitalWrite(1,LOW); 
  er = 0;
  li=0;
  li_old=0;
  delay(10000);
}
 
void loop()
 
{ 
  delay(2000);//периодичность измерения текущее количество света 
  if (digitalRead(pinLed)==LOW) //если включена подсветка кнопок то начинаем ею управлять
  {
        if (er == 0)//если подсветка до этого была выключена
        {
          digitalWrite(1,HIGH);
          delay(100);
          digitalWrite(pin1,HIGH); //устанавливаем яркость подсветки в 0.
          delay(3000);
          digitalWrite(pin1,LOW);
          delay(20);
          digitalWrite(1,LOW); 
          er = 1;
        }
        
        sensorValue = analogRead(aa0);//получаем текущее количество света
        
        if (sensorValue<0) {sensorValue = 0;}
        if (sensorValue>400){sensorValue=400;}
        
 
        if (sensorValue>400){sensorValue=400;}        
        
        li = map(sensorValue, 0, 400, 0, 20);//интерполируем в диапазон от 0 до 20
        li_n =li;
        
        //корректировка ошибок - на границах освещенности принудительно коммутируем транзисторы, без анализа старых значений.
        //причина - нет обратной связи с яркостью светодиодов
        if (li<2) {
           delay(5000);
           digitalWrite(pin1,HIGH);
           delay(100);//минимальное время 1 импульса установленное в контроллере автомобиля
           digitalWrite(pin1,LOW); 
           delay(100);
        } else
        
           if (li>18) {
           delay(5000);
           digitalWrite(pin2,HIGH);
           delay(100);//минимальное время 1 импульса установленное в контроллере автомобиля
           digitalWrite(pin2,LOW); 
           delay(100);
        }
        
        
        if (li<li_old-2)//исключаем колебания на границах
        {//если света стало меньше
         //уменьшаем яркость подсветки
          while (li_n<li_old)//пока яркость текущая не равна
         // необходимой яркости - посылаем импульсы на транзистор 1(2вывод)
          {
           li_n=li_n+1;
           digitalWrite(pin1,HIGH);
           delay(100);//минимальное время 1 импульса установленное в контроллере автомобиля
           digitalWrite(pin1,LOW); 
           delay(100);
           digitalWrite(1,HIGH); //устанавливаем яркость подсветки в 0.
           delay(100);
           digitalWrite(1,LOW); 
           delay(20);
          }
          li_old = li;//запоминаем количество света
        } else
        
         if (li>li_old+2){//исключаем колебания на границах
         //если света стало больше
         //увеличиваем яркость подсветки      
         while (li_n>li_old)//пока яркость текущая не равна
         // необходимой яркости - посылаем импульсы на транзистор 2(3вывод)
         {
           li_n=li_n-1;
           digitalWrite(pin2,HIGH);
           delay(110);//минимальное время 1 импульса установленное в контроллере автомобиля
           digitalWrite(pin2,LOW); 
           delay(100);
           digitalWrite(1,HIGH); //устанавливаем яркость подсветки в 0.
           delay(100);
           digitalWrite(1,LOW); 
           delay(20);
          }
          li_old = li;//запоминаем количество света
        }
  } else //если выключили подсветку приборки
  {
    if (er == 1)
    {
      er = 0;
      li_old=0;
    }
  }
}
//http://bigbarrel.ru/
int li;//новое значение яркости
int li_old;//старое значение яркости
int sensorValue = 0;//значение освещенности с фоторезистора
int pin1 = 3;//управление транзистором 1(2вывод) - уменьшение яркости
int pin2 = 4;//управление транзистором 2(3вывод) - увеличение яркости
int aa0 = 1;//пин подключенного резистора
int pinLed = 0;//пин входящего сигнала с подсветки
int er; //коррекция ошибки определения текущей подсветки при отключении питания или отключения контроллера
int sensorValuej;
int li_n;

void setup ()
{
  pinMode(1,OUTPUT);
  pinMode(pin1,OUTPUT);
  pinMode(pin2,OUTPUT);
  int oValue = 0;
  pinMode(pinLed,INPUT);//инициализируем 6 вывод контроллера как входящий сигнал со светодиодной подсветки
  digitalWrite(1,HIGH);//Зажигаем светодиод
  delay(2000);
  digitalWrite(1,LOW); 
  er = 0;
  li=0;
  li_old=0;
  delay(10000);
}

void loop()

{ 
  delay(2000);//периодичность измерения текущее количество света 
  if (digitalRead(pinLed)==LOW) //если включена подсветка кнопок то начинаем ею управлять
  {
        if (er == 0)//если подсветка до этого была выключена
        {
          digitalWrite(1,HIGH);
          delay(100);
          digitalWrite(pin1,HIGH); //устанавливаем яркость подсветки в 0.
          delay(3000);
          digitalWrite(pin1,LOW);
          delay(20);
          digitalWrite(1,LOW); 
          er = 1;
        }
        
        sensorValue = analogRead(aa0);//получаем текущее количество света
        
        if (sensorValue<0) {sensorValue = 0;}
        if (sensorValue>400){sensorValue=400;}
        

        if (sensorValue>400){sensorValue=400;}        
        
        li = map(sensorValue, 0, 400, 0, 20);//интерполируем в диапазон от 0 до 20
        li_n =li;
        
        //корректировка ошибок - на границах освещенности принудительно коммутируем транзисторы, без анализа старых значений.
        //причина - нет обратной связи с яркостью светодиодов
        if (li<2) {
           delay(5000);
           digitalWrite(pin1,HIGH);
           delay(100);//минимальное время 1 импульса установленное в контроллере автомобиля
           digitalWrite(pin1,LOW); 
           delay(100);
        } else
        
           if (li>18) {
           delay(5000);
           digitalWrite(pin2,HIGH);
           delay(100);//минимальное время 1 импульса установленное в контроллере автомобиля
           digitalWrite(pin2,LOW); 
           delay(100);
        }
        
        
        if (li<li_old-2)//исключаем колебания на границах
        {//если света стало меньше
         //уменьшаем яркость подсветки
          while (li_n<li_old)//пока яркость текущая не равна
         // необходимой яркости - посылаем импульсы на транзистор 1(2вывод)
          {
           li_n=li_n+1;
           digitalWrite(pin1,HIGH);
           delay(100);//минимальное время 1 импульса установленное в контроллере автомобиля
           digitalWrite(pin1,LOW); 
           delay(100);
           digitalWrite(1,HIGH); //устанавливаем яркость подсветки в 0.
           delay(100);
           digitalWrite(1,LOW); 
           delay(20);
          }
          li_old = li;//запоминаем количество света
        } else
        
         if (li>li_old+2){//исключаем колебания на границах
         //если света стало больше
         //увеличиваем яркость подсветки      
         while (li_n>li_old)//пока яркость текущая не равна
         // необходимой яркости - посылаем импульсы на транзистор 2(3вывод)
         {
           li_n=li_n-1;
           digitalWrite(pin2,HIGH);
           delay(110);//минимальное время 1 импульса установленное в контроллере автомобиля
           digitalWrite(pin2,LOW); 
           delay(100);
           digitalWrite(1,HIGH); //устанавливаем яркость подсветки в 0.
           delay(100);
           digitalWrite(1,LOW); 
           delay(20);
          }
          li_old = li;//запоминаем количество света
        }
  } else //если выключили подсветку приборки
  {
    if (er == 1)
    {
      er = 0;
      li_old=0;
    }
  }
}

Прошиваем ATTiny45 по аналогии с ATTiny2313

Файлы проекта

15 комментс для “Автоматическая регулировка яркости светодиодной подсветки в Chevrolet Aveo(Sonic)

  1. Ответить Ринат Ноя 10, 2014 21:35

    помогите обрезать схему до самостоятельной работы атини с фоторезистором и выводом питания для подсветки.
    питание 2пин(вход14в и земля)

  2. Ответить Aleksey Ноя 19, 2014 17:42

    а возможно по такому же принципу сделать автояркость например светодиодной ленты…? Только собрать схему на 4-х контактах…два на питание(12-14v), и два на «+» и «-» ленты?

    • Ответить Slava Ноя 19, 2014 17:55

      + на питание стабилизатора 12 в 5, для питания контроллера
      — общий, с ленты, контроллера, и источника питания
      1 выход на один транзистор через который питать светодиодную ленту

      • Ответить pphilonenko Ноя 30, 2015 10:57

        Уважаемый Slava! Не могли бы Вы представить схему такого подключения к светодиодной ленте 12v или немного подробнее (для чайников). А так же изменение в скетче (или может быть в схеме), чтобы работало «наоборот»: освещенность выше — яркость ленты ниже. Просто не обладаю спец. знаниями и сижу над этой тестовой платой четвертую неделю, пытаюсь понять четыре строчки выше — что с чем соединить. Нужно ли питание на Vcc микроконтроллера, тоже не догоняю. В интернете нигде ничего подобного не встретил. Готов обеспечить вознаграждение за помощь, ваши труды и потерянное время. Спасибо!

        • Ответить Slava Дек 1, 2015 12:48

          Посмотрите схему подключения с помощью биполярного транзистора npn
          http://bigbarrel.ru/?p=1700

          Скетч будет довольно простым

          byte pin_photoresistor(A0);//пин подключения фоторезистора
          byte pin_led_trip(11);//пин подключения светодиодной ленты

          void setup()
          {
          pinMode(pin_led_trip, OUTPUT);
          }

          void loop()
          {
          delay(50);
          analogWrite(11, map(analogRead(0),0,1024,0,250));//чем выше яркость света, тем выше яркость светодиодной ленты
          }

          • Ответить pphilonenko Дек 1, 2015 19:22

            Спасибо, Slava, Вы сделали мой день! Пока к сборке не приступал, но думаю что все должно получиться. Как и обещал, сходил по ссылке Donate и поддержал Ваш замечательный проект, чем могу.

  3. Ответить yarik Мар 20, 2015 08:27

    какаято путаница с конденсаторами:
    в тексте указана емкость 1Mf (мегафарад?), на схеме написано mF(микрофарад?), но по фоткам какбудтобы 1000mF.

  4. Ответить Slav Июл 25, 2015 00:28

    Можно ли сделать такую регулировку на монитор, яркость дисплея?
    Днем не видно экрана, как усилить днем подсветку и авто регулировку?
    Спасибо.

    • Ответить Slava Июл 28, 2015 15:13

      Конечно можно. принцип регулировки будет зависть от вашего дисплея. Проще всего сделать на LED дисплее

  5. Ответить Дмитрий Авг 29, 2017 14:03

    Какие фьюзы выставлять для тиньки45? И ещё, вход включение контроллера + 12 подавать?

Добавить комментарий