程序设计基础-第十九章无线通信_第1页
程序设计基础-第十九章无线通信_第2页
程序设计基础-第十九章无线通信_第3页
程序设计基础-第十九章无线通信_第4页
程序设计基础-第十九章无线通信_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Arduino可使用的无限通信方式众多,如zigbee、WIFI、蓝牙等。较为常见的开发方式是使用串口透传模块,这类模块设置好以后,连接到Arduino串口即可用串口通信的方式进行通信,这个过程相当于将串口的有线通信,改为了无线通信方式,而程序不需要改变。另一种常见方式是使用SPI接口的无线模块,这类模块通常都有配套的驱动库,如ArduinoWifi扩展板。这种方式驱动无线模块,传输速率更快,可以完成高级操作。Arduino可以使用的无线模块太多,驱动方式各有不同,本书中不做过多介绍。本章中

要介绍的是一种最常用、成本最低的无线通信方式——红外通信。红外红外线通信是一种利用红外光编码进行数据传输的无线通信方式,是目前使用最广泛的一种通信和领域。。由于红外线

装置具有体积小、功耗低、成本常见的电视机

、空调

,均是使用红外线特点,因而被广泛应用于各个。要使用红外线

,你需要准备这些器材:红外接收头1:OUT2:GND3:VCCl红外接收头红外接收头其

集成了红外接收电路,包括红外监测二极管,放大器,限副器,带通滤波器,积分电路,比较器等。它可以接收到红外信号并还原成发射端的波形信号。通常

使用的红外接收头都是接收38kHz左右的红外信号。需要注意的是,不同的红外一体接收头可能会有不同的引脚定义。红外l

红外红外上每个按键都有各自的编码,按下按键后,

就会发送对应编码的红外波。最常见的红外

大多是使用NEC编码.生活中,大多数红外通信都是用38KHz的频率进行通信,

这里使用的

接收头和都是使用38Khz收发信号的,如果要使用其他频率通信,需要选用对应频率的器材。l

红外发光二极管其外形与使用方法都和普通发光二极管相似,但是它可以发出肉眼不可见的红外光。搭配红外一体接受管使用,就可以进行红外通信了。红外发光二极管要使用红外

功能,你还需要用到一个第的红外库——IRremote库,你可以在以下

到它:/shirriff/Arduino-IRremoteIRremote库成员函数IRrecv类IRercv类可以用于接收红外信号并对其

。使用该类前,你需要实例化一个该类型的对象。其成员函数如下:IRrecv()

enableIRIn()IRrecv类的构造函数。可指定红外

接收头的连接引脚。l

语法:IRrecvobject(recvpin)l

参数:object:用户自定义的对象名recvpin:连接到红外

接收头的Arduino引脚初始化红外

。l

语法:IRrecv.enableIRIn()l

参数:

IRrecv:一个IRrecv类型的对象l

返回值:无decode()

resume()IRrecv:一个IRrecv类型的对象results:一个decode_results类型的对象l

返回值:Int型0:接收到编码1:没有接收到编码初始化红外

。 接收下一个编码。l

语法:

l

语法:IRrecv.decode(&results)

IRrecv.resume()l

参数:

l

参数:IRrecv:一个IRrecv类型的对象l

返回值:无IRsend类IRsend类可以将红外信号的编码并发送。IRsend()

sendNEC()IRsend类的构造函数。l

语法:IRsendobject()l

参数:object:一个IRsend类型的对象以NEC编码格式发送指定值。l

语法:IRsend.sendNEC(data,

nbits)l

参数:IRsend:一个IRsend类型的对象data:发送的编码值

nbits:编码位数l

返回值:无sendSony()

sendRaw()以Sony编码格式发送指定值。l

语法:IRsend.sendSony(data,

nbits)l

参数:IRsend:一个IRsend类型的对象data:发送的编码值nbits:编码位数l

返回值:无发送原始红外编码信号l

语法:IRsend.sendRaw(buf,

len,

hz)l

参数:IRsend:一个IRsend类型的对象buf:

原始编码的数组len:数组长度hz:红外发射频率l

返回值:无除此之外,还有如下函数,用于其他常见协议的红外信号发送:sendRC5()sendRC6()sendDISH()sendSharp()sendPanasonic()sendJVC()在红外通信中的两端上,一端进行红外信号的编码并发送,另一端接收到红外信号,并以下示例中, 使用红外。作为红外信号的发接收头作为红外信号的接送端,使用Arduino和收端。红外接收各按键对应的编码,不同的可以通过IRremote的示例程序获取到,不同的的发要使用

控制Arduino,首先

得知道按键,不同的协议,都对应着不同的编码。送的信号的编码。红外信号的接收端的制作只需将红外

接收头按图7-4连入Arduino即可,示例中收头的输出脚连接到Arduino的11号引脚。红外连线示意图这里

使用以下程序对红外信号进行

:你可以在文件菜单>示例>IRremote>IRrecvDemo找到该程序:

该示例程序后,会看到如图的信息:使用向红外接收头发送信号,并在串口监视器中查看,你不同的的每个按键都对应了不同的编码,使用的编码方式也不相同。出现“FFFFFFFF”编码,是因为我使用的是NEC协议的

,当按住某按键不放时,其会发送一个重复编码“FFFFFFFF”。而其他一些协议的

,则会重复发送对应的编码。你还可以在以下码:找到常见品牌的编在以上示例中, 通过int

RECV_PIN

=

11;IRrecvirrecv(RECV_PIN);实例化了一个IRrecv类型的红外接收对象irrecv并将红外接收头引脚连接到了Arduino

11号引脚;接着在setup()

中使用enableIRIn()函数初始化红外 功能。在loop()

中使用decode()函数检查是否收到编码,并将结果 到decode_results类型的results对象中。 后的结果会保存在results.value中;最后通过resume()

函数, 开始接受下一个编码。如果要使用红外

控制Arduino上连接的设备,

只需要将

后的结果results.value与设定功能的编码进行比对,如果一致,便执行相应的功能,如在以上程序中添加如下语句:红外发射除了使用红外

发射红外信号外,

也可以使用Arduino来发送经过编码的红外信号。如图7-6所示,你只需要将红外发射管与Arduino连接即可,连接方式和普通LED类似,串联一个限流电阻即可。另外IRremote库只能使用3号引脚作为红外信号输出脚。l

连接示意图你可以在文件菜单>示例>IRremote>IRrecvDemo找到该程序:这样便可以模拟红外 发射经过编码的红外信号了。虽然红外光不可见,但你可以通过

或者电脑的头观察红外LED是否发光,以便排除硬件问题。你还可以使用两块Arduino,进行红外无线通信。在一定环境下,即使接收模块和发送模块没有相对,红外信号也可以靠物体反射进行

。在以上程序中, 使用了for循环,发送了3次Sony红外编码,这是因为在Sony、RC5、RC6协议中都规定,编码要发送3次。IRremote库还可以使用其他函数,发送不同编码的

红外信号,如使用sendNEC()发送NEC编码的红外信号,使用sendPanasonic()发送松下编码的红外信号等。除了这些常见标准协议外,IRremote库还支持发送自定义的原始编码,在下面的项目中,

讲给大家详细讲解。实验:

家电设备除了用

控制Arduino外,

还可以使用Arduino发送红外信号控制其他红外

设备。l

实验所需器材Arduino

UNO、红外一体接收模块、红外发送模块、可红外的家电及实现原理和设备中均 了各种功能的编码。按下 上的不发送的信号后,设备中的程序即会运行该信号编码对应的一个 之所以能 相应的设备,是因为同按键会发送不同编码的红外信号,设备接收到程序。因此要控制一个电器,需要先知道这个电器各功能的对应的红外信号编码。再使用Arduino与红外发射模块将需要的编码信号发送给这个电器,便可以达到Arduino控制电器设备的目的。7.1.3所示的发送sony、NEC等协议但是很多家电厂商都有自己的编码协议,且IRremote库并不支持,对于这种情况IRremote库还提供了一种以高低电平时间记录原始编码数据的方法。使用这个方法,即使不清楚信号的编码协议,只要将这些数据记录下来,再通过红外发射模块发送出一模一样的信号,便可以达到控制家电设备的目的。为了让IRremote库可以应对 的品牌、不同编码的家电协议,

需要先对库文件做如下修改:打开Arduino

IDE安装文件夹

>

libraries

>

IRremote下的IRremote.h文件,找到如下语句#define

RAWBUF

100

//

Length

of

raw

duration

buffer将其修改为#define

RAWBUF

255

//

Length

of

raw

duration

buffer并保存。接着使用以下程序获取你家电的原始编码数据:程序后,打开串口监视器,并使用你的家电

向一体化红外接收头发送红外信号,随意按下

上的按键,你会看到类似图7-8所示的输出信息。这里我使用的空调

,要控制你的家电设备,你需要使用对应的

,获取其编码。每次按下按键,Arduino都会输出一长串的数列,这些输出数列便是以高低电平持续时间表示的红外信号原始编码数据。而括号中的244表示这个数列有244个项。每个数列的第一项都是不定值,可以直接删去,删去后,

余下的数据做成一个数组。例如,这里我将打开空调的原始编码做成了一个数组:接着

只要使用sendRaw()

函数将这个红外信号数据发送出去即可。发送原始红外编码信号程序后,将红外发射模块对着

空调,便可以打开空调了。以上程序中irsend.sendRaw(open_button,243,38);的三

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论