Андрей Смирнов
Время чтения: ~7 мин.
Просмотров: 9

Генерация тонов DTMF только с помощью Arduino

2dad61.jpg

  • Цена: $1.60

Всем привет. Хотите управлять чем-нибудь по сотовому телефону, да еще и без всяких заумных микроконтроллеров? Если да, добро пожаловать под кат. В последнее время на Муське было несколько обзоров GSM-модулей, типа SIM800, используя которые, можно управлять чем угодно по сотовой сети. Но вот беда, все они требуют подключения к микроконтроллеру, написания прошивки и прочих сложных для непосвященного человека вещей. Другая крайность это: «а я к вибромоторчику телефона реле припаял, у меня все работает» :)) Так тоже можно, но не стоит удивляться, если вашу теплицу будет пытаться поливать насос водой из замерзшего колодца, после прихода СМС-ки «С Новым Годом!» от неизвестного отправителя :))) В общем, я решил заполнить пробел между этими двумя решениями, и предложить своё. Сегодня речь пойдет о декодере DTMF сигнала, или если по-простому, тональный сигнал. Любопытные могут почитать Википедию Технология достаточно устаревшая, но до сих пор поддерживается всеми телефонами. Собственно, именно тоновый набор вы используете, когда звоните в какое-нибудь учереждение, а вам автоответчик говорит: «если вы знаете номер абонента, нажмите „1“, если вы хотите узнать о наших новых предложениях, нажмите „2“ и так далее. Нажимая кнопку с нужной цифрой на телефоне, вы отправляете по голосовому каналу сигнал определенной тональности. Каждому символу на клавиатуре телефона соответствует своя „мелодия“. Именно этот звук и расшифровывает декодер DTMF, превращая его в сигналы на своих выходах.c9b344.jpg Плата собрана на микросхеме MT8870, питается от 5 Вольт и имеет следующие выводы: Q1-Q4-дискретные выходы, StQ/StQ инверсное-выходы, которые срабатывают при каждом правильном распознавании сигнала. IN-вход для аудиосигнала, если вы не хотите использовать распаянный на плате 3.5 мм разъем. GND/VCC питание, 5 Вольт. Выходы Q1-Q4 срабатывают в соответствии с таблицей:4f0560.jpg Например, сейчас у меня на плате горят два средних светодиода, сработали выходы Q2 и Q3 смотрим таблицу-это соответствует нажатой клавише „6“. Если я нажму клавишу „1“, то сработает выход Q1, если „2“, то Q2. Если „3“, то „зажгутся“ выходы Q1 и Q2 одновременно. И так далее. В общем, это 4-битный код. Если его дешифровать специальной микросхемой, то можно получить 16 выходов. Кстати, на Али продается плата уже с дешифратором, но стоит дороже. Вариант для продвинутых-подключить все это к микроконтроллеру, я так делал, можно даже пароль задать-позвонил набрал пароль, получил доступ к управлению… Но это уже не в рамках моей статьи, т.к. в начале статьи я обещал, что все будет просто. И так, берем транзистор КТ815, резистор на 1.1 кОм, или около того, реле на 12 В, стабилизатор LM7805. Остальные детали (защитный диод 1N4007 на катушке реле, желтенькие керамические конденсаторы 0.1 мкф и электролитический на 1000 мкф) желательны, но работает и без них. В качестве нагрузки к реле подключена „пищалка“. Схему рисовать не буду, монтаж навесной, на фото все видно: С другой стороны: Общее питание конструкции 12 В, т.к. этого требует реле, но для платы оно понижается стабилизатором до 5 В. 3.5 мм разъем на плате соединяем шнуром с выходом наушников телефона, настраиваем автоподнятие трубки и все готово. Теперь, если позвонить на телефон, подключенный к плате, дождавшись снятия трубки, нажать „1“, реле сработает, зуммер начнет пищать. Если нажать „2“, все выключится. Кстати, независимо от того, чем вы планируете управлять, зуммер я бы рекомендовал оставить. Это удобно-ведь его слышно по телефону, и таким образом можно получать некую обратную связь: позвонил, слышишь пищание, значит, нагрузка включена 🙂 Снял небольшой видеоролик, как все это работаетМатериал из wiki.sipnet.ru Перейти к:навигация, поиск

Приглашаем принять участие в тестировании виртуальной АТС от SIPNET!

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

  Срочная помощь
  1. Если у Вас есть настроенная программа SIPPOINT то можно позвонить с ее помощью на номер 2009991.
  2. SIP URI 2009991@sipnet.ru доступен из любых сетей на основе протокола SIP.
  3. Если Вы находитесь на территории России, то можете бесплатно позвонить на номер+7 (800) 333-14-01.

Вы можете получить много полезной информации читая статьи на этом сайте.

