DTMF 像10086一样工作(5P)

2013-12-172.2万
精华项目
AI 快速预览详细 收起
本文介绍了如何使用 DTMF 语音识别模块和 GSM/GPRS/GPS 模块实现远程控制小车。首先介绍了 DTMF 的工作原理,然后列出了所需的硬件清单,包括 DTMF 模块、GSM 模块、Romeo 板等。接着详细描述了硬件连接步骤,特别是 GSM 模块的驱动引脚连接到 P15, P16, P17 上。最后提供了完整的代码示例,展示了如何通过 DTMF 信号控制小车前进、后退、左转、右转和停止。这个项目适合 DIY 爱好者和初学者,可以低成本实现家庭自动化。
首先介绍一下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的使用就方便了许多,楼主表示再加个继电器,开关个灯什么的还是是妥妥的。



创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(1)
20060606
20060606
好创意,赞一个
- 没有更多了 -