查看“第四课--Microduino 电话拨号器/zh”的源代码
←
第四课--Microduino 电话拨号器/zh
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
{| style="width: 800px;" |- | ==目的== 本教程将叫大家使用Microduino生成双音多频信号 怎么拨打电话?也许这个问题很简单:拿起话筒,按话机的数字键盘拨号码。 但是,有没想过,我们可以拿起电话,不需要碰话机键盘就能拨通电话?答案是肯定的。 下面就介绍如何用Arduino生成双音多频信号。 '''用法介绍:''' 使用时候,我们拿起电话话筒,将喇叭贴近话筒麦克风位置。在串口发送需要拨号的电话号码(比如10000),稍等片刻即可拨通。 '''扩展用法:''' 驱动开关模拟电话摘机事件,用此电路拨号,再由Arduino按照事件控制语音模块(WT588D等)发出不同的语音到电话线。即可完成一个整体的自动拨号机,可以制作报警器,或者电话提醒器。 ==设备== '''[[Microduino-Core]]''' '''[[Microduino-FT232R]]''' *其他硬件设备 **面包板跳线 一盒 **面包板 一块 **LED发光二极管 六个 **100欧电阻1个(可以选择100Ω~1kΩ) **喇叭1个 **1uF电容两个(可以选择0.1uF~10uF) **USB数据连接线 一根 '''扬声器''' [[File:第四课-扬声器.jpg|600px|center|thumb]] '''结构和工作原理''' 电动式扬声器应用最广泛,它又分为纸盆式、号筒式和球顶形三种。这里只介绍前两种。 1、纸盆式扬声器 纸盆式扬声器又称为动圈式扬声器。 它由三部分组成:①振动系统,包括锥形纸盆、音圈和定心支片等;②磁路系统,包括永义磁铁、导磁板和场心柱等;③辅助系统,包括盆架、接线板、压边和防尘盖等。当处于磁场中的音圈有音频电流通过时,就产生随音频电流变化的磁场,这一磁场和永久磁铁的磁场发生相互作用,使音圈沿着轴向振动,由于扬声器结构简单、低音丰满、音质柔和、频带宽,但效率较低。 2、号筒式扬声器 号筒式扬声器的结构,它由振动系统(高音头)和号筒两部分构成。振动系统与纸盆扬声器相似,不同的是它的振膜不是纸盆,而是一球顶形膜片。振膜的振动通过号筒(经过两次反射)向空气中辐射声波。它的频率高、音量大,常用于室外及广场扩声。 '''电容''' [[File:第四课-电容.jpg|600px|center|thumb]] 电容,电容器的简称,是电子设备中大量使用的电子元件之一,广泛应用于隔直、耦合、旁路、滤波、调谐回路、能量转换、控制电路等方面。 ==原理图== [[File:第四课-Microduino自制拨号器原理图.jpg|600px|center|thumb]] D11,D12并联在一起,再串联一个电阻连接到扬声器的信号线上,扬声器的地线接microduino的GUN ==程序== <source lang="cpp"> /* 使用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> ==调试== 步骤一:下载Tone库,并且解压到arduino-0022\libraries文件夹: [http://rogue-code.googlecode.com/files/Arduino-Library-Tone.zip] 此Tone库相比自带的tone函数特点是,可以同时在多个输出脚输出不同频率的波形,但是自带tone函数在一段时间内只能在一个引脚输出。 '''注意:解压后要把Tone.cpp中的'#include <wiring.h>改为#include <Arduino.h>,否则会报错''' 步骤二:搭建硬件电路,如下图 [[File:第四课-自制拨号器电路.jpg|600px|center|thumb]] 步骤三:写入代码到IDE中 步骤四:喇叭靠近电话拨号 [[File:第四课-喇叭放在电话听筒.jpg|600px|center|thumb]] 步骤五:串口端发电话号码 [[File:第四课-在IDE中拨号.jpg|600px|center|thumb]] ==结果== 串口输入端输入电话号码,将拨通电话 ==视频==
该页面使用的模板:
模板:Language
(
查看源代码
)
模板:Nmbox
(
查看源代码
)
返回至
第四课--Microduino 电话拨号器/zh
。
导航菜单
个人工具
创建账户
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
Welcome
首页
创客大赛
大赛详情
3D打印
安装月球车
图形化编程
操控月球车
升级月球车
编程工具下载
软件下载
Arduino
Processing
Mixly
Scratch
模块套件
Microduino 102
mCookie 102
mCookie 202
mCookie 302
IBC
其他
应用套件
四轴飞行器
平衡车
小车CUBE
音乐播放器
刷卡音乐播放器
wifi气象站
彩虹音乐触摸灯
分贝检测仪
迎门汇报
LED点阵时钟
LED点阵屏幕
硬件
mCookie
Sensor
Microduino
MicroWrt
MicroNux
MicroRobot-Core
MicroRobot-CoreESP
ideaBoard
ideaBox
MicroMV
MicroAI
帮助
常见问题
帮助
工具
链入页面
相关更改
特殊页面
页面信息