14286| 1
|
[项目] DTMF 像10086一样工作(5P) |
首先介绍一下10086自助语音服务的工作原理:通过用户拨号时产生的音频信号,来识别用户按键内容,再通过内置的程序,来执行相应的用户请求。 DFrobot 最近推出了一块新产品:DTMF语音识别模块 楼主有幸拿到一块测试版。:lol 简单介绍一下 DTMF(详情见度娘): DTMF双音多频,一个DTMF信号由两个频率的音频信号叠加构成。这两个音频信号的频率来自两组预分配的频率组:行频组或列频组。每一对这样的音频信号唯一表示一个数字或符号(通常就是按键号码)。 废话不多,直奔主题 准备工作: 1 DTMF 模块 x1 2 GSM/GPRS/GPS 模块 x1 3 Romeo 板 x1(或者Arduino uno +motor shield) 4 一根音频线(双公头) 5 一辆小车 6 电池及导线若干 去吧 比卡丘! 把所有东西装起来,差不多就是这样的啦 (过程略) 就是这样子的啦! 漏了一个接线问题: 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[3] = { 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; } } } 这个应该能看懂吧,起码楼主无压力。 上下左右停 2 8 4 6 5 远程控制一直是家庭自动化项目的首要目的,而现代很多家庭用的都是基于物联网为控制枢纽的家庭自动化系统(穷逼用不起!) 而这个DTMF的使用就方便了许多,楼主表示再加个继电器,开关个灯什么的还是是妥妥的。 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed