Страница 8 из 12 ПерваяПервая ... 23456789101112 ПоследняяПоследняя
Показано с 71 по 80 из 116
  1. #71
    Новичок
    Регистрация
    25.09.2011
    Сообщений
    9
    Вес репутации
    157

    По умолчанию Re: Автоматическая регулировка яркости светодиодной подсветки.

    похоже никак ...

  2. #72
    Модератор
    Регистрация
    06.07.2008
    Возраст
    46
    Сообщений
    414
    Вес репутации
    436

    По умолчанию Re: Автоматическая регулировка яркости светодиодной подсветки.

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

    Купил на митинском рынке пару светодиодных полосок шириной около 3 мм, длина - 30 см, на каждой располагается 48 светодиодов, цена 300р. Есть и с 24 светодиодами, 150р за штуку.

    Разобрал матрицу.
    Внутри - П-образная лампа. Разбирается аккуратно легко, граблей нет. Но все же надо аккуратно.

    Заменил лампу на два куска ленты. Одна - целиковая, ее хватило на длинную и короткую стороны, от другой отрезал кусок и поставил на оставшуюся длинную, собрал обратно. Никакой гребенки от светодиодов нет. При полной яркости светодиодам явно внутри жарко, внешняя поверхность разогревается градусов до 60, а у нее тепловой контакт со светодиодами ужасный.

    Собрал все примерно как в первом сообщении, единственное - не на ардуине, а на меге48 (валялась), но суть абсолютно та же.
    Я несколько изменил способ изменения яркости, сделав изменение яркости плавным и попытался убрать лишние колебания яркости подсветки.

    В начале определяются значения с датчика и соответствующие значения яркостей. Единственное, у меня использовался АЦП в 8-битном режиме, поэтому все значения меньше 256.

    Код:
    #define BrCount 6 // количество элементов в обоих массивах чуть ниже
    uint8_t BrIn[BrCount]={43,60,100,140,213,240}; // значения с датчика, должны возрастать!
    uint8_t BrOut[BrCount]={154,77,41,20,10,5}; // соответствующие значения для ШИМ. У меня в схеме значение датчика 240 соответствует яркости 5.
    
    volatile uint16_t CurrentBrightness=0; // текущая яркость*256.
    volatile uint8_t DestBrightness; // яркость, с которой надо светить (обычная, не умноженная на 255)
    uint8_t BrIndex; - текущий индекс режима яркости - индекс из массивов BrIn и BrOut
    затем инициализация
    Код:
    	BrIndex=0; // текущий режим- 0
    	DestBrightness=600; //стартуем с яркостью 60. Можно выставить минимальную.
    	CurrentBrightness=DestBrightness*256;
    Теперь то, что повторяется
    Код:
    		uint16_t br=0; 
    		for (uint8_t i=0;i<32;i++) // в цикле считаем среднее значение с датчика за некоторое время (около секунды). Складываем 32 значения.
    		{
    			br+=analogRead(0);
    
    // а еще - плавно меняем яркость.
    //А вот здесь делаем интересное. DestBrightness - та яркость, с которой нам надо светить. Но мы на текущий момент светим с яркостью 
    CurrentBrightness. Нам надо плавно поменять яркость.
    //для этого мы меняем CurrentBrightness на CurrentBrightness/32 за шаг.
    // такое изменение сделано потому, что человеческие чувства экспоненциальны. Для нас яркость в 30 и 60 кандел отличаются также как и 60 и 120 кд.
    //всякие +1 в формулах для того, чтобы при целочисленном делении 20/32 получить не 0, а 1 и все же изменить яркость.
    
    			uint16_t destb=DestBrightness*256;
    			TimerCounter2=0;
    			if (destb>cbr) // надо увеличить яркость?
    			{
    				uint16_t db=cbr/32+1;
    				if ((cbr+db)<cbr) //переполнение?
    					cbr=0xFFFF;
    				else
    					cbr=cbr+db;
    				if (destb<cbr)
    					cbr=destb;
    				CurrentBrightness=cbr;
    			}
    			else
    			if (destb<cbr) // надо уменьшить?
    			{
    				uint16_t db=cbr/32+1;
    				if (cbr>0)
    					cbr=cbr-db;
    				if (destb>cbr)
    					cbr=destb;
    				CurrentBrightness=cbr;
    			}
    AnalogWrite(Pin,CurrentBrightness/256);// тут, собственно, задаем яркость
    
    
    			_delay_ms(1000/32); // повторяем 32 раза, значит цикл будет выполняться примерно 1 секунду.
    		}
    		uint8_t cbr=br/4/32; // .. делим сумму на 32 (цикл складывает 32 значения) и на 4 - у меня в массиве BrIn значения датчика до 255, а не 1023.
    	
    // далее в цикле изменяем BrIndex (индекс текущего режима яркости). Принцип такой - меняем текущий режим только если показания с датчика отклонились от текущего режима настолько, что дошли как минимум до соседнего режима. 
    // пример - значения в массиве датчика 10,20,40,80. Значения яркостей - 110,120,140,180. Текущий иднекс 2 (датчик выдавал ранее около 40).
    // яркость подсветки - 140. Пока датчик не выдаст 20 (или менее) или 80 (или более), яркость подсветки не изменится и режим останется вторым.
    // Если датчик выдаст <=20, то режим сменится на 1-й (яркость - 120), если выдаст >=80, то режим сменится на 3-й.
    //ну а цикл нужен на случай, если значения с датчика резко поменялась более чем на 1 режим. К примеру - был режим 2 (датчик около 40), а вдруг стало 5. Тогда на первом проходе режим сменится на 1, а потом на 0.
    		for (uint8_t i=0;i<5;i++) 
    		{
    			if ( (BrIndex>0) && (BrIn[BrIndex-1]>cbr) )
    				BrIndex--;
    			if ( (BrIndex<BrCount-1) && (BrIn[BrIndex+1]<cbr) )
    				BrIndex++;
    			DestBrightness=BrOut[BrIndex];
    		}
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	Clipboard01.jpg 
Просмотров:	1216 
Размер:	16.6 Кб 
ID:	14198  

  3. #73
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,379
    Вес репутации
    10

    По умолчанию Re: Автоматическая регулировка яркости светодиодной подсветки.

    Самое главное ты упустил, какова разница изображения?

  4. #74
    Модератор
    Регистрация
    06.07.2008
    Возраст
    46
    Сообщений
    414
    Вес репутации
    436

    По умолчанию Re: Автоматическая регулировка яркости светодиодной подсветки.

    Проехался сегодня по солнцу, стало на порядок лучше, чем было до замены ламп. Надо будет чуток подкорректировать значения, иногда слишком тускло светит. К примеру, не учел, что даже в полной темноте рядом с монитором светит климат и панель приборов и не надо опускать яркость до 5/255.

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

  5. #75
    Пользователь
    Регистрация
    28.07.2010
    Сообщений
    27
    Вес репутации
    175

    По умолчанию Re: Автоматическая регулировка яркости светодиодной подсветки.

    Подскажите в чём может быть проблема, подключил сегодня себе авто регулировку подсветки, теперь такая проблема, при нажатии кнопок на руле пригасает подсветка, например нажимаю громкость вверх, гаснет на 50%, жму кнопку mute гаснет на 90%.
    К ардуино подцеплено управление компьютером (hotkey) паралельно управляется магнитола Pioneer 88rs, ну и соответственно авторегулировка яркости...
    А так, всё работает.
    Вот мой скетч:

    PHP код:
    int analogPin 7;  // potentiometer wiper (middle terminal) connected to analog pin 3
    int val 0;        // variable to store the value read
    int mute 2;       //MUTE Выход для нажатии кнопки 
    int volu 3;       //Volume UP Выход для нажатии кнопки
    int vold 4;       //Volume DOWN Выход для нажатии кнопки
    int pt 5;         //Предыдущий трек
    int nt 6;         //След трек

    int ledPin 9;
    int sens 0;
    int light 0;

    #define PIN 7  //номер аналогового порта  
    #define LIMIT 20 //предел погрешности сопротивления  

    byte bytes[2];   
    int res_dt1res_d;  
    unsigned long math_time,old_time,real_time;   
    void setup()        
    {       
    Serial.begin(115200); // настроить скорость com порта        
    }   

    void loop()       
    {     
      
    res_d analogRead(PIN); // прочитать данные АЦП 
      
    delay(30); 
      
    res_dt1 analogRead(PIN); // прочитать данные АЦП  
            
    old_time millis();  
            
    math_time 0;   
            while(
    math_time 300 && (res_dt1 res_d-LIMIT && res_dt1 res_d+LIMIT ))  
              {  
                 
    real_time millis();             //получить реальное время   
                 
    math_time real_time old_time//считаем длительность нажатия 
                
    res_dt1 analogRead(PIN); // прочитать данные АЦП     
              
    }  
         
        if( 
    math_time 50)  //если нет дребезга то короткое нажатие 
          
    {   
            
    bytes[0] = res_d 255;          // преобразовать в 2-байта    
            
    bytes[1] = (res_d 768) >> 8;    
            
    Serial.writebytes,2); // отправить прочитаное значение компьютеру        
          
    }     
    val analogRead(analogPin);  // PIONEER read the input pin        
      
    {
        if (
    val 600)
        
    pinMode(muteINPUT);
        
    pinMode(voluINPUT);
        
    pinMode(voldINPUT);
        
    pinMode(ntINPUT);
        
    pinMode(ptINPUT);
      }
      if (
    val and val 40)
      { 
        
    pinMode(muteOUTPUT);
      }
      if (
    val 60 and val 120)
      { 
        
    pinMode(voluOUTPUT);
      }
      if (
    val 140 and val 200)
      {  
        
    pinMode(voldOUTPUT);
      } 
       if (
    val 300 and val 420)
      { 
        
    pinMode(ntOUTPUT);
      }
       if (
    val 500 and val 590)
      { 
        
    pinMode(ptOUTPUT);
      }

     
    {   
     
    pinMode(ledPinOUTPUT); 
      
    Serial.begin(115200);
    }    
    {   
    sens analogRead(0);

    if ((
    sens 0) && (sens<3)) {light 1;}
    if ((
    sens 5) && (sens<10)) {light 5;}
    if ((
    sens 10) && (sens<15)) {light 10;}
    if ((
    sens 15) && (sens<18)) {light 20;}
    if ((
    sens 20) && (sens<25)) {light 30;}
    if ((
    sens 25) && (sens<30)) {light 40;}
    if ((
    sens 30) && (sens<35)) {light 50;}
    if ((
    sens 35) && (sens<38)) {light 60;}
    if ((
    sens 40) && (sens<45)) {light 70;}
    if ((
    sens 45) && (sens<50)) {light 80;}
    if ((
    sens 50) && (sens<55)) {light 90;}
    if ((
    sens 55) && (sens<60)) {light 150;}
    if ((
    sens 65) && (sens<70)) {light 210;}
    if ((
    sens 70) && (sens<80)) {light 230;}.
    if (
    sens 80) {light 255;}

    analogWrite(ledPinlight);
    //Serial.print(sens, DEC);
    //Serial.print(" ");
    //delay(300);
    }
     } 
    Может в нём что-то подправить можно ?
    Или как то всё преподключить на самой ардуино ?
    По всякому пробовал, у меня ничего не получилось. И еще почему то подсветка резкими ступенями регулируется, оч отвлекает, а те скетчи что преведены выше, не понял подойдут мне или нет.
    Последний раз редактировалось Chip; 05.06.2012 в 02:00.

  6. #76
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,379
    Вес репутации
    10

    По умолчанию Re: Автоматическая регулировка яркости светодиодной подсветки.

    У тебя фигурные скобки стоят где попало, разберись с ними сначала
    Например:
    PHP код:
    val analogRead(analogPin);  // PIONEER read the input pin         
      

        if (
    val 600
        
    pinMode(muteINPUT); 
        
    pinMode(voluINPUT); 
        
    pinMode(voldINPUT); 
        
    pinMode(ntINPUT); 
        
    pinMode(ptINPUT); 
      } 
    Или вот здесь
    PHP код:
    {    
     
    pinMode(ledPinOUTPUT);  
      
    Serial.begin(115200); 
    }     
    {    
    sens analogRead(0); 
    Последний раз редактировалось Chip; 05.06.2012 в 02:07.

  7. #77
    Пользователь
    Регистрация
    28.07.2010
    Сообщений
    27
    Вес репутации
    175

    По умолчанию Re: Автоматическая регулировка яркости светодиодной подсветки.

    Если честно, то вообще не особо понимаю что и зачем я пишу в ардуино, добавлял скетч с авторегулировкой часа 2 наверно... Так как постоянно ругается, то на скобки, то на слова, вообще не понимаю как её программировать.

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

    Вот как у меня всё подключено. Может тут какая то ошибка ?
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	Как у меня подключена ардуино.jpg 
Просмотров:	1407 
Размер:	171.7 Кб 
ID:	14525  

  8. #78
    Пользователь
    Регистрация
    28.07.2010
    Сообщений
    27
    Вес репутации
    175

    По умолчанию Re: Автоматическая регулировка яркости светодиодной подсветки.

    Хотябы подскажите как сделать чтоб значения датчика или кнопок поменялись, у меня сейчас 0-600 вроде, и они пересекаются с кнопками, как сделать чтоб у кнопок начиналось 600-1200 или у датчика 600-1200 ? какой резистор поменять или что сделать... Моргающая подсветка от кнопок сильно напрягает..

  9. #79
    Пользователь
    Регистрация
    28.07.2010
    Сообщений
    27
    Вес репутации
    175

    По умолчанию Re: Автоматическая регулировка яркости светодиодной подсветки.

    В общем моя проблема так и не решилась...
    При нажатии кнопок на руле, притухает подсветка, причём определённым кнопкам соответствует определённая яркость. При заливке скетча из шапки (без доработок, как есть) картина та-же.. Пробовал кнопки перевешивать на другие порты, менять резисторы, менять фоторезистор, ничего не помогает. Может у меня что-то не так подключено ? Хелп!
    И еще одна проблемма, когда экран на минимальной яркости, при включении камеры заднего вида, через несколько секунд выключается подсветка помогает только попадание света на фоторезистор (но это второстепенная проблема).

  10. #80
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,379
    Вес репутации
    10

    По умолчанию Re: Автоматическая регулировка яркости светодиодной подсветки.

    А ты что хотел от этого кода? В коде компьютеру посылается всего два байта и эти два байта данные о нажатии кнопок руля.

Страница 8 из 12 ПерваяПервая ... 23456789101112 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 3 (пользователей: 0 , гостей: 3)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •