• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

DIY Ambilight

  • Автор темы Автор темы DECIDE
  • Дата начала Дата начала

DECIDE

Новые
Регистрация
4 Янв 2016
Сообщения
1,236
Реакции
2
Баллы
0
Народ задумал вот такую штуку!!! На просторах интернета на русском не нашёл!! идея заключается в том что использовать можно любой источник видео, а сам контур любого размера!!!
вот видео полной сборке но я в английском не силён! Я лишь понял для чего нужен каждый компонент!!! А вот каким образом ставить драйвера и софт для управления диодами так и не понял! Помогите разобраться!!! вот ссылка на первое видео!!!!
 
А вот в результате что хочу получить!!! Экран на видео 130" и эмбилайт
 
 
Последнее редактирование:
Целью ветки считаю перевод всего для простого пользователя!!! Ибо за месяц не нашёл ничего на русском в интернете!!!
 
Ссылка удалена, читайте правила.
 

Ну ты же понимаешь что при такой сборке работать это будет исключительно от компа и с контентом который находится на компе!!!! У меня лично есть ресивер Pioneer vsx 520 и Blueray Pioneer!!! А так же приставка триколор тв и медиаплеер!!!! Всё это подключено к ресиверу по HDMI и имеет общий выход на проектор!!! Я бы хотел смотреть видео оттуда ну и чтоб эмбилайт работал именно с моим источником видеосигнала!!! Поэтому в приведённом выше видео расписано как делать эмбилайт именно с любым видео источником!!!! Это ведь круче? не так ли!? так что будем разбираться!!!! Через месяц ко мне приедут все компоненты и начну шаманить!!! Скетч для АРДУИНО я уже подготовил!))))
 
И так для управляемого интелектуального ЭМБИЛАЙТ нужно следующее:
1. Arduino Uno
2. Raspberry Pi 3 model B
3. Светодиодная управляемая лента WS2812B ( число диодов на метр на выбор)
4. HDMI сплитер на 2
5. Плата видео захвата на чипе (UTV007 Chipset)
6. HDMI to AV конвертор
7. Micro SD карта ( 10 класс обязательно )
8. 5V – 10A блок питания светодиодной ленты
и всевозможные кабели для соединения (hdmi и тд.)

Для ардуино использовать следующий СКЕТЧ ( Скорректировать, скопировать и загрузить в АРДУИНО)
Корректировка заключается в изменении колличества диодов на всей длинне ленты, яркости и цвета самой ленты при старте!

ВОТ САМ СКЕТЧ


// LIBRARIES

#include <Wire.h>
//#include <LiquidCrystal_I2C.h>
#include "Adafruit_NeoPixel.h"

// DEFINITIONS

#define STARTCOLOR 0x33cccc // LED color at startup 0xff8000 is orange in hex code. pick your own here: HTML Color Picker
#define BLACK 0x000000 // LED color BLACK

#define DATAPIN 10 // Datapin
#define LEDCOUNT 300 // Number of LEDs used in your system
#define SHOWDELAY 20 // Delay in micro seconds before showing
#define BAUDRATE 500000 // Serial port speed

#define BRIGHTNESS 100 // Max. brightness in %


const char prefix[] = {0x41, 0x64, 0x61, 0x00, 0x12b, 0x17e}; // Prefix at the start of the transmission
char buffer[sizeof(prefix)]; // Temporary buffer for receiving the prefix data

// to calculate your prefix, the first 4 bytes will never change: const char prefix[] = {0x41, 0x64, 0x61, 0x00, this never changes.
// the next byte is equal to the number of LED - 1 --> (232-1)=231. 231 transformed in HEX. 231 in hex is E7 (use google)
// the last byte is equal to the XOR value of the calculated value just above and 0x55 (byte just calculated (E7) XORED with 0x55) = B2 use this link XOR Calculator Online and in input 1 put 55 and in input 2 put your HEX value.

// some precalculated values to save some time: 178 leds gives B1 and E4, 180 B3E6, 181 B4E1, 182 B5E0 232 E7B2 230 E5B0

Adafruit_NeoPixel strip = Adafruit_NeoPixel(LEDCOUNT, DATAPIN, NEO_GRB + NEO_KHZ800);
//LiquidCrystal_I2C lcd(0x20,16,2); // set the LCD address to 0x20 for a 16 chars and 2 line display

int state; // Define current state
#define STATE_WAITING 1 // - Waiting for prefix
#define STATE_DO_PREFIX 2 // - Processing prefix
#define STATE_DO_DATA 3 // - Handling incoming LED colors

int readSerial; // Read Serial data (1)
int currentLED; // Needed for assigning the color to the right LED
const int led_button = 11; // ON/OFF button input
const int status_led = 8; // LED of button
const int ch_2 = A0; // Inputs from HDMI switcher
const int ch_3 = A1;
const int ch_4 = A2;
const int ch_5 = A3;

int curr_source = 0; // Used to store which source is currently displayed
boolean strip_status = true; // Used to chose if the LED strip is ON or OFF (depending on button choice)
unsigned long timeout = 0; // Timeout used to turn LED strip off if no new data has come thorugh after some time

void setup()
{
pinMode(led_button, INPUT);
pinMode(ch_2, INPUT);
pinMode(ch_3, INPUT);
pinMode(ch_4, INPUT);
pinMode(ch_5, INPUT);
pinMode(status_led, OUTPUT);
digitalWrite(led_button, HIGH);
digitalWrite(status_led, HIGH);

delay (15000); // 15 seconds delay at startup to avoid strange behaviours as the PI boots up etc
strip.begin(); // Init LED strand, set all black, then all to startcolor

strip.setBrightness( (255 / 100) * 25 );

setAllLEDs(BLACK, 0);
setAllLEDs(STARTCOLOR, 10); // Will turn ON all LEDS with a 5ms delay between each turn ON creating a snake increasing pattern

Serial.begin(BAUDRATE); // Init serial speed

state = STATE_WAITING; // Initial state: Waiting for prefix

//lcd.init(); // Initialize the lcd
//lcd.backlight(); // Turn ON LCD backlight
//lcd.print(" waiting for PI"); // Wait for PI to boot up for 5 sec (avoids the Arduino rebooting randomly)
delay(5000);
//lcd.clear();
//lcd.print("**** SOURCE ****");
strip.setBrightness( (255 / 100) * BRIGHTNESS ); // Set the brightness we chose above
}


void loop()
{
do_strip(); // Main part of the code where we look at the data incoming from the PI
if (state == STATE_WAITING) // Only if we are in WAITING state we check the source inputs and our ON/OFF button.
{
check_source();
check_button();
}
}

void do_strip(void)
{
if (strip_status == true)
{
switch(state)
{
case STATE_WAITING: // *** Waiting for prefix ***
if( Serial.available()>0 )
{
readSerial = Serial.read(); // Read one character

if ( readSerial == prefix[0] ) // if this character is 1st prefix char
{ state = STATE_DO_PREFIX; } // then set state to handle prefix
}
break;


case STATE_DO_PREFIX: // *** Processing Prefix ***
timeout = millis();
if( Serial.available() > sizeof(prefix) - 2 )
{
Serial.readBytes(buffer, sizeof(prefix) - 1);

for( int Counter = 0; Counter < sizeof(prefix) - 1; Counter++)
{
if( buffer[Counter] == prefix[Counter+1] )
{
state = STATE_DO_DATA; // Received character is in prefix, continue
currentLED = 0; // Set current LED to the first one
}
else
{
state = STATE_WAITING; // Crap, one of the received chars is NOT in the prefix
break; // Exit, to go back to waiting for the prefix
} // end if buffer
} // end for Counter
} // end if Serial
break;


case STATE_DO_DATA: // *** Process incoming color data ***
if( Serial.available() > 2 ) // if we receive more than 2 chars
{
Serial.readBytes( buffer, 3 ); // Abuse buffer to temp store 3 charaters
strip.setPixelColor( currentLED++, buffer[0], buffer[1], buffer[2]); // and assing to LEDs
}

if( currentLED > LEDCOUNT ) // Reached the last LED? Display it!
{
strip.show(); // Make colors visible
delayMicroseconds(SHOWDELAY); // Wait a few micro seconds

state = STATE_WAITING; // Reset to waiting ...
currentLED = 0; // and go to LED one

break; // and exit ... and do it all over again
}
break;
} // switch(state)
} // if statement
else
{setAllLEDs(BLACK, 0);}

if(millis() > timeout + 5000) // If no new incoming data after 5seconds, turn the strip OFF.
{setAllLEDs(BLACK, 0);}
} // do_strip

void check_source (void)
{
if(digitalRead(ch_2) == HIGH)
{
if(curr_source != 2)
{
//lcd.setCursor(0,1);
curr_source = 2;
//lcd.print(" PS_4 "); // Channel 2 of HDMI switcher LCD name
}
}
else if(digitalRead(ch_3) == HIGH)
{
if(curr_source != 3)
{
//lcd.setCursor(0,1);
curr_source = 3;
//lcd.print(" NOT USED"); // Channel 3 of HDMI switcher LCD name
}
}
else if(digitalRead(ch_4) == HIGH)
{
if(curr_source != 4)
{
//lcd.setCursor(0,1);
curr_source = 4;
//lcd.print(" CD/DVD "); // Channel 4 of HDMI switcher LCD name
}
}
else if(digitalRead(ch_5) == HIGH)
{
if(curr_source != 5)
{
//lcd.setCursor(0,1);
curr_source = 5;
//lcd.print(" COMPUTER"); // Channel 5 of HDMI switcher LCD name
}
}
else


{
if(curr_source != 1)
{
//lcd.setCursor(0,1);
curr_source = 1;
//lcd.print(" AV INPUT"); // Channel 1 of HDMI switcher LCD name
}
}
}

void check_button (void) // ON/OFF button routine
{
if(digitalRead(led_button) == LOW)
{
if(strip_status == true)
{
strip_status = false;
digitalWrite(status_led, LOW);
}
else
{
strip_status = true;
digitalWrite(status_led, HIGH);
}
delay(25);
while(digitalRead(led_button) == LOW)
{}
}
}

// Sets the color of all LEDs in the strip
// If 'wait'>0 then it will show a swipe from start to end
void setAllLEDs(uint32_t color, int wait)
{
for ( int Counter=0; Counter < LEDCOUNT; Counter++ ) // For each LED
{
strip.setPixelColor( Counter, color ); // .. set the color

if( wait > 0 ) // if a wait time was set then
{
strip.show(); // Show the LED color
delay(wait); // and wait before we do the next LED
} // if wait

} // for Counter

strip.show(); // Show all LEDs
} // setAllLEDs
 
Судя по списку такой эмбилайт выльется рубликов в 10к - не бюджетно надо сказать :(
Буду заглядывать в тему, следить за продвижениями :)
 
Судя по списку такой эмбилайт выльется рубликов в 10к - не бюджетно надо сказать :(
Буду заглядывать в тему, следить за продвижениями :)
Ну на мой проект я пока насчитал на 5600р!!! Да как то не бюджетно!((( Но это составной вариант и если он надоест то я получу красивую гирлянду для елки и микрокомпьютер с медиацентром!)))) А в целом данная система адаптирована под любой (разумный) размер экрана. буду делать и выкладывать!))) Посмотрим!
 
В оранжевом блоке СКЕТЧА указаны константы и основные моменты работы ленты при её запуске ( включении)! Там указано что при старте она будет загораться цветом 33cccc ( похож на цвет морской волны) на 15 секунд до полного запуска Raspberry Pi 3
Так же будет использоваться дата пин 10 для управления с Ардуино, количество диодов ( именно в моей схеме ) 300 шт. А так же задержка и яркость!!! То есть яркостью можно управлять программно!!!! В моих планах дописать скетч так чтобы при старте светодиодная лента не просто загоралась а выполняла эффект когда из центра нижней части экрана диоды разбегались в верхнюю часть экрана и встречались по середине сверху!!! Ну и обратно!!! Аля динамический индикатор загрузки!))))) Так же хочу отметить что скетч написан исключительно под светодиодную ленту WS2812B из за своих особенностей!!!
 
Сразу под оранжевым блоком СКЕТЧА расположен очень важный момент!!!! Его каждый должен настроить под себя!!!

const char prefix[] = {0x41, 0x64, 0x61, 0x00, 0x12b, 0x17e}; // Prefix at the start of the transmission
char buffer[sizeof(prefix)]; // Temporary buffer for receiving the prefix data

Изменить необходимо только 2 последних показателя ( выделен красным)!!! Первый надо перевести в HEX а второй в XOR !!!
HEX можно вычислить в виндовом кальколяторе!!! Там есть для програмистов!)))) Надо взять общее количество диодов и отнять 1 ( в моём случае 300-1=299) и перевести в HEX получится 12В и в строке вписать {0x41, 0x64, 0x61, 0x00, 0x12b, 0x17e};

