[Перевод] Как распечатать цветной механический телевизор на 3D-принтере
До появления плоских экранов, даже до электронно-лучевых трубок люди могли смотреть телепередачи. И всё благодаря диску Нипкова. Эти диски девяносто лет назад использовали в черно-белых электромеханических телевизорах типа Baird Televisor. Такие можно было встретить, например, в Англии и Германии. Забавно, что технология привела к появлению многих форматов, которые мы сегодня считаем само собой разумеющимися (разные телевизионные шоу, внешние трансляции).
Размер и вес диска Нипкова делают практически невозможным существование дисплея даже с несколькими десятками строк развертки, не говоря уж о тысячах строк, как в современных телевизорах. Но когда на механический телевизор подаётся движущееся изображение, результат получается на удивление смотрибельным. А дисплеи завораживают своей простотой — никаких высоких напряжений или сложных матриц. Поэтому я задался вопросом: как проще всего построить такой дисплей, который будет воспроизводить изображение хорошего качества?
Я интересовался дисками Нипкова еще в студенческие годы, когда провёл несколько экспериментов с картонными дисками. Но эти эксперименты ничего не дали. В последние годы я видел, что некоторые люди построили современные дисплеи Нипкова — даже цветные —, но для их создания требовались дорогостоящие станки и материалы. Я приступил к разработке недорогой версии, которую можно было бы сделать с помощью 3D-принтера потребительского класса.
Секрет диска Нипкова в расположенных по спирали отверстиях. Источник света за диском освещает небольшой сектор. Двигатель вращает диск, и каждое отверстие по очереди проходит через освещённую область, создавая серию слегка изогнутых линий сканирования. Если освещение изменяется синхронно со временем, которое требуется каждому отверстию, чтобы пересечь область просмотра, вы можете получать изображения в рамке дисплея.
Первое, что мне нужно было сделать, это разобраться с диском. Я решил сделать диск диаметром 20 сантиметров, поскольку с таким размером легко может справиться большинство домашних 3D-принтеров. Так как размер отверстий точной формы и расположения ограничен, подобный диаметр диска накладывает определённое ограничение на разрешение дисплея. Я написал программное обеспечение, которое позволило мне генерировать тестовые диски на моем принтере Prusa i3 MK3S+, установив 32 отверстия для 32 строк сканирования. Дисплей представляет собой трапецию шириной 21,5 мм и высотой 13,5 мм с одного конца и высотой 18 мм с другого. Одним из неожиданных преимуществ печати диска сразу с отверстиями, вместо сверления, было то, что я мог сделать отверстия квадратными. Это привело к гораздо более чёткому изображению, чем с круглыми отверстиями.
Печатный диск диаметром 20 сантиметров (1) с 32 отверстиями подсвечивается светодиодным модулем RGB (2). Arduino Mega (3) управляет светодиодами, а скорость двигателя (4) регулируется потенциометром (5). Изображения и видеоролики сохраняются и считываются с SD-карты (6). Цифровые данные светодиодов от Mega преобразуются в аналоговое напряжение с помощью специальной печатной платы (7), а вращение диска контролируется инфракрасным датчиком (8).
В качестве источника света я использовал светодиодный модуль с красными, зелёными и синими элементами, расположенный за рассеивателем. Хорошее изображение требует широкого динамического диапазона яркости и цвета, что означает управление каждым элементом с большей мощностью и точностью, чем микроконтроллер обычно может обеспечить напрямую. Я разработал схему 6-разрядного цифро-аналогового преобразователя и заказал печатные платы, на каждой из которых было по две копии схемы. Я поставил две печатные платы друг на друга так, чтобы одна копия моего ЦАП управляла одним цветом светодиода (с запасной схемой, оставшейся на случай, если бы я допустил какие-то ошибки при заполнении печатных плат компонентами!). Это даёт комбинированное разрешение 18 бит на пиксель. Три потенциометра позволяют регулировать яркость каждого канала.
Микроконтроллер Arduino Mega — это мозг нашего телевизора. Mega имеет достаточно оперативной памяти для хранения кадров экрана и достаточное количество входов/выходов (пинов), чтобы выделить целый порт для каждого цвета (порт позволяет подавать сигналы на восемь пинов одновременно, используя биты одного байта для включения или выключения пина). Хотя я потратил два пина на канал, у Mega достаточно запасных пинов, зато подача сигнала на порт обеспечивает значительное преимущество в скорости по сравнению с битовым ударом для подачи сигнала на каждый пин по отдельности.
Mega синхронизирует свой выходной сигнал с вращением диска с помощью инфракрасного датчика, активируемого отражающей полосой, прикреплённой к задней части диска. Благодаря этому датчику мне не нужно было контролировать скорость диска. Я использовал малошумный 12-вольтовый двигатель постоянного тока XD-3420, который легко достать.
Я подключил к Mega некоторые дополнительные элементы управления — кнопку переключения режима между фото и видео, кнопку воспроизведения/паузы и кнопку пропуска дорожки для перехода к следующему файлу. Все элементы соединены рамками, напечатанными на 3D принтере, и закреплены на деревянной основе.
Поскольку мой телевизор использует 6 бит на канал на пиксель вместо 8 бит, используемых в большинстве современных форматов изображений, я создал инструмент преобразования, который можно бесплатно загрузить вместе со всеми другими вспомогательными файлами для этого проекта с Hackster.io. Видео рассматриваются как набор неподвижных изображений, отправляемых на дисплей со скоростью от 25 до 30 кадров в секунду, в зависимости от точной скорости диска. Вы можете преобразовать видео в подходящие коллекции с помощью программного обеспечения с открытым исходным кодом VirtualDub, а затем передать результаты через мой конвертер.
Когда каждое отверстие перемещается перед светодиодным источником света, яркость светодиода модулируется для создания строки сканирования изображения.
Фильмы и изображения хранятся на SD-карте и считываются в память Mega с помощью SD-модуля через соединение SPI. Телевизор просто сканирует каталог верхнего уровня и начинает отображать изображения — по одному в случае фотографий и автоматически переходя к следующему изображению в режиме видео.
Изначально, когда я пытался воспроизвести фильмы, было заметное заикание из-за пропуска кадров. Я обнаружил, что это связано со стандартной библиотекой Arduino SD — она может обрабатывать передачу данных со скоростью всего 25 килобайт в секунду или около того, в то время как при 25 кадрах в секунду дисплей ищет данные со скоростью 75 кБ/с. Проблема решилась переходом на оптимизированную библиотеку SdFat, которая обеспечивает гораздо более быстрый доступ на чтение.
В результате компактный дисплей, который легко помещается на столе или полке, но при этом воспроизводит яркое, красочное и стабильное изображение с достаточно высокой для большинства видео частотой кадров. Да, полностью электронное телевидение в конечном итоге победило механические устройства, но мой вращающийся диск Нипкова служит напоминанием о том, что простыми средствами можно создать по-настоящему крутые вещи. Не чешутся руки попробовать?
Что ещё интересного есть в блоге Cloud4Y
→ Малоизвестный компьютер SWTPC 6800
→ Сделайте Linux похожим на Windows 95
→ Бесплатные книги, полезные для IT-специалистов и DevOps
→ WD-40: средство, которое может почти всё
→ Игры для MS-DOS с открытым исходным кодом
Подписывайтесь на наш Telegram-канал, чтобы не пропустить очередную статью. Пишем только по делу.