Программа для звонков со смартфона, — Pronto!

<center>

AppleAndroid

</center>

C начала 2018 г. разрабатывается новая версия мобильной Pronto, надеемся скоро ее представить.

Основные категории нашего сайта.

Уважаемые посетители!

Если вы уже зарегистрировались в SIPNET, получили свой SIP ID и у вас возникли проблемы, то прежде всего перепроверьте настройки вашей программы IP-телефонии или вашего SIP-устройства, затем ознакомьтесь с примерами настроек и различными рекомендациями, опубликованными на этом сайте.

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

Некоторые полезные ресурсы

  • Информацию по работе с вики можно найти в руководстве пользователя/для читателей.
  • FAQ по использованию Wiki;

В этом уроке объясняем как генерировать тональный набор DTMF только с помощью платы Arduino Uno. Двухтональный многочастотный аналоговый сигнал, тональный набор, тональный сигнал (англ. Dual-Tone Multi-Frequency, DTMF) — является распространенной системой сигнализации, используемой в телефонных сетях и других устройствах связи. Он использует смесь двух синусоидальных волн для генерации тонов, представляющих десять цифр, букв от A до D и символов # и *.

При анализе других генераторов DTMF на базе Arduino стало понятно, что большинство конструкций основано на Holtek HT9200 DTMF. После нескольких экспериментов получилось выяснить, что сам Arduino способен генерировать DTMF без использования внешней микросхемы или генератора. Данный проект основан на резисторной матрице R-2R. Матрица R-2R имеет два вида включения: прямое — матрица токов и инверсное — матрица напряжений. Включение матрицы резисторов R-2R по схеме матрицы напряжений показано на рисунке ниже.

R2r-rezistornaya-matrica.png

В проекте используется плата Arduino Uno и библиотека поддерживает только эту плату. Но, в целом, всё можно легко распространить на другие платы Arduino на базе AVR MCU.

Шаг 1. Комплектующие

Для реализации на Arduino DTFM нам понадобятся следующие комплектующие:

  • Arduino UNO × 1
  • Резистор 100 Ом × 8
  • Резистор 220 Ом × 8
  • Конденсатор 1 мкФ × 1

Шаг 2. Схема соединения

dtfm-shema-700x481.jpg

Матрица R-2R подключена к PORTD микроконтроллера, который является цифровым выходом от 0 до 7 на плате Arduino Uno. В этой конструкции используются резисторы 100 и 220 Ом для построения схемы R-2R.

dtfm-shema-princip.jpg

В микроконтроллере сигналы генерируются с использованием предварительно рассчитанной таблицы. Например, чтобы сгенерировать тон для цифры 1, он синтезирует 700 Гц (≈ 697 Гц) и 1200 Гц (≈ 1209 Гц) по отдельности и объединяет их на более поздних этапах для получения окончательного результата. Из-за более низкого разрешения нашего ЦАП выходная форма волны не имеет чисто синусоидальной формы, но она работает абсолютно хорошо.

dac-700x420.jpg

Чтобы проверить полученный тон, выход этого DTMF-генератора передавался в DTMF-декодер MT8870, который декодировал все тоны без каких-либо проблем. Кроме того, библиотека проверялась с помощью голосовой телефонной сети, путем набора несколько номеров, и также всё работало нормально.

Код и библиотека

Библиотека Arduino для этого генератора DTMF довольно проста в использовании. Файлы библиотеки и исходные коды вы можете скачать ниже или взять на GitHub здесь.

Скачать DTFM-generator .zip

Загруженный файл библиотеки можно установить непосредственно в Arduino IDE, перейдя в меню:

Sketch -> Include Library -> Add.ZIP library

После установки, чтобы открыть пример эскиза нажмите:

Файл -> Примеры -> DTMFGen

Как только библиотека интегрирована в IDE, Arduino может генерировать тоны DTMF несколькими строками кода.

#include "dtmfgen.h"      DTMFGenerator dtmf;      void setup()  {  }      void loop()  {   // Generate 100ms long DTMF tone for digit 5.    dtmf.generate('5', 100);  }  

Можно спокойно использовать этот метод для генерации тонов DTMF, так как он прост и расширяем. Другая проблема, с которой можно столкнуться при выборе чипов генератора DTMF, заключается в том, что часто эти чипы и модули трудно найти на рынке. При таком подходе любой может создать генератор тонов DTMF с несколькими дискретными компонентами. Основным недостатком этого подхода является то, что он использует 8 контактов ввода/вывода платы Arduino.

Используемые источники:

  • https://mysku.ru/blog/aliexpress/44997.html
  • https://wiki.sipnet.ru/index.php
  • https://arduinoplus.ru/generacia-dtfm-arduino/

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации