Технический форум
Вернуться   Технический форум > Электроника, самоделки и техника > Форум по электронике > Светодиоды


Ответ
 
Опции темы Опции просмотра
Старый 23.12.2016, 15:21   #1 (permalink)
DECIDE
Member
 
Регистрация: 04.01.2016
Сообщений: 1,236
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 99
По умолчанию DIY Ambilight

Народ задумал вот такую штуку!!! На просторах интернета на русском не нашёл!! идея заключается в том что использовать можно любой источник видео, а сам контур любого размера!!!
вот видео полной сборке но я в английском не силён! Я лишь понял для чего нужен каждый компонент!!! А вот каким образом ставить драйвера и софт для управления диодами так и не понял! Помогите разобраться!!! вот ссылка на первое видео!!!!
 
А вот в результате что хочу получить!!! Экран на видео 130" и эмбилайт
 
__________________
Проектор PANASONIC PT-AE900E (3LCD 1100 lum)

Последний раз редактировалось DECIDE; 23.12.2016 в 15:27
DECIDE вне форума   Ответить с цитированием

Старый 23.12.2016, 15:21
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Некоторые темы по содержанию очень напоминают вашу тему

Ambilight своими руками - это реально
Подсветка монитора "Ambilight"
Простой Ambilight на Attiny2313

Старый 04.01.2017, 22:31   #2 (permalink)
DECIDE
Member
 
Регистрация: 04.01.2016
Сообщений: 1,236
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 99
По умолчанию

Целью ветки считаю перевод всего для простого пользователя!!! Ибо за месяц не нашёл ничего на русском в интернете!!!
__________________
Проектор PANASONIC PT-AE900E (3LCD 1100 lum)
DECIDE вне форума   Ответить с цитированием
Старый 06.01.2017, 03:47   #3 (permalink)
Atalyans
Member
 
Аватар для Atalyans
 
Регистрация: 22.01.2016
Адрес: Томск, Россия
Сообщений: 57
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

 
__________________
Проектор BenQ W1070 (DLP 2000 lum)
Atalyans вне форума   Ответить с цитированием
Старый 06.01.2017, 04:56   #4 (permalink)
Atalyans
Member
 
Аватар для Atalyans
 
Регистрация: 22.01.2016
Адрес: Томск, Россия
Сообщений: 57
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Ссылка удалена, читайте правила.
__________________
Проектор BenQ W1070 (DLP 2000 lum)
Atalyans вне форума   Ответить с цитированием
Старый 08.01.2017, 02:56   #5 (permalink)
DECIDE
Member
 
Регистрация: 04.01.2016
Сообщений: 1,236
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 99
По умолчанию

Цитата:
Сообщение от Atalyans Посмотреть сообщение
 
Ну ты же понимаешь что при такой сборке работать это будет исключительно от компа и с контентом который находится на компе!!!! У меня лично есть ресивер Pioneer vsx 520 и Blueray Pioneer!!! А так же приставка триколор тв и медиаплеер!!!! Всё это подключено к ресиверу по HDMI и имеет общий выход на проектор!!! Я бы хотел смотреть видео оттуда ну и чтоб эмбилайт работал именно с моим источником видеосигнала!!! Поэтому в приведённом выше видео расписано как делать эмбилайт именно с любым видео источником!!!! Это ведь круче? не так ли!? так что будем разбираться!!!! Через месяц ко мне приедут все компоненты и начну шаманить!!! Скетч для АРДУИНО я уже подготовил!))))
__________________
Проектор PANASONIC PT-AE900E (3LCD 1100 lum)
DECIDE вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 15.01.2017, 17:12   #6 (permalink)
DECIDE
Member
 
Регистрация: 04.01.2016
Сообщений: 1,236
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 99
По умолчанию

И так для управляемого интелектуального ЭМБИЛАЙТ нужно следующее:
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
__________________
Проектор PANASONIC PT-AE900E (3LCD 1100 lum)
DECIDE вне форума   Ответить с цитированием
Старый 16.01.2017, 08:53   #7 (permalink)
DDREDD
Member
 
Регистрация: 15.10.2010
Сообщений: 9,817
Записей в дневнике: 1
Сказал(а) спасибо: 32
Поблагодарили 45 раз(а) в 8 сообщениях
Репутация: 54920
По умолчанию

Судя по списку такой эмбилайт выльется рубликов в 10к - не бюджетно надо сказать
Буду заглядывать в тему, следить за продвижениями
__________________
Там, откуда я родом, безумцы правят народом...
DDREDD вне форума   Ответить с цитированием
Старый 16.01.2017, 11:12   #8 (permalink)
DECIDE
Member
 
Регистрация: 04.01.2016
Сообщений: 1,236
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 99
По умолчанию

Цитата:
Сообщение от DDREDD Посмотреть сообщение
Судя по списку такой эмбилайт выльется рубликов в 10к - не бюджетно надо сказать
Буду заглядывать в тему, следить за продвижениями
Ну на мой проект я пока насчитал на 5600р!!! Да как то не бюджетно!((( Но это составной вариант и если он надоест то я получу красивую гирлянду для елки и микрокомпьютер с медиацентром!)))) А в целом данная система адаптирована под любой (разумный) размер экрана. буду делать и выкладывать!))) Посмотрим!
__________________
Проектор PANASONIC PT-AE900E (3LCD 1100 lum)
DECIDE вне форума   Ответить с цитированием
Старый 21.01.2017, 13:38   #9 (permalink)
DECIDE
Member
 
Регистрация: 04.01.2016
Сообщений: 1,236
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 99
По умолчанию

В оранжевом блоке СКЕТЧА указаны константы и основные моменты работы ленты при её запуске ( включении)! Там указано что при старте она будет загораться цветом 33cccc ( похож на цвет морской волны) на 15 секунд до полного запуска Raspberry Pi 3
Так же будет использоваться дата пин 10 для управления с Ардуино, количество диодов ( именно в моей схеме ) 300 шт. А так же задержка и яркость!!! То есть яркостью можно управлять программно!!!! В моих планах дописать скетч так чтобы при старте светодиодная лента не просто загоралась а выполняла эффект когда из центра нижней части экрана диоды разбегались в верхнюю часть экрана и встречались по середине сверху!!! Ну и обратно!!! Аля динамический индикатор загрузки!))))) Так же хочу отметить что скетч написан исключительно под светодиодную ленту WS2812B из за своих особенностей!!!
__________________
Проектор PANASONIC PT-AE900E (3LCD 1100 lum)
DECIDE вне форума   Ответить с цитированием
Старый 21.01.2017, 13:42   #10 (permalink)
DECIDE
Member
 
Регистрация: 04.01.2016
Сообщений: 1,236
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 99
По умолчанию

Сразу под оранжевым блоком СКЕТЧА расположен очень важный момент!!!! Его каждый должен настроить под себя!!!

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};
__________________
Проектор PANASONIC PT-AE900E (3LCD 1100 lum)

Последний раз редактировалось DECIDE; 21.01.2017 в 13:52
DECIDE вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

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

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

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




Часовой пояс GMT +4, время: 19:00.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.