Floating Display

Дисплеи с парящим изображением существуют уже множество лет; они используются, например, для управления лифтами без касаний. Также их можно встретить на ресепшенах, в банкоматах и других местах. Узкая область видимости идеально подходит для безопасного ввода данных, например, PIN-кодов. А со времён пандемии такие концепции обратили на себя большое внимание, поскольку они обеспечивают максимальную гигиену. Принцип, лежащий в основе этого дисплея, не так уж сложен, поэтому я решил изготовить его самостоятельно.

Компоненты

Аппаратные компоненты

Arduino Nano R3

× 1

LattePanda 3 Delta

× 1

LattePanda 7-inch 1024 x 600 IPS Display

× 1

STMicroelectronics VL53L0X

× 1

Полевой дисплей

× 1

Светоделитель

× 1

Ретрорефлектор

× 1

История

Как это работает

Дисплей с парящим изображением (floating display) отображает информацию висящей в воздухе, где оборудование отсутствует. Для этого используется некогерентный источник света (например, яркий дисплей) и пассивные оптические компоненты, собирающие расходящийся от дисплея свет на определённой плоскости фокусировки, образуя в воздухе реальное изображение. Стоит отметить, что принцип отличается от принципа дисплеев призрака Пеппера, где объекты видны за стеклом дисплея (поверхность стекла создаёт призрачное изображение, отражая освещённый объект от скрытой области).

Устройство содержит три основных оптических компонента:

1. Яркий дисплей (например, полевой монитор или современный планшетный компьютер).

2. Светоделитель/полупрозрачное зеркало (например, оргстекло или стекло телесуфлёра).

3. Ретрорефлективная плёнка.

Слева: яркий дисплей, сверху: светоделитель (полупрозрачное зеркало), справа: ретрорефлектор
Слева: яркий дисплей, сверху: светоделитель (полупрозрачное зеркало), справа: ретрорефлектор

Ретрорефлектор

Самая важная часть — это отражающий элемент, называющийся ретрорефлектором. Если светить на зеркало под углом, то он отразится под углом, равным углу падения. Это закон оптики, гласящий, что луч света отражается от поверхности под тем же углом, под которым он падал на неё. Ретрорефлектор же отражает свет обратно к источнику, где бы он ни находился.

Ретрорефлекторы используются в дорожных знаках, на велосипедах и средствах защиты, чтобы сделать их более заметными.

Пример ретрорефлектора на основе сфер: задняя часть велосипедного седла
Пример ретрорефлектора на основе сфер: задняя часть велосипедного седла

Обратное отражение обеспечивается благодаря или стеклянным бусинам, или микропризмам. Эти структуры размером меньше миллиметра, поэтому каждая из них по отдельности незаметна для наблюдателя. В нашем случае микропризмы должны быть как можно более мелкими, равномерно распределёнными и иметь высокое качество.

Дисплей с парящим изображением на основе ретрорефлектора можно реализовать так: если использовать дисплей и позволить изображению отражаться через отражающий лист... то ничего не произойдёт, потому что отражённое изображение образуется непосредственно самим источником света. Однако если мы добавим светоделитель, то отражённые лучи можно будет разделить. Оптические компоненты взаимодействуют следующим образом:

a) Свет испускается с яркого дисплея в направлении светоделителя.

b) Затем он отражается (частично) светоделителем на ретрорефлектор. Свет, возвращаемый ретрорефлектором, отправляется обратно на светоделитель (точно под таким же углом).

c) Свет, проходящий через светоделитель, сходится снаружи, формируя изображение в воздухе.

Ориентация: эти три оптических компонента можно расположить множеством разных способов. Простая версия показана на изображении ниже («эксперимент с картоном»). Я изменил конфигурацию так, чтобы парящее изображение находилось над машиной (потому что считаю, что это выглядит круче...).

(Примечание: здесь важно отметить, что эту концепцию, разумеется, придумал не я. Честь её открытия принадлежит группе японских учёных, изучающих её уже более десяти лет. В конце поста приведены ссылки на научные статьи.)

Приобретение компонентов

Полевой монитор с диагональю 5,5 дюйма (согласно спецификации, 1500 нит)
Полевой монитор с диагональю 5,5 дюйма (согласно спецификации, 1500 нит)
Матрица светодиодов, используемая в качестве альтернативного дисплея
Матрица светодиодов, используемая в качестве альтернативного дисплея
Ретрорефлективная плёнка
Ретрорефлективная плёнка

Моим источником стал сайт https://www.reflecto.shop/ (немецкий магазин, специализирующийся на различных отражающих материалах). В конечном итоге я остановился на Oralite3010. Примечание: я также нашёл компанию, продающую ретрорефлективные материалы для профессионального использования. Однако, как вы уже могли догадаться, они слишком дорогие для хобби. Но всё равно было бы очень интересно их попробовать. Если это вас заинтересовало, то поищите «Nippon Carbide RF-A». Я остановился на достаточно дешёвом Oralite3010, хоть изображение получилось и не очень резким, а яркость могла бы быть чуть выше. В конце концов, это проект самоделки с ограниченным бюджетом, поэтому пришлось мириться с ограничениями.

Структура

Я решил выбрать для корпуса стабильную конструкцию, собрав его из алюминиевого профиля (20x20).

Все необходимые детали для крепления функциональных частей изготовлены на 3D-принтере, их можно найти в репозитории по ссылке в конце статьи:

  • Держатели стекла светоделителя.

  • Рамка полевого монитора.

  • Элементы блока датчиков.

  • Держатель рефлектора.

  • Рамка для Lattepanda.

  • Элементы дизайна корпуса (не показанные выше).

Блок датчиков

С самого начала я хотел реализовать возможность взаимодействия с дисплеем, поэтому мне нужно было найти способ обнаружения позиции пальца, «касающегося» экрана в воздухе. В моей версии устройства достаточно лишь простого взаимодействия, то есть всего нескольких активных областей, в которых можно нажать на кнопку или проделать какое-то другое подобное действие. Я хотел создать подсистему на Arduino, способную обрабатывать простые данные датчиков.

Для этой цели я протестировал множество датчиков.

Первым найденным мной датчиком стал ZX Gesture Sensor производства Sparkfun. В нём используется источник и два приёмника инфракрасного излучения; заявляется, что он может распознавать движения и позицию объекта над датчиком. Настройка и подключение просты, достаточно лишь 5 вольт и подключения к шине I2C. Распознавание жестов с предоставленными примерами работало хорошо. Оно почти без проблем могло распознавать пролистывания влево, вправо и вверх. Однако вывод самой позиции был не очень точным, особенно когда вместо всей ладони я использовал один палец. Расчёт позиции основан на величине отражения, а она ближе к аппроксимации, чем к точному измерению. Однако главная проблема заключалась в том, что когда я включал в комнате яркое освещение, датчик сразу же начинал выдавать мусорные данные. Причина этого в том, что источники света не только испускают свет в видимом спектре, но и содержат определённую долю инфракрасного. Поэтому я не мог полагаться на показания при обычных условиях освещения, и от датчика пришлось отказаться.

TOF-датчики

Затем я начал искать датчики, которые не так чувствительны к окружающему освещению, поэтому обратил внимание на time-of-flight-датчики. TOF-датчики сегодня широко применяются в робототехнике, дронах и других сферах; в последнее время их цена стала приемлемой. Также их активно использует сообщество самодельщиков. Я начал тестирование хорошо известного VL53L0X производства ST Microelectronics. Передатчик и приёмник лазера находились в одном корпусе, поэтому устройство очень компактное.

Настройка и подключение оказались такими же простыми, как и у предыдущего датчика. Достаточно питания 5 В и подключения к шине I2C. Датчик испускает короткие импульсы невидимого лазерного излучения, которое слегка заметно через камеру моего сотового телефона. TOF-датчики измеряют время, необходимое для испускания лазерного импульса, отражения от объекта и возвращения в датчик. Это позволяет выполнять точное измерение расстояний; кроме того, они работают при обычных условиях освещения.

Датчик передаёт точные значения расстояния в миллиметрах и в пределах, где будет находиться парящий дисплей. Однако одно устройство обеспечивает только одномерное измерение. Для определения позиции на парящем дисплее нужно перейти в 2D-плоскость. Очевидно, для этого потребуется несколько датчиков.

Для обеспечения достаточной области видимости моей системы в конечном итоге понадобилось три датчика. Для чтения данных датчиков я использую Arduino Nano; я запрограммировал его на отправку всех показаний расстояний по последовательному соединению. При помощи моей маленькой матрицы датчиков я смогу распознавать три области отображаемого дисплея, и в каждой области я буду получать вертикальную позицию для взаимодействия с «сенсорными» полями.

Первый тест с тремя TOF-датчиками
Первый тест с тремя TOF-датчиками
Каждый из датчиков следит за тремя полями трёх областей
Каждый из датчиков следит за тремя полями трёх областей

Достаточно надёжно можно отслеживать 9 сенсорных полей, чего должно хватить для этой самодельной версии. Для визуализации данных датчиков я написал на PC тестовую программу. Она получает данные через UART (COM-порт) и отображает расстояние каждого датчика в виде цветной точки. Так я убедился, что действительно могу точно замерять позицию пальца в нужной области.

Вроде бы всё работало неплохо. Однако позиция пальца всегда оказывалась немного различающейся, поэтому для определения требовался допуск. Далее мне нужно было найти интервалы датчиков, соответствующие реальным позициям «сенсорных полей» моего парящего дисплея.

Я изменил тестовую программу, добавив простую сетку 3x3, подсвечивающую поле, когда одна из позиций датчика находится в заданном интервале каждого поля. Для этого потребовалось немного покопаться, но в конечном итоге мне удалось найти значения для всех девяти сенсорных областей.

Одноплатный компьютер

Итак, базовая структура готова, осталось добавить контент, который будет интереснее, чем простая тестовая сетка 3x3. Для этого в качестве центрального мозга я выбрал одноплатный компьютер (SBC) Lattepanda. Он позволит легко отображать стандартные изображения и анимации, потому что, по сути, это маленький компьютер с Windows. Полевой монитор подключён через HDMI в качестве второго дисплея, а интегрированный фронтальный экран используется для непосредственного управления SBC.

На фронтальный экран SBC выводятся диагностические данные, позволяющие с лёгкостью настраивать интервалы сенсорных полей. Сенсорный экран стал потрясающим дополнением к машине, добавив ей особый элемент дизайна, выглядящий подобно коммуникационному модулю из будущего. Ещё одна причина выбора Lattepanda заключалась в том, что его можно напрямую соединить с модулем датчиков Arduino Nano. По одному из трёх USB-интерфейсов SBC подаёт на Nano питание и одновременно считывает данные через эмулируемый UART. Остальные два USB-разъёма подключены к двойному проходному разъёму USB, смонтированному на боковой панели. Это позволяет мне с лёгкостью подключать клавиатуру, мышь или USB-накопитель для загрузки в устройство новых изображений и тому подобного.

Lattepanda, смонтированный внутри передней панели; встроенный экран находится непосредственно под ним
Lattepanda, смонтированный внутри передней панели; встроенный экран находится непосредственно под ним
На встроенном экране отображается информация о статусе и выполняется управление устройством
На встроенном экране отображается информация о статусе и выполняется управление устройством
Два USB-разъёма для доступа к SBC
Два USB-разъёма для доступа к SBC
Основной переключатель для включения одноплатного компьютера
Основной переключатель для включения одноплатного компьютера

Последней модификацией стал патчинг включателя полевого монитора и соединение его с оптопарой, управляемой Nano. Благодаря этому простому хаку Nano могла автоматически включать дисплей при каждом своём запуске. Это гарантирует, что внешний дисплей будет готов, когда Lattepanda начинает отображать контент на втором дисплейном выводе. Сам SBC можно включать внешним переключателем на левой панели, соединённым с контактом SW (подключённым к GND). Сам переключатель подсвечивается одним из ШИМ-портов встроенного Arduino Leonardo. Сначала я пытался использовать Leonardo для обработки показаний датчиков, но у меня почему-то не получилось, поэтому я решил воспользоваться внешним Arduino Nano, и всё прекрасно заработало. Исходный код для Arduino Nano добавлен в проект по ссылке, исполняемый файл Lattepanda я могу предоставить по запросу.

Сферы применения

Для чего же можно использовать это устройство, кроме имитации научно-фантастического гаджета? Во-первых, узкая область видимости идеально подходит для безопасного ввода данных (парящее в воздухе изображение видимо, только когда смотришь прямо на него). На этом устройстве можно замечательно вводить PIN-коды в самых многолюдных местах. Ещё один пример — устройство для голосования. А со времён пандемии подобные принципы управления привлекли большой интерес, потому что они обеспечивают максимальную гигиеничность. Так что такие «сенсорные» дисплеи можно применять в сферах, где важно соблюдение гигиены: в больницах, кабинетах врачей или домах престарелых. Кроме того, это хороший вариант для ресторанов, в которых заказы обычно выбираются на сенсорных экранах. И я уверен, что ещё есть множество других областей применения...

