eagler8 发表于 2020-3-4 16:44:03

视频——第一项实验:用arduino的PWM脚(11、12)合成DTMF双音多频编码信号

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

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

eagler8 发表于 2020-3-4 20:38:23

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

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

#include <Tone.h>

Tone freq1;
Tone freq2;

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

void setup()
{
Serial.begin(9600);
freq1.begin(11);
freq2.begin(12);
}

void playDTMF(uint8_t number, long duration)
{
freq1.play(DTMF_freq1, duration);
freq2.play(DTMF_freq2, duration);
}


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

for (i = 0; i < sizeof(phone_number); i ++)
{
    Serial.print(phone_number, 10);
    Serial.print(' ');
    playDTMF(phone_number, 500);
    delay(600);
}

Serial.println();
delay(4000);
}

eagler8 发表于 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Ω电阻另一端接喇叭,然后喇叭另一端接地。

wing 发表于 2020-3-4 21:09:59

本帖最后由 wing 于 2020-3-4 21:12 编辑

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

eagler8 发表于 2020-3-5 08:16:48

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

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

eagler8 发表于 2020-3-9 13:49:55

eagler8 发表于 2020-3-9 13:52:21

/*
【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、咪头模块接线:
MAX9814Arduino
VCC      5V
GND      GND
OUT      IN(接到DTMF)
5、DTMF解码模块接线
DTMF   Arduino
VCC      5V
GND      GND
Q1         12
Q2         11
Q3         10
Q4         9
*/

#include "dtmf.h"

DTMF dtmf;

void setup()
{
Serial.begin(9600);
}

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

eagler8 发表于 2020-3-9 15:01:38

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、咪头模块接线:
MAX9814Arduino
VCC      5V
GND      GND
OUT      IN(接到DTMF)
5、DTMF解码模块接线
DTMF   Arduino
VCC      5V
GND      GND
Q1         12
Q2         11
Q3         10
Q4         9

eagler8 发表于 2020-3-9 15:25:49

打开"dtmf.h"库文件查看,发现是针对不同硬件模块的(板上芯片都是MT8870),由于接脚对不上号,故串口输出的解码不对的

eagler8 发表于 2020-3-9 15:56:01

不同的硬件模块(板上芯片都是MT8870),名称为 Arduino DTMF语音识别扩展板 V1.0

eagler8 发表于 2020-3-9 15:58:49

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

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

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

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

void loop()

// 首先确定键的以10为底的值 0-11
{
if (digitalRead(6) == HIGH) //如果二进制1为高
{
keyvalue = 1;//使键值等于1
}
else
{
keyvalue = 0;//否则将其设为零
}

if (digitalRead(7) == HIGH)//如果二进制2为高
{
keyvalue = keyvalue + 2;//在键值中添加“ 2”
}
if (digitalRead(8) == HIGH)//如果二进制4为高
{
keyvalue = keyvalue + 4;//将“ 4”添加到键值
}
if (digitalRead(9) == HIGH)//如果二进制8为高
{
keyvalue = keyvalue + 8;//将“ 8”添加到键值
}
// 现在将键值9、10和11转换为“ 0”,“ *”和“#”
if (keyvalue == 10)
{
Serial.println("0"); //打印零键
}
else
{
if (keyvalue == 11)
{
Serial.println("*"); //打印星号键
}

else
{
if (keyvalue == 12)
{
Serial.println("#"); //打印井号
}

else
{
Serial.println(keyvalue); //它不是特殊键,所以只需打印
}
}
}
delay(500);
}

eagler8 发表于 2020-3-9 16:06:49

从MT8870 DTMF语音解码板模块上,5只解码LED灯看,是在正常工作,只是串口输出的数字,依旧好像不对......

wing 发表于 2020-3-9 16:23:53

dfrobot那款模块定位很奇怪,带耳机接口看上去有可能做出一个电话
不过既没有RJ11接口也没有相关的语音通信例子,甚至放大电路也不确定有没有
其实这个MT8870到底是否具备一个电话的全部功能?

eagler8 发表于 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的远程家居控制和监控系统模块

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

eagler8 发表于 2020-3-9 16:51:03

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

MT8870 这个电路可以接收 DTMF 信号,是一个完整的 DTMF 接收解码器。它接收了 DTMF 信号后,内部将信号分成高频带和低频带,并将此信号送至数字译码器,然后将讯号送至数字译码器以解出按键值,接着将解出的按键值以二进制的方式以四条线(Q1、Q2、Q3、Q4)输出到外部。
页: 1 [2]
查看完整版本: 【Arduino】168种传感器模块系列实验(146)---MT8870语音解码