Grey 发表于 2013-12-17 18:23:46

DTMF 像10086一样工作(5P)

首先介绍一下10086自助语音服务的工作原理:通过用户拨号时产生的音频信号,来识别用户按键内容,再通过内置的程序,来执行相应的用户请求。
DFrobot 最近推出了一块新产品:DTMF语音识别模块
https://bbs.dfrobot.com.cn/forum.php?mod=image&aid=2026&size=300x300&key=36730f083a31a5af&nocache=yes&type=fixnone
楼主有幸拿到一块测试版。:lol
简单介绍一下 DTMF(详情见度娘):
DTMF双音多频,一个DTMF信号由两个频率的音频信号叠加构成。这两个音频信号的频率来自两组预分配的频率组:行频组或列频组。每一对这样的音频信号唯一表示一个数字或符号(通常就是按键号码)。
废话不多,直奔主题
准备工作:
1 DTMF 模块 x1
2 GSM/GPRS/GPS 模块 x1
3 Romeo 板 x1(或者Arduino uno +motor shield)
4 一根音频线(双公头)
5 一辆小车
6 电池及导线若干
https://bbs.dfrobot.com.cn/forum.php?mod=image&aid=2029&size=300x300&key=8d5f7c0db0ead849&nocache=yes&type=fixnone

去吧 比卡丘!

把所有东西装起来,差不多就是这样的啦
(过程略)

就是这样子的啦!

漏了一个接线问题:
1、主要是接线其实就是 GSM模块
它的三个驱动引脚被我接到P15,16,17 (A1~A3)上了。谁叫数字口都被占用了呢。file:///C:\Users\jessie\AppData\Local\Temp\SGTpbq\4348\01C8FCDD.gif<无奈>
2、把音频线两端分别插入DTMF 和 GSM的speaker 口中

搞定收工! 总觉得漏了点什么~~!
好吧程序
DTMF library:
https://github.com/DFRobot/DTMF/archive/master.zip

/*
DTMF.cpp - TEST code for DTMF library
*/
#include "dtmf.h"
int myDtmf;
DTMF dtmf;

int E1 = 5;   //M1 Speed Control
int E2 = 6;   //M2 Speed Control
int M1 = 4;    //M1 Direction Control
int M2 = 7;    //M1 Direction Control

void stop(void)                  //Stop
{
digitalWrite(E1,LOW);   
digitalWrite(E2,LOW);      
}   
void advance(char a,char b)          //Move forward
{
analogWrite (E1,a);      //PWM Speed Control
digitalWrite(M1,HIGH);   
analogWrite (E2,b);   
digitalWrite(M2,HIGH);
}
void back_off (char a,char b)          //Move backward
{
analogWrite (E1,a);
digitalWrite(M1,LOW);   
analogWrite (E2,b);   
digitalWrite(M2,LOW);
}
void turn_L (char a,char b)             //Turn Left
{
analogWrite (E1,a);
digitalWrite(M1,LOW);   
analogWrite (E2,b);   
digitalWrite(M2,HIGH);
}
void turn_R (char a,char b)             //Turn Right
{
analogWrite (E1,a);
digitalWrite(M1,HIGH);   
analogWrite (E2,b);   
digitalWrite(M2,LOW);
}

byte gsmDriverPin = {
15,16,17};

void setup()
{
Serial.begin(9600);
for(int i=4;i<=7;i++) pinMode(i, OUTPUT);
pinMode(15,OUTPUT);
pinMode(16,OUTPUT);
pinMode(17,OUTPUT);
//Init the driver pins for GSM function
digitalWrite(17,HIGH);//Output GSM Timing
delay(1500);
digitalWrite(17,LOW);
digitalWrite(15,LOW);//Enable the GSM mode
digitalWrite(16,HIGH);//Disable the GPS mode
delay(2000);
delay(5000);
delay(5000);//call ready
Serial.println("ATS0=1"); //autopickup on first tone
}

void loop()
{
// Read DTMF codes one by one and print it on Serial

myDtmf = dtmf.getDTMF();

if(myDtmf != -1)
{
//    Serial.println(myDtmf);
    switch(myDtmf)
    {
    case 2://Move Forward
      advance (250,250);   //move forward in max speed
      break;
    case 8://Move Backward
      back_off (250,250);   //move back in max speed
      break;
    case 4://Turn Left
      turn_L (150,150);
      break;      
    case 6://Turn Right
      turn_R (150,150);
      break;
    case 5:
      stop();
      break;
    }
}
}


这个应该能看懂吧,起码楼主无压力。

上下左右停
28465

远程控制一直是家庭自动化项目的首要目的,而现代很多家庭用的都是基于物联网为控制枢纽的家庭自动化系统(穷逼用不起!)
而这个DTMF的使用就方便了许多,楼主表示再加个继电器,开关个灯什么的还是是妥妥的。


20060606 发表于 2020-8-25 05:37:06

好创意,赞一个
页: [1]
查看完整版本: DTMF 像10086一样工作(5P)