注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

This is Ansifa

近期都不会更新绿色软件

 
 
 
 
 

日志

 
 

Arduino自制电话拨号器  

2011-11-27 14:26:36|  分类: 电子技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Arduino自制电话拨号器



怎么拨打电话?也许这个问题很简单:拿起话筒,按话机的数字键盘拨号码。
但是,有没想过,我们可以拿起电话,不需要碰话机键盘就能拨通电话?答案是肯定的。
下面就介绍如何用Arduino生成双音多频信号。

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

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

材料清单:
Arduino一块,
喇叭1个,
100Ω电阻1个(可以选择100Ω~1kΩ),
1uF电容两个(可以选择0.1uF~10uF)。

硬件连接:
原理图.GIF 
程序代码:

1. 下载Tone库,并且解压到arduino-0022\libraries文件夹:
http://rogue-code.googlecode.com/files/Arduino-Library-Tone.zip

2.写入下面代码到Arduino:

/*
使用Arduino生成双音多频
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 0mark 0;

//定义freq1,freq2为Tone实例,并且定义双音多频的频率
//DTMF频率定义参见:http://zh.wikipedia.org/zh/%E5%8F%8C%E9%9F%B3%E5%A4%9A%E9%A2%91
Tone freq1;
Tone freq2;
const int DTMF_freq1[] = {1336120913361477120913361477120913361477};
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_Number200300);
    
    
//如果刚才接收到串口的电话号码,因为号码已经在喇叭输出了,清空电话号码并且重置mark
    
if(mark == 1)
    {
        
Phone_Number "";
        
Serial.println();
        
mark 0;
    }
}

/*
DTMF播放函数
调用格式:playDTMF(数字(0~9), 持续时间)。
*/
void PlayDTMF(String Numberlong durationlong pause)
{
    
//如果输入数字为空,或者持续时间不为正数,或者暂停时间不为正数
    //则视作错误,立即停止执行返回主程序。
    
if(Number.length() == || duration <= || pause <= 0return;
    
//将Number逐个文字分离,
    
for(0Number.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);
        }
    }


}


打包下载:  Dialer.zip (1.48 KB, 下载次数: 0) 

实物效果:

1. 电路连接
电路连接.JPG 
2. 喇叭靠近电话拨号
喇叭靠近电话拨号.JPG 
3. 串口端发电话号码
串口端.GIF 
  评论这张
 
阅读(3764)| 评论(6)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016