极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: eagler8

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

[复制链接]
 楼主| 发表于 2020-3-4 16:44:03 | 显示全部楼层
视频——第一项实验:用arduino的PWM脚(11、12)合成DTMF双音多频编码信号

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



回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-4 20:38:23 | 显示全部楼层
  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. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-4 20:38:47 | 显示全部楼层
【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
  实验一百四十五:MT8870 DTMF语音解码板模块 电话拨号控制音频解码处理电路

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2020-3-4 21:09:59 | 显示全部楼层
本帖最后由 wing 于 2020-3-4 21:12 编辑

上面两个实验令我有些困扰...
楼主是不是通过模块合成的拨号音,然后通过喇叭输出,但是并没有接到电话线路中去?
好像不对,您还未用到模块。
那么后续会增加接入模块的实验对么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-5 08:16:48 | 显示全部楼层
wing 发表于 2020-3-4 21:09
上面两个实验令我有些困扰...
楼主是不是通过模块合成的拨号音,然后通过喇叭输出,但是并没有接到电话线路 ...

老师早上好,主要是家里没有电话线路了,只好自己来产生DTMF双音多频编码信号,手头正好还有个话筒放大模块,准备合起来试试这解码器模块

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-9 13:49:55 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-9 13:52:21 | 显示全部楼层
  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. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-9 15:01:38 | 显示全部楼层
DTMF解码识别模块实验视频
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
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-9 15:25:49 | 显示全部楼层
打开"dtmf.h"库文件查看,发现是针对不同硬件模块的(板上芯片都是MT8870),由于接脚对不上号,故串口输出的解码不对的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-9 15:56:01 | 显示全部楼层
不同的硬件模块(板上芯片都是MT8870),名称为 Arduino DTMF语音识别扩展板 V1.0

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-9 15:58:49 | 显示全部楼层
  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. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-9 16:06:49 | 显示全部楼层
从MT8870 DTMF语音解码板模块上,5只解码LED灯看,是在正常工作,只是串口输出的数字,依旧好像不对......

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2020-3-9 16:23:53 | 显示全部楼层
dfrobot那款模块定位很奇怪,带耳机接口看上去有可能做出一个电话
不过既没有RJ11接口也没有相关的语音通信例子,甚至放大电路也不确定有没有
其实这个MT8870到底是否具备一个电话的全部功能?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-9 16:47:54 | 显示全部楼层
附录:基于DTMF编解码的智能家居电话远程控制系统



本着“环保与创新”的主题,系统集本地家电控制和监控模块,DTMF编解码的电话远程控制和监控模块以及以太网web server的远程家居控制和监控系统模块三大模块为一体,实现智能家居控制。电话远程控制和以太网远程控制,不需进行专门的布线,不占用无线电频率资源,避免了电磁污染。且可以通过以太网实时监控家用电器,避免了没必要的电力资源浪费。



一、本地家电控制和监控模块



此模块能够实时检测温湿度、一氧化碳、烟雾等的数值或者浓度,并在1602液晶上显示相关参数。当超过一定的警戒线,它还会发出警报以及通知主系统(AVR 32)出现何种警情,让主系统进行相关处理。



二、DTMF编解码的电话远程控制和监控模块



此模块能够受手机控制,通过手机拨打家里电话来远程控制家里的电器的开闭,以及当家里出现盗贼或者出现险情(包括火灾、煤气泄漏等)时固定电话能及时自动拨打电话通知用户。



三、以太网web server的远程家居控制和监控系统模块



此模块通过网线接入以太网后,用户可以通过手机或PC机打开相应浏览器来远程控制家里的电器的开闭,以及监控家里的温湿度,煤气传感器和烟雾传感器的数据。



2.2 性能要求



一、本地家电控制和监控模块



此模块性能要求传感器采集数据要实时,而且要快速,采集出来的数据经过相应转换后得到的数值与实际数值相差不能超过5%,温度的精度为0.1℃,湿度的精度为0.5%RH。



二、DTMF编解码的电话远程控制和监控模块



此模块性能要求能响应速度快,即有人拨打电话时,此模块能够在1S内检测到有电话打入,并记录下拨打人输入的按键信息。此外,当要实现自动拨打电话时,要求此模块模拟按下的电话号码要准确无误,确保准确性。



三、以太网web server的远程家居控制和监控系统模块

此模块要求接入互联网,当用户浏览网页时,家用电器信息和传感器数据每隔几秒刷新一次,确保数据传输的快速性和准确性。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-9 16:51:03 | 显示全部楼层
wing 发表于 2020-3-9 16:23
dfrobot那款模块定位很奇怪,带耳机接口看上去有可能做出一个电话
不过既没有RJ11接口也没有相关的语音通信 ...

MT8870 这个电路可以接收 DTMF 信号,是一个完整的 DTMF 接收解码器。它接收了 DTMF 信号后,内部将信号分成高频带和低频带,并将此信号送至数字译码器,然后将讯号送至数字译码器以解出按键值,接着将解出的按键值以二进制的方式以四条线(Q1、Q2、Q3、Q4)输出到外部。
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-26 08:17 , Processed in 0.039364 second(s), 16 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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