Arduino开发实战指南:智能家居卷.html.pdf
《Arduino开发实战指南:智能家居卷.html.pdf》由会员分享,可在线阅读,更多相关《Arduino开发实战指南:智能家居卷.html.pdf(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、前言 智能家居,又称智能住宅,在国外常用Smart Home表示。通俗来说,智能家居是将灯光、家电、家庭影院、燃气预警、远程控制、电动窗帘、安防设备、背景音乐等连接成 一个网络物联网,通过一台智能家居主机(控制管理系统)进行统一管理,实现家居设备的自动化和智能化控制,给使用者带来最大程度的高效、便捷、舒适与安全的体 验。 使用者可通过语音、短信、手机或平板电脑触摸屏、无线遥控器、上网设备等在家里或通过网络远程控制家用设备。我们想象一下,在回家的路上,你可以提前用手机打开 家中的空调和热水器;晚上走进自己家的门厅时,对着门厅直接说“开灯”,门厅的灯就亮了;开门时,安卓密码锁功能开启,系统会自动打
2、开电子门锁,安防撤防;坐在沙发 上用手机遥控自己家的电视、空调;睡觉前在床上就可以用手机关闭所有房间的灯光。这一切是多么惬意啊! 出门在外,如果突然想起家里的水壶还在炉台上加热,我们可以通过网络远程、短信等关闭燃气阀门;也可以在接到家中安防告警的短信或家中患病的老人通过手机发来的 SOS短信时,在网上通过摄像头观察家中的情况。 我们还可以进一步设定和执行各种复杂的场景操作,假如使用安卓手机设计了一个“家庭影院”场景,当按下“家庭影院”场景按钮时,智能家居系统将自动执行事先设定 好的多个动作:关闭窗帘、关闭吊灯、打开背景灯、打开电视并切换到高清输入模式、打开DVD、打开功放等,以前需要执行多个动
3、作,现在只需按一个键就可以全部完成了。 正如比尔盖茨在未来之路中曾经说过的那样:“在不远的未来,没有智能家居系统的住宅会像今天不能上网的住宅那样不合潮流。” 很多人或许觉得智能生活离我们还很远,只是个传说中的东西,只闻其名不见其形。其实智能家居系统早已在高端住宅或别墅中实现了,只是没有普及到大众家中,究其原 因,首先是目前主流的智能家居厂家如美国Control4(华歌)、霍尼韦尔、索博、波创、科力屋等,一套系统动辄几万、几十万,甚至上百万,这不是一般家庭能够消费得起的。 其次,市场上许多智能家居产品的功能多为噱头,实用性不强,价格偏高,与我们的实际需求相距甚远。比如,某品牌的智能马桶,价格在万
4、元以上,拥有诸多功能,如自 动冲洗、洁身、坐圈加热、暖风烘干、除菌消毒以及夜间照明等,但其中很多功能对于一般家庭来说中看不中用。其实智能家居系统对使用者来说实用和舒适最重要。 能不能我们自己动手做一套简单易用的智能家居系统呢?答案是肯定的。作为一名业余电子爱好者,我很早就考虑自己动手设计一套符合自己需求的智能家居系统,只是一 直没有找到合适的平台。2014年年初接触到Arduino互动电子技术后,其系统软硬件的开源性、丰富的扩展性给我很大启发,于是决定利用Arduino电子积木搭建心中的系统,从开 始的点滴尝试到最终完成虽经历了很多曲折,却让我学到了更多的知识。对有兴趣动手做电子产品的业余电子
5、爱好者说,其实做一个产品并不难,难的是恒心和毅力。 大家或许觉得智能家居系统涉及计算机技术、网络通信技术、传感器技术、互联网技术,这么多技术都要学习一定很难。我要对大家说,零基础的读者也可以完成本书所涉 及的内容。利用Arduino开源代码,可以完全不需要了解硬件、内部结构和寄存器设置的特点,仅仅知道它的端口作用即可;即使完全不懂硬件知识,只要会简单的C语言,就可 以按照书中一步一步的指导完成整个系统的搭建。 手机上的Android程序编写工作也许会让大家头痛,为此,在本书中,我向大家介绍一款图形化的编程软件App Inventor。它根本不需要你具备任何编程知识,只要像搭积木一 样将预先存放
6、好的组件拖到你想要的位置,即可完成一个复杂的Android程序。 本书前6章介绍了8个手机Android程序和Arduino单片机利用蓝牙之间相互通信控制的实验制作过程,一个用语音控制Arduino遥控器实验和一个室内温湿度用语音合成器播报实 验。第7章介绍了3个物联网平台功能和借助平台通过网页接收数据并控制设备的方法,以及如何实现微博发布和微信互动。最后一章介绍了如何自己动手搭建一个微信智能家居 平台。这一章里涉及PHP语言和MySQL数据库知识。大家只要根据注释部分修改自己的信息,复制其他部分就可以实现微信平台的搭建。 如果大家在实验过程中觉得制作过程比较繁琐,也可以直接到附录B指定的网站
7、下载我已经编写好的程序和源代码。实验中所需要的素材、库函数、App Inventor离线数据 包、Arduino编译软件等书中所提到的所有需要从网上下载的程序和资料也都保存在附录B指定的网站上,供大家下载和相互学习。 这本书能够出版,首先感谢机械工业出版社华章公司能够给我这么一个机会,还要特别感谢华章公司的编辑们,没有他们的辛苦工作,这本书不可能与广大读者见面。 我还要感谢张国强和程晨两位老师对本书提供的帮助和指导,他们提供了大量信息和资料。这里还要向大家推荐两本书:Arduino开发实战指南(程晨编著)、C+程 序设计(谭浩强编著)。如果大家对我的作品感兴趣,就一起动手吧! 由于时间非常仓促
8、,作者水平有限,书中难免存在错误,恳请广大读者批评指正! 赵志 第1章 蓝牙灯 你有没有想象过用手中的智能手机来控制家中的照明灯呢?现在,我们要将这个“天方夜谭”的想法变成现实。首先,要为家中的电灯安装一个蓝牙继电器控制模块, 然后在Android智能手机上安装你亲手编写的蓝牙控制程序。这样,不用拨动墙壁开关,一个用手机控制电灯亮灭的蓝牙灯就真正来到了我们的身边。也许你会说,这些工作一 定非常难吧!我告诉你,只要通过简单的C语言编程,就可以跟着我一步一步完成蓝牙灯的制作。 当晚上你回家摸不到墙壁上电灯开关时;当天冷了,睡觉前不想起床关灯时;当出门前想关闭所有房间电灯时;拿起你身边的手机,轻轻一
9、按就全部轻松搞定!一切就这么 简单,让我们一起动手吧! 开始前,先介绍一下蓝牙灯制作需要准备的硬件。 1.1 Arduino简介 Arduino是一个基于开放源代码的软硬体平台。它的硬件具有丰富的接口,有数字I/O口、模拟I/O口,同时支持SPI、IIC、UART串口通信,能通过各种传感器来感知环境, 并通过控制灯光、马达和其他装置来反馈和影响环境。 Arduino编程语言没有复杂的单片机底层代码,没有难懂的汇编程序,只有简单而实用的函数。直接调用它们就可以完成你需要的功能,而且简便的编程环境(Arduino IDE)拥有极大的自由度,可拓展性能非常高。标准化的接口模式、丰富的开放源代码,使你
10、可以轻松地完成复杂命令的编程工作。 1.2 蓝牙灯的制作 由于灯泡属于大电流和高电压设备,无法直接用Arduino主控板的数字口进行驱动,所以选用继电器控制电灯的开和关,手机和Arduino主控板之间通过蓝牙传送控制命令数 值。 1.3 App Inventor基础 对于一个没有软件编程基础的人来说,编写一个Android手机的控制程序是非常困难的。不但要学习Java知识,还要学习Android SDK知识。不过现在你不用再为此担 心,Google公司专门开发了一款图形化手机编程软件App Inventor。这款编程软件的使用不需要具备一定专业知识,甚至根本不需要掌握任何的程序编制知识。因为这
11、款 软件已经事先将软件代码编写完毕,用户只需根据自己的需求,使用基本组件,例如按钮、文字输入输出等模块,就可以像搭积木一样完成复杂代码程序的拼装。 App Inventor真正让你抛开复杂程序编写的烦恼,它为没有编程基础但是富有创意精神的爱好者提供一个很好的开发平台。 1.4 制作一个App 1.4.1 新建一个项目 进入App Inventor开发环境的Designer界面后,在Designer界面的左上方,选择ProjectMy Projects,进入如图1.18所示项目界面。在项目页面的左上方,选择New Project,新建一个项目,并命名为Lightcontrol。 图1.18 项目
12、界面 第2章 蓝牙锁和LED灯光调节 最近在众筹网站(Kickstarter)上比较火的是一款名为Noke的智能蓝牙锁。Noke是一款由FUZ Designs开发的蓝牙智能挂锁,可以通过手机解锁而无需钥匙。其实我们也 可以根据上一章知识,自己动手制作一把蓝牙锁。 2.1 蓝牙锁 2.1.1 电子锁 在市场上各种各样的电子锁层出不穷,我们买一把最简单的电子锁,如图2.1所示。 图2.1 电子锁 电子锁(电磁锁)原理非常简单:在盒子里有电磁线圈,利用电生磁的原理,当电流通过硅钢片时,电磁锁会产生强大的吸力,紧紧地吸住门上铁片,达到锁门的效果。只 要小小的电流,电磁锁就会产生莫大的磁力。当控制电磁锁
13、电源系统识别人员正确后则会断电,电磁锁失去吸力即可开门。开门后经预设延时后电磁锁恢复通电状态与门上铁片 吸合,门再次锁紧。 2.2 LED灯调节 2.2.1 LED灯 我国大力倡导节能降耗,积极推广LED节能灯照明,因为LED照明灯具有节能、环保与寿命长等优点。一只30瓦的LED半导体晶体灯泡,亮度相当于120瓦的传统灯具。也许 不久的将来,所有的灯泡都将被LED灯所替代。LED灯如图2.8所示。 图2.8 LED灯 LED的心脏是一个半导体的晶片,晶片的一端附在一个支架上,是负极,另一端连接电源的正极,整个晶片被环氧树脂封装起来。它是一种能够将电能转化为可见光的固态 的半导体器件,具有直接把
14、电转化为光、转换效率高、构造简单、成本低廉、技术成熟度高等特点。 第3章 电视遥控器 这一章我们一起动手用手机做一个电视遥控器,代替老式按键遥控器。有朋友来家里做客时,拿出手机,轻轻一按,电视就打开了,是不是很酷呢?如果能够用语音遥控电 视机是不是更酷呢?那就行动吧! 首先介绍一下红外遥控原理。红外遥控作为一门较成熟的技术,已经成为家电的常规控制手段。电视遥控器采用的就是红外遥控方式,利用一个能发射出特定波长红外光的 二极管,将一连串二进制脉冲码信号发射出去。接收电路采用一个集成红外线接收和放大一体的红外接收器模块,实现信号还原,经过解码电路,完成对电视机各种功能的控 制。 3.1 红外编码基
15、础 红外遥控发送的编码一般包含引导码和数据码两部分:引导码的作用是标记编码信号的开始,使遥控器能以此判断出所接收的信号是干扰还是遥控代码;数据码是遥控码的 主体,数据码的组成极其多样,比较常见的是由用户码和命令码以及它们的反码进行组合的一连串二进制数据,一般通过码宽或相位变化表示。 一种码宽表示法是高电平时间固定,由低电平时间长度区分0、1。如图3.1所示为NEC编码方式的0、1码(所谓高电平指红外管发射红外脉冲,低电平指发射间歇)。 图3.1 NEC的0、1码 另一种码宽表示法是低电平时间固定,由高电平时间长度变化。如图3.2所示为SONY SIRC编码方式的0、1码。 图3.2 SONY
16、SIRC的0、1码 相位表示法顾名思义,即0、1码的时间长度相等而相位不同。如图3.3所示为RC5编码方式的0、1码。 图3.3 RC5的0、1码 每一个遥控器的用户码只有一个,遥控器上的每个按键对应一个特定的命令码,不同的命令码可以区分不同的按键。 如果长时间按键就会产生重复码。遥控编码协议中对重复码的定义也是形式多样,有不发重复码、短重复码、数据码重复、全码重复和变码重复等几种。 短重复码方式最常用的是NEC码,按住按键会发射一个专用的短重复码,而不是重复发送按键的编码。数据码重复多用于JVC遥控器,它的重复码不发引导码。全码重复是 指每次全部重发,是简单、常用的一种方式。变码重复是最特殊
17、的一个类型,它的重复码与第一次发码不同,比如在RC5和RC6码型中都有一位翻转码(RC5的翻转码在第3 位,RC6的翻转码在第5位),这位码实际上是用于按键的奇偶计数,每按一次按键0、1翻转一次。 因为环境中充满红外辐射,为了使红外信号在发射过程中免受阳光、灯光、噪声等的干扰,通常都是先将其调制在一个固定频率上,频率范围为30kHz60kHz,最常用的是 38kHz和40kHz载波频率。由于没有统一的遥控编码协议,各个厂家自行设计了五花八门的编码方式,常用的红外编码格式有20多种,主要有NEC、索尼SIRC、飞利浦RC5、 RC6、三洋、三菱、夏普、松下、JVC等。 3.2 IRmote库函数
18、 为了提高红外编码的识别效率,需要引用一个IRremote库函数。在编写基于红线传感器收发通信的Arduino应用程序时,这个开源库函数可极大地减少我们的编码工作量和 程序代码量。库函数硬件上支持多种Arduino主控板,软件上支持多种红外遥控编码的发送和接收协议,而且便于扩展和用户自定义。 安装IRremote库函数可到 的文件夹复制到arduino-1.0.5-r2/libraries/文件夹中,并重命名文件夹为IRremote。arduino-1.0.5-r2是你的Arduino安装目录。当复制完成后,重新启动Arduino编程软件即 可。 到目前为止,IRremote红外遥控库函数已支
19、持NEC、SONY SIRC、飞利浦RC5、飞利浦RC6、夏普、松下、JVC和原始协议(Raw protocols)。如果你需要额外的协议, 还可轻松增加。这个函数甚至可以记录你的遥控编码并重新发送,如同一个小型的万能遥控器。 为了便于发送和接收,库文件中分别定义了3个类:IRsend类(负责发送红外遥控编码),IRrecv类(负责接收和解码红外消息),decode_results类(负责返回解码结 果)。库文件不支持同时发送和接收编码,接收期间会禁止发送。 3.3 获取遥控器编码 要想获取你手中的老式电视遥控器按键的编码,最简单的方法是使用Arduino搭建一个解码电路,将你手中的遥控器按键
20、编码进行解码并记录下来。 3.4 制作Arduino遥控器 上一节我们完成了老式遥控器的解码,本节将根据解码结果制作Arduino遥控器,实现用手机通过蓝牙控制Arduino遥控器(Arduino主控板和手机蓝牙通信占用主控板的串 口),进而由遥控器控制电视的目的。Arduino遥控器代码的设计思路如表3.1所示。 表3.1 遥控器设计思路 按照解码程序记录下来的遥控器按键编码值重新发射出去,就可达到模拟电视遥控器发射原理,实现对电视控制的功能。 3.5 “未知类型”遥控器代码 IRremote红外遥控器库函数仅支持有限的几种协议,而目前红外编码协议上百种,如何实现这些“未知类型”遥控器的控制
21、命令发送呢? IRremote红外遥控器库函数还具备支持发射和接收原始协议数据的功能。这个功能原本是用于调试的,但是我们也可以将它用于发射和接收该库函数无法识别的协议,从而 达到支持各类遥控器的功能。 3.6 制作遥控器的App 在第1章蓝牙控制电灯的基础上,新增加5个基本按钮(电源、上一个频道、下一个频道、音量-、音量+)。这5个按钮的功能是一样的:当按钮按下时,图片由原始图片转 换为按下图片,间隔一定时间(比如1秒)后,又恢复到原始图片,同时向Arduino主控板发送控制命令。 要完成上述功能,需要以下步骤。 3.7 语音识别模块 在本章开头部分我们提到,电视遥控器采取两种方式实现:一种是
22、手机遥控,另一种是语音遥控。这一节我们一起制作一个语音遥控器。 既然是语音遥控,就要用到语音识别模块,这里采用的是DFRobot Voice Recognition V1中文语音识别模块。该模块采用LD3320非特定人语音识别芯片,在描述关键词语 时,是用音标标注出要识别的关键词语进行识别的。Voice Recognition模块自带了一个Voice库函数,我们可以直接引用它,以减少我们的编码工作量。 安装Voice库函数,到 Recognition”页面,在页面底部有“Arduino 1.0库文件下载”链接, 点击下载得到一个Voice_1.0.rar压缩文件包,解压缩,并将得到的Voice
23、文件夹复制到arduino-1.0.5-r2/libraries/文件夹中。当复制完成后,重新启动Arduino编程软件即可。 3.8 语音遥控器的制作 我们利用Arduino语音识别模块记录用户所下达的口令,将其转换成红外发射信号,模拟电视遥控器实现电视控制功能。 第4章 温湿度计与温控 在这一章我们制作两种数字温湿度计:一种是用我们的手机作显示终端,直接查看当前的温湿度;另一种是通过语音方式,当我们向主控板询问当前温湿度时,主控板通过 语音合成板向我们报告当前温度和湿度。在本章的后半部分讲解智能家居温度控制的实现方法。 4.1 温湿度传感器 数字温湿度传感器种类很多,主要有:DHT11、S
24、HT1x、DHT21(AM2301)、DHT22(AM2302)等。这里我们以单总线数字温湿度传感器DHT11为例,其硬件如图4.1 所示。 图4.1 DHT11硬件图 DHT11温湿度传感器是一个含有已校准数字信号输出的温湿度复合传感器。它包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接,具有体积 小、功耗低、信号传输距离可达20米以上的优点。它采用4针单排直插引脚封装,引脚1是电源输入,输入范围在35.5V DC;引脚2是单总线数据输入/输出引脚;引脚3是空 脚;引脚4是电源地。 4.2 温湿度计程序代码 为了简化程序,我们可以直接使用厂家提供的库函数,可到 需的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Arduino 开发 实战 指南 智能家居 html
限制150内