Малый подковонос
В этом проекте описывается создание т.н. детектора летучих мышей – устройства, позволяющего слышать и записывать звуки, издаваемые летучими мышами. Вам, вероятно, известно, что летучие мыши испускают ультразвук для эхолокации. Частота этих звуков выходит за пределы воспринимаемого человеческим ухом диапазона, поэтому их нельзя услышать напрямую. Детектор летучих мышей использует особый микрофон, способный улавливать эти высокочастотные звуки и преобразовывать их в звук, попадающий в слышимый диапазон.
Типов детекторов летучих мышей существует три штуки. Для себя я сделал гетеродинный детектор. Его недостаток в том, что с его помощью сложнее различить различные виды летучих мышей, если сравнивать с записью высокочастотных звуков. Позднее я поясню, как работает гетеродинный детектор, а сначала давайте посмотрим на микрофон, необходимый для записи ультразвука.
При выборе микрофона сначала я рассматривал два варианта:
— электретный микрофон – все, что я нашёл, по документам работают только в диапазоне от 10 до 20 кГц, но если верить некоторым ресурсам, то некоторые их типы в некоторой степени воспринимают и ультразвук. Однако поскольку в их официальных описаниях этого не указано, потребовалось бы перебирать различные бренды методом проб и ошибок, и испытывать их. Поэтому я отказался от микрофонов такого типа.
— пьезоэлектрические датчики. Они, к примеру, встречаются в популярных ультразвуковых дальномерах HC-SR04, повсеместных и дешёвых. Минус их в том, что их чувствительность находится очень близко от резонансной частоты, где-то около 40 кГц. А при уходе от этой частоты чувствительность резко падает. Поэтому они тоже не подходят.
Вместо них я в итоге нашёл микрофон Knowles SPU0410LR5H, микрофон типа МЭМС. Согласно спецификации, у этого микрофона достаточно плоская кривая отклика на все частоты вплоть до 80 кГц, поэтому он очень хорошо подходит для данного проекта. Кроме того, у него есть внутренний предусилитель с высоким соотношением сигнал/шум. Основной минус этого микрофона – его корпус не предназначается для самодельных проектов. Он крохотный (3,76 × 3 мм!), а его контакты находятся внутри корпуса. Я поискал в интернете, и наткнулся на страничку пользователя hackaday.io Алана Грина, который также использовал данный микрофон в своём проекте. Он хорошо придумал сделать для этого микрофона специальную плату, благодаря чему его можно паять вручную. Суть в том, чтобы удлинить контактные площадки так, чтобы они торчали из компонента. Я воспользовался этой идеей и разработал небольшую плату для микрофона и двойного операционного усилителя. Последний даёт виртуальную землю (на половине напряжения питания), а также каскад усилителя на 20 дБ (то есть, в 10 раз). Сначала я скептически отнёсся к пайке этого микрофона вручную, однако всё сработало хорошо – все 6 плат, что я паял, удались. Я записал видео пайки для пояснений. Дизайн плат также выложен в открытый доступ.
Приступим к объяснению принципа работы гетеродинного детектора летучих мышей. Для начала рассмотрим сигналы, испускаемые мышами. Их можно смоделировать в виде сигнала с амплитудной модуляцией с ультразвуковой несущей частотой и огибающим сигналом, похожим на короткий «чирп»-сигнал (сигнал с линейной частотной модуляцией).
На диаграмме ультразвука несущая показана красным, огибающий чирп – зелёным, итоговая сумма – синим. Чтобы перевести сигнал в слышимый человеком диапазон, нужно преобразовать его так, чтобы сохранить огибающий (чирп), модулируя его несущим сигналом с меньшей частотой (к примеру, в диапазоне 1-5 кГц). Как этого добиться?
Чтобы понять, как это делается с математической точки зрения, воспользуемся известными тригонометрическими тождествами:
2sin(x)⋅sin(y)=cos(x−y)−cos(x+y)
2cos(x)⋅cos(y)=cos(x−y)+cos(x+y)
2sin(x)⋅cos(y)=sin(x−y)+sin(x+y)
2cos(x)⋅sin(y)=−sin(x−y)+sin(x+y)
Если принять нашу модель сигнала летучих мышей, его можно смоделировать следующим образом:
carrier(t)=sin(2πfct)
chirp(t)=sin(2πfchirpt)
bat(t)=carrier(t)⋅chirp(t)
где частота ультразвуковой несущей – fc, а частота чирп-сигнала — fchirp. Для этого примера примем:
fc=40 кГц
fchirp=1 кГц
Применяя тригонометрические тождества, получим:
bat(t)=sin(2πfct)⋅sin(2πfchirpt) = 1/2 cos(2π(fc−fchirp)t) − 1/2 cos(2π(fc+fchirp)t)
Модулируемый сигнал состоит из двух частот, симметрично расположенных вокруг несущей частоты, в данном примере на
40 кГц − 1 кГц = 39 кГц
40 кГц + 1 кГц = 41 кГц
Это нижняя LSB и верхняя USB боковая полоса частот:
fLSB=fc−fchirp
fUSB=fc+fchirp
Теперь мы можем использовать тот же принцип для преобразования мышиного сигнала к более низкой, слышимой частоте. Для этого надо умножить сигнал на частоту локального генератора LO – это разница между несущей частотой сигнала и нужной несущей частотой (в нашем случае – слышимой частотой, на которой мы бы хотели слышать крики летучих мышей). Эта техника называется гетеродинированием, В нашем примере допустим, что мы хотим слышать крики мышей на частоте 5 кГц, хорошо слышимой для людей. Тогда:
ftarget=5 кГц
fLO=fc−ftarget=35 кГц
LO(t)=sin(2πfLOt)
Собрав всё вместе, мы можем перезаписать члены уравнений при помощи тригонометрических тождеств:
bat(t)⋅LO(t)=(1/2 cos(2πfLSBt)−1/2 cos(2πfUSBt))⋅sin(2πfLOt)
= 1/2cos(2πfLSBt)⋅sin(2πfLOt) − 1/2cos(2πfUSBt)⋅sin(2πfLOt)
= 1/4(sin(2π(fLO−fLSB)t) + sin(2π(fLO+fLSB)t) − sin(2π(fLO−fUSB)t) − sin(2π(fLO+fUSB)t))
(учитывая, что sin(−x) = −sin(x)),
=1/2(−1/2sin(2π(fLSB−fLO)t) + 1/2sin(2π(fUSB−fLO)t) + 1/2sin(2π(fLSB+fLO)t) − 1/2sin(2π(fUSB+fLO)t))
= 1/2(−1/2sin(2π(fc−fLO-fchirp)t) + 1/2sin(2π(fc−fLO+fchirp)t) + 1/2sin(2π(fc+fLO−fchirp)t) − 1/2sin(2π(fc+fLO+fchirp)t))
= 1/2cos(2πftargett)⋅sin(2πfchirpt) + 1/2cos(2πf2t)⋅sin(2πfchirpt)
Видно, что первый член, cos(2πftargett)⋅sin(2πfchirpt), – это именно то, что нам нужно, огибающая чирп-сигнала, модулированная слышимой частотой в 5 кГц. Второй член – снова чирп-сигнал, модулированный более высокой частотой, f2=fc+fLO, в данном случае – 75 кГц. Второй компонент находится далеко за пределами слышимого диапазона, и его легко отсечь фильтром высоких частот в схеме детектора летучих мышей.
Теперь, когда мы в теории представляем, как принцип гетеродирования можно использовать для сборки детектора летучих мышей – как нам реализовать его на практике? Главное – это умножение входящего сигнала на LO-сигнал, что в практической электронике не так-то легко сделать. Существуют схемы для аналогового умножения (к примеру, ячейка Гилберта), и мы можем использовать подходящую ИС (типа NE612) совместно с генератором синусоиды (к примеру, генератор с мостом Вина). Однако такое решение будет сложным, а ИС для аналогового умножения типа NE612 или похожих редкие и дорогие.
Оказывается, существует вариант проще, и его можно собрать из распространённых стандартных компонентов. Мы можем собрать смеситель частот с аналоговым переключением. Хотя это не идеальный смеситель, поскольку он на самом деле не перемножает оба сигнала, мы скоро увидим, что он всё равно работает достаточно хорошо.
А пока давайте посмотрим на схемы, и попытаемся разобраться, как это работает.
Слева на схеме выход микрофона подаётся на высокочастотный LC фильтр второго порядка, убирающий слышимые частоты ниже 20 кГц, и пропускающий только ультразвук (поскольку это-то нам и нужно). Резистор R1, параллельный индуктору, обязателен – он гасит резонанс.
После высокочастотного фильтра сигнал приходит на два каскада операционных усилителей, с коэффициентами 1 и -1 (т.е. инвертирует сигнал). Теперь у нас есть как сигнал от мыши, так и его инвертированный двойник.
Слева внизу на схеме можно узнать бистабильный мультивибратор со знаменитой ИС 555. Потенциометром P1 можно контролировать всю цепь и создавать квадратную волну с рабочим циклом в ~ 50% и переменной частотой от 20 кГц до 400 кГц. В нашем случае это будет сигнал локального осциллятора LO, но в отличие от нашей математической модели эта волна квадратная, а не синусоидальная. LO-сигнал приходит на инвертирующий каскад, состоящий из аналогового ключа U3D и резистора R6. Здесь аналоговый ключ используется в качестве цифрового инвертера, и поскольку у ИС CD4066 есть 4 аналоговых ключа, у нас есть два запасных, один из которых можно использовать в качестве инвертера, и сэкономить на компонентах. Работает это просто: если сигнал LO низкий, ключ открыт, и R6 притягивает выходной сигнал с ключа вверх. Если сигнал высокий, ключ закрыт, и выход с ключа соединяется с землёй. Так и получается инвертированный сигнал .
Теперь посмотрим на часть схемы, обозначенную balanced mixer [«балансный смеситель»]. Неинвертированный мышиный сигнал подаётся на аналоговый ключ, который контролирует сигнал LO. Инвертированный сигнал подаётся на другой ключ, который контролирует сигнал . Выходы ключей соединены. Что же делает эта часть схемы?
Давайте рассмотрим случай, когда LO-сигнал 0 (низкий), и, следовательно, сигнал 1 (высокий). В данном случае нижний ключ U3B закрыт, а верхний U3A – открыт. Следовательно, проходит инвертированный мышиный сигнал. В обратном случае, когда LO-сигнал 1 (высокий), и, следовательно, сигнал 0 (низкий)., нижний ключ U3B открыт, а верхний U3A закрыт. Тогда проходит неинвертированный сигнал. Вспомним, что это переключение происходит с частотой fLO, определяемой контуром таймера 555.
Можно ли смоделировать это поведение математически? По сути, эта схема смесителя умножает сигнал на квадратную волну, переключающуюся между +1 и -1. Это эквивалентно переключению выходного сигнала между инвертированным и неинвертированным. Такую волну (назовём её r(t)) можно описать т.н. сигнум-функцией sign(x):
Поэтому на выходе смесителя получим произведение bat(t)⋅r(t). Само по себе это пока ничего не объясняет – чтобы понять, как происходит смешение частот, нам нужно применить математическую магию под названием разложение рядов Фурье. Избавлю вас от вывода и дам вам сразу результат. По сути, при использовании рядов Фурье можно показать, что:
Так что наша квадратная волна +1/-1 состоит из бесконечного множества синусоид с основной частотой fLO и её нечётными множителями. Что из этого следует? Если проигнорировать константу 4/π, видно, что r(t) является суммой LO(t) и других дополнительных более высоких частот LO3(t), LO5(t), и так далее. Из предыдущих подсчётов мы показали, что:
Поэтому можно подсчитать, что:
Мы снова видим, что первый член 2/π cos(2πftargett)⋅sin(2π fchirpt) – это то, что нам нужно, однако с нашим неидеальным смесителем с аналоговым переключением мы получаем кучу других ненужных членов. Однако все эти ненужные частотные компоненты имеют гораздо большие частоты, чем наша целевая ftarget. Поэтому мы можем использовать фильтр высоких частот, чтобы устранить эти компоненты, и получить итоговый сигнал приблизительно равный 2/π cos(2π ftargett)⋅sin(2π fchirpt).
Если мы вернёмся к схеме, то там выход со смесителя приходит на буферный каскад, а потом в низкочастотный RC-фильтр с частотой сопряжения в ~7 кГц. Последний усиливающий каскад даёт подстраиваемый коэффициент и служит драйвером выхода (к примеру, наушников).
Чтобы лучше понять, как работает смешивание частот, я сделал симулятор схемы на LTSpice. Можете скачать файлы для симуляции и поиграться с ними.
Пара замечаний по поводу компонентов. Я хотел, чтобы вся схема питалась с одной литий-ионной батарейки, поскольку у меня их куча, добытая из старых телефонов и т.п. Поэтому вся схема должна работать с питанием от 3 до 4 В. Следовательно, таймер 555 и аналоговый ключ 4066 нужно выбирать в виде КМОП – они уже работают на 3 В. Я использовал CD4066B и ILC555. Счетверённый операционный усилитель тоже должен работать на низком напряжении; я выбрал MCP6004, которым часто пользуюсь.
Я не стал разводить плату, а спаял всё на макетке. Если захотите сделать своё устройство с платой, скачайте схему для KiCAD. Корпус для устройства и ручки для регулировки громкости и частоты я распечатал на 3D-принтере. Питание включается автоматически, если вставить наушники в разъём. Загорающийся красный светодиод сигнализирует о включении. Плата микрофона расположена внутри корпуса за небольшим отверстием (на фото справа).
Для калибровки шкалы частот я проверил выходной сигнал 555 на осциллографе и отметил частоты на корпусе. Потом я нарисовал шкалу на компьютере и распечатал.
И вот то, чего мы все ждали. Как звучит крик летучих мышей на детекторе? Предлагаю вам запись одного фрагмента, который я записал около 10 вечера, когда увидел ЛМ, летящую рядом с фонарём в парке. Частота подстроена до 40-45 кГц.
Для записи звука я держал свой смартфон рядом с наушниками детектора, однако это казалось очень глупым, поэтому я решил поискать вариант получше. Оказалось, что у большинства смартфонов в разъёме для наушников есть микрофонный вход – достаточно лишь использовать штырёк на 3,5 мм с 4 контактами. Поэтому я разработал адаптер, который позволяет подключать детектор к микрофонному входу смартфона, а наушники – к выходу смартфона на наушники. Чтобы смартфон распознал, что в него воткнут микрофон, нужен резистор на 2,2 кОм, а для развязки сигнала – конденсатор на 3,3 мкФ.
Ещё мне пришлось поискать приложение, умеющее одновременно записывать и проигрывать звук, чтобы я мог слушать записываемые звуки в реальном времени. Меня устроило приложение RecForge II, хотя, наверное, есть и другие.
Если вы захотите сами собрать гетеродинный детектор ЛМ, и вам понадобится готовый ультразвуковой МЭМС-микрофон на плате, его можно найти здесь:
На этих платах нет операционного усилителя, поэтому вам нужно будет и его сделать. Остальные компоненты легко будет найти в вашем любимом магазине.
См. также: