找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

【Arduino】168种传感器模块系列实验(146)---MT8870语音解码

查看数: 7564 | 评论数: 25 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-3-3 12:19

正文摘要:

本帖最后由 eagler8 于 2020-3-3 17:08 编辑 37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要 ...

回复

ID:513258 发表于 2020-3-9 15:58
  1. 【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
  2.   实验一百四十五:MT8870 DTMF语音解码板模块 电话拨号控制音频解码处理电路

  3.   第四项实验:不用库,使用MT8870芯片模块进行DTMF解码
  4.   1、需要材料:喇叭1个,68Ω电阻两个,咪头传感器和DTMF解码模块,两块UNO板
  5.   2、合成信号硬件连接:在D11,D12引脚各接一个68Ω电阻一端,68Ω电阻另一端接喇叭,然后喇叭另一端接地。
  6.   3、咪头模块接线:
  7.   MAX9814  Arduino
  8.   VCC        5V
  9.   GND        GND
  10.   OUT        IN(接到DTMF)
  11.   4、DTMF解码模块接线
  12.   DTMF     Arduino
  13.   VCC        5V
  14.   GND        GND
  15.   Q1         12
  16.   Q2         11
  17.   Q3         10
  18.   Q4         9

  19. int keyvalue;  // 与音调相关的数字

  20. void setup()
  21. {
  22. Serial.begin(9600);
  23. pinMode(12, INPUT); //从解码器芯片输入二进制1的数字
  24. pinMode(11, INPUT); //从解码器芯片输入二进制2的数字
  25. pinMode(10, INPUT); //从解码器芯片输入二进制4的数字
  26. pinMode(9, INPUT); //从解码器芯片输入二进制4的数字
  27. }

  28. void loop()

  29. // 首先确定键的以10为底的值 0-11
  30. {
  31. if (digitalRead(6) == HIGH) //如果二进制1为高
  32. {
  33. keyvalue = 1;  //使键值等于1
  34. }
  35. else
  36. {
  37. keyvalue = 0;  //否则将其设为零
  38. }

  39. if (digitalRead(7) == HIGH)  //如果二进制2为高
  40. {
  41. keyvalue = keyvalue + 2;  //在键值中添加“ 2”
  42. }
  43. if (digitalRead(8) == HIGH)  //如果二进制4为高
  44. {
  45. keyvalue = keyvalue + 4;  //将“ 4”添加到键值
  46. }
  47. if (digitalRead(9) == HIGH)  //如果二进制8为高
  48. {
  49. keyvalue = keyvalue + 8;  //将“ 8”添加到键值
  50. }
  51. // 现在将键值9、10和11转换为“ 0”,“ *”和“#”
  52. if (keyvalue == 10)
  53. {
  54. Serial.println("0"); //打印零键
  55. }
  56. else
  57. {
  58. if (keyvalue == 11)
  59. {
  60. Serial.println("*"); //打印星号键
  61. }

  62. else
  63. {
  64. if (keyvalue == 12)
  65. {
  66. Serial.println("#"); //打印井号
  67. }

  68. else
  69. {
  70. Serial.println(keyvalue); //它不是特殊键,所以只需打印
  71. }
  72. }
  73. }
  74. delay(500);
  75. }
复制代码


ID:513258 发表于 2020-3-9 15:03
DTMF解码识别模块实验视频
https://v.youku.com/v_show/id_XNDU3OTkzOTA4OA==.html

https://v.youku.com/v_show/id_XNDU3OTkzOTA4OA==.html


【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
  实验一百四十五:MT8870 DTMF语音解码板模块 电话拨号控制音频解码处理电路

  第三项实验:用合成DTMF双音多频信号测试咪头传感器和DTMF解码模块
  1、安装 "dtmf"库: 下载https://codeload.github.com/DFRobot/DTMF/zip/master
  2、需要材料:喇叭1个,68Ω电阻两个,咪头传感器和DTMF解码模块,两块UNO板
  3、合成信号硬件连接:在D11,D12引脚各接一个68Ω电阻一端,68Ω电阻另一端接喇叭,然后喇叭另一端接地。
  4、咪头模块接线:
  MAX9814  Arduino
  VCC        5V
  GND        GND
  OUT        IN(接到DTMF)
  5、DTMF解码模块接线
  DTMF     Arduino
  VCC        5V
  GND        GND
  Q1         12
  Q2         11
  Q3         10
  Q4         9

