Итак, начнем.
Проектор состоит из двух в общем-то независимых частей. Первая — это декодер видеосигнала. Вторая — это непосредственно проекционное устройство. Можно объединить обе части в одном модуле. Но я за разделение. Поэтому начнем с модуля декодера.
Декодер видеосигнала
Для простоты будем работать с VGA. VGA-сигнал делится на три принципиальных части:
1) Передача цвета;
2) Вертикальная и горизонтальная синхронизция;
3) Передача на ПК информации о мониторе — родное разрешение, доступные частоты, инорфмация о производителе.
O VGA
Передача цвета производится аналоговым сигналом от 0 до 0.7 вольт. Остальные данные передаются в цифровом виде. Для работы с VGA будем использовать микроконтроллер atmega8. После разводки у меня получилась вот такая плата:
Слева — кварцевый резонатор и питание, сверху — uart по которому мы будем проекционному устройству отдавать сигнал, справа — VGA и снизу — разъем для подключения программатора.
R2 и R3 — это резисторы для i2c канала, по которому передается информация о мониторе.
Об идентификации
Ранее VGA мониторы отдавали информацию подтягиванием четырех пинов на землю. Однако нам такой вариант не подходит, поскольку он не позволяет задать Full HD разрешение.
С приходом больших разрешений VGA обзавелся DDC (Display Data Channel). Это i2c совместимый канал обмена данными. VGA монитор является slave устройством с адресом 0x50 и при запросе от мастера просто отдает фиксированное содержимое — EDID (Extended Display Identification Data).
EDID подробно разобран в той же википедии. Но формировать 128 байт (именно столько занимает блок данных) с нуля — задачка не веселая, даже по подробной спецификации.
Поэтому я просто подключил VGA монитор к нашей плате и написал простенький скетч (даже не буду приводить код, ибо примитивный он), который открывал i2c соединение в роли мастера, делал запрос по адресу 0x50 и просто ретранслировал всё на uart.
Получилось вот так:
Мой монитор отдает два блока данных. Первый блок содержит всё что требуется. Второй весь забит 0xff.
Я взял все эти данные и забил в скетч. Единственный момент — мой монитор имеет родное разрешение 1440x900, а нам нужно 1920х1080. Поэтому 38 байт переписывается для соответствия Full HD и заново считается контрольная сумма (последний байт). Контрольная сумма — так называемая Modular sum. То есть сумма всех байт (включая чек-сумму) должна быть 0.
Теперь, если подключить плату к видеокарте ПК по VGA кабелю, система определит второй монитор.
Стоит отметить, что далеко не все ПК у меня определили этот модуль в качестве монитора. То ли из-за того, что я не подключил 4 и 11 пины к земле, то ли потому, что я не стал брать питание с 9 пина… Точно не знаю. Проверять не стал.
О получении картинки
С картинкой всё просто:
Когда приходит VSync сигнал — начинается новый кадр. Каждый HSync сигнал означает начало новой строки. Значения из аналоговых RGB каналов, полученные в период между двумя HSync сигналами, и представляют строку пикселей на экране. В теории все просто. Но есть нюанс: даже картинка 640х480 при частоте 60 герц требует для обработки 25 мегагерцовый процессор… Full HD почти на порядок требовательнее.
А у нас atmega8 с потолком в 15 мегагерц… Какие уж тут Full HD… Мы даже 640х480 не потянем…
Можно, конечно, прикрутить сюда stm32 и он справится без проблем… но зачем? Мы пойдем другим путем. И будем полностью игнорировать сигналы синхронизации. Просто в лоб, в течении 100 миллисекунд накапливаем r,g,b значения — сколько сможем, а потом получаем среднеарифметическое. Полученное RGB значение и будет средним цветом экрана… с некоторой погрешностью. Его и будем отдавать проекционному устройству.
Итоговый скетч выглядит примерно так:
#include "Wire.h"
const int EDID_BUFFER_SIZE = 256;
const int EDID_SIZE = 128;
uint8_t EDID[EDID_BUFFER_SIZE] = {
0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x00,
0x1e,0x6d,
0x7a,0x4b,
0x02,0x12,0x01,0x00,
0x0f,
0x13,
0x01,
0x03,
0x6e,0x29,0x1a,0x78,0xea,
0xe5,0xb5,0xa3,0x55,0x49,0x99,0x27,0x13,0x50,0x54,
0xbf,0xef,0x80,
0x95, //<<<PLACE RESOLUTION HERE (RES/8-31) EXAMPLE: 1440/8-31=0x95
0x0f,
0x45,0x4f,0x61,0x4f,0x81,0x80,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x9a,0x29,0xa0,0xd0,0x51,0x84,0x22,0x30,0x50,0x98,0x36,0x00,0x9a,0x00,0x11,0x00,0x00,0x1c,
0x00,0x00,0x00,0xfd,0x00,0x38,0x4b,0x1e,0x53,0x0e,0x00,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x00,0x00,0x00,0xfc,0x00,0x57,0x31,0x39,0x33,0x34,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x00,0x00,0x00,0xfc,0x00,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x00,
0x5b
};
int requestPos = 0;
void setup() {
Serial.begin(115200);
Serial.println("start");
EDID[38] = 1920/8 - 31;
uint8_t sum = 0;
for (int i = 0; i<EDID_SIZE-1; i++)
sum+=EDID[i];
EDID[EDID_SIZE-1] = 0-sum;
for (int i = EDID_SIZE; i<EDID_BUFFER_SIZE; i++)
EDID[i] = 0xff;
Wire.begin(0x50);
Wire.setClock(100000);
Wire.onRequest(requestEvent);
}
int maxValue = 1;
float r_v = 0;
float g_v = 0;
float b_v = 0;
int count = 0;
long lastUpdate = 0;
int loopTime = 0;
const int LOOP_TIME = 100;
void loop() {
int r = analogRead(0);
int g = analogRead(1);
int b = analogRead(2);
if (r>maxValue)
maxValue = r;
if (g>maxValue)
maxValue = g;
if (b>maxValue)
maxValue = b;
r_v += r / (float)maxValue;
g_v += g / (float)maxValue;
b_v += b / (float)maxValue;
count ++;
long dt = millis() - lastUpdate;
lastUpdate+=dt;
loopTime+=dt;
if (loopTime>=LOOP_TIME){
loopTime=0;
r_v = r_v / count;
g_v = g_v / count;
b_v = b_v / count;
Serial.println("RGB");
Serial.println((int)(r_v*100),DEC);
Serial.println((int)(g_v*100),DEC);
Serial.println((int)(b_v*100),DEC);
r_v = 0;
g_v = 0;
b_v = 0;
count = 0;
}
}
void requestEvent(int count) {
if (count+requestPos>EDID_BUFFER_SIZE)
count = EDID_BUFFER_SIZE-requestPos;
Wire.write(&EDID[requestPos],count);
requestPos+=count;
if (requestPos>=EDID_BUFFER_SIZE)
requestPos = 0;
}
Пояснение по поводу maxValue: референсного вольтажа у нас нет. Какое конкретно питание приходит на атмегу — тоже вопрос открытый. Поэтому мы считаем за референсный вольтаж самое большое значение, которое нам пришло по одному из цветовых каналов. Погрешность при таком подходе минимальна.
Итак, видеосигнал декодирован, получено среднеарифметичское и отправлено по uart… куда? Конечно же проекционному устройству. О нем и поговорим.
Проекционное устройство
Правда, разговор будет короткий. Проекционное устройство — это RGB светодиод. В моем случае я просто подключил его к arduino nano и после получения по uart значения цвета устанавливаю шимом нужную яркость каналов светодиода.
И на этом всё.
Комплектующие:
— atmega8
— небольшая кучка резисторов
— небольшая кучка разъемов
— rgb-светодиод
— vga-разъем
P.S. Не спешите минусовать, ниже я расскажу, что за фигню мы тут собрали. А пока — небольшое лирическое отступление.
Чувствуете себя обманутыми?
Я уверен, что да. Конечно же, вы сразу понимали что не бывает Full HD проекторов за 200 рублей. Но так хочется верить в чудо.
Спешу вас заверить, с точки зрения современного маркетинга я вам не соврал! Ведь вот он — проектор. И он честно поддерживает 1920х1080.
А сподвигли меня на написание этой статьи — именно в такой форме — ребята, которые открыли «магазин крутых дешевых проекторов». Вполне возможно сейчас справа от этого текста висит как раз их реклама. Во всяком случае я к ним пришел именно с geektimes. Я не буду писать название этого магазина — это не принципиально. Их миллион и они — мошенники. Мошенники не потому, что присылают кирпичи вместо проекторов. Нет, я уверен что они так не делают. И не потому, что исчезают с деньгами. Так они, вероятно, не делают тоже. Они «честно» продают вам проектор. С заявленными характеристиками. Вот только, если вы не специалист, вы поймете где обман слишком поздно. Когда предъявить будет уже нечего. Ведь так хочется верить, что может существовать Full HD-проектор за
Мне повезло — есть опыт работы с проекторами, есть понимание, что не может в конце 2016 года Full HD проектор стоить 7000 рублей. И поэтому я целенаправленно искал где обман. Попросил прислать информацию о юрлице. И мне прислали. Попросил добавить опись в посылку с наложенным платежом (это защищает от кирпича в посылке) и они без проблем согласились. И понял я в чем подвох, только когда нашел китайского производителя этих проекторов.
Вот так выглядит список характеристик на сайте таких магазинов:
Поддержка разрешения: 1920х1080
Яркость 1000 Люмен
Контрастность 1000:1
Диагональ экрана 34~130 дюймов
Проекц. расстояние 1~4 м
Срок службы лампы 30 000 часов
Вход: USB-2шт, HDMI, AV, AUDIO, SD
И это корректные характеристики. Видите подвох? Вот вам подсказка — вот так я мог бы написать характеристики проектора, которые собрал для этой статьи:
Поддержка разрешения: 1920х1080
Диагональ экрана 34~130 дюймов
Проекц. расстояние 1~4 м
Срок службы лампы 30 000 часов
Вход: VGA
А теперь для тех, кому лень играть в угадайку: в этих списках есть полная ерунда под названием «Поддержка разрешения», которая не значит вообще ничего. Это разрешение, которое может схавать декодер и не более того. Причем, что характерно, тот же проектор у производителя имеет еще одну строку: Native resolution: 800x480. Согласитесь, сразу всё встает на свои места!
Поддержка разрешения: 1920х1080
Родное разрешение: 800х480
Яркость 1000 Люмен
Контрастность 1000:1
Диагональ экрана 34~130 дюймов
Проекц. расстояние 1~4 м
Срок службы лампы 30 000 часов
Вход: USB-2шт, HDMI, AV, AUDIO, SD
Поддержка разрешения: 1920х1080
Родное разрешение: 1х1
Диагональ экрана 34~130 дюймов
Проекц. расстояние 1~4 м
Срок службы лампы 30 000 часов
Вход: VGA
И ведь нечего предъявить… Формально всё прекрасно! Проектор? Проектор! 1920х1080 поддерживает? Поддерживает! Ну, а чтобы вы случайно не нашли проектор на китайском сайте — картинки проектора они показывают отраженными.
Не ведитесь, господа и дамы. Покупайте только хорошие проекторы. А такие маркетологи… Пожелаю им всего самого <добавить по своему вкусу>. Засим лирическое отступление заканчиваем и возвращаемся к нашему проектору.
Который вовсе и не проектор.
Hardware ambilight первого поколения
Ambilight (Ambient Lighting Technology) — это технология подсветки пространства за экраном.
Philips были первыми, кто это придумал. Первая версия ambilight просто брала среднее значение цвета на экране и освещала стену позади экрана этим средним цветом. Эффект достаточно интересный, т.к. усиливает погружение. Этот эффект возможен потому, что наше периферическое зрение значительно хуже различает детали, но при этом хорошо определяет общий цвет. То есть даже ambilight первого поколения обладает отличным эффектом.
На али вы можете легко купить комплект ambilight, но мне они не нравятся тем, что требуют установки китайского софта. Это и потеря производительности, и отсутствие кроссплатформы, и китайский софт на ПК…
Плата, созданная нами выше, позволяет обойтись без программных решений и достичь результата первого поколения.
Для того, чтобы сделать современный ambilight и процессор понадобится помощнее, и границы экрана нужно будет анализировать уже попиксельно.
Минус предложенного решения в том, что нужен свободный разъем в видеокарте (у меня его нету, например. Поэтому на видео с демонстрацией второй моник отключен. Его кабель воткнут в плату), плюс немного производительности видеокарты тратится на дублирование изображения. Не говоря уже о том, что не все ПК определяют эту плату как монитор.
Поэтому есть второй вариант аппаратного видеодекодера для ambilight. Выглядит вот так (сделал под arduino nano — для простоты):
Как можно заметить — это просто врезка в VGA кабель, с пассивным чтением RGB канала. Из минусов тут — возможное ухудшение качества сигнала. Хотя я ничего такого не заметил. Плюсы очевидны — просто втыкаем перед монитором и имеем автономный декодер.
Выглядит в работе это вот так:
Светодиод, конечно, имеет очень посредственную передачу. Да еще и камера не успевает быструю смену цвета светодиода показать.
P.S. VGA-разъемы я, конечно же, не покупал. Я их выпаял из старой материнки и двух плат от мониторов.
Выпаял модным нынче гаджетом: автомобильным прикуривателем, запитанным от автомобильного же аккумулятора. Ну это так, если вдруг кто не в курсе, что можно жить и выпаивать без паяльного фена.
Комментарии (115)
Ezhyg
01.04.2017 10:31-1с точки зрения современного маркетинга
Когда предъявить будет уже нечего
Есть пара нюансов: «с точки зрения закона» и «правила дистанционной продажи» ;).
Насчёт нечего предъявить — очень даже есть чего, непредоставление всей полноты информации о товаре, например. Покупатель покупает не декодер, а проектор, который используется определённым образом. И так далее. Да, это несёт за собой кучу гемороя и потраченного времени, но прижать такого продавца можно с, не то чтобы лёгкостью, но не запредельной сложностью.AllexIn
01.04.2017 10:35+2Прижать ИМХО почти не реально.
Можно вернуть товар. В законе не оговорено что такое «основные потребительские свойства». При этом только в суде можно доказать, что потребительские свойства не указаны. Но до суда не дойдет, потому что вы сначала должны написать претензию в магазин. А магазин вашу претензию удовлетворит и просто вернет вам деньги.
То есть «вернуть товар» — можно попробовать и скорее всего получится. А вот «прижать продавца» — я пока способа не вижу.Ezhyg
01.04.2017 11:22-1«Основные потребительские свойства» — свойства на основании которых потребитель выбирает и для использования которых приобретает товар. Указываются, например, в «инструкции» — должна быть (читай «продавец обязан») предоставлена, для возможности совершить выбор, мало того — на русском языке.
информация, предусмотренная п.2 ст.10, доводится до сведения потребителей в технической документации, прилагаемой к товарам, на этикетках, маркировкой или иным способом, принятым для отдельных видов товаров.
Но до суда не дойдет, потому что вы сначала должны написать претензию в магазин. А магазин вашу претензию удовлетворит и просто вернет вам деньги.
но в самом начале вы написали
Прижать ИМХО почти не реально
А разве это не есть «прижать»?AllexIn
01.04.2017 11:23+2А разве это не есть «прижать»?
Нет, это равносильно отсутствию покупки.
Прижать — это заставить прекратить деятельность, ну или хотя бы нанести какой-то ущерб.Ezhyg
01.04.2017 11:26Какой вы кровожадный однако :).
Я считал, что возврат деножков будет уже после покупки. Отмена ДКП после заключения, а не до. Мне казалось, что речь шла именно об этом:
Вот только, если вы не специалист, вы поймете где обман слишком поздно. Когда предъявить будет уже нечего.
EviGL
01.04.2017 18:45+1Ну отлично, а те, кто обычный народ так дурят пачками, они не кровожадные? Лох не мамонт, типа того?
Ezhyg
01.04.2017 19:04Ой, ну прям они торгуют тем, без чего ну никак не обойтись… Я не оправдываю такой «бизнец», но и покупателям голова не только для шапки.
AllexIn
01.04.2017 19:14+4Человек разбирается в проекторах на уровне обывателя. О Native Resolution естественно знать не знает.
Приходит на такой сайт. Всё выглядит нормально. Что должно его смутить?Ezhyg
01.04.2017 19:33-2Помимо цены?
AllexIn
01.04.2017 20:29+1Цена не является очевидно низкой. Особенно для человека не ориентирующегося в проекторах. Меня цена сразу смутила, потому что я уже парой проекторов владею и рынок изучал целенаправленно. Очевидно что подавляющее большинство так не делает.
Ezhyg
01.04.2017 20:51-2Ну, допустим я не ориентируюсь и не владею ни одним. Но перед покупкой я, как нормальный индивид, с мозгом в голове, который хочет купить то что нужно, а не
НЁХчёрный ящик — хотя бы на я.маркете поинтересуюсь ценами, характеристиками и отзывами.Tantacula
02.04.2017 17:58+1То есть для того, чтобы продать вам этот проектор, достаточно увеличить на него цену в два-три раза и купить десяток отзывов?
Ezhyg
02.04.2017 18:16А ещё придётся приписать ему характеристики схожие с соседями. И, нет, десятком отзывов не обойдётся и придётся их оставить ещё и на других ресурсах.
Встречный вопрос — выбирая нечто вам незнакомое, если оно будет таким же, как аналогичные товары той же функциональности, но точно так же вам не знакомые, вы не можете попасть в ловушку?Tantacula
02.04.2017 18:50Человек разбирается в проекторах на уровне обывателя. О Native Resolution естественно знать не знает.
А ещё придётся приписать ему характеристики схожие с соседями.
О жонглировании характеристиками, собственно, в статье и пишется.Ezhyg
02.04.2017 21:35В статье сказано, что разрешение вообще не указано, кроме «поддержки».
Вот так выглядит список характеристик на сайте таких магазинов:
Поддержка разрешения: 1920х1080
Яркость 1000 Люмен
Контрастность 1000:1
Диагональ экрана 34~130 дюймов
Проекц. расстояние 1~4 м
Срок службы лампы 30 000 часов
Вход: USB-2шт, HDMI, AV, AUDIO, SD
Если начать выяснять важные для выбора параметры (а иначе, как его вообще делать?!), оно обязательно всплывёт у других приборов или в каком-либо обсуждении.
EviGL
01.04.2017 21:08+2Да такой бизнец сейчас тут и там. Видел «лендинг» продавцов GPS-маячков в машину, цена вроде не совсем заоблачная. Захожу на алик, проверить, что продают: выясняется, что в маячке нету GPS, только местоположение по вышкам с ужасной точностью. На «лендинге» просто откровенно врут про характеристики.
Ezhyg
01.04.2017 21:17-3Я скажу немного «крамольную» вещь, но такие продавцы в какой-то мере даже помогают развитию покупателей.
AllexIn
01.04.2017 21:19+5Ваше утверждение не является правдой.
Развитие защиты всегда отстает от оружия. В любой сфере. Так что каким бы умным не был покупатель — найдется сетодика как его обмануть. Поэтому надо не покупателя улучшать(развитие это вообще отдельная тема за гранью данной ситуации), а мошенников гнобить.Ezhyg
01.04.2017 21:29Моё утверждение — абсолютная, совершеннейшая правда, просто по причине того, как оно написано.
avost
02.04.2017 22:29+1Полагаю, вы придёте в восторг от хирурга, который вместо аппендицита вырежет вам почку. Для вашего же развития.
Ezhyg
03.04.2017 08:44-1«Плохая аналогия похожа на котёнка с дверцей».
Хирургическое вмешательство «слегка» необратимо (подсказка — «в какой-то мере»).
Речь идёт не об одном конкретном индивиде а о группах — «покупатели» и «продавцы» (пусть и не очень честные). Мало того, даже при наличии кристально честного продавца, найдутся «особо одарённые» покупатели, которые предъявят претензии по какому-либо поводу. Но речь не о том.
Вы так тупите самостоятельно или курсы какие проходили?
Читайте предложение целиком, не выкидывая слова. Да, я иногда забываю проставить запятые, но, был уверен, что их отсутствие не могло настолько серьёзно сказаться на сложности понимания.avost
04.04.2017 15:19Невоспитанный хамящий г., если среди вашего круга принят такой стиль общения, то не стоит применять его к незнакомым людям. В реале после такого с вами может случиться конфуз-с.
Далее, если вас так зацепило, значит попадание точное и ваша дверца к вашему же котёнку не подходит по фасону. Далее, покупка впаренной уродами хрени — явление тоже необратимое (слегка) для ваших денег, а в некоторых случаях и хуже того. Далее, отношение хирург-пациент — это не о конкретном индивиде, а о группах и они, в общем-то, эквивалентны группам продавец-покупатель. Если всё ещё не понятно, то хирург, в данном случае, рассматривается как "продавец услуг".
Что ещё разжевать?
Ezhyg
04.04.2017 16:42+1А может я просто анекдотов и прочих шуток-прибауток знаю больше?
Чем незнакомые люди заслужили другое отношение?
Дверца ваша, отнюдь не моя, не я же кривую аналогию привёл.
Деньги можно вернуть, пусть не всегда, но можно. И я даже кратко описал пару аргументов.
Мало того, я занимался помощью покупателям в борьбе с недобросовестными продавцами, почти бесплатно, в том числе их защитой, обучением и даже в суде пару раз представлял интересы.
Дальше будем пререкаться или просто достанем и к линейке приложим?
Rumlin
01.04.2017 11:07+2Надеялся хотя бы на три светодиода — верхний, нижний, средний «ряд».
AllexIn
01.04.2017 15:45+1Нету в наличии контроллера, который бы вытянул Sync сигналы.
Rumlin
02.04.2017 10:48По-моему было бы достаточно стартовать по кадровому импульсу подсчет трех зон «среднее значение цвета на экране». t..t+1/3 — считаем средне для первого диода, t+1/3..t+2/3 — для второго, и остальное для третьего светодиода
Alexeyslav
03.04.2017 10:16+3Не понял, у вас контроллер тактируется десятками килогерц? Строчные синхроимпульсы всего 35кГц… любой современный контроллер уделывает их в лёгкую. Я как-то на тиньке программный 4-х канальный ШИМ делал на частоте в 48кГц, ещё половина свободного времени остаётся.
В вашем случае всё ещё проще — кадровый импульс заводим на вход INT0 в обработчике — обнуление счетчика группы строк и настройка таймера(установка регистра сравнения на размер региона строк). Сам таймер работает в режиме CTC — обнуление по регистру сравнения.
Строчный синхроимпульс подаётся на счетный вход таймера! Всё…
Настраиваем таймер на сравнение с числом 16, например, и каждые 16 строк у нас выдаётся прерывание и на его обработчик у нас есть время как минимум 16 строк — просто вагон времени. В это же время, работает ваш изначальный алгоритм сбора статистики, только теперь результат ложится не в общую копилку, а согласно насчитанному номеру группы строк… В конце(на самом деле по прерыванию от кадрового импульса) имеем статистику по разным регионам картинки.
u010602
01.04.2017 11:49+1По-моему ваше решение с амбилайтом достойно отдельной статьи, да и про прикуриватель стало интересно и не понятно :)
AllexIn
01.04.2017 12:01+3Про прикуриватель я не буду повторяться — в гугле миллион уже людей рассказало как делать из прикуривателя паяльник. Ищите по запросу «ИК паяльник из прикуривателя».
Пожалуй единственное отличие моего — то что я не стал лепить мощный БП на 12 вольт, а просто взял аккум. Я выпаиваю не часто, поэтому просто достаю аккум из машины в этом случае.
По поводу отдельной статьи про абмилайт… Мне он просто не нужен. :) То есть чтобы сделать абмилайт — надо купить свтододиодные управляемые ленты, они дни стоят порядка 50 долларов за комплект. Можно было бы взять… Но я сделаю амбилайт и положу его на полку, потому что мне его негде использовать. Как-то жаба душит тратить 50 долларов на то, чтобы написать статью.
В принципе, если кому-то интересно, могу сделать амбилайт на заказ бесплатно с оплатой только материалов(светодиодная лента и БП к ней) и тогда могу написать статью по мотивам.u010602
01.04.2017 13:47Я бы согласился с вашим предложением, но я из Украины, и у нас будут сложности с логистикой. :(
fp777
05.04.2017 21:15Не будет. Недавно покупал в Киеве конструктор для сборки часов на лампах ИН-14. И не взирая на то, что продавец ошибся в имени дошло быстро и без проблем.
P.S. В крайнем случае есть лайфхак — заказать на AliExpress нужные компоненты сразу на адрес AllexIn.AllexIn
05.04.2017 21:16Еще есть не нулевой риск что я могу налажать.
Правда светодиодную ленту сжечь — это надо постараться. Но не справится вполне могу. Тем более в комментах уже указали на ряд моих ошибок в оценках этого проекта.fp777
05.04.2017 21:25Не ошибается, кто ничего не делает. И Элоном Маском не рождаются:)
А если серьёзно, то u010602 переживал из-за логистики. Два варианта я ему предложил, теперь его ход…
u010602
06.04.2017 00:56Не сильно понял я суть вашего совета. У меня у многих знакомых есть родственники в РФ, проблемы и с посылками и с денежными переводами. Люди ищут разные лазейки, что-бы это делать. Тем более что транспортное сообщение ухудшается с каждым месяцем, пока проект будет готов, может многое изменится. Все это кажется чрезмерной сложностью лично для меня.
AllexIn
05.04.2017 21:28Я не воспринимаю ваше предложение как конечное. Никаких планов на сей счет не строю. Если у вас есть желание в это вписаться — велкам в личку. Если нет — никаких претензий нет и быть не может.
Это так, на всякий случай. А то бывает люди не хотят вписываться(нет денег, желания, etc), но стесняются отказаться.
Ilusha
01.04.2017 14:49Я давно хочу абмилайт на телевизор. У меня даже лежит какой-то. Но меня не устраивает ПК как источник контента. Поэтому у меня tv-приставка. Подключение по hdmi.
Возможно ли что-то сделать?AllexIn
01.04.2017 15:42Да. Можно сделать такой же вариант с hdmi, только тут уже не обойтись дешевым МК.
Сигнал полностью цифровой. Соответственно его нужно полноценно прочитать, а не урывками как прокатывает с аналоговым. Нужен контроллер, который сможет переварить 20 ГБ/с данных. Я на практике такое не делал. Плюс возможно на таких частотах начнутся проблемы с разведенными дорожками, т.к. я плохо знаком с теорией и не умею разводить платы такого уровня.ROR191505
01.04.2017 18:52+4Реализовал у себя нечто подобное на основе hdmi2av конвертера и usb tv-тюнера. Обработкой данных и выводом на ленту занимается RPi.
Alexeyslav
03.04.2017 11:16+1На самом деле там МК делать нечего, поток обрабатывать должна ПЛИС, причем ещё и не рядовая — с дифференциальными входами и выходами(она ведь ещё и ретранслировать сигнал должна).
На самом деле, с ПЛИС алгоритм становится даже проще, если вообще понять концепцию ПЛИС. Да вобщем-то чип не самый дорогой нужен, порядка 10-20$$.AllexIn
03.04.2017 11:26Кстати, а какой ПЛИС на ваш взгляд сгодится для чтения hdmi?
Alexeyslav
03.04.2017 15:48Нам же в общем случае незачем занимать целый HDMI-порт, который используется для вывода изображения впустую. Сигнал надо передать дальше, на телевизор. А сделать простой "отвод" для высокоскоростных дифференциальных линий не выйдет, начнутся все мыслимые эффекты несогласованных длинных линий. Поэтому проще ретраслировать силами самой ПЛИС, благо это сделать очень просто — пара строчек в "программе" и несколько задействованных макро-ячеек из тысяч.
Сам я ПЛИС под такие задачи не подбирал, но если посмотреть на монстра XILINX SPARTAN 6 стоимостью порядка 100$ и явно избыточного для такой задачи, а с другой стороны переходники на основе ПЛИС+ASIC с DVI(примерно одинаковый уровень быстродействия и схожие сигналы) на LVDS(ЖК матрица) стоимостью 10...20$ то можно ожидать стоимость необходимой ПЛИС в районе 20$.
По быстродействию, ПЛИС нужна с рабочими частотами 300...400Мгц а потом в процессе реализации посмотреть пойдёт ли конкретный чип, может оказаться так что из-за сложности синтезированной конфигурации быстродействие схемы снизится. Поэтому сразу и однозначно сказать нельзя — общее быстродействие будет зависеть ещё и от реализации "прошивки".
Да, ещё один немаловажный ньюанс — по HDMI могут передаваться данные с шифрованием, поэтому не всегда можно будет перехватить поток в нужном виде…a5b
04.04.2017 03:28Spartan 6 — не выше 1280x720 @ 60 Hz / 1920x1080 @ 60 Hz interlaced на grade "-2" https://www.xilinx.com/support/documentation/application_notes/xapp495_S6TMDS_Video_Interface.pdf + генерация почти настоящего 1080p http://hamsterworks.co.nz/mediawiki/index.php/Spartan_6_1080p
Spartan-3a — до 800x600@60 Hz https://www.xilinx.com/support/documentation/application_notes/xapp460.pdf
Есть проект платы "NeTV" за 150$ с процессором и Spartan 6 с hdmi входом и выходом и поддержкой шифрования — до 720p, 1080p/24, 1080i/60 http://hackaday.com/2012/01/21/overlaying-video-on-encrypted-hdmi-connections/ — http://bunniestudios.com/blog/images/28c3_bunnie_hdcp_mitm_final.pdf (2011, "– The implementation can’t do all HDMI standards", i2c сниффер там тоже используется)
Alexeyslav
04.04.2017 08:21Это генерация изображения, нам нужно только поток обработать и некоторые значения просуммировать.
Шифрование HDMI уже поломали?a5b
04.04.2017 15:07pdf от xilinx — и про прием и про генерацию. NeTV сломал шифрование (версии ниже чем HDCP 2.0; требуется помощь процессора, вычисляющего из мастер ключа ключ для текущей пары источник-получатель)
https://www.xilinx.com/support/documentation/application_notes/xapp495_S6TMDS_Video_Interface.pdf "This application note describes a set of reference designs able to transmit and receive DVI and HDMI data streams up to 1080 Mb/s using the native TMDS I/O interface featured by Spartan-6 FPGAs."
EviGL
01.04.2017 18:53+1Если интересует установка аналога амбилайта, есть проект lightpack, они продают комплекты для компьютера или для телевизора. Но это к тому же это проект с открытой аппаратной и программной частями, можно его не покупать, а собрать самому, что ближе духу статьи.
Sun-ami
01.04.2017 13:49Самое смешное, что сделать проектор с поддержкой Full HD за 200 рублей вероятно действительно возможно — из телевизора или монитора. Он будет представлять собой картонную коробку, выкрашенную изнутри в черный цвет, плотно одеваемую на перевёрнутый Full HD монитор, с дешевым б/у объективом от старого диапроектора. И с таким проектором вероятно можно смотреть фильмы в Full HD-качестве на экране с диагональю 4 метра — но только в тёмной комнате. Про яркость изображения ничего же не сказано.
AllexIn
01.04.2017 13:53+4Старые детали же не бесплатные все равно.
Sun-ami
01.04.2017 13:57-5Но монитор же уже имеется, и его можно использовать и по прямому назначению — так что он в некотором смысле бесплатен.
conformist
01.04.2017 14:20А возможно за эти 200р сделать не проектор, а декодер с выходом на RCA (тюльпаны), чтобы подключить vga выход к обычному ТВ? Цены на такие устройства заметно выше, потому стало интересно.
AllexIn
01.04.2017 15:37Полагаю что да. Взять только контроллер, который сможет вытянуть это дело. Полагаю stm32 справится. Но я с ним еще на практике не знаком, только жду когда приедет, чтобы опробовать.
Но вообще HDMI->AV стоит порядка 400 рублей на али.
lonelymyp
01.04.2017 15:41да вроде не так уж и выше
https://www.aliexpress.com/item/New-PC-Laptop-Composite-VGA-to-AV-RCA-TV-Monitor-S-video-Signal-Adapter-Converter-Switch/32767470608.html
dron_k
01.04.2017 17:40Господа, на волне темы о маркетолообманологах:
сравнил Huawei Mate 9 и LG G Pro 2 (D838)
у обоих в характеристиках указан экран 5.9"
однако по факту изображение у Huawei меньше, где подвох?
Может это размер дисплейного модуля а не изображения?Ezhyg
03.04.2017 17:06Это надо понимать как «размер экрана без рамки» и «размер видимой области», видимо хуавеевцы указывают физический размер всего экрана (с рамкой).
semen-pro
01.04.2017 20:51Можно было попробовать разогнать атмегу до 25 мегагерц, до 20 точно гонится, где-то видел обзор.
AllexIn
01.04.2017 21:17+1Мне кажется это лишний геморрой. Проще сразу мощный контроллер взять. Тем более что 25 мегагерц — это впритык чтобы 640х480 обработать.
Меня малость раззадорили комментарии… Так что попробую HDMI сигнал разобрать на stm32. Как раз в планах с этим контроллером разобраться.KivApple
02.04.2017 00:51А вы в 25-мегагерцах учитываете, что совсем не обязательно на обработку одного значения будет уходить 1 такт? Точнее даже наоборот — готов поспорить, что будет уходить больше, даже если прошивку переписать на ассемблере.
Ещё вы используете АЦП. Насколько я помню, для atmega максимальная частота считывания АЦП — 15 кГц (при условии, что активен только один канал), при этом при использовании ардуиновских обёрток скорость ещё ниже. Для stm32f103 — 1 МГц, для stm32f407 — 2.4 МГц (вроде можно как-то заставить работать вместе все 3 модуля АЦП данного чипа и получить 7.2 МГц). Так что единственным адекватным вариантом для VGA мне видится использование внешнего высокоскоростного АЦП.
Про HDMI: 1920 * 1080 * 60 * 3 (3 байта на пиксель, у нас же True Color) это 370 мегабайт/сек. А теперь учтите, что тупо копировать данные со входа на выход смысла мало (зачем тогда вообще ваше устройство нужно), надо с ними делать хоть минимальные действия (типа подсчёта среднего). Так что закладывайте десятки тактов на пиксель, а не единицы (тем более если вы не знакомы с ассемблером). В общем, туго с этим у микроконтроллеров.
Тут подойдёт разве что ПЛИС (они не такие уж сложные и дорогие).u010602
02.04.2017 00:55-1А зачем копировать данные в полном объеме, можно же просто сесть на те-же линии без разрыва.
Если я понимаю правильно саму подсветку, то анализировать нужно только боковые полосы, по 10% от общего размера. Да и каждый пиксель не нужно анализировать, можно брать каждый 4ый, при фулл шд там все равно примерно одно и то-же.
AllexIn
02.04.2017 09:07-1Вы совершенно правы! Самое смешное, что большую часто того, что вы написали — я знаю. Но при расчете для VGA просто не применил почему-то.
По поводу HDMI — читать/передавать — дорого.
Поэтому делать надо снифер. Писать естественно на асме.
Предполагаю в таком виде:
Один кадр только считываем в лоб все данные, пиксели сохраняем только каждый пятый в пятой линии. В итоге буффер получается разрешением 384х216. Что при 24 битном цвете даст нам немного более 200 килобайт данных.
Одна строка занимает чуть больше килобайта. В идеале добиться ситуации, когда мы строку сохраняем в кэш, потом следующие 4 строки лэш сбрасывается в оперативку.
Когда кадр дочитали — считаем подсветку, зажигаем всё что нужно. Скорее всего это означает один или несколько кадров пропуска. ТО есть мы будем обрабатывать не каждый кадр, а например, каждый третий.
По идее stm32 h7 должен вытянуть. Хоть и впритык.
tormozedison
02.04.2017 09:02Ардуино там лишнее. Можно сделать на одних ОУ.
AllexIn
02.04.2017 09:53Не ардуино тогда уж, а вообще МК.
Но как вы на ОУ сделаете передачу данных по uart?tormozedison
02.04.2017 21:14Так для DDC просто последовательную ПЗУшку поставить, так же, как в мониторе сделано.
AllexIn
02.04.2017 21:16Речь не про DDC. Во втором случае его вообще нет.
Речь про контроль светодиода. Во втором случае действительно можно сделать всё без МК, но только для мигания светодиодом. Если планируется что-то чуть более серьезное — все равно придется к МК/ПЛИС/etc придти.
Я поэтому и не стал даже вариант такой рассматривать.Andy_Big
02.04.2017 21:27Речь идет, я полагаю, о текущей реализации, описанной в статье — усреднение всего экрана по трем цветам и выдача результата на три светодиода (красный, синий, зеленый). С этим справятся и ОУ и, как ниже написали, даже просто транзисторы :)
AllexIn
02.04.2017 21:41Текущая реализация — это база, с которой можно работать и развивать. Proof of concept.
Вариант с ОУ и транзисторами — тупиковый.Andy_Big
03.04.2017 00:54-1На атмеге Вы тоже не много сможете развить :)
AllexIn
03.04.2017 08:14Ничего не мешает заменить его на другой МК, более мощный.
При этом структура платы не не изменится, принципы не изменятся.
Схема на ОУ или транзисторах — целиком на выброс.iig
03.04.2017 19:12Чтобы посчитать среднее значения яркости 1920 * 1080 = 2 073 600 точек за 20 мс, нужен очень хороший контроллер. Или простенький интегратор на ОУ.
AllexIn
03.04.2017 19:19НАрисуйте мне «простенький» интегратор на ОУ для расчета средней яркости по 25 пикселей по всем 4 краям экрана.
Я лично такую задачу не могу решить. Будет интересно посмотреть на ваше решение.iig
03.04.2017 19:42Каюсь, невнимательно читал принцип действия гаджета. Решил, что нужна средняя яркость по всему экрану.
Придется добавить генераторы кадровых и строчных синхроимпульсов (555) и коммутатор. Хотя они в любом случае нужны.
Тут еще такое дело… Точность, которую будет обеспечивать правильное чисто цифровое решение, вряд ли нужна.
Alexeyslav
04.04.2017 06:33Вообще-то там есть небольшая проблема… дело в том что зелёный канал не совсем чистый, в него подмешан кадровый и строчный синхроимпульсы, они будут портить среднее значение.
Да, это удивительно, но хорошо спроектированный монитор по всем стандартам может работать без подачи отдельных импульсов синхронизации, он их способен извлечь с зелёного канала, но это хуже когда есть четкие импульсы синхронизации — ведь из зеленого канала они извлекаются компараторами а значит будет джиттер и смещение...Andy_Big
04.04.2017 07:28Думаю, что искажения, которые будут вносить эти синхроимпульсы, очень мало повлияют на общую картину :)
Bluewolf
02.04.2017 19:50+1Да что уж там. Усреднить и усилить (для питания одного RGB-диода) уровни RGB можно и на трех транзисторах, по одному на канал...
ns3230
02.04.2017 17:56+2Спасибо за наводку на ИК-паяльник. Сам почему-то никогда не думал, что прикуриватель сгодится на эту роль.
Rockerman
03.04.2017 14:33+1За 7-10 т. р. вполне реально собрать fullHD проектор самому. Для этого понадобится 6' LCD экран и HDMI->MIPI плата к нему. Мы использовали такие в своём проекте VR шлема VRD.
Читал, что убирают заднюю стенку с экрана и ставят мощную лампу + линза.
Кому интересно и хочет попробовать, пишите в группу. Если наберётся до 10 желающих, то думаю, сможем поставить экраны с платами.Ezhyg
03.04.2017 17:07А чего используются такие… не самые распространённые диагонали экранов? Ладно 5-5,5" — не проблема ваще, 7 — тоже легко, а 6 это и уже не телефонное, и ещё не планшетное.
Rockerman
03.04.2017 17:29+1Экран от смартфона достать не проблема — проблема завести на него HDMI сигнал поскольку у каждого экрана свой разъём и распиновка, а интерфейс MIPI (LVDS для мобильных экранов не встречал). И как оказалось, самые доступные экраны, на которые удалось найти документацию и к которым удалось сделать такую плату оказались 6'.
AllexIn
03.04.2017 21:34Разве имеет смысл использовать мелкие экраны? Большой экран, конечно, увеличит стоимость линзы, но при этом даст более качественную картинку. верно?
Bluewolf
04.04.2017 00:55Не думаю, что от такого проектора будет какой-то практический смысл.
- большую яркость на большом экране сделать сложно
- равномерную подсветку при большой яркости сделать сложно
- отсутствие искажений на периферии сделать сложно
- габариты, охлаждение
Если уж нужен именно проектор для большого экрана, проще его купить (причем часто 720p дает вполне сносный результат, на фильмах 1080p не сильно хуже полноценных 1080p). От самодельных решений будут слезы. А если достаточно диагонали 20-40" — так любой современный FHD телик уделает по качеству изображения и покупной, и тем более самодельный проектор...
А если хочется собрать что-то свое и\или нестандартное, есть разборные экраны c HDMI, разных размеров, пара дней с Компела или пара недель с Али:
http://www.waveshare.com/wiki/7inch_HDMI_LCD_%28C%29
http://www.compel.ru/?s=HDMI+LCDRockerman
04.04.2017 05:55+1Не знаю как на проекторах, но на обычном ТВ и в очках VR разница между изображением 1080p качества и 720p ощущается сильно.
Мы использовали такие экраны в своём проекте:
AllexIn
04.04.2017 21:35На проекторах разница тоже сильно ощущается. Сейчас с FullHD проектора уходить на HD Ready не хочется совсем.
DarkGenius
05.04.2017 18:00Меня всегда интересовало, почему полноценные проекторы такие дорогие? Какие их компоненты оказывают наиболее ощутимое влияние на цену и почему совершенствование тех.процесса не особо ее уменьшает?
Fagot63
06.04.2017 12:22Цена складывается. Во первых лампа весьма дорогой элемент. Во вторых матрица с маленькой диагональю, но большим разрешением, так же дорога. Ну и оптика с моторизированным приводом.
Chugumoto
05.04.2017 19:14а я думал сначала, что по мотивам проекторов из жк матрицы от убитого монитора+чего-нибудь типа старого проектора для слайдов :)
как бэ тоже бюджетненькое решение было :)
mike_y_k
06.04.2017 15:11Автору за статью и оригинальность — зачёт!
Ну а с вопросом применимости МК при улучшении/расширении сферы применения — в калькулятор.
Набросок программы и затрат в в тактах очень просто решаемы.
Хотя для таких задач лучше обработку делать на FPGA и на МК уже только заниматься управлением периферией.
Бюджет даже для VGA окажется побольше, но комфорт от подсветки наверное того стоит ;).
Andy_Big
Рассказать-то рассказали, но осадочек от обманутых ожиданий остался :))
nafikovr
время нынче (вот конкретно сегодня) такое, что ожидать особо ничего и не стоит
AllexIn
Но ведь вы понимали, еще только прочитав заголовок, что 200 рублей за проектор — это абсурд. Так просто не может быть.
Собственно, я не стал делать более серьезную версию ambilight — потому что это бы значительно увеличило цену. И тогда кто-то мог уже серьезно рассчитывать получить проектор по итогу прочтения.
Но даже понимая, что это абсурд — вы все равно ждали результат…
А теперь представьте человека, который не ориентируется в рынке проекторов. И видит рекламу — FullHD проектор за 11 000. Только сегодня мега скидка — 7000. Он подсознательно может понимать, что цена низковата. Но спишет это на удачу и мега скидку! Свезло же!
Вот ощущения от обманутых ожиданий такого покупателя я и хотел передать, чтобы показать серьезность темы. Судя по негативной реакции читателей — перестарался. :) Жаль, конечно, что статья и карма уходит в минус. Но на мой взгляд тема достаточно серьезная поднята, чтобынесмотря на это статью оставить на GT.
ZurgInq
Просто поправьте заголовок в духе «Делаем проектор с поддержкой FullHD за 200 рублей (на самом деле нет)». И вы ещё так торопились сделать провокационный заголовок, что в букву пропустили.
AllexIn
«на самом деле нет» — ломает же всю идею. :(
Тем более, что на самом деле — да. По итогу проектор с поддержкой FullHD сделан.
О, нет. Я накосячил гораздо сильнее. Я по ошибке пересохранил статью при публикации и отменил все редакторские правки. В итоге опубликовался текст с кучей ошибок и опечаток.
Andy_Big
Разумеется, я понимал, что ожидать полноценный FullHD проектор за 200 рублей не стоит, но, честно говоря, я надеялся на какую-то интересную конструкцию, которая хоть чуть-чуть бы соответствовала слову «проектор» :) Ну не знаю, типа «берем лазерную указку, моторчик с зеркалом, ардуину и получаем вот такой результат» (сильно утрировано, конечно) :)
Нет, минусовать Вашу статью конечно же желания не появилось, идея интересная, реализация простая. Но слово «проектор» в названии настраивает на несколько другие ожидания :)
Chamie
danyaShep
Я ждал проектора из FullHD телефона и коробки.Возможно, даже с системой зеркал.
AllexIn
По итогу вы скорее разочарованы или нет?
danyaShep
Разумеется. Интрига есть в начале, а в конце всё так банально. Заголовок можно поменять на «Маркетологи из магазина Ledunix — мудаки (на самом деле нет, но да)».
AllexIn
А разве проектор из коробки — это не банально? тем более что вот уж чем-чем, а инструкциями по таким проекторам весь инет завален.
Ну и не только ledunix.ru так делают. Это общая практика. Я поэтому и не упоминал их название, тыщи их.