Прочитали заголовок? Я думаю, вы все неправильно поняли. Проект заморожен в буквальном смысле — залит водой и охлажден до температуры около -10°C.
Сначала — отказ от ответственности. Все персонажи являются вымышленными и любое совпадение с реально живущими или когда-либо жившими людьми случайно. Фотографии — фотошоп, видео — мультипликация, в процессе написания статьи ни одно животное не пострадало. Как вы думаете, сойдет за отмазку в случае чего? Если сойдет, то я продолжаю дозволенные речи.
Есть у меня старый во всех отношениях друг — мы с ним знакомы лет двадцать, ну и не молодой он. Мы с ним вместе работали в National Semiconductor, потом он ушел на пенсию, а TI купил NSC — хотя это никак не связано. Я так думаю.
Но человек он неугомонный, посидел несколько месяцев и открыл свою фирму. Собственно, работать ему никакой нужды давно не было, зарплата ему — что слону дробина, он и так человек очень обеспеченный. Но без дела сидеть не может — короче, наш человек.
Практически в тот же месяц, как меня списали
«Большой босс» приносил в клюве небольшие, но интересные контракты, и мы дружно развлекались. Офиса, как такового, у нас не было, да он и не нужен был. У друга в доме полуподвал больше сотни квадратов — даже и он не понадобился. Мой дом гораздо скромнее, но для лаборатории и небольшой мастерской место есть.
Однажды его пригласили в одну фирму обсудить контракт. Так как речь шла о технических деталях, пришлось ехать вместе. Он большой теоретик, но если речь идет о конкретных технических решениях, один предпочитает не соваться.
Хоть встреча и произошла с подачи общих знакомых (ага, у буржуев все делается не глядя на личные и родственные связи), размах деятельности этой фирмы мы плохо представляли.
Для начала нас оставили в каком-то ступоре. У фирмы есть контракт с местным хоккейным клубом — и этот клуб желает иметь на своем стадионе дисплей, вмороженный в лед. Толщина льда — сантиметра четыре. Пару сантиметров из них могут хоккеисты прорезать коньками (уже потом выяснилось, что там еще и фигуристы есть, а они и до бетона запросто пропахать могут). Т.е. у вас сантиметр на все про все — вот им и располагайте, ни в чем себе не отказывайте, бетон долбить для вас и тем более что-то делать с охлаждающими трубами внутри бетонной заливки, никто не будет.
Но хорошая новость (от фирмы-заказчика) — у нас (т. е. у них) уже почти все готово. Вот, панели общей площадью 81 квадратный метр — это будет центральный дисплей. Ну и два боковых дисплея поменьше. Все это собрано на WS2813. От вас нужна сущая мелочь — возьмите какую-нибудь ардуину и сделайте нам
Уже точно не помню, но дело происходило где-то в марте-апреле. Летом на катке профилактика, лед растапливают на несколько недель, в конце июля воду заливают и замораживают. К тому времени дисплей должен быть уложен на месте и его заморозят. Что-то останавливать или переносить ни в коем случае нельзя — дальше тренировки и игры.
Заказчик сообщил, что они попробовали на маленькой светодиодной панельке — все хорошо работает. Картинка получается. Вы только сделайте ее побольше и еще нам видео нужно. Суперкачество не надо, 30 кадров в секунду нам хватит.
Кто и что этим товарищам наговорил про Ардуино — я не в курсе. Но они категорически настаивали именно на Ардуино. Ну еще Малину согласны добавить были. А больше — ни-ни.
Пошли мы с товарищем до дому — читать документацию, лапшу с ушей стряхивать и времена и скорости считать.
Я тут цифры приводить не буду — дело-то уже давнее, все уже прочно забыто, и где файлы с вычислениями — найти тоже не так просто. Долго ли, коротко — получилось у нас, что нужно поток несжатых данных гнать со скоростью около полгигабита в секунду и на 200-300 метров. Где-то его можно разделить на несколько потоков чуть меньше 50 мегабит в секунду. Можно было упростить задачу, загнав под лед дифференциальные линии передачи данных, потому как по одной линии, причем без земли (земля-то была, но силовая с токами в сотни ампер, а сигнальную проигнорировали) 800Kbps к светодиодам не сильно-то передашь. Тогда бы вся электроника оказывалась снаружи в шкафу, куда можно было попасть в любой момент.
Пошли снова мы к
Получалось, что самое простое — сделать несколько контроллеров, каждый из которых поддерживал 8 линеек светодиодов (от 16 линеек тоже отказались — сигнальные провода к панелям тащить неудобно) и данные на этот контроллер пригнать через 100мбод Ethernet и UDP. Ни для какого более защищенного протокола просто не было времени. На головном компьютере готовились данные, передавались в Raspberry. По сигналу «три зеленых свистка» Raspberry гнала массивы данных через 1000 Мбит/с Ethernet в роутеры, а из них раздавались по 100 Мбит/с на кучу контроллеров. Часть роутеров на одной стороне катка, другая — на другой стороне. Соединять их планировали оптикой — расстояние в районе 200 метров.
На том и договорились.
Картинка ниже относится к намного более поздним событиям, на тот момент это была только идея.
И пошли мы снова, солнцем палимы, разбираться, что мы наобещали и как это сделать. Ethernet на контроллерах я никогда не использовал, а друг вообще ни разу не программист. Кстати, никаких готовых библиотек для передачи таких объемов информации в адресуемые светодиоды не нашлось. Еще и с контроллером полная неопределенность. Нужна была достаточно большая ОЗУ, минимальная потребляемая мощность и чтобы его в случае чего не порвало замерзающей водой. И, если помните, у нас ограничение на толщину было — 10мм. В эти же 10 мм входит и толщина корпуса — контроллер решили поместить в алюминиевый корпус и залить эпоксидкой. Вернее, какой-то адской композицией — у заказчика был на подряде товарищ, который с подводно-подледной электроникой был на «ты» и знал, как сделать рабочие устройства в таких условиях.
Насчет ардуины мы заказчика провели так, что он ничего так и не осознал. Готовых ардуин подходящего размера не существует, поэтому договорились, что плату разведем новую. Ну и развели — какие проблемы? Потом еще пришлось сделать, чтобы ее с помощью Arduino IDE и запрограммировать можно было. А чем не Ардуино? У каждого оно свое. Короче, наша дешевая подделка сошла за Ардуино.
Для начала нашел дома в загашнике демо-платку с STM32F407. Оперативка большая, должно хватить. Написал программку, которая с помощью контроллера прямого доступа и какой-то матери гонит данные для адресуемых светодиодов, получилось 16 линий по 1300 с небольшими копейками пикселей. Линий с избытком, но много — не мало. Надо сказать, позднее эта возможность очень даже пригодилась.
Про встроенный Ethernet-контроллер пришлось сразу забыть — любое прерывание не вовремя — и картинка разваливалась. Пришлось ставить внешний W5500.
Поигрался немного на демке, нарисовал схему своего контроллера, развел и заказал новую платку, пока сделают — можно дальше программное писать.
Рассказывается быстро, а делалось значительно медленнее, тем более, что время от времени еще нужно было с заказчиком детали обсуждать. Ну и ошибки надо было успевать делать и исправлять.
Когда пришли платы для первого варианта контроллера, заказчики подкатили и первую панель. Пришлось в комнате под потолком повесить — по длине она почти как комната. Дом она не сильно украшала, но были в жизни и худшие эпизоды — как-то у нас в двухкомнатной малометражке несколько месяцев стоял БУВИП — блок управления выпрямительно-инверторным преобразователем от электровоза ВЛ-80Р. Кто в теме, тот поймет :)
Финальная версия процессоров еще не пришла, но панели были, решили попробовать в реальном масштабе на первой версии. Попробовали.
Вот тут отсутствие согласований линий, о необходимости которых всё время говорили большевики, и вылезло.
А времени переделывать что бы то ни было, уже нет. Ладно, грузите этот хлам и везите ко мне в гараж. В гараже целый день камлали с шефом, били в бубен, искали магические точки подключения земель — как не удивительно, удалось заставить все это работать, навив пар и подключив их самым теоретически неверным образом. Как бонус, светодиодные панели были уже подготовлены для замораживания, пропитаны адской смесью, которая благоухала далеко не розами. Ворота пришлось держать открытыми настежь.
Намного позднее, в каком-то интервью местной прессе товарищ из фирмы-заказчика говорил — дескать, мы, как Apple, начинали проект в гараже. Не знаю насчет Apple, то тут-то гараж был мой, о чем он скромно умолчал. И почему все это попало в гараж — тоже ни слова.
Но вывод, по-моему, они сделали парадоксальный — вот мы же говорили, что и так будет работать.
Заказчик рассказывал какие-то сказки про имеющееся у него программное обеспечение верхнего уровня для управления такого рода дисплеями, но когда стало припекать, выяснилось, что вообще-то нет ничего, если не считать программы для управления готовыми китайскими светодиодными рекламными дисплеями. От этого программного нет ни исходников, ни какого-либо описания вообще. Типа интуитивно понятно.
Пришлось срочно-срочно писать на Python хоть что-то, для начала работать только с консоли безо всякого графического интерфейса.
Уже потом, когда каток был залит, написал простейший графический интерфейс для загрузки рекламных блоков в малину и для второй программы, которая готовила эти блоки из кусков видео и картинок и создавала разные переходные эффекты между ними.
А как собиралось все это — это отдельная история. Платы контроллеров и корпуса отправили в другой конец страны на пропитку, когда они шли назад — почта тормознула. Получили мы их, когда уже начали охлаждать арену. Панели уже уложены были и протестированы с первой версией контроллеров, не предназначенных для замораживания. А монтировать штатные контроллеры пришлось по холодку. На улице жара, а внутри зуб на зуб не попадает. С меня, как инвалида, толку при монтаже никакого, но и уйти тоже невозможно, чуть что проверить — никто понятия не имеет, как это делать. Где можно и где нельзя, стоит Линукс, привычного графического интерфейса нет, а народ от одного слова Линукс уже в прострацию впадал.
Как это было не удивительно — мы успели и все заработало, что не менее удивительно. Правда, первые несколько матчей мне пришлось всем этим нагромождением из дома управлять, поставили веб-камеру, чтобы мне каток видно было.
Потом были еще проекты с той же фирмой — дисплеи размером поменьше, но разрешение больше, и пикселей намного больше… На видео демонстрашка — несколько панелей от нового дисплея, не помню точно, но это меньше четверти длины нормального дисплея.
Первые панели разводил другой подрядчик и жаловался, какая тяжелая это работа — тысячи светодиодов, огромная плата со всякими вырезами. Компьютер едва-едва ворочается.
Сгубил я его ни за понюшку табака — написал на Python скрипт для Kicad, который за минуты делал 99% работы по разводке регулярных структур. Убил на это пару дней, зато теперь заказчик мог капризничать, как хотел — вот здесь мне уголки закруглите, а вот тут — подвиньте проходные отверстия на 0.2 миллиметра, а то мне не нравится. Раньше любая из этих хотелок вылезла бы в дни работы и посему никаких пожеланий к переделке никогда не возникало.
Потом фирма нашла молодого и способного парня, все наши наработки у них были. Это наш принцип, многим он не понравится — все, что можно, надо передать заказчику. Мы, конечно, собираемся жить вечно, но кто же знает, как получится?
Первое время было много вопросов, потом он полностью проникся и вошел в курс дела, вопросы иссякли. Потом случайно мы узнали, что все то, что мы рекомендовали с самого начала, они все-таки реализовали и пошли намного дальше — но деталей уже не знаю. Похоже, свой специалист был намного убедительней двух пришлых пенсионеров.
P.S.
А дальше пойдет жестокий и беспощадный DIY.
Как-то на Али, еще до всемирного кремниевого дефицита, я по ошибке купил STM32F103RCT6 вместо STM32F103C8T6 — заказал самое дешевое, что увидел (цена была — страшно вспомнить, €0.64 за штуку с бесплатной доставкой) — а оказалось, что на цену-то я посмотрел, а на название не обратил внимания. И ног у микросхемы почему-то многовато оказалось. Но из нее тоже получился неплохой контроллер адресуемых светодиодов, правда, в отличие от варианта на STM32F407, тянет всего 8 линий — ОЗУ маловато и SPI медленнее. Но где-то может и этого хватить. Если паять руками, то 64-ногую микросхему проще запаять, чем 100-ногую. Впрочем, это сделано было безо всякой цели, система управления по сравнению со светодиодными панелями копейки стоит.
Цель вообще-то была, но к делу не относящаяся: проверял еще одну свою самоделку — лазерный экспозер.
Комментарии (23)
3epg
24.11.2021 10:44+1Прикольно. А в каком году и городе эти действия происходили? Неужели нет промышленных решений такого плана? По телевизору видел, что изображения на льду меняются, это всё тоже своего рода DIY?
DustyZebra Автор
24.11.2021 11:12+4Не так давно - чуть больше 3 лет назад. Если бы решения были бы - их бы использовали. Готовые дисплеи толстые - нужно каток специально готовить, удовольствие не дешевое. Город - прямо на первой картинке, прямо на дисплее и написано. Но поменьше дисплей ставили еще в одном месте, в другой стране, но в то же время. Что сейчас творится - это я не знаю. Я в свое время неплохо развлекся, еще и денег заплатили.
3epg
24.11.2021 12:22+1А какое было полное разрешение экрана? И как это всё было реализовано программно? Раз везде линукс, предположу, что малина каким нибудь ffmpeg’ом вырезала кадры из видео и кадр уже отправляла на микроконтроллеры? Или нет?
psman
24.11.2021 12:33Cамый простой вариант - это jinx и подобные ПО для работы с экранами и устройствами которые умеют в разные варианты типа dmx, artnet и т.п.
В самом простом варианте ардуина по usb может принять видеобуфер и отправить его на ленту (гуглить Glediator), с в более сложном варианте плата на esp по wifi может ловить тот же буфер представляясь ArtNet девасом, особо удобно что ног много и на каждую по ленте можно посадить по разным universe
DustyZebra Автор
24.11.2021 14:59+2Про wifi на стадионе можно забыть - у каждого телефон в кармане, у половины - wifi включен. А usb далеко не ходит :(
psman
03.12.2021 08:38WiFi в телефонах в режиме клиента, а не точки доступа, но это так, лирическое отступление. Не вижу проблем что бы прокинуть сеть проводную и передавать данные по проводам спокойной. Ардуино тут не самое удобное решение, есть Pi, есть подобные другие платы в на которых можно сделать многоканальный вывод на ленты картинки.
DustyZebra Автор
24.11.2021 12:39У большого экрана разрешение очень маленькое - 288х288. У малины времени хватало только чтобы гнать данные. Они были заранее подготовлены на ПК, все было перевернуто в нужный формат, оставалось их только быстро-быстро разгонять по контроллерам. В малине практически ее возможности не использовались никак. Видео, как таковое, нигде не использовались, оно сразу раскладывалось по кадрам. То, что сделано уже после нас - да, там использовалось видео, но и техника помощнее - осознали, что из дерьма пули лить сложно.
uburame
24.11.2021 13:59+2Неужто лёд не растопило это панелью? На катке в Парке Горького как-то пытались вмораживать светодиоды для подсветки через лёд, да перестали - растапливают.
DustyZebra Автор
24.11.2021 14:36+4Вы как в воду смотрели :)
Использовать можно ограниченное время - один раз кто-то на ночь забыл выключить дисплей - утром были лужи. И разборки - кто не выключил :)
andry67
24.11.2021 14:38А в вашем PCB Laser Exposer "белый" лазер или просто мощный светодиод с оптикой стоит? Вообще классная идея использовать LSU от принтера.
DustyZebra Автор
24.11.2021 15:59+1Засветить можно только ультрафиолетом - там стоит 405нм лазер, детали тут https://mysku.ru/blog/diy/78424.html и тут https://mysku.ru/blog/diy/78847.html
Daddy_Cool
24.11.2021 17:53Спасибо за ссылки! Сам с лазером сейчас собираюсь возиться.
iliasam
24.11.2021 18:12На Радиокоте большое обсуждение есть: https://radiokot.ru/forum/viewtopic.php?f=8&t=119089
Плюс там тоже пытаются внутренности лазерного принтера использовать: https://radiokot.ru/forum/viewtopic.php?f=8&t=143471
VT100
24.11.2021 21:29+9Вот так "пенсы" не дают молодой неграмотной шелупони выбиться в "единороги". Так держать!
8street
25.11.2021 08:23+1Ну елы-палы. Надо было убедить заказчика на промышленный ПК (IPC). Ну и проектор поставить сверху, хотя возможно это не так круто бы смотрелось.
Dark_Purple
25.11.2021 08:52Про встроенный Ethernet-контроллер пришлось сразу забыть — любое прерывание не вовремя — и картинка разваливалась. Пришлось ставить внешний W5500.
Так вот в чем дело, я то думаю почему "синий экран смерти" периодически появляется, а это я не вовремя прерывание клавиатурой и мышкой вызываю и всё разваливается :)
axe_chita
26.11.2021 03:58Лютейший DIY! Класс! И как это знакома эта фраза «У нас все готово, тут делов-то взять и подключить». И гонка на перегонки со временем к дню «Д» и часу «Ч»! Читалось на одном дыхании.
av-86
26.11.2021 13:48На картинке с печатной платой (https://habrastorage.org/r/w1560/webt/ba/c9/nd/bac9ndbvi9qdeomzp99too0jtii.jpeg) рядом с выходами микросхемки по 2 на выход. Не вижу, что за звери. Оптопары сдвоенные?
DustyZebra Автор
26.11.2021 15:54Только одна на выход, на одном разъеме - 2 выхода, обычный 485 драйвер.
volchenkodmitriy
Спасибо - очень интересно! Всегда интересно читать про проекты которые успешно уходят в продакшен!!!