Форум обсуждения оборудования  

Вернуться   Форум обсуждения оборудования "Умный дом" > Форум умного дома > Сделай сам

Ответ
 
Опции темы Опции просмотра
Старый 17.04.2010, 10:41   #1
Admin
Administrator
 
Регистрация: 12.04.2010
Сообщений: 41
По умолчанию Ambilight для HTPC

Собираем Ambilight своими руками

Название проекта Ardulight.
Идею я вынашивал давно , но как всегда не хватало времени.
Несколько дней назад мой знакомый подкинул идею собрать Ambilight на Arduino для HTPC.
Так как я для просмотра и закачки фильмов использую HTPC на базе Acer Revo, то сразу загорелся немедленной реализацией этой идеи . Для меня как всегда возникает проблема с травлением платы, это что то сравнимо с капитальным ремонтом двигателя в автомобиле на улице И тут как всегда на помощь приходит Carduino Nano V.4 и макетная плата. На сборку устройства ушло всего пол часа. Конечно в этом есть и свои минусы , так как приходится все элементы соединять проводками, но так как мне требовалось экспериментировать то это был самый подходящий вариант.

За пол часа спаял на макетке ардуино + ключи. За 15 мин. написал скетчь для Arduino , работающий с двумя зонами(6 каналов аппаратного ШИМ)
Но уперся в настройки программы в Win 7, программа ни как не хотела передавать синхронно данные, наблюдалось отставание до 10 сек.
Оказалось все просто, нужно было сменить тему AERO на упрощенную, и все сразу заработало.
Для работы программы нужно в ее конфиге указать сом порт на котором сидит Arduino. Запускать нужно файлом Start_Ambilight

Другая проблема возникла при написании четырех зонового скетча.
Все уперлось в аппаратный PWM и прерывания по таймеру.
Вообщем при программировании прерывания по таймеру автоматом отключается две ножки аппаратного ШИМ, так как все 6 выходов ШИМ используют все три тамера, по две ноги PWM на каждый таймер, пришлось отказаться от аппаратного ШИМ и сделать софтверный ШИМ.
Теперь все отлично работает смотрите на видео.
Для увеличения зон до восьми можно использовать еще один Carduino и связать их между собой по I2C или сделать на регистрах 74HC595. Погонял пару дней программу Boblight , понял что мне многово не хватает, регулировки яркости, температуры цвета и насыщенности. К то муже у этой программы куча недостатков, таких как отставание от реальной картинки от 1 до 10 сек. Программа не работает с темами AERO в Windows 7 и многое другое.
Решил написать свою программу.
Моя программа умеет выводить от 1 до 42 каналов, есть регулировка яркости , насыщенности и баланса белого.
Корректно работает с Windows 7 и темой AERO , не тормозит на разрешениях 1900х1080, корректно выходит из Сна и Hibernation , имеется конфигурационный фаил, с возможностью отключения не нужных каналов и настройкой областей сканирования, изменения времени сканирования и т.д. Проверял программу с 4-мя зонами, то есть 12 каналов, все отлично работает

Подсветку установил на плазму 50' , использовал светодиодные ленты RGB двойной плотности. Всего ушло 2м 60 см. Данная лента потребляет ток 800мА на один метр, так что БП от моего монитора Lilliput мне хватило для питания светодиодных лент. Расчет простой 2,6*0,8=2А при максимально открытых ключах.

На фото RGB светодиодная лента.
Вложение 7676

На видео 50' дюймовая плазма .
Снимал мыльницой, качество получилось не очень хорошее,
нарушена цветопередача


Собрал на скорую руку на мекетке

Название: adulight.jpg
Просмотров: 72

Размер: 14.6 Кб
Название: ardulite1.jpg
Просмотров: 72

Размер: 9.1 Кб

Sketch для Carduino/Arduino

PHP код:
#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

volatile unsigned int tcnt2;

//byte pwm_time, Red_R_Old, Green_L_Old, Blue_T_Old;
unsigned long blank=0//таймер простоя
byte volatile color[12];  //массив храннения цветов 12-ть каналов

void setup() 
{
        for (
int i=214i++){pinMode(iOUTPUT);}  
        
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() > 12
  { 
      if (
Serial.read() == 255)  //проверка прификса      
        
{
            for (
int i 012i++) 
             {                
               
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 012i++)  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_timeD12_High; else D12_LOW;        
    if(
color[11] > pwm_timeD13_High; else D13_LOW;

По схеме железу:
Транзисторы использовал с запасом на будущее, так что можно и по слабее поставить. Транзисторы без драйверов в полне справляются на частоте 31000гц, происходит полное открывание , при использовании на протяжении нескольких часов они не нагрелись , остались холодными.

Название: CARDUINO_ARDULIGHT-4.jpg
Просмотров: 72

Размер: 10.1 Кб

Печатную плату нарисовал Kristy
Название: 1fafa8bcaa19.jpg
Просмотров: 72

Размер: 27.7 Кб

Бюджет:
Carduino Nano V.4 - 1шт. 780руб.
Транзисторы IRLR2905 - 9шт. по 20руб. = 180руб.
Резисторы 0,25W - 10шт. по 1руб. = 10руб.
Макетка 1шт. 40 руб.
Клеммная колодка на 2 провода 6шт. по 3руб. = 18руб
Лента светодиодная RGB двойной плотности - 3м по 750руб = 2250руб.
Для тех кому кажется что подсветка сильно яркая , можно купить светодиодную ленту обычную не двойной плотности цена 400руб. за 1м

Ардуино следит за тем когда заснет комп и выключает подсветку.
Название: Ardulight.jpg
Просмотров: 72

Размер: 3.2 Кб

P.S.
Эффект классный , на динамических сценах создается ощущение что объект выходит за пределы экрана. При взрывах и вспышках эффект удваивается
Короче говоря супер !!! Всем рекомендую.

Есть еще программа для работы этой подсветки с музыкой .


Будут вопросы спрашивайте.
Admin вне форума   Ответить с цитированием
Старый 08.05.2010, 13:51   #2
lvovitch
Administrator
 
Регистрация: 14.04.2010
Сообщений: 46
По умолчанию

У меня есть вопрос:

а вот к примеру если у человека руки золотые, но растут не оттуда, а эмбилайт хочется, что ему делать?

Проще говоря, будут ли продаваться такие устройства уже в готовом виде?


P.S. там не все картинки работают
lvovitch вне форума   Ответить с цитированием
Старый 16.05.2010, 17:03   #3
Admin
Administrator
 
Регистрация: 12.04.2010
Сообщений: 41
По умолчанию

ВОзможно на 24 канала закажем пробную партию
Admin вне форума   Ответить с цитированием
Ответ

Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 22:41. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd. Перевод: zCarot