Главная · Windows 8.1 · Машинка управляемая сотовым телефоном. Разработка рабочего прототипа приложения, которое будет облегчать использование функции телефонии DTMF Callback на устройствах с Android Такие решения как kivy или Xamarin имеют преимущества, если приложение разрабат

Машинка управляемая сотовым телефоном. Разработка рабочего прототипа приложения, которое будет облегчать использование функции телефонии DTMF Callback на устройствах с Android Такие решения как kivy или Xamarin имеют преимущества, если приложение разрабат

Всем привет.
Хотите управлять чем-нибудь по сотовому телефону, да еще и без всяких заумных микроконтроллеров? Если да, добро пожаловать под кат.

В последнее время на Муське было несколько обзоров GSM-модулей, типа SIM800, используя которые, можно управлять чем угодно по сотовой сети. Но вот беда, все они требуют подключения к микроконтроллеру, написания прошивки и прочих сложных для непосвященного человека вещей. Другая крайность это: «а я к вибромоторчику телефона реле припаял, у меня все работает»:)) Так тоже можно, но не стоит удивляться, если вашу теплицу будет пытаться поливать насос водой из замерзшего колодца, после прихода СМС-ки «С Новым Годом!» от неизвестного отправителя:)))
В общем, я решил заполнить пробел между этими двумя решениями, и предложить своё.

Сегодня речь пойдет о декодере DTMF сигнала, или если по-простому, тональный сигнал.
Любопытные могут почитать
Технология достаточно устаревшая, но до сих пор поддерживается всеми телефонами.
Собственно, именно тоновый набор вы используете, когда звоните в какое-нибудь учереждение, а вам автоответчик говорит: «если вы знаете номер абонента, нажмите „1“, если вы хотите узнать о наших новых предложениях, нажмите „2“ и так далее. Нажимая кнопку с нужной цифрой на телефоне, вы отправляете по голосовому каналу сигнал определенной тональности. Каждому символу на клавиатуре телефона соответствует своя „мелодия“. Именно этот звук и расшифровывает декодер DTMF, превращая его в сигналы на своих выходах.


Плата собрана на микросхеме , питается от 5 Вольт и имеет следующие выводы: Q1-Q4-дискретные выходы, StQ/StQ инверсное-выходы, которые срабатывают при каждом правильном распознавании сигнала. IN-вход для аудиосигнала, если вы не хотите использовать распаянный на плате 3.5 мм разъем. GND/VCC питание, 5 Вольт.
Выходы Q1-Q4 срабатывают в соответствии с таблицей:

Например, сейчас у меня на плате горят два средних светодиода, сработали выходы 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“, все выключится. Кстати, независимо от того, чем вы планируете управлять, зуммер я бы рекомендовал оставить. Это удобно-ведь его слышно по телефону, и таким образом можно получать некую обратную связь: позвонил, слышишь пищание, значит, нагрузка включена:)

Снял небольшой видеоролик, как все это работает

Планирую купить +128 Добавить в избранное Обзор понравился +72 +169

Модели с радиоуправлением используют ВЧ схемы, которые имеют ограниченный рабочий диапазон, ограниченный частотный диапазон и проблемы с согласованием с контроллерами. Использование мобильного телефона для управления моделью позволяет избежать этих недостатков. При использовании мобильного телефона, моделью можно управлять по всей зоне покрытия оператора и без проблем работать с внешними устройствами.

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

Обзор

В данной машинке для управления используется два мобильных телефона – один у вас в руках в качестве пульта ДУ, другой установлен на модели в качестве приёмника. С вашего телефона на телефон модели поступает звонок, и при нажатии вами во время звонка клавиш, с мобильного телефона поступает многочастотный сигнал. Этот сигнал называется Dual-Tone Multi-Frequency (двухтональный многочастотный сигнал) (DTMF).
С помощью DTMF декодера MT8870, DTMF декодируется в двоичный код, который обрабатывается микроконтроллером ATmega16, а затем отдаёт команду драйверу двигателя.

Как видно, эта модель довольно простая и не требует конструирования сложных передатчиков.
DTMF сигнал используется для набора телефонного номера или голосового автоответа.
Сигнал состоит из двух синусоидальных сигналов фиксированной частоты, и легко декодируется в двоичный код и обратно. Для кодирования символа в DTMF сигнал необходимо сложить два синусоидальных сигнала. Например, если надо передать цифру 5, то частота одного сигнала будет 1336 Гц, а другого 770 Гц, и этот сигнал мы получим на втором телефоне.

Описание схемы

На блок-схеме показан принцип работы устройства. Основными его компонентами являются DTMF декодер, микроконтроллер и драйвер двигателей.

В качестве DTMF декодера используется микросхема MT8870. В ней используются цифровые методы распознавания сигнала и выдается сигнал на 4 вывода. Также она не требует предварительной фильтрации входного сигнала. При подаче входного сигнала на PIN2 (В-), декодированный сигнал выходит на выводах от Q1(pin11) до (pin14).

ATmega16 - это 8 битный КМОП микроконтроллер на основе расширенной AVR RISC архитектуры с низким энергопотреблением. Он имеет 16 КБ программируемой флэш-памяти, 512 Б EEPROM, 1 КБ SRAM, 32 линий ввода/вывода и 32 регистра. С выводов микроконтроллера PD0 - PD3 и PD7 подаётся сигнал на выходы IN1 - IN4 и EN1-EN2 драйвера двигателей L293d. Переключатель S1 используется для ручного сброса.

Программа

Микроконтроллер программируется с помощью WIN AVR. Кто не знает как это делать, посмотрите , там все подробно описано. К статье прилагается исходник и hex файл. Если установлена WinAVR, то проблем с открытием возникнуть не должно.

Работа

Для того, чтобы управлять моделью, вы должны позвонить в мобильный телефон модели с любого телефона. Когда машинка автоматически ответила, нажимайте следующие клавиши:
2 – движение вперед.
4 – поворот влево.
8 – движение в обратном направлении.
6 – поворот направо.
5 – остановка.

Список элементов:
DTMF декодер MT8870 – 1.
Микроконтроллер Atmega16 – 1.
Драйвер двигателя L293d – 1.
ОУ Cd7004 – 1.
Диод 1N4007 – 1.
Резистор 100 кОм – 2.
Резистор 10 кОм – 5.
Резистор 330 кОм – 1.
Конденсатор 0.47мкФ – 1.
Конденсатор 0.1мкФ – 1.
Конденсатор 22пФ – 4.
Кварц 3.57 МГц – 1.
Кварц 12 МГц – 1.
Кнопка без фиксации – 1.
Моторы(6В, 50 rpm) – 2 или 4 для полного привода.
Аккумулятор 6В – 1.
Колеса – 4.
Мобильный телефон – 2.
Громкая связь(hands - free) – 1.

Вы должны укрепить телефон на шасси. Телефон подключен к роботу через гарнитуру hands – free.

Подключение hands - free
Я использовал hands – free с разъёмом mini jack.

Скачать исходный код программы и прошивку вы можете ниже

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
IC1 DTMF декодер МТ8870 1 В блокнот
IC2 МК AVR 8-бит

ATmega16

1 В блокнот
IC3 Драйвер электродвигателей L293D 1 В блокнот
IC4 ИС буфера, драйвера

SN74LS04

1 В блокнот
D1 Выпрямительный диод

1N4007

1 В блокнот
С1 Конденсатор 0.47 мкФ 1 В блокнот
С2, С3, С5, С6 Конденсатор 22 пФ 4 В блокнот
С4 Конденсатор 0.1 мкФ 1 В блокнот
R1, R2 Резистор

100 кОм

2 В блокнот
R3 Резистор

330 кОм

1 В блокнот
R4-R8 Резистор

10 кОм

5 В блокнот
XTAL1 Кварцевый резонатор 3.57 МГц 1 В блокнот
XTAL2 Кварцевый резонатор 12 МГц 1

DTMF (Dual-Tone MultiFrequency) - это тональный сигнал, генерируемый при нажатии на кнопки телефона.
DTMF широко применяется в работе автоответчиков (IVR), для различных интерактивных систем. В приложении к VoIP, при работе с различными кодеками DTMF требует довольно пристального внимания, поэтому его работу нужно четко понимать.

По умолчанию Gateway отсылает DTMF в потоке RTP (in-band ), это прекрасно работает при использовании кодека high-bit-rate G.711, т.е. если голосовой поток не подвергается сжатию.
Основная проблема с DTMF возникает при использовании алгоритмов сжатия, например кодека G.729. Дело в том, что при сжатии качество голового потока заметно ухудшается, и хотя это почти не сказывается на способности абонентов понимать друг друга, DTMF тон уже не достаточно четкий и воспринимается неправильно.

Данная проблема решается с помощью DTMF Relay , при котором сигналы DTMF транспортируются отдельно от потока RTP или out-of-band .

Рассмотрим несколько примеров.


На рисунке изображена схема подключения телефонии через шлюз H.323.

На участке PSTN DTMF отдается in-band, т.е. там даже нет понятия DTMF Relay, поскольку это аналоговая линия.

DTMF relay становится нужным только на участке VoIP, где возможно применения методов компрессии.
Также можно сказать, что:
- in-band DTMF relay будет идти внутри потока RTP, т.е. на рисунке по красной линии RTP.
- out-of-band DTMF relay будет идти вместе с сигнализацией, т.е. по зеленым линиям на рисунке.

На участках телефон-CUCM и CUCM-H.323Gateway используется разная сигнализация, и значит различные методы DTMF relay. Со стороны телефона приходит SCCP messages, содержащие DTMF в своей кодировке, со стороны H.323 gateway сигнализация вместе с DTMF идет H.245 messages.
CUCM в нашем случае выступает как DTMF Forwarder между различными типами сигнализаций.

На участке телефон-CUCM у нас будет возможна только out-of-band , поскольку SCCP-шный телефон не поддерживает in-band .
На участке CUCM-H.323Gateway возможны методы как in-band , так и out-of-band . При этом в случае SCCP-шного телефона, для включения in-band потребуется использование MTP .

Также нужно понимать, что настройки DTMF для H.323 Trunk - это есть настройки для работы этого транка с Dial-peer на физическом H.323 Gateway.

В зависимости от протокола сигнализации (H.323, SIP, MGCP, SCCP), существуют различные методы для осуществления DTMF Relay. В любом случае, Call Manager CUCM изначально пытается некоциировать общий для всех метод. Если ощий метод найден не был, предпринимается попытка использовать MTP.

H.323 DTMF Support

Cisco Gateways поддерживает следующие методы DTMF Relay:

  • Cisco proprietary: - in-band DTMF relay. DTMF отсылается в том же потоке RTP как и голос, но тоны DTMF кодируются несколько иначе, что позволяет их успешно отличать и принимать на той стороне. Семплы DTMF идентифицируются как RTP payload type 121 . Метод работает только если на обоих сторонах оборудование Cisco, а также тот же метод
  • H.245 Alphanumeric: -Out-of-band DTMF relay. Отделяет DTMF от потока RTP и шлет их через H.245 User Input Indication messages . При этом методе не отсылается tone length : всегда считается что длина тона 500msec.
    В этом примере мы нажали на "5".

    Дебаг: debug h245 asn1

  • H.245 Signal: -Out-of-band DTMF relay. Этот метод способен отсылать длину тона (tone length ).

    Дебаг: debug h245 asn1

  • NTE: - in-band DTMF relay. Работает подобно Cisco proprietary, DTMF отсылается в том же потоке RTP как и голос, с использованием RTP payload type . Другая payload не позволяет сэмплы DTMF подвергать сжатию. В отличие от Cisco proprietary , NTE использует стандарт RFC 2833.

    Дебаг: debug h245 asn1

На маршрутизаторе Cisco доступны следующие команды:

Router(config-dial-peer)#dtmf-relay ? cisco-rtp Cisco Proprietary RTP h245-alphanumeric DTMF Relay via H245 Alphanumeric IE h245-signal DTMF Relay via H245 Signal IE rtp-nte RTP Named Telephone Event RFC 2833 router(config-dial-peer)#

Лучшая практика:
На диалпире лучше всего давать команды следующим образом:

Dial-peer voice 3000 voip description Long calls destination-pattern ... session target ipv4:192.168.0.11 dtmf-relay h245-signal h245-alphanumeric cisco-rtp rtp-nte codec g711ulaw no vad

В этом случае обе стороны могут негоциировать подходящий метод dtmf-relay между собой.

Для определения выбранного DTMF relay method:
show call active voice

Router#show call active voice ........... PeerAddress=5001 ........... tx_DtmfRelay=rtp-nte

Таким образом, CUCM автоматически проверяет какой метод DTMF подойдет обоим сторонам.
Касательно H.323 Gateway в CUCM, там настроек DTMF нет. CUCM принимает настройку другой стороны.

MGCP DTMF Support

