Название проекта Ardulight.
Идею я вынашивал давно , но как всегда не хватало времени.
Несколько дней назад Krusty подкинул ссылку на один форум , на котором давно обсуждается подсветка работающая с HTPC.
Так как я для просмотра и закачки фильмов использую HTPC на базе Acer Revo, то сразу загорелся немедленной реализацией этой идеи . Для меня как всегда возникает проблема с травлением платы, это что то сравнимо с капитальным ремонтом двигателя в автомобиле на улице И тут как всегда на помощь приходит arduino Nano V.7 и макетная плата. На сборку устройства ушло всего пол часа. Конечно в этом есть и свои минусы , так как приходится все элементы соединять проводками, но так как мне требовалось экспериментировать то это был самый подходящий вариант.
За пол часа спаял на макетке ардуино + ключи. За 15 мин. написал скетчь для Arduino , работающий с двумя зонами(6 каналов аппаратного ШИМ)
Но уперся в настройки программы в Win 7, программа ни как не хотела передавать синхронно данные, наблюдалось отставание до 10 сек.
Оказалось все просто, нужно было сменить тему AERO на упрощенную, и все сразу заработало.
Для работы программы нужно в ее конфиге указать сом порт на котором сидит Arduino. Запускать нужно файлом Start_Ambilight
Другая проблема возникла при написании четырех зонового скетча.
Все уперлось в аппаратный PWM и прерывания по таймеру.
Вообщем при программировании прерывания по таймеру автоматом отключается две ножки аппаратного ШИМ, так как все 6 выходов ШИМ используют все три тамера, по две ноги PWM на каждый таймер, пришлось отказаться от аппаратного ШИМ и сделать софтверный ШИМ.
Теперь все отлично работает смотрите на видео.
Для увеличения зон до восьми можно использовать еще один arduino и связать их между собой по 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 светодиодная лента.
Еще два варианта AmbiLight: на 84 канала от crazydnb и вариант на 42 канала собраный SBorovkov
На видео 50' дюймовая плазма .
Снимал мыльницой, качество получилось не очень хорошее,
нарушена цветопередача
По схеме железу:
Транзисторы использовал с запасом на будущее, так что можно и по слабее поставить. Транзисторы без драйверов в полне справляются на частоте 31000гц, происходит полное открывание , при использовании на протяжении нескольких часов они не нагрелись , остались холодными.
Бюджет: arduino Nano V.7 - 1шт. 780руб.
Транзисторы IRLR2905 - 9шт. по 20руб. = 180руб.
Резисторы 0,25W - 9шт. по 1руб. = 9руб. Макетка 1шт. 40 руб.
Клеммная колодка на 2 провода 6шт. по 3руб. = 18руб
Лента светодиодная RGB двойной плотности - 3м по 750руб = 2250руб.
Для тех кому кажется что подсветка сильно яркая , можно купить светодиодную ленту обычную не двойной плотности цена 400руб. за 1м
Ардуино следит за тем когда заснет комп и выключает подсветку.
P.S.
Эффект классный , на динамических сценах создается ощущение что объект выходит за пределы экрана. При взрывах и вспышках эффект удваивается
Короче говоря супер !!! Всем рекомендую.
Еще одна программа от пользователя Eraser
Программа поддерживает двухмониторный режим, визуальны настройки зон и т.д.
Также программа для Linux от Eraser
Есть еще программа для работы этой подсветки с музыкой .
Chip, если задача только в том, чтобы мигать светодиодами, то спокойно можно использовать таймер и вручную мигать.
Простейший расчет:
16МГц (тактовая частота процессора)/100Гц (допустимая частота мигания светодиодов)/256(уверен, что 256 градаций яркости - больше, чем надо) = максимум 625 тактов на прерывание. Для обслуживания 6 каналов - больше чем достаточно. В прерывании достали переменную по каждому каналу, сравнили с счетчиком, если равно - перекинули соответствующую ногу.
Примерно как написано ниже (не проверял на синтаксис, но суть понятна, думаю).
void Timer(void)
{
uint8_t i;
if (Counter==0)
{
for (i=0;i<PWM_Count;i++)
Pin[PWM_Pins[i]]=1;
}
for (i=0;i<PWM_Count;i++)
{
if (PWM_Data[i]==i)
Pin[PWM_Pins[i]]=0;
}
}
UPD.
Интересно было бы если бы подсветка горела именно там, где надо, а не вся сторона. Но чую, что это реализовать будет уже сильно посложнее. Хотя почти уверен, что ардуинки хватит и для этого. Повесить динамическую индикацию, можно еще сдвиговые регистры использовать...
Последний раз редактировалось SBorovkov; 24.02.2010 в 03:12.
Спасибо за помощь , будет время попробую твой вариант софтового PWM.
Колличество зон можно увеличить до 7, но при этом число шлейфов за телевизором увеличится и будет паутина
А как на сдвиговых регистрах ты собираешся ШИМ-ить?
Последний раз редактировалось Chip; 24.02.2010 в 10:56.
если в сдвиговый регистр выгружать данные через SPI (595 региитр совместим с SPI, насколько я помню), то выгрузка происходит со скоростью 1 бит за такт. При максимально допустимых 600 тактах как единицу взмаргивания, в сдвиговые регистры можно много чего выбросить, главное данные успеть подготовить.
Хотя думаю, было бы лучше просто использовать какие-нить параллельные регистры (тут я названия не знаю), чтобы выгружать сразу по 8 бит одним портом МК.
Еще можно оптимизировать ШИМ, сделав не 256 возможных яркостей, я штук 16. Но при этом можно сделать паузу между последовательными шагами ШИМ яркости увеличивающуюся экспоненциально. Это ведь разницу между яркостями 1 и 2 на глаз можно отличить, а разницу между 254 и 255, да еще в динамике - нельзя.
То есть можно сделать яркости примерно такие:
0 1 2 3 5 8 11 15 20 27 40 55 80 110 145 190 255.
По поводу паутины - если данные выгружать по последовательному каналу (SPI), то паутины проводов не будет. Но за телеком придется разместить не светодиодную полоску, а плату, на которой будет заметное количество микрух, типа сдвиговых регистров и uln2003.
В общем, имхо все совершенно реально, если заморочиться и есть откуда данные брать. Но это за час-два не сваять :-)
Если автор еще жив и вдруг увидит это сообщение, то я с радостью куплю готовое устройство для себя. Самостоятельно паять/собирать нет ни возможности, ни сил, ни времени, так что, готов оплатить затраты Ваших сил и времени + материалы.
если в сдвиговый регистр выгружать данные через SPI (595 региитр совместим с SPI, насколько я помню), то выгрузка происходит со скоростью 1 бит за такт. При максимально допустимых 600 тактах как единицу взмаргивания, в сдвиговые регистры можно много чего выбросить, главное данные успеть подготовить.
Хотя думаю, было бы лучше просто использовать какие-нить параллельные регистры (тут я названия не знаю), чтобы выгружать сразу по 8 бит одним портом МК.
Еще можно оптимизировать ШИМ, сделав не 256 возможных яркостей, я штук 16. Но при этом можно сделать паузу между последовательными шагами ШИМ яркости увеличивающуюся экспоненциально. Это ведь разницу между яркостями 1 и 2 на глаз можно отличить, а разницу между 254 и 255, да еще в динамике - нельзя.
То есть можно сделать яркости примерно такие:
0 1 2 3 5 8 11 15 20 27 40 55 80 110 145 190 255.
По поводу паутины - если данные выгружать по последовательному каналу (SPI), то паутины проводов не будет. Но за телеком придется разместить не светодиодную полоску, а плату, на которой будет заметное количество микрух, типа сдвиговых регистров и uln2003.
В общем, имхо все совершенно реально, если заморочиться и есть откуда данные брать. Но это за час-два не сваять :-)
Спасибо за инфу!
Действительно хороший регистр .
Информация по последовательно параллельному регистру 74HC595
Беру на вооружение.
Последний раз редактировалось Chip; 25.02.2010 в 15:35.
Если автор еще жив и вдруг увидит это сообщение, то я с радостью куплю готовое устройство для себя. Самостоятельно паять/собирать нет ни возможности, ни сил, ни времени, так что, готов оплатить затраты Ваших сил и времени + материалы.