人人范文网 范文大全

arduino音频传输

发布时间:2020-03-02 02:34:35 来源:范文大全 收藏本文 下载本文 手机版

利用音频线与arduino进行通信 音频信号频率计

发布时间:2013-5-16 前言部分

在多媒体电子设备中,音频设备是不可缺少的。音频就是指我们人耳正常能听到的机械振动所对应的频率范围,一般在20Hz到20kHz之间。一般来说,机械振动发声(比如人的喉咙内的空气振动)通过介质传递到声音采集器中,然后使采集器产生相应的模拟信号,这些信号通过音频接口接入一个高质量的数模转换器(就电脑而言是是声卡),转成计算机或其它多媒体设备可以处理数字信号。而如果这些设备想复原声音,只需要将信号再次返回给数模转换器,重新转换成模拟信号,驱动音响等设备产生相应的机械振动,传到耳朵里就是声音了。

说了这么多,听起来很枯燥。不过我们换个思路去思考,在这个音频的传递过程中,我们若把那些机械振动的采集和产生设备换成其他的我们想要的信号产生和接受装置,那么原则上我们是可以实现这些装置与电子设备的通信的,例如,电脑上的声卡可以帮助我们实现外部设备的拓展。我们将两个电子设备通过这一系列装置去连接,进而通信,这也是可能的。

最简单的例子便是两个手机上《会说话的tom猫》对着喊话,如果我们按照原理说,这两部手机不仅实现了通信,还是无线通信。不过,这的确是个很糟糕的例子。做过这个实验的人就发现,每次成功的概率不是很高,语音反复重复的过程很中可能因为周围的响声被混入而彻底和以前不一样。因为这里面的无线传输的实际是通过机械振动传输实现的,也就是声音。声音有强弱的差异,也就是所谓的在模拟信号中电压的大小,声卡或者其他音频处理设备要负责将他们转化和还原,并不是一件简单的事情。做个类比,这样传递过程就好像一队人从头到尾传一句话,即使话的含义不发生改变,说话的语气和其他因素也是难以复制的。不过我们如果换个方式,使用纸条的话,只要语义清晰,中间有人传下去,到最后队尾收到的肯定是队头想要表达的内容。而在电子设备的通信中,我们正是通过这种“传纸条”的方式去做。这种”纸条“,我们就叫做数字信号。那也许有人问,那声卡采集和产生的不是模拟信号吗?的确如此,不过模拟信号也可以看做数字信号,数字信号本身也可以看成一种简化了的模拟信号,本来连续的电压值被离散的限定在0和1两个数字里。正是因为我们忽略了“语气”之类的我们无法把握的信息,“纸条”才方便传递,数字信号就是这个道理。

( 不过,模拟信号才是音频设备的重头戏,不信看看森海塞尔耳机和高保真功放的价格。我们选择数字信号传播主要原因也是要避开这些不必要的成本。)

那么,有什么现成的例子可以证明这个在音频设备间使用数字信号的想法是可行的呢?电话。电话在拨号时发出不同音高的声音不是偶然的,每个数字对应一个频率,这些固定频率的声音被转化成电流再通过电话线传递给控制端,控制端再根据频率的顺序得到数字的顺序,也就是电话号码,再按照既定的程序接通对应用户的电话。这样我们就用按键完成了一段指令的输入,又经过一系列的信号的传递和转换,完成了对远程终端的控制。而如果我们把这种做法更复杂化点,就是所谓拨号上网。不过,这个信号的传递所使用的频率,远远超过了音频的所谓20-20kHz定义,但是我们看到,原理还是一样的。不过,原来的声卡被换了个名字,叫调制解调器。而原来声卡中最重要的数模转换器也被尽量的简化掉了,因为我们只需要0或1,或者多几个数字而已。

现在回头讨论下,为什么要利用电话上网。原因很简单,电话是最普及的音频设备,甚至说是最普及和最简单的远程通信装置,即使在网络时代也是这样。电话线的覆盖范围基本是100%,而移动通信的信号那就不必说了。这样在电话线上载入网络通信,就避免了重新布线入户的成本。而从我们的角度看,手机,mp3,电脑,这些最常见的电子设备,都有一个共同音频端口,我们甚至没有必要为这个端口做特别的修改,就能做很多事情,比如手机与单片机通信。有人说,ADK就好了?不过ADK需要新的成本,以及复杂的配置,这些配置对于一般用户来说太难以解释了,就是极客也很难上手。而音频端口,只要一根线,一个简单的放大器电路,,一个写好的通信协议,也能完成类似的事情。事实上,网络上已经流传了android利用音频线与串口通信的程序,请去电子市场搜索和下载AudioSerialOut程序,一目了然。他们的官方网站也提供了一致的思路,笔者讲在下文中讲解。

另外,iphone用户也不必发愁,虽然苹果能锁死usb,但是在国外,伟大的极客们早就悟出谁也无法锁死音频端口的事实。不信,看看这个iphone盖革管计数器。注意连接方式。

首先是简单的电路部分。我们要做到单片机对音频信号的读取,就需要一个简单的放大电路。因为电脑音频输出大概只有几十毫伏,而arduino使用的avr单片机数字信号对应的高电平则是5v。幸运的是,因为我们需求的是简单的只有高低电平的数字信号的放大,模拟电路里所谓的失真之类的问题就可以不必考虑了。

这里我们使用lm358作为放大器。电路原理图如下

注意这里,lm358的放大倍数远远超过了本身5v的电源电压的能力,这我们不必考虑太多,关键是在R1放上一个大电阻让放大倍数足够使arduino识别高低电平就可以了。另外记住,lm358输出的信号和原来的信号是反向的,高低电平会调置。国外那个网站(就是做Audioserial软件的那个用的是lm324,是4个放大器在一起,原理一致不做解释)所使用的我继续花了个接线图,注意这个图是为了省空间在元件下面走线了。

一般电脑是两个声道,充分利用了lm358的两个放大器,而放大器5v的电源寄生在arduino上也就可以了。输入端和音频插头连接,接线上,最靠近内侧的是地。输出端自然要连在arduino的数字端口上,这不用解释。

看看我自己悲催用耳机改的插头吧。

建议用铜丝拧成圈固定这个插头,焊锡是不沾的,所以固定不住。不过固定好还是要涂焊锡,只有面接触,才能保证信号质量,否则,杂波很夸张。这是我在面包板上做的lm358电路,只用了一个声道。

如果这些都做好,并且,没有啥故障的话,那么就可以进入软件方面的设计和调试了。

音频信号频率计

为了验证单片机可以顺利的读取高低电平信号并研究这个信号频率上的范围和精度,也为了研究arduino时钟的设置,我制作了一个音频信号频率计,arduino读取声卡模拟出的占空比为0.5的方波(就是均匀交替的高低电平信号),通过计时器,得到方波每个波谷的长度(因为是lm358反置),进而计算出这个方波的频率。

首先我们要讨论的是,计时器。

为了了解单片机上计时器的原理,我们先从最原始的计时工具——日晷和日历说起。古人通过观察日月星辰的变化规律,了解到,太阳做周期的往复运动

超声波传感器 arduino

ARDUINO教学设计

音频信号数字化光纤传输实验仪信道的设计与实现

arduino mega 2560 串口

传输基础知识

双绞线传输

(网上传输)

传输知识点

初中朗读音频

A字母音频资料

arduino音频传输
《arduino音频传输.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
相关专题 usrp音频传输 音频
点击下载本文文档