Arduino家居安全系统构建实战

978-7-115-43013-7
作者: 【美】Jorge R. Castro(卡斯特罗)
译者: 李华峰
编辑: 胡俊英

图书目录:

详情

本书是基于Arduino构建家居安全系统的一本指南,能够引导读者学会自己设计一个家居安全系统,通过设置一些摄像头、传感器等实现家居安全系统的构建。本书还将介绍有关NFC、Wi-Fi以及蓝牙等互联技术,并且帮助构建一个良好的Web界面以供用户实现远程控制。

图书摘要

版权信息

书名:Arduino家居安全系统构建实战

ISBN:978-7-115-43013-7

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

• 著    [美] Jorge R. Castro

  译    李华峰

  责任编辑 胡俊英

• 人民邮电出版社出版发行  北京市丰台区成寿寺路11号

  邮编 100164  电子邮件 315@ptpress.com.cn

  网址 http://www.ptpress.com.cn

• 读者服务热线:(010)81055410

  反盗版热线:(010)81055315


Copyright ©2015 Packt Publishing. First published in the English language under the title Building a Home Security System with Arduino .

All rights reserved.

本书由英国Packt Publishing公司授权人民邮电出版社出版。未经出版者书面许可,对本书的任何部分不得以任何方式或任何手段复制和传播。

版权所有,侵权必究。


Arduino是一款便捷灵活、方便上手的开源电子原型平台,它包含软件和硬件。本书将展示如何使用Arduino Uno来开发一款高度互联的家居安全系统。

本书内容共7章,不仅介绍了有关家居安全系统的相关内容,也介绍了一系列有关Arduino开发的知识点,同时还介绍了家居安全系统开发过程中需要掌握的传感器、代码优化及调试、系统交互和连通等核心要素。

本书面向程序员中的新手,也面向那些想要使用Arduino开发一款个性家居安全系统的创客们。


李华峰,毕业于东北师范大学,目前在河北省一所高校任教,也是《精通Metasploit渗透测试》一书的译者。他自幼便是一个狂热的黑客技术追求者,现在主要从事网络安全与渗透测试方面的教育工作。作为一名资深的计算机安全领域的研究人员,研究的主要方向为网络扫描技术、漏洞检测、入侵检测等。读者可以通过邮箱联系到译者,邮箱地址是lihuafeng1999@163.com

Jorge R.Castro是一位年轻的计算机工程师,他是一位新型科技和开源电子方面的专家,在软件设计和移动开发方面有着丰富的经验。他本人是开源倡议的忠实支持者。

他还将大部分的时间用于研究计算机的安全与逆向工程(寻找软件的漏洞与分析恶意软件)。

我要感谢整个Packt出版社团队在我编写这本书时给予的帮助与合作,也要感谢Arduino和Python的开发维护团队。同样重要的一点是,我要感谢你购买了本书。在本书的带领下,你将为走向一个新的精彩程序世界迈出坚实的第一步。

Mark de Groot是位于荷兰阿姆斯特丹的KPN公司(荷兰皇家电信)的黑客红队成员。他对在复杂的技术环境下进行的渗透测试和安全评估拥有着丰富的经验。他还擅长进行网络渗透测试、对基础设施进行渗透测试、评估移动应用的安全性、渗透开发、逆向工程、fuzzing测试、网络协议分析、源代码的安全审计、入侵检测、计算机取证、跨平台开发、domotica和移动应用程序的代码开发。

Mark还十分热衷于CTF(夺旗)游戏,先后两次与他的团队在世界Cyberlympics比赛中获得了亚军。

Aaron Srivastava是一位富士医疗系统的软件工程师。他在北卡罗莱纳州立大学获得了生物医学工程学士学位。他一直都在从事Arduino板和其他微控制器端的项目。Aaron还是由Packt出版社出版的《Programming Arduino with LABView》一书的审稿人。除了Web开发之外,他还喜欢研究微控制器和底层程序。