ID:513258 发表于 2020-3-9 13:51
  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
  3.   实验一百四十五:MT8870 DTMF语音解码板模块 电话拨号控制音频解码处理电路

  4.   第三项实验:用合成DTMF双音多频信号测试咪头传感器和DTMF解码模块
  5.   1、安装 "dtmf"库: 下载https://codeload.github.com/DFRobot/DTMF/zip/master
  6.   2、需要材料:喇叭1个,68Ω电阻两个,咪头传感器和DTMF解码模块,两块UNO板
  7.   3、合成信号硬件连接:在D11,D12引脚各接一个68Ω电阻一端,68Ω电阻另一端接喇叭,然后喇叭另一端接地。
  8.   4、咪头模块接线:
  9.   MAX9814  Arduino
  10.   VCC        5V
  11.   GND        GND
  12.   OUT        IN(接到DTMF)
  13.   5、DTMF解码模块接线
  14.   DTMF     Arduino
  15.   VCC        5V
  16.   GND        GND
  17.   Q1         12
  18.   Q2         11
  19.   Q3         10
  20.   Q4         9
  21. */

  22. #include "dtmf.h"

  23. DTMF dtmf;

  24. void setup()
  25. {
  26.   Serial.begin(9600);
  27. }

  28. void loop()
  29. {
  30.   // 读DTMF代码并且用串行输出
  31.   int myDtmf;
  32.   myDtmf = dtmf.getDTMF();
  33.   if (myDtmf != -1)
  34.     Serial.println(myDtmf);
  35.   delay(100); // 以避免收到重复的输出。
  36. }
复制代码


ID:513258 发表于 2020-3-4 20:37
  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
  3.   实验一百四十五:MT8870 DTMF语音解码板模块 电话拨号控制音频解码处理电路

  4.   第二项实验:重复播放合成DTMF双音多频8675309拨号音
  5.   1、安装 "Tone.h"库: IDE-工具-管理库-搜索-安装
  6.   2、项目测试 :发送电话号码8675309到串口
  7.   3、需要材料:喇叭1个,68Ω电阻两个
  8.   4、硬件连接:在D11,D12引脚各接一个68Ω电阻一端,
  9.      68Ω电阻另一端接喇叭,然后喇叭另一端接地。
  10. */

  11. #include <Tone.h>

  12. Tone freq1;
  13. Tone freq2;

  14. const int DTMF_freq1[] = { 1336, 1209, 1336, 1477, 1209, 1336, 1477, 1209, 1336, 1477 };
  15. const int DTMF_freq2[] = {  941,  697,  697,  697,  770,  770,  770,  852,  852,  852 };

  16. void setup()
  17. {
  18.   Serial.begin(9600);
  19.   freq1.begin(11);
  20.   freq2.begin(12);
  21. }

  22. void playDTMF(uint8_t number, long duration)
  23. {
  24.   freq1.play(DTMF_freq1[number], duration);
  25.   freq2.play(DTMF_freq2[number], duration);
  26. }


  27. void loop()
  28. {
  29.   int i;
  30.   uint8_t phone_number[] = { 8, 6, 7, 5, 3, 0 , 9 };

  31.   for (i = 0; i < sizeof(phone_number); i ++)
  32.   {
  33.     Serial.print(phone_number[i], 10);
  34.     Serial.print(' ');
  35.     playDTMF(phone_number[i], 500);
  36.     delay(600);
  37.   }

  38.   Serial.println();
  39.   delay(4000);
  40. }
复制代码


ID:513258 发表于 2020-3-4 16:45
视频——第一项实验:用arduino的PWM脚(11、12)合成DTMF双音多频编码信号

https://v.youku.com/v_show/id_XNDU3MzExODkzMg==.html

https://v.youku.com/v_show/id_XNDU3MzExODkzMg==.html




ID:513258 发表于 2020-3-4 13:02
  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
  3.   实验一百四十五:MT8870 DTMF语音解码板模块 电话拨号控制音频解码处理电路
  4.   
  5.   第一项实验:用arduino的PWM脚(11、12)合成DTMF双音多频编码信号
  6.   1、安装 "Tone.h"库: IDE-工具-管理库-搜索-安装
  7.   2、项目测试 :将喇叭贴近电话机话筒,然后发送要拨的电话号码到串口,比如10000,即可拨通电话10000
  8.   3、需要材料:喇叭1个,68Ω电阻两个
  9.   4、硬件连接:在D11,D12引脚各接一个68Ω电阻一端,
  10.      68Ω电阻另一端接喇叭,然后喇叭另一端接地。
  11. */

  12. #include <Tone.h>
  13. String Phone_Number = "";
  14. int i = 0, mark = 0;
  15. //定义freq1,freq2为Tone实例,并且定义双音多频的频率

  16. Tone freq1;
  17. Tone freq2;
  18. const int DTMF_freq1[] = {1336, 1209, 1336, 1477, 1209, 1336, 1477, 1209, 1336, 1477};
  19. const int DTMF_freq2[] = {941,  697,  697,  697,  770,  770,  770,  852,  852,  852};

  20. void setup()
  21. {
  22.   Serial.begin(9600);
  23.   //定义声音产生引脚在Arduino的D11,D12
  24.   freq1.begin(11);
  25.   freq2.begin(12);
  26. }

  27. void loop()
  28. {
  29.   //读出串口数据,串接成Phone_Number字符串
  30.   while (Serial.available() > 0)
  31.   {
  32.     Phone_Number += char(Serial.read());
  33.     delay(2);
  34.     mark = 1;
  35.   }
  36.   //播放DTMF音频,电话号码来自Phone_Number,持续长度200ms,间隔长度300ms
  37.   PlayDTMF(Phone_Number, 200, 300);

  38.   //如果刚才接收到串口的电话号码,因为号码已经在喇叭输出了,清空电话号码并且重置mark
  39.   if (mark == 1)
  40.   {
  41.     Phone_Number = "";
  42.     Serial.println();
  43.     mark = 0;
  44.   }
  45. }
  46. /*
  47.   DTMF播放函数
  48.   调用格式:playDTMF(数字(0~9), 持续时间)。
  49. */
  50. void PlayDTMF(String Number, long duration, long pause)
  51. {
  52.   //如果输入数字为空,或者持续时间不为正数,或者暂停时间不为正数
  53.   //则视作错误,立即停止执行返回主程序。
  54.   if (Number.length() == 0 || duration <= 0 || pause <= 0) return;
  55.   //将Number逐个文字分离,
  56.   for (i = 0; i < Number.length(); i++)
  57.   {
  58.     //如果Number属于0~9的数字字符
  59.     if (Number[i] >= '0' && Number[i] <= '9')
  60.     {
  61.       //则将它ASCII码减去‘0’,得到纯数字,
  62.       Number[i] = '0';
  63.       //然后在串口输出一份,便于查看
  64.       Serial.print(i, DEC);
  65.       //输出双音多频之一
  66.       freq1.play(DTMF_freq1[i], duration);
  67.       //输出双音多频之二
  68.       freq2.play(DTMF_freq2[i], duration);
  69.       delay(pause);
  70.     }
  71.   }
  72. }
复制代码


ID:513258 发表于 2020-3-3 13:07
DTMF
双音多频 DTMF(Dual Tone Multi Frequency),双音多频,由高频群和低频群组成,高低频群各包含4个频率。一个高频信号和一个低频信号叠加组成一个组合信号,代表一个数字。DTMF信号有16个编码。利用DTMF信令可选择呼叫相应的对讲机。

在编码时将击键或数字信息转换成双音信号并发送,解码时在收到的DTMF信号中检测击键或数字信息的存在性。一个DTMF信号由两个频率的音频信号叠加构成。这两个音频信号的频率来自两组预分配的频率组:行频组或列频组。每一对这样的音频信号唯一表示一个数字或符号。电话机中通常有16个按键,其中有10个数字键0~9和6个功能键*、#、A、B、C、D。由于按照组合原理,一般应有8种不同的单音频信号。因此可采用的频率也有8种,故称之为多频,又因它采用分别从高低频中任意抽出1种进行组合来进行编码,所以又称之为“8中取2”的编码技术。根据CCITT的建议,国际上采用的多种频率为697Hz、770Hz、852Hz、941Hz、1209Hz、1336Hz、1477Hz和1633Hz等8种。用这8种频率可形成16种不同的组合,从而代表16种不同的数字或功能键。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表