Предисловие:
- Выдержка из инструкции: 1. Проверьте правильность подключения проводов.
- Анекдот: Стирает парень штаны и приговаривает: Никому нельзя доверять. Никому... Даже себе... Ведь только пукнуть хотел.
Решение получилось очень простое. Собрать может каждый, кто способен припаять 4 проводка
Лента была заказана перед самым новым годом.
Получена на почте в начале февраля.
3 недели ушло на то чтобы заставить её работать. Это был самый длительный и неприятный этап. Один раз по невнимательности перепутал контакты, она у меня заработала, а все следующие разы, при внимательной, аккуратной сборке по подписям ну никак не хотела работать . Решил уже что спалил. Настроение портилось из-за зря потраченных и спаленных 100 баксов и месяца потерянного времени. Оказалось, что хитрые китайцы с какой-то коварной целью на ленте перепутали местами подписи Data, Clock. До меня это так и не дошло, пару недель мучался, пытаясь заставить работать эту ленту. Проблему решил друг за один вечер, которому я отрезал кусок ленты для опытов (если она не рабочая, то не жалко, а если рабочая, то вдруг у него получится заставить её работать). На следующее утро он мне сказал причину проблемы. За что ему ОГРОМНОЕ СПАСИБО Именно к этой части всей истории относится предисловие
Дальше уже все на приподнятых эмоциях все пошло гораздо быстрее
Особенности ленты:
- светодиоды сгруппированы по 3 штуки, 1 чип на 3 RGB светодиода.
- герметизация - силиконовая трубка. Для крепления на телевизор предпочтительнее залитая в силикон. Я именно такую и заказывал, но пришла эта . На странице ленты в отзывах другой чувак написал, что заказывал наоборот в трубке, а ему пришла в заливке. Так что аккуратнее при заказе, если решитесь заказывать у этого продавца. Без герметизации считаю неудобной по причине сложностей с протиркой регулярно копящейся неизвестно от куда берущейся пыли
#include <SPI.h>
#include <WS2801.h>
unsigned long blank = 0;
int zones = 20;
int dataPin = 2;
int clockPin = 3;
WS2801 strip = WS2801(zones, dataPin, clockPin);
int leds = zones * 3;
void setup()
{
strip.begin();
strip.show();
Serial.begin(115200);
}
void loop()
{
if (Serial.available() > leds)
{
if (Serial.read() == 255) //проверка префикса
{
for (int i = 0; i < zones; i++)
{
// прочитать данные о цветах из порта в массив
//byte red = Serial.read();
//byte green = Serial.read();
//byte blue = Serial.read();
byte green = Serial.read();
byte blue = Serial.read();
byte red = Serial.read();
strip.setPixelColor(i, Color(red, green, blue));
}
blank = 0;
}
}
else
{
if (blank > 100000)
{
blank = 0;
for (int i = 0; i < zones; i++)
{
strip.setPixelColor(i, Color(0, 0, 0));
}
}
blank++;
}
strip.show();
}
// Create a 24 bit color value from R,G,B
uint32_t Color(byte r, byte g, byte b)
{
uint32_t c;
c = r;
c <<= 8;
c |= g;
c <<= 8;
c |= b;
return c;
}
В качестве управляющей программы использовал LightPack 5.8.0.
Описание проекта тут http://code.google.com/p/lightpack/
Скачать софт отсюда http://code.google.com/p/lightpack/downloads/list
Использовал его как наиболее легко настраиваемый и более интуитивно понятный для простого человека, т.к. этим проектом заинтересовались мои друзья, знакомые, далекие от электроники и программирования.
Как это все выглядит на мониторе. Пока без окончательно крепления на заднюю стенку монитора:
Настройки зон в LightPack
Вот тут должна быть картинка, но вот в FireFox 10.0.2 не хочет она отображаться, в Google Chrome все нормально.
Поэтому ссылка на всякий случай на картинку без предпросмотра ниже http://imageshost.ru/photo/176582/id1506771.html
LightPack c 20 зонами и с захватом 60 кадров в секунду нагружает процессор на 40%
CPU Intel Core 2 Duo E8400 3.0ГГц
RAM 6Гб
Video Asus GeForce 9600
OS Ubuntu 10.04 x64
Планы на будущее:
- хотелось бы добавить в протокол передачи данные с компа на контроллер после синхронизирующего кода 255 количество зон. Библиотека WS2801 позволяет динамически менять количество адресуемых пикселей. И это параметр позволит менять количество зон без перепрошивки контроллера. 8 бит на 1 кадр не сильно увеличат объем передаваемых данных, зато сильно упростять конфигурацию конечной пользовательской системы.
- попробовать использовать библиотеку FastSPI. Еще не ковырял её, но вроде как было написано, что она каким-то образом не хранит в памяти массив цветов каждой зоны. Это позволит снять ограничения контроллера на объем имеющейся оперативной памяти и позволит адресовать большее количество зон.
- применить RGB ленту с чипом на 1 RGB светодиод. Например вот такую http://www.aliexpress.com/product-gs...olesalers.html
Пока жаба душит расставаться с 150 баксами Поищу подешевле, поднакоплю денег, либо найду сил придушить жабу
- применить вместо большой и избыточной по всем параметром Arduino Mega 2560 мелкую Arduino Nano. Контроллер заказан, жду доставки.
- сделать управляющую программу для Andriod, т.к. имеется такая приставка к телеку и вот такая тема ambilight для телефона на andriod, и вот такое направление NetUp IPTV Android.
- также хотелось бы иметь управляющую программу для приставок Dune HD, например для TV-101
Проблемы:
- непонятно почему мне пришлось изменить порядок чтения цветов. Исходный порядок закомментирован. Рабочий порядок представлен. Если кто-то объяснит почему так? я что-то не понимаю или в лайтпаке такая особенность или еще какая вариант буду очень благодарен. Решение проблемы тут
- каким-то образом проскакивают помехи которые поджигают пиксели дальше определенного настроенного количества зон. Замечено при возникновении помех в электрической сети - переключение режимов холодильника (Холодильник относительно не древний. Двухкамерный Атлант ). По идее количество зон будет ограничено длиной самой ленты. Но вот вопрос/беспокойство - насколько эти помехи могут сказаться на работе девайса в целом?
Уф, вот такой отчетик по проделанной работе. Очень надеюсь, что кому-то он облегчит жизнь.
Замечания, предложения, пожелания, идеи, конструктивная критика приветствуются.
Последний раз редактировалось MAKC; 12.03.2012 в 00:47.
Причина: добавлена ссылка на картинки окончательного вида