“第四课--Microduino 电话拨号器/zh”的版本间的差异

来自Microduino Wikipedia
跳转至: 导航搜索
Pkj讨论 | 贡献
程序
第55行: 第55行:
  
 
==程序==
 
==程序==
<source lang="cpp">
+
https://github.com/Microduino/Microduino_Tutorials/tree/master/Microduino_Advanced/MicroduinoPhoneDialer
 
 
/*
 
使用Microduino生成双音多频
 
Ansifa        2011/11/27
 
 
 
* 软件:需要Tone库,下载地址:http://rogue-code.googlecode.com/files/Arduino-Library-Tone.zip
 
* 材料:喇叭1个,100Ω电阻1个,1uF电容两个
 
* 硬件连接:在D11,D12引脚各接一个1uF电容,之后合并到100Ω电阻一端,
 
  100Ω电阻另一端接喇叭,然后喇叭另一端接地。
 
 
 
用法,将喇叭贴近电话机话筒,然后发送要拨的电话号码到串口,比如10000,即可拨通电话10000
 
*/
 
 
 
#include <Tone.h>
 
 
 
String Phone_Number = "";
 
int i = 0, mark = 0;
 
 
 
//定义freq1,freq2为Tone实例,并且定义双音多频的频率
 
//DTMF频率定义参见:[url]http://zh.wikipedia.org/zh/%E5%8F%8C%E9%9F%B3%E5%A4%9A%E9%A2%91[/url]
 
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);
 
    //定义声音产生引脚在Arduino的D11,D12
 
    freq1.begin(11);
 
    freq2.begin(12);
 
}
 
 
 
void loop()
 
{
 
    //读出串口数据,串接成Phone_Number字符串
 
    while (Serial.available() > 0)
 
    {
 
    Phone_Number += char(Serial.read());
 
    delay(2);
 
    mark = 1;
 
    }
 
    //播放DTMF音频,电话号码来自Phone_Number,持续长度200ms,间隔长度300ms
 
    PlayDTMF(Phone_Number, 200, 300);
 
   
 
        //如果刚才接收到串口的电话号码,因为号码已经在喇叭输出了,清空电话号码并且重置mark
 
    if(mark == 1)
 
    {
 
      Phone_Number = "";
 
      Serial.println();
 
      mark = 0;
 
  }
 
}
 
 
 
/*
 
DTMF播放函数
 
调用格式:playDTMF(数字(0~9), 持续时间)。
 
*/
 
void PlayDTMF(String Number, long duration, long pause)
 
{
 
        //如果输入数字为空,或者持续时间不为正数,或者暂停时间不为正数
 
        //则视作错误,立即停止执行返回主程序。
 
    if(Number.length() == 0 || duration <= 0 || pause <= 0) return;
 
    //将Number逐个文字分离,
 
    for(i = 0; i < Number.length(); i++)
 
    {
 
        //如果Number属于0~9的数字字符,
 
        if(Number[i] >= '0' && Number[i] <= '9')
 
        {
 
            //则将它ASCII码减去‘0’,得到纯数字,
 
            Number[i] -= '0';
 
            //然后在串口输出一份,便于查看
 
            Serial.print(Number[i], DEC);
 
            //输出双音多频之一
 
            freq1.play(DTMF_freq1[Number[i]], duration);
 
            //输出双音多频之二
 
            freq2.play(DTMF_freq2[Number[i]], duration);
 
            delay(pause);
 
        }
 
    }
 
 
 
}
 
 
 
</source>
 
  
 
==调试==
 
==调试==

2014年3月26日 (三) 08:54的版本

Language English

目的

本教程将叫大家使用Microduino生成双音多频信号

怎么拨打电话?也许这个问题很简单:拿起话筒,按话机的数字键盘拨号码。

但是,有没想过,我们可以拿起电话,不需要碰话机键盘就能拨通电话?答案是肯定的。

下面就介绍如何用Microduino生成双音多频信号。

用法介绍:

使用时候,我们拿起电话话筒,将喇叭贴近话筒麦克风位置。在串口发送需要拨号的电话号码(比如10000),稍等片刻即可拨通。

扩展用法:

驱动开关模拟电话摘机事件,用此电路拨号,再由Microduino按照事件控制语音模块(WT588D等)发出不同的语音到电话线。即可完成一个整体的自动拨号机,可以制作报警器,或者电话提醒器。

设备

  • Microduino-Core
  • Microduino-FT232R
  • 其他硬件设备
    • 面包板跳线 一盒
    • 面包板 一块
    • LED发光二极管 六个
    • 100欧电阻1个(可以选择100Ω~1kΩ)
    • 喇叭1个
    • 1uF电容两个(可以选择0.1uF~10uF)
    • USB数据连接线 一根

扬声器

第四课-扬声器.jpg

结构和工作原理 电动式扬声器应用最广泛,它又分为纸盆式、号筒式和球顶形三种。这里只介绍前两种。

1、纸盆式扬声器

纸盆式扬声器又称为动圈式扬声器。 它由三部分组成:①振动系统,包括锥形纸盆、音圈和定心支片等;②磁路系统,包括永义磁铁、导磁板和场心柱等;③辅助系统,包括盆架、接线板、压边和防尘盖等。当处于磁场中的音圈有音频电流通过时,就产生随音频电流变化的磁场,这一磁场和永久磁铁的磁场发生相互作用,使音圈沿着轴向振动,由于扬声器结构简单、低音丰满、音质柔和、频带宽,但效率较低。

2、号筒式扬声器

号筒式扬声器的结构,它由振动系统(高音头)和号筒两部分构成。振动系统与纸盆扬声器相似,不同的是它的振膜不是纸盆,而是一球顶形膜片。振膜的振动通过号筒(经过两次反射)向空气中辐射声波。它的频率高、音量大,常用于室外及广场扩声。

电容

第四课-电容.jpg

电容,电容器的简称,是电子设备中大量使用的电子元件之一,广泛应用于隔直、耦合、旁路、滤波、调谐回路、能量转换、控制电路等方面。

原理图

第四课-Microduino自制拨号器原理图.jpg

D11,D12并联在一起,再串联一个电阻连接到扬声器的信号线上,扬声器的地线接microduino的GUN

程序

https://github.com/Microduino/Microduino_Tutorials/tree/master/Microduino_Advanced/MicroduinoPhoneDialer

调试

步骤一:下载Tone库,并且解压到arduino-0022\libraries文件夹: [1] 此Tone库相比自带的tone函数特点是,可以同时在多个输出脚输出不同频率的波形,但是自带tone函数在一段时间内只能在一个引脚输出。

注意:解压后要把Tone.cpp中的'#include <wiring.h>改为#include <Arduino.h>,否则会报错

步骤二:搭建硬件电路,如下图

第四课-自制拨号器电路.jpg

步骤三:写入代码到IDE中

步骤四:喇叭靠近电话拨号

第四课-喇叭放在电话听筒.jpg

步骤五:串口端发电话号码

第四课-在IDE中拨号.jpg


结果

串口输入端输入电话号码,将拨通电话

视频

http://v.youku.com/v_show/id_XNjc1NjUzNTky.html