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的使用就方便了许多,楼主表示再加个继电器,开关个灯什么的还是是妥妥的。
好创意,赞一个
页:
[1]