DTMF認識モジュールRDM-01を試す

スポンサーリンク

はじめに

DTMF(電話のプッシュトーン、ピポパ音)を認識して電気信号に変換するモジュールRDM-01Webサイトで販売されました。
DTMFから信号変換という手法自体は昔から行われているようですが、スマートスピーカと連携させることで、サーバサイドの構築労力を軽減するというコンセプトが面白いと思ったので早速購入してみました。
とはいえ、今回はスマートスピーカとの連携は試せておらず、DTMF認識と他の機器との通信部分だけ試した内容になります。

動作環境

RDM-01は5V動作、5V出力なので、5V入力が可能なMakerUNOを使ってRDM-01からの信号を受信することにしました。

  • RDM-01
  • MakerUNO(ArduinoUNO互換)
  • Windows PC(音声出力、シリアルモニタ用)

RDM-01はスマートスピーカから出したDTMFを認識させる使い方を想定しているため、簡単に試行できるようAlexaスキルが提供されていますが、現時点でAmazon Echoを所有していないため、パソコンから音を出してDTMFの認識テストをしました。

回路図

下図のようにRDM-01とMakerUNOを接続しました。

Circuit

RDM-01はDTMFを認識するとStD端子にHIGHを出力するとともに、Q1~Q4の4ビットで16通りの信号を表します。

上記回路図用にRDM-01のfritzingデータを作りGitHubに置きましたので、以下のリンクからお使いいただけます。(何分初めてのfritzingデータ作成のため、つたないものではありますが)
RDM-01 fritzingデータ

RDM-01の実物は以下です。

RDM-01

通常のまっすぐなピンヘッダが付属品として付いていましたが、高さの無い場所への実装を考慮してL字型のピンヘッダをはんだ付けして、横向きに端子を出すようにしました。

MakerUNOスケッチ

StD端子と2番端子(INT0)をつないで、割り込み処理としてDTMF信号を受信するようにしました。
受信に成功したらQ1~Q4の4ビットから対応する文字に変換してシリアル出力するという内容です。

//*******************************************************
//  Sample sketch for DTMF detection with using RDM-01.
//  Created by Takenoshin on Feb. 9 2019.
//*******************************************************

char code[16] = {'D', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '*', '#', 'A', 'B', 'C'};
boolean intflg = false;

void setup() {
  Serial.begin(115200);

  pinMode(2, INPUT);
  pinMode(4, INPUT);
  pinMode(5, INPUT);
  pinMode(6, INPUT);
  pinMode(7, INPUT);

  pinMode(3, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);

  digitalWrite(3, LOW);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
  digitalWrite(13, LOW);

  attachInterrupt(0, detectDTMF, RISING);
}

void detectDTMF() {
  intflg = true;
}

void loop() {
  if(intflg){
    int Q1, Q2, Q3, Q4, DTMF;
    Q1 = digitalRead(4);
    Q2 = digitalRead(5);
    Q3 = digitalRead(6);
    Q4 = digitalRead(7);
    DTMF = (Q4 << 3) | (Q3 << 2) | (Q2 << 1) | Q1;
    Serial.print("Detected DTMF: ");
    Serial.println(code[DTMF]);
    intflg = false;
  }
}

関係のない端子にLOWを出力しているのは、MakerUNOの各端子についているデバッグ用LEDをOFFにするためなので、ArduinoUNO使用の場合は不要です。

動作確認

ウィキペディアのDTMFのページにDTMFのサンプル音源があったので、パソコンで鳴らしてRDM-01で認識するか試しました。
下の動画のように期待の動作をさせることに成功しました。
DTMF信号の違いにより、Q1~Q4信号を受信しているMakerUNOの4~6番端子のデバッグ用LEDが点灯している(HIGH入力で点灯)のとパソコンのシリアルモニタにDTMFに対応する文字が表示されているのがわかると思います。なお、動かしてみて気づいたのですが、RDM-01にもLEDがついていてQ1~Q4、StDの状態がわかるようになっていました。

DTMFデコーダデモ

最初、安い外付けスピーカから音を出していたのですが、出ていない音があったようで、一部の信号を認識しない状態でした。私には違いがよくわかりませんでしたが・・・(^^;
パソコンのスピーカから出すと問題なく認識するようになりました。
今後、スマートスピーカとの連携を試したいと思います。

参考文献

タイトルとURLをコピーしました