Как передать сигнал DTMF на Arduino
Я пытаюсь считывать входящий сигнал DTMF через входной вывод A0. Я хочу сделать это программно, а не с помощью модуля MT8870. Эта библиотека (https://github.com/Adrianotiger/phoneDTMF) должен делать именно это, но я не могу понять, как подключить мой входящий сигнал DTMF к контакту Arduino A0, чтобы получить сигнал. В принципе, мой ноутбук выдает сигнал DTMF, и я хочу подключить линию out, которая представляет собой два провода, положительный и заземляющий, к Arduino. Ни одна из конфигураций, которые я пробовал, не работает. Я попытался прикрепить позитив к A0 и землю к земле, но A0, похоже, ничего не обнаруживает. Я также не хочу использовать микрофон на выводе A0 для обнаружения DTMF. Простая схема типа Fritzing, показывающая, как подключить входящий сигнал DTMF к A0, была бы полезна. Спасибо.
@user3080392, 👍0
Обсуждение1 ответ
Лучший ответ:
Ваша проблема в том, что вы думаете, что есть "положительный" сигнал. В аудио нет "положительного" сигнала, есть только сигнал, который колеблется вокруг 0В.
Вы должны преобразовать указанный сигнал в "положительный" сигнал, добавив к нему смещение постоянного тока.
Самый простой способ-с одним конденсатором и двумя резисторами:
Эта схема удалит любое смещение постоянного тока, которое может добавить ваш ноутбук ("пара переменного тока"), а затем добавит к сигналу собственное смещение постоянного тока 2,5 В. Затем аудиосигнал будет чередоваться примерно на 2,5 В.
Возможно, вам придется увеличить громкость аудиосигнала с помощью операционного усилителя (примечание: не используйте усилитель "мощности", такой как LM386, он не подходит; используйте операционный усилитель), чтобы увеличить чувствительность входа. Вы можете сделать это с помощью простого инвертирующего усилителя, когда смещение постоянного тока вводится на неинвертирующий вход:
Здесь коэффициент усиления усилителя представляет собой соотношение между R3 и R4 - в данном случае соотношение 10:22 (или коэффициент усиления 2,2 x).
С программной точки зрения теперь вы удаляете 512 из каждого аналогового считываемого значения, чтобы получить диапазон +/-511 для ваших выборочных значений. Затем вы, вероятно (возможно, с помощью библиотеки, на которую вы ссылаетесь), берете блок выборок на определенной частоте и выполняете анализ БПФ, чтобы найти, какие доминирующие частотные компоненты присутствуют.
Я настроил первую схему и смог обнаружить сигналы DTFM. Спасибо! Единственная проблема, однако, заключается в том, что программа, кажется, обнаруживает неправильный тон. Используя генератор тонов здесь, https://onlinetonegenerator.com/dtmf.html какую бы кнопку я ни нажал, программа обнаруживает кнопку вниз на одну строку и вправо на один столбец. Например. Я нажимаю 1, и 5 обнаруживается. Или я нажимаю 5, и 9 обнаруживается. Я опубликую вопрос об этом, потому что это, кажется, проблема программного обеспечения., @user3080392
- Как подключить LCD i2c, используя только контакты A0 и A1 (приведены SDA, SCL, GND и VCC)
- Как найти пиковое значение аналогового сигнала?
- Генерация истинного аналогового сигнала с помощью Arduino
- Подключение двух датчиков к одному аналоговому выводу
- Использование аналоговых контактов для питания
- Как измерить много напряжений (Uno) — Аналоговые удлинители — хороший вариант?
- Отправка и получение аналоговых данных от одного arduino к другому arduino через web/ethernet
- Правильная проводка ЦАП HiLetgo к Arduino
Не эксперт по DTMF, но позаботились ли вы о том, чтобы диапазон сигнала был в диапазоне от 0 до 5 В Arduino? Линия выхода симметрична вокруг земли, и я думаю, что диапазон от пика до пика также может быть неправильным. Связанная библиотека также имеет схему регулировки диапазона, хотя и рассчитана на уровни стационарного напряжения, @chrisl
Я подумывал о том, чтобы попытаться подключить усилитель LM386 для усиления входящего сигнала, но я до сих пор не знаю, как настроить два провода на Arduino., @user3080392