2013-12-17 18:23:46 [显示全部楼层]
12806浏览
查看: 12806|回复: 1

[项目] DTMF 像10086一样工作(5P)

[复制链接]
首先介绍一下10086自助语音服务的工作原理:通过用户拨号时产生的音频信号,来识别用户按键内容,再通过内置的程序,来执行相应的用户请求。
DFrobot 最近推出了一块新产品:DTMF语音识别模块

楼主有幸拿到一块测试版。:lol
简单介绍一下 DTMF(详情见度娘):
DTMF双音多频,一个DTMF信号由两个频率的音频信号叠加构成。这两个音频信号的频率来自两组预分配的频率组:行频组或列频组。每一对这样的音频信号唯一表示一个数字或符号(通常就是按键号码)。DTMF 像10086一样工作(5P)图1
废话不多,直奔主题
准备工作:
1 DTMF 模块 x1
2 GSM/GPRS/GPS 模块 x1
3 Romeo 板 x1(或者Arduino uno +motor shield)
4 一根音频线(双公头)
5 一辆小车
6 电池及导线若干

DTMF 像10086一样工作(5P)图2
去吧 比卡丘!

把所有东西装起来,差不多就是这样的啦
(过程略)
DTMF 像10086一样工作(5P)图3
就是这样子的啦!

漏了一个接线问题:
1、主要是接线其实就是 GSM模块
它的三个驱动引脚被我接到P15,16,17 (A1~A3)上了。谁叫数字口都被占用了呢。file:///C:\Users\jessie\AppData\Local\Temp\SGTpbq\4348\01C8FCDD.gif<无奈>
2、把音频线两端分别插入DTMF 和 GSM的speaker 口中
DTMF 像10086一样工作(5P)图4
搞定收工! 总觉得漏了点什么~~!
好吧  程序
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;
    }
  }
}


这个应该能看懂吧,起码楼主无压力。
DTMF 像10086一样工作(5P)图5
上下左右停
2  8  4  6  5

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


20060606  高级技匠

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

好创意,赞一个
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail