Ввод звука в ардуино через разъем для микрофона

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

Если он не может сэмплировать на частоте 44 кГц, я все равно могу получить некоторые значимые данные с учетом наложения. В таком случае мне нужно полистать несколько учебников...

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

Так что я думаю, что я вполне уверен, как этот план работает на уровне общей картины, но я не уверен, с чего начать, чтобы понять, как соединить мои компоненты. У меня есть пара разных операционных усилителей, несколько биполярных транзисторов, несколько разных резисторов. Мои конденсаторы в ассортименте до сих пор на почте. У меня есть несколько ардуино, которых, надеюсь, будет достаточно для прототипирования. У меня также есть необходимые материалы для печати моих собственных печатных плат (ламинат с медным покрытием, травильная кислота, лазерный принтер, утюг) и материалы для пайки. Однако у меня нет ни осциллографа, ни функционального генератора, только цифровой мультиметр и блок питания постоянного тока, регулируемый по току и напряжению.

Таким образом, звуковой сигнал передается по двум проводам. Разность потенциалов между проводами (и, возможно, в какой-то степени сила тока??) представляет собой некоторую функцию смещения давления воздуха из-за звука в точке пространства, занимаемой микрофоном. Это связано с общими конструктивными аспектами почти всех динамиков и микрофонов. Это будет означать, что это напряжение будет как положительным, так и отрицательным (без смещения постоянного тока, насколько я понимаю) и, следовательно, потребует смещения, чтобы считывание аналогового входа не отсекало половину формы волны. Сколько вольт будет амплитуда сигнала, например, от наушников на звуковой карте? Как насчет айпода? Могу ли я воспроизвести mp3 синусоиды на моем компьютере, и проверить переменное напряжение на аудиоразъеме с помощью цифрового мультиметра? Как узнать, в каком диапазоне частот цифровой мультиметр будет выполнять точные измерения напряжения переменного тока?

Ответы (2)

Если Arduino похож на PIC µC, у вас нет надежды на выборку на частоте 44 кГц. Большинство простых µC имеют довольно низкую частоту дискретизации (например, сотни выборок в секунду).

Если вы хотите быстрее, вы должны использовать что-то вроде dsPIC, в котором есть настоящий АЦП аудиокласса, или использовать внешний аудио АЦП, который может отправлять данные I²S на микроконтроллер, который достаточно быстр, чтобы реагировать на это.

Недавно я проделал аналогичную работу при разработке усилителя с цифровым управлением.

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

Для выхода со звуковой карты ПК вы, вероятно, ожидаете размах напряжения от 1 до 2 вольт. Для моей системы я не слишком беспокоился о частоте и тому подобном — только чистая пиковая амплитуда — поэтому я сначала пропустил сигнал через небольшой диод Шоттки, чтобы обрезать отрицательные напряжения. Это значительно упростило мой дизайн.

В настоящее время я также разрабатываю небольшой частотный анализатор и рассматриваю возможность выбора полосовых фильтров на основе операционных усилителей, основанных на этой конструкции: http://www.wa4dsy.net/robot/bandpass-filter-calc , которая так far дал неплохие результаты. Я варьирую значения некоторых резисторов комбинацией цифровых потенциометров и аналоговых мультиплексоров.

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

А что за сигнал для тестирования? Есть много бесплатных генераторов сигналов для ПК, доступных для загрузки, если вы немного погуглите их. Они позволят вам выбрать форму волны, частоту, амплитуду, фазу и т. д. Даже позволяют суммировать формы волны, чтобы получить новые формы волны, если вам повезет.

Вы даже можете использовать звуковую карту вашего ПК в качестве рудиментарного осциллографа с подходящим программным обеспечением и небольшим самодельным зондом. В сети также есть программное обеспечение и проекты для этого.

О, и не забудьте изолировать разные каскады/уровни напряжения с помощью конденсаторов в звуковом сигнале. Как правило, если я меняю уровни напряжения блока питания, я всегда ввожу конденсатор для изоляции каскадов. Итак, у меня был один на входной сигнал, один на этап 1 -> этап 2 (питание от +/- 5 В до +/- 12 В), один на этап 1 -> аналоговый вход и снова один на выходе. Стоит не рисковать случайными смещениями постоянного тока, попадающими в неправильную часть схемы.

Согласно веб-сайту Atmel, ATmega168 будет иметь частоту дискретизации около 15 кГц со своим АЦП.
Хорошо - все еще далеко от 44 кГц;)

Если вы не хотите построить анализатор спектра для полного звукового спектра, я бы начал с фильтра нижних частот. Например, если ваши световые эффекты должны визуализировать басовые ритмы, подойдет полоса пропускания в несколько сотен Гц. И БПФ тоже будет быстрее вычислять. В зависимости от вашего мю Вычислительная мощность и тактовая частота C могут быть или не быть достаточно быстрыми для выполнения БПФ. Решением может быть DSP (с инструкцией по обращению битов ) .
Даже если вы выполняете БПФ по всему спектру, вам не обязательно делать это на частоте 44,1 кГц (одно БПФ на каждую выборку), так как ваш глаз слишком медленный, чтобы уследить за ним. Например, вы можете производить выборку с частотой 44,1 кГц, но вычислять одно БПФ каждые 50 мс.