ВЫ увидели у друга крутой телек philips с подсветкой Ambilight...
У вас такого нет? Ну и ладно...
Мы себе сделаем сами такое чудо.
ТОЛЬКО ДЛЯ своего МОНИТОРА или телека подключенного к компьютеру
Для начала немного инфы из википедии
Представляет собой встроенную в жидкокристаллические телевизоры фоновую подсветку, которая, анализируя цветовую картинку кадра на экране телевизора, воспроизводит рассеянный свет по периметру телевизора. Благодаря чему поверхность стены за корпусом телевизора динамически освещается, тем самым дополняя ореолом интенсивность изображения на самом экране и как бы визуально увеличивая размер изображения
А ТЕПЕРЬ К ДЕЛУ...
---------------------------------------------
Что нам для этого нужно?
1. светодиодная лента RBG
2. Arduino Nano или подобная
3. Транзисторы IRLR2905 - 9шт. по 20руб. = 180руб.
4. Резисторы 0,25W - 10шт. по 1руб. = 10руб.
5.Макетка 1шт. 40 руб.
6.Клеммная колодка на 2 провода 6шт. по 3руб. = 18руб
7. Блок питания на 12в, 1-3А (питание светодиодов много кушает)
Все собираем по такой схеме:
плата
вид собранной схемы на макетке
Разведенная плата для утюжной технологии
Ардулайт.zip 55,6К
завантажень 243
Всё, основная физическая работа закончена.
Скачиваем Arduino IDE http://arduino.cc/download.php?f=/arduino-1.5.8-windows.zip
Распаковываем Arduino IDE в любое удобное место, папку FastLED из архива с файлами внутри кидаем в папку libraries, которая находится в папке c ArduinoIDE. Запускаем файл с arduino.exe это создаст папку «arduino» в папке с документами, в ней создаем папку NeoPixel и кидем в нее наш скетч. Выходим из Arduino IDE.
Подключаем нашу ардуинку к компьютеру, драйвера должны установиться автоматически, если этого не произошло то указываем системе путь до нашей папки с Arduino IDE и драйвера должны установиться.
Запускаем arduino.exe.
Видим следующее:
Вставляем код нашего скетча (приведен ниже)
В меню Сервис-> Плата выбираем нашу нано
В меню Сервис -> Процессор выбираем ATmega328
В меню Сервис -> Порт выбираем виртуальный Com порт под которым числится наша ардуинка (обычно тот что не com1)
Жмем вот эту кнопку:
Это скомпилирует и загрузит скетч в нашу нано. Во время этой процедуры диодики на ардуине должны интенсивно мигать. После заливки скетча закройте IDE, отключите ардуино от компьютера, подключите её к ленте с помощью нашего разъема на 3 провода и подключите блок питания к ленте. Теперь вновь подключите нано к USB.
Код скетча.
#define D2_High PORTD |=B00000100 //red #define D2_LOW PORTD &= B11111011 #define D3_High PORTD |=B00001000 //green #define D3_LOW PORTD &= B11110111 #define D4_High PORTD |=B00010000 //blue #define D4_LOW PORTD &= B11101111 #define D5_High PORTD |=B00100000 #define D5_LOW PORTD &= B11011111 #define D6_High PORTD |=B01000000 #define D6_LOW PORTD &= B10111111 #define D7_High PORTD |=B10000000 #define D7_LOW PORTD &= B01111111 #define D8_High PORTB |=B00000001 #define D8_LOW PORTB &= B11111110 #define D9_High PORTB |=B00000010 #define D9_LOW PORTB &= B11111101 #define D10_High PORTB|=B00000100 #define D10_LOW PORTB &=B11111011 #define D11_High PORTB |=B00001000 #define D11_LOW PORTB &= B11110111 #define D12_High PORTB |=B00010000 #define D12_LOW PORTB &= B11101111 #define D13_High PORTB |=B00100000 #define D13_LOW PORTB &= B11011111 #define D14_High PORTC |=B00000001 #define D14_LOW PORTC &= B11111110 #define D15_High PORTC |=B00000010 #define D15_LOW PORTC &= B11111101 #define D16_High PORTC |=B00000100 #define D16_LOW PORTC &= B11111011 #define D17_High PORTC |=B00001000 #define D17_LOW PORTC &= B11110111 #define D18_High PORTC |=B00010000 #define D18_LOW PORTC &= B11101111 #define D19_High PORTC |=B00100000 #define D19_LOW PORTC &= B11011111 volatile unsigned int tcnt2; volatile byte pwm_time; //byte pwm_time, Red_R_Old, Green_L_Old, Blue_T_Old; unsigned long blank=0; //таймер простоя byte volatile color[18]; //массив храннения цветов 12-ть каналов void setup() { for (int i=2; i < 20; i++){pinMode(i, OUTPUT);} Serial.begin(115200); TIMSK2 &= ~(1<<TOIE2); //разрешения прерывания по переполнению таймера/счетчика Т2 TCCR2A &= ~((1<<WGM21) | (1<<WGM20));// Режим работы таймера/счетчика TCCR2B &= ~(1<<WGM22);// Режим работы таймера/счетчика ASSR &= ~(1<<AS2); //Выбор источника синхронизации таймера если AS2=0 от системного генератора tcnt2 = 252; // 16000000/31000/64=8 tcnt2=256-8=248. TIMSK2 |= (1<<TOIE2);//Разрешение прерывания по переполнению Т2. } void loop() { if (Serial.available() > 18) { if (Serial.read() == 255) //проверка прификса { for (int i = 0; i < 18; i++) { color[i] = Serial.read(); // прочитать данные о цветах из порта в массив } // if (Red_R_Old == color[0] && Green_L_Old == color[4] && Blue_T_Old == color[8]) blank=0; } } else { if(blank>100000) { blank=0; for (byte i = 0; i < 18; i++) color[i] = 0;} blank++; } } //****************обработчик прерывания******************** ISR(TIMER2_OVF_vect) { TCNT2 = tcnt2; pwm_time++; if(color[0] > pwm_time ) D2_High; else D2_LOW; if(color[1] > pwm_time ) D3_High; else D3_LOW; if(color[2] > pwm_time ) D4_High; else D4_LOW; if(color[3] > pwm_time ) D5_High; else D5_LOW; if(color[4] > pwm_time ) D6_High; else D6_LOW; if(color[5] > pwm_time ) D7_High; else D7_LOW; if(color[6] > pwm_time ) D8_High; else D8_LOW; if(color[7] > pwm_time ) D9_High; else D9_LOW; if(color[8] > pwm_time ) D10_High; else D10_LOW; if(color[9] > pwm_time ) D11_High; else D11_LOW; if(color[10] > pwm_time) D12_High; else D12_LOW; if(color[11] > pwm_time) D13_High; else D13_LOW; if(color[12] > pwm_time) D14_High; else D14_LOW; if(color[13] > pwm_time) D15_High; else D15_LOW; if(color[14] > pwm_time) D16_High; else D16_LOW; if(color[15] > pwm_time) D17_High; else D17_LOW; if(color[16] > pwm_time) D18_High; else D18_LOW; if(color[17] > pwm_time) D19_High; else D19_LOW; }
Собрали, включили и дым не пошёл....... Но светодиоды молчат (не светятся).
Будем оживлять их с помощью программы AmbiBox
или другой программу
ambilight.7z 3,67МБ
завантажень 278
(менее функциональная).
Маленькое видео