ВЫ увидели у друга крутой телек 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К
завантажень 259
Всё, основная физическая работа закончена.
Скачиваем 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МБ
завантажень 298
(менее функциональная).
Маленькое видео