Оглавление
Здравствуйте, друзья! Поговорим о технологии Amblight (послесвечение — фоновая задняя подсветка ТВ), эту опцию предлагают в своих телевизорах PHILIPS. Реализаций этой красоты в интернете очень много, но я свой выбор остановил на проекте Ardulight — во первых он мне под силу(как новичку), во вторых печатная плата в формате .lay — в наличии, в третьих удобная прога написана, а главное давно забытая светодиодная лента в наличии. За дело! Начнём с перечня элементов: в моём городе транзисторы мне обошлись бы в 700 рублей, в стране почта которой субсидируется на госуровне (CHINA) — 20 этих полевиков обошлись в 180 рублей.

Бобину ленты RGB в 5 метров взял с игрушки на пульте ДУ (CHINA). Расстояние от моего компьютера до телевизора метров 5, докупил удлинитель — почему-то терзал себя мыслью, что ARDUINO на таком расстоянии будет "лагать", ничего подобного всё летает (я прекрасно понимаю, что такое цифровой сигнал).
Схемотехника

Устройство имеет 6 зон по 3 ключа. Вашему вниманию показан фрагмент схемы, а точнее 1-ая зона в ней три ключа (транзисторы) к стоку которых подключены три цвета RGB. По такому-же принципу подключены полевые транзисторы 18 каналов 6 зон. Для удобства понятия и восприятия всё сведено в таблицу:
- 1 зона 2,3,4 выходы NANO
- 2 зона 5,6,7 выходы NANO
- 3 зона 8,9,10 выходы NANO
- 4 зона 11,12,13 выходы NANO
- 5 зона 14,15,16 выходы NANO
- 6 зона 17,18,19 выходы NANO
Печатная плата:

Печатная плата имеет двусторонний монтаж, контроллер с одной стороны — вся пайка на другой стороне платы, не забудем перемычку между GND и минусом питания.


Поговорим о коде
Тут есть момент который необходимо оговорить — светодиодные ленты имеют разный порядок расположения светодиодов у меня он был такой — +BRG. Дальше побитовое переключение каналов; таймеры и счётчики в это "вдаваться" не нужно — код уже продуман и отлажен.
#define D4_High PORTD =B00000100 //red
#define D4_LOW PORTD &= B11111011
#define D2_High PORTD =B00001000 //green
#define D2_LOW PORTD &= B11110111
#define D3_High PORTD =B00010000 //blue
#define D3_LOW PORTD &= B11101111#define D7_High PORTD =B00100000
#define D7_LOW PORTD &= B11011111
#define D5_High PORTD =B01000000
#define D5_LOW PORTD &= B10111111
#define D6_High PORTD =B10000000
#define D6_LOW PORTD &= B01111111#define D10_High PORTB =B00000001
#define D10_LOW PORTB &= B11111110
#define D8_High PORTB =B00000010
#define D8_LOW PORTB &= B11111101
#define D9_High PORTB=B00000100
#define D9_LOW PORTB &=B11111011#define D13_High PORTB =B00001000
#define D13_LOW PORTB &= B11110111
#define D11_High PORTB =B00010000
#define D11_LOW PORTB &= B11101111
#define D12_High PORTB =B00100000
#define D12_LOW PORTB &= B11011111#define D16_High PORTC =B00000001
#define D16_LOW PORTC &= B11111110
#define D14_High PORTC =B00000010
#define D14_LOW PORTC &= B11111101
#define D15_High PORTC =B00000100
#define D15_LOW PORTC &= B11111011#define D19_High PORTC =B00001000
#define D19_LOW PORTC &= B11110111
#define D17_High PORTC =B00010000
#define D17_LOW PORTC &= B11101111
#define D18_High PORTC =B00100000
#define D18_LOW PORTC &= B11011111volatile 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]; //массив храннения цветов 18-ть каналов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;
}
Соединительная часть проекта


Программа имеет удобный и приятный вид — сразу бросается в глаза, что писал грамотный человек. Вот возможности:

- ОСНОВНЫЕ: здесь подстраиваем под себя, есть лампа настроения с функцией генератора случайных чисел, подсветка.
- ЗОНА: задаём параметры зон, представьте, что Вы вдоль периметра телевизора будете ложить условные кирпичики: левая боковая сторона — это 1 зона, верх это 2 и 3 зона, правая боковина -это 4 зона, нижняя часть — 5и 6 зоны. Ну и дальше как в школе учили — ось ординат — только Y у Вас будет внизу, ширина и высота тут всё понятно.
- РАСШИРЕННЫЕ: Не забудьте правильно сконфигурировать Ваш COM порт и задать нужную скорость бодов — 115200. Указать количество зон.
Переходим к тестированию проверяем зоны и цвета:


Переносим на телевизор, предлагаю свой вариант расположения устройства:


Не мог себе отказать в удовольствии погонять ардулайт в динамических-резких — взрывающих сценах — я выбрал анимэ:


Всю гамму ощущений фото не передадут, а вот видео на моём канале можно посмотреть по этой ссылке
Видео работы
Вот ссылка на исходники. С Уважением ко всем форумчанам и любителям радиоэлетроники — Тольяттинский эмбеддер (1945).