А XOR высчитывается иcходя из HEX!!! В скетче есть ссылка на калькулятор XOR!!! там нужно в первом окне ввести 55, во втором ваше значение HEX и нажать кнопку для расчёта XOR и в моём случае получается 17Е !!!! Дописать надо вот так {0x41, 0x64, 0x61, 0x00, 0x12b, 0x17e};
 
Последнее редактирование:
На видео показан эффект который я хочу сделать при старте!!!! Для понимания переведите просмотр на время 3 минуты ровно!!! Там эффект с изменением цвета и без!!! Я буду делать одноцветный!!!!
 
 
Блин...если это все взлетит то просто мега супер будет проект :)
И что бы работало без глюков...а то дилетантским взглядом железо выглядит очень разношерстно, а как правило в таких сборках (из разношерстного железа) глюки и вылазят...будем надеятся что все будет супер !
 
Блин...если это все взлетит то просто мега супер будет проект :)
И что бы работало без глюков...а то дилетантским взглядом железо выглядит очень разношерстно, а как правило в таких сборках (из разношерстного железа) глюки и вылазят...будем надеятся что все будет супер !

Это из чего такие выводы!?)))) схема по моему логичная!!!Микрокомпьютер для обработки данных, плата ардуино это эффектор и управляющий модуль для светодиодной ленты, делитель HDMI для деления сигнала на проектор и на захват видео, Плата видео захвата всего лишь для перевода в нужный алгоритм! ну и конвертер для перевода цифры в аналог для упрощения кодирования!!! Всё в этой схеме логично!!!! единственное что не нравится это то что по идее кто то допёр как всё это уменьшить, но и денег за это рубит соответственно!!! Но кстати зон освещения у таких гениев меньше и они локальные!!! Моя же схема непрерывно может обслуживать светодиодную ленту до 1000 диодов!!!! Это удобно и красиво!!!
 
Можно сделать и просто с АРДУИНО но она глуповата и не потянет сам контент!!! Она годня в этом проекте только для светодиодной ленты!!!! Отличный микроконтроллер!!! По этому в схеме микрокомпьютер выполняет роль медиацентра который легко справляется с обработкой сигнала!
 
Я если честно не понял зачем на распбери вкорячивать коди...
Просто что бы заодно на ее мощах иметь медиаплеер?
 
Я если честно не понял зачем на распбери вкорячивать коди...
Просто что бы заодно на ее мощах иметь медиаплеер?

Нет!!! Чтобы через оболочку КОДИ а точнее через плагин для неё (Хаперион) гнать сигнал от HDMI, переведённый в аналог!!!! Знаю что намудрено но доступно и работает!!!! Если использовать контент чисто с компа то кроме ARDUINO больше ничего и не нужно!!!! Я так заморочился для того чтобы использовать 3 источника видеосигнала!!!! У меня ресивер ПИОНЕР с 3 HDMI входами!!! Соответственно использую блюрей, триколор тв, и PS3!!! Если чисто через комп гнать то система очень дешевая получается!!!!
 
Понял, а заказывали детали на али?
 
Да на АЛИ!) Я пока заказал ардуино, конвертер HDMI - AV, и плату видео захвата!!! Распбери пай в самый последний момент закажу, так как для тестов можно обойтись и компом!) Принцип работы одинаковый!!!
 
Самое главное в этом деле это грамотный СКЕТЧ для АРДУИНО!!! Так как он и управляет всем процессом! Я планирую в скетч дописать код который даст мне определённый эффект при загрузки всего этого дела!)))) В сообщении #11 я написал где в видео его посмотреть!!!!
а так схема расположения светодиодной ленты у меня будет такова!!!
 

Вложения

  • DIY AMBILIGHT.webp
    DIY AMBILIGHT.webp
    7.4 KB · Просмотры: 79
Вот так выглядит рабочая схема!!! При желании можно уложить всё компоненты в какой нибудь корпус!!!! И до экрана пустить UTP кабель для подключения к светодиодной ленты!!!
 

Вложения

  • DIY AMBILIGHT (2).webp
    DIY AMBILIGHT (2).webp
    45.6 KB · Просмотры: 368
Назад
Сверху