Для MGCP доступны следующие методы DTMF Relay:

  • Cisco proprietary: DTMF отсылается в том же потоке RTP как и голос, но тоны DTMF кодируются несколько иначе, что позволяет их успешно отличать и принимать на той стороне. Семплы DTMF идентифицируются как RTP payload type 121 . Метод работает только если на обоих сторонах оборудование Cisco и выбран аналогичный метод (ничего не негоциируется).
  • NSE: NSE - это по сути Cisco Proprietary NTE. Метод работает только если на обоих сторонах оборудование Cisco и выбран аналогичный метод (ничего не негоциируется).
  • NTE: в свою очередь может работать в двух режимах:
    - Gateway-controlled mode (NTE GW): Gateways договариваются друг с другом о DTMF самостоятельно, обмениваясь capability information в SDP messages. Этот процесс прозрачен для Call Agent. При этом у обоих шлюзов запущен MGCP и оба они подключены к одинаковому CUCM.
    - Call agent–controlled mode (NTE CA): В негоциации используется Call Agent, т.е. выступает от имени MGCP-шлюза (сообщения SDP отсылаются на Агента). Данная mode может быть использована в случае когда второй шлюз не является MGCP-Gateway. После негоциации Call Agent инструктирует шлюз, о принятых с другой стороной RTP-NTE values.
  • Out-of-band: Тоны отсылаются на CUCM с использованием сообщений MGCP, т.е. вне потока RTP (Out-of-band). CUCM в свою очередь принимает DTMF и передает другой стороне.

MGCP использует DTMF relay только для low-rate codecs (G729, iLBC, GSM, etc). Для bit-rate codecs G711 DTMF будет отослано in-band .

В случае с MGCP мы можем выбрать будут ли настройки DTMF диктоваться Call Agent-ом (CUCM) или же будут использованы те что выставлены на Gateway.
Зайдем на CUCM: Device > Gateway , выбираем соответствующий MGCP Gateway.
Нас интересует раздел Type of DTMF Relay .

При выборе Current GW Config , будет использована настройка которая стоит на шлюзе.
На IOS Gateway мы можем выставить DTMF следующей командой:

Router(config)#mgcp dtmf-relay voip codec all mode ? cisco Set mgcp dtmf-relay mode to be cisco disabled Set mgcp dtmf-relay mode to be disabled nse Set mgcp dtmf-relay mode to be nse nte-ca Set mgcp dtmf-relay mode to be nte-ca nte-gw Set mgcp dtmf-relay mode to be nte-gw out-of-band Set mgcp dtmf-relay mode to be out-of-band

Если мы выставим на CUCM другой выбор, например cisco , соответствующая вышеприведенная команды будет введена автоматом (механизмами MGCP).

С MGCP был замечен баг:

CSCta69407 Bug Details (When using any type of inband DTMF signaling (RTP-NTE, NSE, or Cisco Proprietary) DSP"s aren"t turning off OOB dtmf signaling using mgcp packets. There fore duplicate digits will be seen on the terminating GW as one coming from rtp and other coming from CUCM)

Workaround: Use mgcp dtmf-relay type out-of-band.

SIP DTMF Support

По умолчанию SIP отсылает DTMF in-band , но мы можем использовать следующие опции:

  • RTP-NTE (NTE или RFC 2833 ) - in-band DTMF relay. Который для переноса информации DTMF использует вместо голосовых пакеты RTP Named Telephony Event (NTE). При этом SDP используется для негоциации между узлами значения payload type=NTE. Хотя формально это in-band , но реально тон в звуковом потоке слышен не будет, поскольку пакеты NTE не голосовые
    RTP-NTE не умеет работать с телефонами SCCP, поскольку телефоны SCCP используют только out-of-band DTMF relay. По этой причине совместно с RTP-NTE необходимо использовать MTP.
  • SIP INFO - out-of-band (OOB) DTMF relay. Информация DTMF отсылается в SIP-сообщениях INFO. Т.е. если шлюз получает сообщение INFO, он отдает соответствующий тон.
  • SIP NOTIFY - out-of-band (OOB) DTMF relay. или его еще называют NOTIFY-based out-of-band DTMF relay . Данный тип DTMF relay использует NOTIFY для передачи тонов. Данный метод совместим с телефонами SCCP, также его можно использовать при подключенных аналоговых телефонах к портам FXS на шлюзе.
  • KPML - out-of-band (OOB) DTMF relay. При использовании Key Press Markup Language телефон SIP отсылает номер по цифре digit-by-digit. Этот метод похож на SIP NOTIFY , с тем лишь отличием, что отдает каждую цифру отдельно.
router(config-dial-peer)#session protocol sipv2 router(config-dial-peer)#dtmf-relay ? cisco-rtp Cisco Proprietary RTP h245-alphanumeric DTMF Relay via H245 Alphanumeric IE h245-signal DTMF Relay via H245 Signal IE rtp-nte RTP Named Telephone Event RFC 2833 sip-kpml DTMF Relay via KPML over SIP SUBCRIBE/NOTIFY sip-notify DTMF Relay via SIP NOTIFY messages router(config-dial-peer)#

Здесь мы видим несколько доступных методов, с для работы с CUCM годятся только
- RTP-NTE (NTE или RFC 2833 );
- SIP-NOTIFY ;
- SIP-KPML .