Научно-фантастический дизайн

После всех потраченных усилий мне хотелось, чтобы эта машина выглядела круто и научно-фантастически. К сожалению, я не смог найти похожего устройства в моих любимых фантастических мирах (например, в «Звёздных войнах»), поэтому был свободен в реализации собственной версии. Наконец-то мне представилась возможность попробовать некоторые техники, которые я уже давно хотел протестировать:

Напечатанные на 3D-принтере детали с нанесённой алюминиевой фольгой
Напечатанные на 3D-принтере детали с нанесённой алюминиевой фольгой
...потом покрашенные чёрным...
...потом покрашенные чёрным...
...и потёртые проволочной щёткой и стальной мочалкой
...и потёртые проволочной щёткой и стальной мочалкой

Я не могу (пока) печатать металлические детали, но мне они были нужны, поэтому воспользовался простым трюком: а) Сначала обклеиваем напечатанные детали конструкции алюминиевой фольгой. Детали должны иметь текстуру, чтобы можно было вдавить их в фольгу или вдавить фольгу в них. б) Закрашиваем элемент чёрной краской. Ничего сложного не требуется. Перед следующим этапом дождитесь их высыхания. в) Ототрите части краски стальной мочалкой. Благодаря этому будет казаться, что элементом пользовались долгие годы.

Создаём собственные стикеры

Источником вдохновения послужил немецкий журнал Make:

Можно создавать собственные стикеры с помощью лазерного принтера, прозрачной плёнки и чашки с водой. Приклейте прозрачную плёнку (скотч) на бумагу со стикерами, затем вырежьте стикеры и положите их в воду. Через несколько минут достаньте стикеры из воды и аккуратно ототрите размягчившуюся бумагу с плёнки пальцем, а потом приклейте. Хитрость в том, что цвет тонера вода не растворит, поэтому цвет тонера приклеится к плёнке.

Улучшения

В конце концов стало очевидно, что эта конструкция имеет свои недостатки. Основная проблема — снижение качества изображения из-за дифракции, вызванной микроструктурой ретрорефлекторов. С увеличением расстояния изображение становится всё более размытым. Ещё одна серьёзная трудность заключается в снижении яркости изображения, вызванном существенной потерей света при отражении и передаче на светоделителе и ретрорефлексией. Есть и другие проблемы:

  • множественные отражения (призрачные изображения) вызванные нежелательными отражениями на оптических элементах,

  • ограниченность углов обзора (но это может быть и желанным параметром!),

  • перекрытие оптическими элементами,

  • неуклюжий дизайн,

  • очень простые сенсорные взаимодействия из-за моей простой матрицы датчиков.

Потенциальные решения могут быть такими:

  • использовать высококачественный призматический ретрорефлектор (дорого),

  • уменьшить расстояние до парящего изображения для устранения размытия,

  • использовать яркий цифровой светодиодный дисплей,

  • ламинировать оптические элементы поляризационными плёнками и четвертьволновыми плёнками для повышения эффективности света (наверно, не подходит для самодельных устройств),

  • использовать 3D-камеру для улучшения сенсорных взаимодействий (дорого).

Благодарности

Здесь важно признать вклад команды исследователей, более десятка лет занимавшихся этой областью. Ссылки на опубликованные работы профессора Ямамото и других учёных можно найти ниже:

  • IEC TR 62629-51-1 Edition 1.0 2020-05 : "3D display devices – Part 51-1: Generic introduction of aerial display" Aerial Imaging by Retro-Reflection (AIRR) by [Yamamoto et al. 2014a].

  • Floating aerial LED signage based on aerial imaging by retro-reflection (AIRR) Hirotsugu Yamamoto, Yuka Tomiyama, and Shiro Suyama, 2014, https://opg.optica.org/oe/fulltext.cfm?uri=oe-22-22-26919&id=303352#

Заключение

На этом мой проект завершён. Надеюсь, он показался вам интересным и вдохновил на его воссоздание.

Репозитории деталей для 3D-принтера: