Ещё один шаг в сторону оптических наушников

в 13:00, , рубрики: Без рубрики

Ещё один шаг в сторону оптических наушников - 1

Картинка Freepik

История эта началась достаточно давно, и внизу будет некоторый результат моих исследований этой темы. Возможно, кто-то тоже захочет двигаться в таком же направлении. Итак…

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

Маленький спойлер: дальнейшее повествование будет двигаться в той последовательности, в которой я сам двигался в процессе исследования этого вопроса, так как отдельные элементы этого рассказа могут быть применены и в других самоделках и быть интересны людям.

Помню, как много лет назад, когда сотовые телефоны только входили в массовый обиход, одна из компаний провела исследование, где было показано, как критически возрастает количество излучения, когда в метро поезд въезжает в тоннель, где отсутствует сотовая связь, и сотовые телефоны, даже находящиеся в режиме ожидания, начинают активно искать базовую станцию. А если учесть, что у многих ещё и несколько сотовых телефонов с собой, либо телефоны с несколькими симками…

Уже тогда это новое знание меня несколько «напрягло». Но так как «с неумолимой поступью» технического прогресса ничего поделать нельзя, оставим этот момент как есть.

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

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

Но было бы ошибочно думать, что те же самые наушники я не использую. Вполне использую (как уже было отмечено выше, только проводные), кроме того, в наушниках довольно хорошо смотреть фильмы — звук объёмный, мощный, и никого не тревожит вокруг, особенно если наушники большие накладные.

Но, как можно было бы логически предположить, у таких наушников основной минус — это провод, от которого, так или иначе, хотелось бы избавиться (тут небольшая оговорка: я, в основном, озаботился неким беспроводным интерфейсом для дома, не для улицы — чтобы можно было на дому слушать музыку, смотреть фильмы, в больших накладных наушниках).

Поэтому исходя из всего вышесказанного, некоторое время назад у меня появилась мысль: а что, если связать источник звука и наушники по оптическому каналу?

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

Но так как мы говорим не о дальней связи, а нас интересует многочасовое использование в рамках дома, полагаю, что использование лазерного излучения будет не самым лучшим выбором. Кроме того, если мы будем смотреть фильмы в темноте, лазерный луч будет довольно сильно всё освещать (а невидимого глазом диапазона лазер использовать не хотелось бы, чтобы случайно не испортить себе зрение, оставаясь продолжительное время в фокусе).

И тут мой взгляд пал на инфракрасные пульты дистанционного управления, широко распространённые в бытовой технике. А что, если передавать аудиосигнал по ИК-каналу? Это как раз должно позволить избавиться от радиоизлучения, и в то же время обеспечить передачу необходимого звукового трафика в беспроводном режиме.

Я подумал, что это должно быть хорошим решением, так как передача по такому каналу может осуществляться на достаточно высоких скоростях.

Сказано — сделано! Я купил себе некоторое количество известных оптических ИК-приёмников серии TSOP, а именно TSOP 4838, и продолжил изучать вопрос (правда забыл заодно купить и излучающие диоды, поэтому пришлось выпаивать из одного из старых пультов от техники):

Ещё один шаг в сторону оптических наушников - 2

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

Передача осуществляется в виде пакетов в самом каноничном варианте в рамках протокола NEC1 (а протоколов существует великое множество) в виде 32-битного пакета:

image

Картинка: vc.ru

В нём первые восемь бит представляют собой идентификатор устройства (на схеме выше он называется — Address), после чего идёт тот же самый адрес только инвертированный (в целях проверки), далее идёт код команды на выполнение, после чего пакет завершается этой же командой только инвертированной (также в целях проверки).

В самом начале пакета (в левой его части) можно видеть, что пакет начинается зоной включения светодиода, которая длится 9 миллисекунд, после чего следует зона выключенного светодиода продолжительностью 4,5 миллисекунды. Это сочетание из включённого и выключенного состояний называется преамбулой протокола, и в данном случае служит для однозначной идентификации протокола NEC1: после получения такой преамбулы все устройства, поддерживающие его, начинают ожидать команд (правда, для непосредственного выполнения команды ещё должен совпасть адрес устройства).

Кстати, о продолжительности горения светодиода: например, в более свежем протоколе NEC2 сигналы кодируются так:

  • ноль: 600 микросекунд светодиод включён, 1600 микросекунд выключен;
  • единица: 600 микросекунд светодиод включён, 600 микросекунд выключен.

Но вернёмся к нашим фотоприёмникам серии TSOP 4838. В их названии последняя цифра означает частоту, на которой может работать устройство, и в данном случае частота составляет 38 кГц. Этих фотоприёмников существует целая серия, которая показана в таблице ниже:

Ещё один шаг в сторону оптических наушников - 4

По наивности, в самом начале, когда я только пробовал экспериментировать с этими приёмниками, я написал простой код, который включает ИК-светодиод на некоторое время, после чего выключает его — и так в виде цикла.

Результатов это никаких не дало, приёмник никак не хотел видеть передатчик. Как говорится, «если ты всё перепробовал и ничего не получается, иди и прочитай мануал» :-) Так вышло и со мной…

Если мы откроем даташит по этому фотоприёмнику, то увидим абсолютно чётко описанные три условия, при которых приёмник будет видеть источник сигнала:

  • источник должен мерцать с частотой 38 кГц (или максимально близкой к ней);
  • передача должна осуществляться в виде пакетов, где количество импульсов в пакете должно варьироваться от 10 до 70;
  • пауза между пакетами должна составлять не менее 14 импульсов (или более) — здесь подразумевается время, равное времени 14 импульсов.

Тут требуется некоторое пояснение: этот фотоприёмник является не просто фотодиодом, а целой электронной схемой, предназначенной для эффективного отфильтровывания фонового теплового шума и распознавания целевого сигнала. Именно для этих целей и служит частота мерцания в 38 кГц: такое мерцание и распознаётся приёмником как сигнал. А уже варьируя периодами, в течение которых этот сигнал включён или выключен, мы и передаём информацию.

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

Ещё один шаг в сторону оптических наушников - 5

Я провёл ряд экспериментов, в ходе которых пробовал генерировать просто ШИМ-сигнал с частотой 38 кГц, накладывать на этот ШИМ-сигнал периоды включения и выключения (более длительные, чем аналогичные периоды у ШИМ-сигнала), но в результате пришёл к более простому варианту, когда с помощью функции digitalWrite включал высокий или низкий уровень на пине светодиода с длительностью каждого периода в 26 микросекунд (так как нашей целью является получить частоту в 38 кГц, а в секунде 1 млн микросекунд, то 1000000/38000=26 (округлённо)).

Примечание: все описанные выше эксперименты строго соответствовали трём перечисленным выше правилам по частоте, количеству импульсов в пакете и продолжительности паузы между пакетами.

Ради интереса попробовал передавать данные ещё следующим образом:

  1. Без пауз между пакетами: приёмник очень быстро «захлёбывался» и переставал реагировать на входящие сигналы, через всегда разные промежутки времени.
  2. На иной частоте, чем 38 кГц: ну, с этим проще всего — приёмник просто не видел передатчика.

Теперь система стала работать стабильно, и я подумал вот о чём: многие, кто начинает работать с инфракрасными сигналами на Arduino-системах, наверняка пользуются известной библиотекой IRemote.h.

Мы же теперь, зная, как устроен типичный пакет инфракрасного протокола передачи данных, а также умея работать на относительно низком уровне, вполне можем сконструировать собственный пакет, и нам не нужна никакая библиотека!

Таким образом, если вы захотите сконструировать какую-либо самоделку и управлять ей с помощью инфракрасного пульта, а также перед вами не стоит задача совместимости с уже существующими устройствами, то у вас развязаны руки — вы можете конструировать собственные пакеты нужной для вас структуры…

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

Тем более, как мы могли видеть ранее, во время изучения пакета протокола NEC1, для нашего случая там много избыточной информации, ведь речь идёт о передаче звуковых данных и можно попытаться сэкономить место.

И в этот момент я задумался о собственно пропускной способности: а ведь получается, что фотоприёмник является узким местом всей системы! Он просто физически не может работать на частоте больше 38 кГц! И даже больше того: у нас и так частота достаточно низкая, так ещё у нас «отжирают» полезное время технологические паузы в 14 импульсов между пакетами!

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

Скажу честно, я раньше об этом не задумывался, просто воспринимал как некие абстрактные цифры, глубоко не задумываясь над физическим смыслом.

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

Так как на самих наушниках я планировал использовать известную микросхему усилителя с I2S-интерфейсом MAX98357A, то, разбираясь с её подключением, я нашёл ряд весьма познавательных пояснительных картинок, показывающих, какая частота сэмплирования и разрешение должны быть у аудиосигнала (попутно, пока подключал, собрал минут за 15 ещё и интернет-радио, весьма просто оказалось, кстати; довольно занятная штука вышла — но это просто к слову; мануал брал отсюда).

Например, вот так это выглядит в случае компакт-диска при частоте сэмплирования 44100 Гц, разрешении аналого-цифрового преобразователя в 16 бит на канал для 2 каналов: 1,4112 МГц:

image

Картинка: dronebotworkshop.com

А вот так, если наши требования более скромные и нас устроит плохонькое качество звука, как в телефоне. Тогда для этого потребуется, для одного канала:

image

Картинка: dronebotworkshop.com

Как между собой взаимосвязаны разрешение АЦП и частота сэмплирования, я показывал в одной из прошлых статей, вот на этой картинке:

image

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

Но учитывая ту ссылку, которую я приводил выше, где описывались разные стандарты высокоскоростной инфракрасной связи, можно предположить, что наша проблема может быть вполне решена сменой фотоприёмника, поэтому посмотрим, а нет ли ещё каких узких мест в подобной системе?

Так как она достаточно проста, ещё одним очевидно узким местом может быть первичное аналого-цифровое преобразование входящего аудиосигнала. Некоторое время назад в той же статье, ссылку на которую я уже приводил выше, я делал попытку разобраться с потенциально доступной частотой сэмплирования на платах Arduino (для моей любимой esp32 информации у меня, к сожалению, нет).

Так вот, если сказать вкратце, то получается, что по результатам исследований, которые я тогда приводил, реально допустимая частота оцифровки (если без танцев с бубном, используя вариант по умолчанию) с помощью команды analogRead составляет 8,96 кГц (маловато). А используя «танцы с бубном» — вплоть до 5 МГц (вполне недурно, но надо ещё смотреть, какое разрешение при этом возможно).

При желании можно более подробно ознакомиться со всей этой ситуацией по ссылке, которую я привёл выше, поэтому здесь не буду повторяться. Но надо ещё и учитывать, что с увеличением частоты начинает сильно падать и разрешение, так что следует это держать в уме…

То есть в сухом остатке получается, что при желании мы можем поднять частоту сэмплирования до нужной, чтобы обеспечить хорошее качество звука.

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

И если в чисто цифровых протоколах передачи аудио/видеосигнала идёт постоянное выравнивание аудио- и видеоданных относительно друг друга, то в моём случае, так как аудио оцифровывается в отрыве от видео, а потом ещё его надо передать, то очень быстро аудио начнёт отставать от видеопотока, то есть будет наблюдаться прогрессирующая рассинхронизация. То есть, одно дело, если мы слушаем интернет-радио — это ещё куда ни шло. А вот если мы захотим посмотреть видео, всё будет довольно плохо.

Но неужели ничего нельзя сделать? Как ни странно, есть один вариант, и причём весьма простой и достаточно красивый — отход от цифрового звука в сторону аналогового! В ходе своих исследований я обнаружил пару видео, где аудиосигнал передавался в аналоговом формате и в самом простом варианте для такой передачи требовалось всего лишь четыре детали!

Более продвинутый вариант передачи был собран другим автором из деталей, купленных в известном китайском магазине (недорого стоит, кстати, рублей 140 или около того):

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

Такие передатчики, несмотря на свою простоту, позволяют достаточно уверенно передавать сигнал на расстоянии нескольких метров, что вполне применимо для домашнего использования! Однако тут встаёт другая проблема: аудиосигнал будет идти в моно-формате!

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

Например, в ходе исследования этого вопроса мне попадались подобные пары на 940 нанометров и 950 нанометров. Соответственно, если одну такую пару мы используем для левого канала, а другую для правого канала, то таким нехитрым образом мы сможем передавать аудиосигнал в стерео-формате, применив для этого весьма простое устройство!

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

Telegram-канал со скидками, розыгрышами призов и новостями IT 💻

Автор:
DAN_SEA

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js