夏方舟(Fangzhou Xia目前在麻省理工学院就读,是一位机械工程专业的硕士研究生。他在密歇根大学获得了机械工程专业的学士学位,在上海交通大学获得了计算机工程专业的学士学位。他的研究领域是机械工程,包括系统控制、机器人理论、产品设计、自动化制造。他的兴趣包括网络的应用开发,嵌入式系统设计以及数据采集系统部署。

我把这本书献给Sandra和Isabel,感谢他们一直以来对我的信任。

还要感谢我的朋友和家人,他们一直都支持着我。


Arduino Uno是一种建立在单一电路板上的开源微控制器,它能够接收来自环境的感知输入并对交互的物理对象进行控制。Arduino Uno同时还是一种开发环境,你可以使用Arduino编程语言来为这个电路板编写程序。Arduino Uno被广泛地应用于各种不同的场合和项目,包括建立一个自动调温器这种简单的项目,乃至机器人技术、Web服务器、地震仪、家居安全系统以及合成器等更为先进的项目。以上这些项目都可以使用Arduino Uno来实现。

本书将会介绍如何使用Arduino Uno来开发一个高度互联的家居安全系统,该系统采用了传感器网络技术,当警报条件被触发时系统会向Arduino Uno发送警告。

第1章 家居安全系统的入门知识,这一章讨论传统家居安全系统的工作原理,然后给出了一个屋主与家居系统如何进行互动的实例,这一章中还谈到了安装系统要做的准备以及如何对系统进行维护。

第2章 Arduino与Arduino IDE入门,这一章会就Arduino Uno进行介绍,你会了解到Arduino Uno开发板的历史,以及它的各个部分的特点和工作原理,另外还将学习到如何使用Shields来对Arduino Uno进行功能的扩展。

第3章 从代码到真实世界,这一章教会我们如何熟练地处理技术文档,了解各种信号的类型以及它们之间的差异,如何按照需求选取最适合的组件,最后将这些组件应用到一个实际的项目中。

第4章 打造属于自己的系统,这一章介绍了设计一个家庭自动化系统的方法,这个系统结合了家居自动化和物联网技术(Internet of Things,IoT)。你还将了解到在设计过程中要考虑的问题。我们还将确定项目的优先级、预算和可靠性。

第5章 Arduino和传感器,这一章会向你讲解如何来使用库文件,以及如何进行库文件的创建、导入和修改操作,对库文件的这些操作将提高你的代码的工作能力。此外,我们还将整合更多的传感器和电路元件,比如MOSFET和引擎,并学会如何控制这些设备。

第6章 文档和版本控制,这一章会向你讲解如何将代码文档化,以及如何分享代码、跟踪代码状态、维护代码的备份。最后,本章将指导你完成一个简单的图形化应用程序,通过它你可以远程控制你的Arduino Uno。

第7章 系统交互和连通,这一章谈到了如何建立一个用于进行人脸检测的系统,这个系统将增强我们基础设施的性能。我们对这一章的主要内容进行了简单的概括,最后,以一个实际应用的例子作为结束。这一章还引入了一些新的概念和技术,比如实时的人脸检测技术(人工智能)。

为了实现本书中的实例,你需要一个“初学者工具包”(这将包含一个Arduino UNO开发板、电缆和电阻,详细信息见https://www.arduino.cc/en/Main/ ArduinoStarterKit)。另外,还要准备一台计算机、一个树莓派以及具备能连上互联网的条件。你还需要从HTTP://www.packtpub.com/support下载Arduino和Python的代码文件,这些代码是被设计用来与电路原理图协同工作的,本书中研究了这些设计。在测试时,你要确保已经弄清楚了代码包中的代码。

本书是为程序员中的新手和那些想要了解Arduino Uno的爱好者编写的,目的是指导读者来设计一个家居安全系统。另外如果你想钻研Arduino的技术,那么本书也适合你。

本书正文会涉及很多版式,以区分不同的信息,以下是这些版式的解释。

正文中的代码、数据表名、文件夹名、文件名、路径名、URL、用户输入和Twitter账户可以表示为:“我们可以通过使用include指令来将其他的内容引入进来”。

代码块这样表示:

from time import sleep
import serial
port = serial.Serial('/dev/…', 9600) # "…" Put your serial port
# remember you can know it in the Arduino-IDE
# go to Tools > Serial Port

while True: # Enters a loop in which hears every 0.2 seconds
print port.readline()
sleep(0.2)

当我们想提醒你注意相关代码块时,特定部分的行或细目被设置为如下格式:

from time import sleep
import serial
port = serial.Serial('/dev/…', 9600) # "…" Put your serial port
# remember you can know it in the Arduino-IDE
# go to Tools > Serial Port

while True: # Enters a loop in which hears every 0.2 seconds
print port.readline()
sleep(0.2)

任何命令行的输入或输出如下:

sudo apt-get update

新术语和重要词汇都是以黑体显示的。你在屏幕、菜单或对话框中看到的单词,会按照这样的格式显示:“在IDE窗口的顶部找到Tools | Board,然后再选中Arduino Uno”。

警告或重要说明出现在这样的一个框中。

提示和技巧会这样出现。

我们欢迎读者的反馈意见。如果你对本书有任何的想法,喜欢或者不喜欢哪些内容,都可以告诉我们。这些反馈意见对于帮助我们创作出对大家真正有所帮助的作品至关重要。

你可以将一般的反馈以电子邮件的形式发送到feedback@packtpub.com,并在邮件主题中提及书名。

如果你在某一方面很有造诣,并且愿意著书或参与合著,可以参考我们的作者指南www.packtpub.com/authors

现在你已经是我们Packt图书的尊贵读者了,我们会尽力帮读者充分利用读者手中的图书。

虽然我们已尽力确保本书内容正确,但出错仍在所难免。如果读者在书中发现任何文字或者代码的错误,非常欢迎读者将这些错误提交给我们,以帮助我们改进本书的后续版本,避免其他读者产生不必要的误解。如果读者发现了错误,请访问http://www.packtpub. com/submit-errata ,选择相应图书,点击errata submission form链接,然后填写具体的错误信息即可。勘误一经核实,读者的提交将被接受,此勘误将被上传到本公司网站或添加到现有勘误表。读者可以通过在http://www.packtpub. com/support 中选择书名来查看该书所有的勘误表。

版权问题是每一个媒体都要面对的问题。Packt非常重视版权的保护。如果读者发现我们的作品在互联网上以任何形式被非法复制,请立即告知我们相关网址或网站名称,以便我们采取措施。

请把可疑盗版材料的链接发到copyright@packtpub.com

非常感谢你帮助我们保护作者的权益。

如果你对本书有任何方面的疑问,可以通过questions@packpub.com联系我们,我们将尽最大的努力为你解答。


在这一章中,我们将会介绍如下的内容:

为了紧紧跟随硬件的发展趋势,本书介绍了随处可见且价格极为低廉的平台——Arduino。今时今日,我们可以在各种各样的公共场所如中小学校、高等院校、小型企业或者公共机构见到这个小电路板的身影。

Arduino平台因其众多的优势而著名,例如低廉的成本、开放性的设计、简单易行的组装性以及可进行调整的性能。这也就是几乎所有的项目,无论专业还是业余,通过这些神奇的板子,都能从一张纸上的简单设计快速地在真实世界中成为现实的原因。本书中我们将介绍采用这种技术来创建我们的家居安全系统。

本章将会带你步入家居安全系统的世界。此外,你也将会了解到传统的监控系统与家庭自动化系统之间的差异,也会了解它们的工作方式、进行安装的需求以及如何就环境进行准备。

你应该在对电子产品和计算机的基本概念有一些了解之后,再来深入地研究本书的内容,并在随后的章节中深入地学习更先进的原理(但是请不必为此过度担忧,本书的每一个知识点都通过实例进行了仔细的说明,还关联了大量的相关信息,以此来方便读者的理解)。请弄清楚一件事,本书并不仅仅是一本带领你一步一步地创建一个简单系统的指导书,同时还是一本向你提供了能够打造一个自己专属的家居系统的相关知识的工具书。

安全建议:

在整个项目的开发过程中,你要采取最严格的安全措施,注意你周围的环境,永远不要独自一人施工,除非你拥有极为丰富的高级技术经验。另外,尽量少使用或者避免使用高电压的电气设备。

当然,如果你被问到一个关于安全系统组成部分的问题,你可能会毫不犹豫地对这个问题做出回答,例如,你可能会就监控摄像头、运动传感器和报警器等设备侃侃而谈。但是你确实了解这些不同的组成模块了吗?你能清楚地说出它们之间所有的关联吗?你能详细地讲出它们的工作方式吗?你能准确地说出传统的系统和当前的系统的区别吗?不要着急,这些答案都将为你揭晓。

好了,现在我们这里已经有这些问题的答案了。安全基础设施包括了所有的硬件设备、软件部分以及它们之间关联的设计,将所有这些组件组合在一起构成了一个整体。这里以一个访问接入控制点基础设施为例,在这个例子中,你使用一个连接到了数据库的读卡器,通过对数据库数据读取可以实现对卡的ID(卡片序列号)的检查,以此来确定门禁的放行或者禁止操作,还有摄像头提供支持,以实时地显示事件动态。

在这种情况下,如果有人试图破坏安全措施时,系统将会触发警报。然后,你可以决定下一步该怎么做。

正如你在这个简单的例子中看到的,我们使用了大量协同工作的要素来保证环境的安全。所有这些共同构成了一个安全的基础设施。

之前讨论了家居安全系统基本的组成部分,但是这些要素都是什么,它们是如何工作的呢?通过对它们进行分类,我们可以将一个安全系统分成两个部分。

一个基础设施的硬件要素必须能够胜任软件的所有技术需求。可以将它们进一步细分为3个不同的子类别。这种分类方式不应该被理解为具有排斥性,因为一个要素经常可以被分到多个子类别中,这种分类方式反而有助于你理解系统所执行的功能。

正如你在硬件部分的最后一段所看到的一样,当我们获得了一些输入的数据并希望在收到之后产生一个相应的反馈,那么我们就需要一个工具来建立一系列规则,这些规则将会决定系统的行为机制。这个过程要依赖软件资源,也就是你系统中的一套程序,来进行管理。

更具体地说,我们需要编写代码来创建自己的程序,并将它们存储在我们的微处理器芯片中。因此,当我们得到了需要的数据(例如,用来检测火灾的室内监控温度数值),对这些数据进行了处理(通过是否超过了温度的阈值,来判断火灾的发生),处理过程无需人工干预,然后,着手实施必要的措施(触发警报并执行灭火措施)。

在这里我并不会向你指定具体的一门编程语言。我们单就软件部分进行讨论,随后将会深入地研究各种不同的编程语言和应用程序(在本书中,我们将会使用到很多种编程语言,例如Python)。

读到此处,读者们应该已经熟悉了相关的基本术语以及系统的组成部分,并对它的功能有了一定的了解。但是现在你能确切地讲出,创建一个安全系统都需要些什么吗?在哪里安装又如何对其进行安装呢?它是否被安装在了正确的位置呢?这就需要你先来对这个系统进行设计。

如果你正在考虑部署一个安全系统,那么最有可能的原因就是你有这方面的关键需求。因此,在这里最重要的事情就是要准确地确定这种需求。如果做不到这一点,我们最终会步入歧途并造成损失或者导致半途而废。

如果并没有这种需求,你只是拥有着一颗对现代科技勇于探索的心,那么你可能是出于学习和娱乐的目的来设计这个系统,或者试图将自己的家打造成一个现代化的场所。你可以浏览一下这个行业的先进企业的网站以获得参考。

我们可以看到,大多数企业的系统是类似的,只是在某些部分存在一些差异,而这些差异大多是源于客户的需求。举个例子,许多系统都使用了相同的或者相类似的电子元件,那么它们的区别在哪里呢?就在于图形化用户界面(Graphical User Interface,GUI)的细节。对于系统而言,图形化用户界面就如同我们每个人的脸一样,它的设计同样也要考虑到最终用户的方便易用。如果你设计了一套任何人都无法理解和控制的程序,结局只能是徒劳无功。

一旦你在脑海中有了一个设计思路,那么下一步就是考虑你要安装的系统所在的环境,此外,还要考虑到你所能利用到的物资资源以及所能投入的经济成本。

这些事情看起来可能很简单,可你搜集的信息越多,工作起来的时候就会越顺利。这里举一个说明性的例子,就是必须弄清楚光源、管道以及提供给我们网络接入的布局。当你掌握了这些布局情况后,就可以很容易地构建我们的项目了。

说到这本书所使用的材料,我们采用了一款最为著名的Arduino模块——Arduino UNO的3.0版本。在下一章中,我们将会对它进行更多的了解。需要的其他材料也都是随处可见并且价格低廉的,它们当中很多都是由免费的硬件或者开源的硬件(本身也都是很便宜的资源)所创建的。因此,如果你愿意的话,可以使用相对装配模块而言成本极为低廉的方案在家中建立一个这样的系统。

如果想获得关于免费硬件更多的信息,请访问如下网址:http://en.wikipedia.org/wiki/Opensource_hardware

当你选定了安装的地址之后,这里就有许多的因素(甚至要考虑到周边行人)需要你进行考虑,以此来保证系统组件的安全性、完整性以及可靠性。

由于我们的系统能源要依靠于电力的提供,从性能优化和使用成本的角度来看,最好是使用一个独立的电力供应,而不要使用电池。电池的价格较高并且使用寿命又短。另外,在只需要一个连接的配备条件下,你可以将Arduino板和其他的一些模块放入墙体的变电箱中。

如果你的环境中不具备使用电源的条件,或者想要一个后备系统(例如一个UPS[不间断电源]),可以选择可充电式锂离子(Li-ion)电池,甚至太阳能电池板来作为系统的能源供应。后一种选择我们也经常在现实生活中遇到,例如路标、农场的监控系统以及气象站等。

警告:

无论在什么时候使用电池,你都需要考虑到极端的温度会对电池产生的影响,例如电池电流承载能力降低,在低温情况下电池放电能力的减弱,高温带来的热损坏风险,以及在某些极端情况下可能会有爆炸风险。同样地,我们也必须要小心湿气、水凝结和露水,这些都可能会对我们的基础设施产生破坏。

这里建议你最好能保证网络的连接,倒不一定是必须要连接到互联网上。如果连接到了一台内部网络的路由器上,通过这个连接你可以访问每一个独立的部分,修改它们的设置或者访问它们的服务(例如,一个用户图形界面显示警报是否已经触发)。

有一点要十分注意的是,在我们的地点周围尽量不要出现极端的无线电干扰,这些干扰可能是由于我们连续地使用某些技术设备产生的。这些设备以不同的频率向外发射电磁辐射,而这些电磁辐射可能会导致系统的行为被改变。

另一方面,如果安装是在室外进行的,你应该对设备进行妥善的安置,以使得它们免于恶劣天气(例如闪电以及接地)的伤害。所有这一切都可以摧毁系统的电路,而且也会给人身安全带来危险。

最后,我必须指出一点,如果你在家里养了宠物的话,那么在你安装那些价格可能十分昂贵的传感器和执行器的时候,一定要加倍小心。这些设备很有可能会被破坏,而针对它们的修复工作是十分困难的。另外,如果你的设备没有选好合适的定位,那么可能每当你的狗或者猫穿过花园的时候,都可能会激活报警系统。

请牢牢记住,要定期对设备进行维护。这里建议你最好在日程表中预留一些时间来专门执行系统的维护。

摆在你面前的最后一项工作就是如何将系统中所有组成部分连接到一起。目前,市场上已经有了一些高度可靠的无线解决方案,如果不考虑它们昂贵的价格,这些方案确实拥有着相当优秀的易用性。同样,这里举一个无线设备的例子,这个例子将会在本书最后的章节中被深入地讨论,这个设备适合在很多地方进行放置,并能快速地进行安装(无需费神地在环境中部署线路)。

正如之前所提到的,这种部署方式具有被无线电干扰的缺点。家用无线技术的工作频率很多都相当接近。目前最受欢迎的无线技术Wi-Fi和蓝牙所使用的频段都是2.4GHz,考虑到周边可能会有很多的设备同时也在使用这些无线技术,再加上空间有时会相对不足,这些都会成为通信的障碍。

如果你想获得更多的相关信息,建议访问负责监管这些技术标准的组织IEEE的官方网站:http://standards.ieee.org/

另外一种流行的部署方案就是利用你家中现有的布线。这里指的是你家中的用来传输电力的普通线路。这里有一些措施(例如X10技术),可以实现一栋建筑内的所有房间的互联,只需要它们的电源相数相同即可。X10技术可以使用电力线路来传送信号以及进行控制操作。这种部署方案的缺点主要在于初期的经济投入。

注意:

如果你想获得更多关于X10技术的相关信息请访问如下网址:

http://en.wikipedia.org/wiki/X10_(industry_standard)

最后,我们将给出一个传统系统与现代化系统之间的比较,值得指出的是,在面对不同需求的时候,它们各自都有着特定的用处,这些需求例如减少模型的复杂性,提高系统的可靠性,增加系统可用性以及向开发者提供丰富的信息。

以前,如果综合考虑到多种因素,例如价格、技术的成熟度以及现有的基础设施(连接)等,以一个较低的成本来实现一个可以实时管理的系统几乎是不可能的。

而在智能手机和平板电脑已经普及的今天,这些设备有足够的能力来将硬件收集的数据即时进行发送和接收,并实现这些数据的可视化。我们可以在自己创建的服务器上来把这样的一个系统变成现实。更进一步地说,你甚至可以利用拥有更强大处理能力的云计算系统,这种方案可以真正的实现零维护。

在这里我还要补充一点,只需要具备基本的编程和电子方面的知识,就可以完成系统的安装、维护和迁移。如果有一天你要搬家了,你可以轻松地将系统中最重要的设备带走并再次利用。

最后一点,你在世界上的任何地方都可以实现对数据的访问。只需要在智能手机上安装一个简单易用的应用程序,你就可以检查家中的所有事务是否井然有序。

因此,可以这样说,如今我们拥有了更智能、更经济的系统。这些系统运行速度更快,也为我们的家庭和环境提供了更大的安全保障。

在这一章的学习中,本书详细地介绍了一个安全家居系统的各个部分,但是并没有涉及相关的任何具体设备。通过理论讲解的方式,我们了解了系统的组成部分以及它们各自的功能。在拥有了这些知识之后,我们已经做好了在下一章中深入学习的准备了。我可以向你保证,下一章中内容将会是引人入胜的。

在下一章中,我们将了解Arduino的概念和历史,以及Arduino Uno的各个组成部分。同样我们也将学习到它们的工作方式,以及如何使用shield对Arduino UNO进行扩展。


相关图书

ChatGPT原理与应用开发
ChatGPT原理与应用开发
低代码打造RPA——Power Automate Desktop基础实战
低代码打造RPA——Power Automate Desktop基础实战
社交网络对齐
社交网络对齐
仿生机器鱼人工侧线感知技术
仿生机器鱼人工侧线感知技术
物联网项目实战:基于Android Things系统
物联网项目实战:基于Android Things系统
自制AI图像搜索引擎
自制AI图像搜索引擎

相关文章

相关课程