Arduino家居安全系统构建实战(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-19 13:54:09

点击下载

作者:[美]Jorge R. Castro(卡斯特罗)

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Arduino家居安全系统构建实战

Arduino家居安全系统构建实战试读:

前言

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 sleepimport serialport = serial.Serial('/dev/…', 9600) # "…" Put your serial port# remember you can know it in the Arduino-IDE# go to Tools > Serial Portwhile True: # Enters a loop in which hears every 0.2 secondsprint port.readline()sleep(0.2)

当我们想提醒你注意相关代码块时,特定部分的行或细目被设置为如下格式:from time import sleepimport serialport = serial.Serial('/dev/…', 9600) # "…" Put your serial port# remember you can know it in the Arduino-IDE# go to Tools > Serial Portwhile True: # Enters a loop in which hears every 0.2 secondsprint 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联系我们,我们将尽最大的努力为你解答。第1章家居安全系统的入门知识

在这一章中,我们将会介绍如下的内容:● 什么是家居安全基础设施● 它是如何工作的● 部署这样一个系统都需要些什么● 在当前条件下为安全系统所做的准备● 有线安全系统和无线安全系统● 传统系统与现代化家居安全系统

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

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

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

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

安全建议:

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

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

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

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

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

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

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

体感官。它们的功能就是从环境中搜集信息,并将这些信息转化

为数字信号,然后将这些信号发送给另外一些组件,这些组件就

是被设计用来控制这些信号的,所获取的数据将会作为我们设备

的输入。这个类别中包括了摄像机、声音传感器、运动检测传感

器、烟雾传感器、红外传感器以及温度传感器等。● 执行器:如果说传感器是提供了环境中的所有必要信息的感觉器

官,那么执行器就是执行所有行动的肌肉组织。一旦我们做出了

一个行动的决定,我们将会发出一个信号来命令该要素开始工

作。这个类别中的典型设备有警报器、扬声器、锁和开关。● 控制器:这个部分就如同系统的大脑。一个典型的实例就是微处

理器开发板,例如一个Arduino控制器,它可以存储并运行程

序。控制器可以接收感知的信号,并对它们进行处理,然后激活

并控制执行器设备和警报器。1.2.2 软件部分

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

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

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

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

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

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

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

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

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

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

如果想获得关于免费硬件更多的信息,请访问如下网址:http://en.wikipedia.org/wiki/Opensource_hardware1.4 在当前条件下要为安全系统做的准备

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

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

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

警告:

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

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

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

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

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

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

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

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

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

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

注意:

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

http://en.wikipedia.org/wiki/X10_(industry_standard)1.6 传统系统与现代化的家居安全系统的比较

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

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

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

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

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

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

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

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

在这一章中,我们将会介绍如下的内容:● Arduino UNO的介绍● Arduino开发板● 项目实施中的安全预防措施● Arduino集成开发环境(Integrated Development Environment,

IDE)● 编写第一个Arduino程序——“Hello World”● Python编程语言和Arduino

在经过了上一章中对家居安全系统简单的学习之后,我们现在即将进入神奇而又强大的Arduino世界。随着本章内容的展开,我们将会一步步地了解到Arduino的特点、编程环境以及它那强大的功能。在这一章中,我们还将会介绍创建自己的第一个Arduino程序。不过在此之前,我们首先还是先来了解一下Arduino UNO。

Arduino项目最初于2005年在意大利的伊夫雷亚被设计并开发出来,最初是为了给学生在开发项目时提供一种价格低廉而又性能优越的开发板。在Arduino平台出现以前,市面上并没有性价比如此优越的同类产品。Arduino平台具有极大的优势,它具备了多种功能,成本又十分低廉,价格不超过30美元,对于所有人而言开发都十分简单,即使你完全没有专业方面的知识也可以轻松掌握,学习效果十分理想。另外,Arduino所使用的编程语言是基于C#(C-Sharp)。在Arduino出现之前,我们建立系统可不是一件简单的事。例如,我们建立一个简单的发光系统,它的功能是每隔固定的一段时间就闪烁一次。那么我们必须使用一种特定的芯片并对其进行处理,使得这个芯片可以按照要求来控制灯的闪烁。另外,我们还需要手动的将这个芯片焊接到一个PCB上。

Arduino的软件和硬件自从推出就一直遵循着开源的原则。尤其是Arduino的开源硬件,得到了社会各界的认可并直接促进了硬件厂商的技术变革。借助于互联网的传播,Arduino在短短的10年成长过程中已经成为了世界上最流行的开发板产品。

需要注意的是,目前世界上有很多家的厂商都在生产Arduino开发板,例如Adafruit、 SparkFun等,当然Arduino本身也提供这些产品。因此,你经常会发现一些不同品牌的开发板却有着相同的设计。

Arduino的成功得益于其优秀的开源措施。Arduino的开发团队鼓励所有人去查看和下载他们的设计图纸,参与对Arduino的学习和研究,将资料进行分享或者使用Arduino和其他设备联合工作。随着Arduino相关的开源社区和开源论坛的完善,你可以随时从这里获得知识和解除疑惑。

这里推荐一个由Massimo Banzi在TED-Talks上录制的关于Arduino短片,你可以访问如下地址进行查看:http://youtube/UoBUXOOdLXY2.1 Arduino 开发板

从现在开始,我们将开始讲述Arduino的特性,Arduino的标识如图2-1所示。下面列举了开发板的一些性质,我们可以根据这些性质作为标准来对其进行分类:● 所拥有输入/输出引脚的数量● 所使用的芯片类型● ATMEGA系列● Intel系列● 规格● 用途● 连接类型

前面给出的分类标准并不是绝对的,但是这些标准可以帮助我们快速对各种开发板有一个大概的认识,从而根据自身的需求做出最适合的选择。当然,正如前文所提到的,所有的开发板都是基于相同的原理,从一个到另外一个并不会有太大的差异。下面列举了当前市场上流行的开发板。图2-1 Arduino的标识2.1.1 Arduino MEGA

这种开发板拥有数目众多的输入输出引脚,用来实现和大量的传感器或者执行器的互联,这样就无需再使用复用器之类进行信号交换的设备。使用MEGA作为开发板的优势在于,在无需扩展板的情况下,我们就可以通过它来控制大量的硬件。MEGA经常应用在气象站和3D打印机等场合。2.1.2 Arduino NANO

Arduino NANO是这个系列开发板中体积最小的一种。由于体积上的优势,Arduino NANO可以轻易地被集成到任何已建成的装置中,从而为其提供新的属性。对于一些对计算能力要求不强的系统,Arduino NANO是十分理想的智能模块,它拥有着极低的功耗(5V)和较轻的重量。它拥有一个micro USB接口,所有的输出接口都设计在了开发板的背面(我们可以通过电缆或者焊接的方式对其进行连接)。Arduino NANO在一些受到环境限制的最终解决方案(例如无人机或者火箭)中是极为理想的。2.1.3 Arduino ETHERNET

这个开发板和Arduino UNO十分相似,它的优势在于拥有一个以太网接口。如果以前一直使用有线连接,那么现在是时候来考虑一下无线连接的方案了。2.1.4 Intel GALILEO

Intel Galileo是一款使用了英特尔处理器的新型开发板。它拥有一个以太网接口,两个micro USB(双向)接口,一个多功能的输入输出接口。利用这个接口可以实现多个开发板的集群工作,而每一个开发板本身都可以作为一个独立单元来工作。2.1.5 Arduino UNO

Arduino UNO(如图2-2所示)是目前市面上通用性最好使用范围最广的开发板,大小适中的特点使得它几乎可以部署在任何的环境中。乍一看这个开发板似乎很简单,但是,它拥有着大量的扩展模块,例如Wi-Fi、蓝牙、NFC和I/O扩展模块板,这个特点使得Arduino UNO可以满足我们在各方面的需求。这使得Arduino UNO成为了一款极为灵活的微处理器。在目前的市场上,Arduino UNO得到了开发者们最大的支持。图2-2 Arduino UNO (Fritzing工具)

Arduino UNO开发板上包含了13个数字接口、6个模拟接口、一个5V和一个3.3V的电源引脚。另外它还有一个可以更换的ATmega328芯片,这个特性使得将来对其进行升级和修理都成为可能。

技巧:

在某些情况下,你可以拔下微控制器芯片,然后将Arduino 开发板作为一个串行端口适配器,但是这个技术在本书中并没有详细介绍(注意:如果你这么做的话,可能要冒着设备被损坏的风险)。当芯片被移除以后,我们将会使用引脚0(RX)和1(TX)。

想获得有关于开发板的规格、功能的更多信息或想购买各种开发板,你可以访问如下链接:● http://www.arduino.cc/en/pmwiki.php?n=Main/Boards● http://store.arduino.cc/● https://www.sparkfun.com/● https://www.adafruit.com/2.2 安全注意事项

孩子们也可以参与到本书的实例中。但是至关重要的一点是,孩子们不可以独立完成这些任务,这一切必须在一个负责任的成年人的监督下来进行,整个过程中要严格遵守安全措施。尽管我们使用的组件都工作在一个很微弱的电压下,通常在3.3V到5V之间,但是疏忽或者某些技术的不当使用同样会给使用者带来危险。因此,建议你要遵守如下的注意事项。● 始终保持干净、整洁的工作环境。● 在使用电器或者进行加热操作的时候,你一定要远离可燃物品。

要知道一个装满了油漆或者化学药品的仓库可不是一个能进行焊

接的地点。● 对于孩子来说,Arduino可以算是一个完美的选择,它不需要进

行线路焊接。但是要注意Arduino包含了许多的细小的零件,因

此一定要小心处理。● 如果你工作在一个高电压的环境下,在对任何模块和组件进行操

作时一定要记得关闭电源。● 还有一定要注意的一点是,尽量保护你项目中使用的材料,不要

使其受到恶劣天气的影响。在最终安装设备之前,一定要进行长

时间的测试(这样做是为了保证组件在运行过程中的稳定性和安

全性)。● 如果你在项目的哪个环节卡住了或者不了解自己现在正在做什

么,又或者对某个环节产生了疑问,那么有很多的方法来解决这

些问题。首先你可以尝试通过上互联网(这里有很多的制造商论

坛)来寻找问题的解决方案,又或者你可以研究项目的装配简图

来对其进行分析。如果你十分了解这些设备的原理,你还可以使

用万用表来解决一些问题。

但是人非圣贤,孰能无过,那些将自己的设计上传到网络的人也同样会出错误。如果你选择了别人的设计,在这里还是要建议你尽量联系到设计者,以获得更详细的设计信息。这将帮助你对设计有更多的了解,同时也确保了你能搞清楚为什么这个设计可以工作起来,以及这个设计是如何工作的。2.3 Arduino IDE

我们现在介绍Arduino IDE的安装过程。2.3.1 安装

在完成了对相关概念的理解之后,我们就要开始步入实践环节中了。你将使用到Arduino UNO,一个USB的A型公头对B型母头转接线,一台个人计算机或者一个树莓派。

接下来,我们将介绍在各种操作系统下Arduino IDE的安装步骤。这些不同系统的安装过程具有一定的复杂性,因此在处理时应该十分仔细(关于其他的发布版的安装信息或者在安装的过程中遇到的麻烦,你可以通过阅读在线操作指南来查询或解决)。

如果你需要下载Arduino IDE,可以访问:http://arduino.cc/en/Main/Software1.在Windows操作系统上安装IDE

如果想在Windows操作系统上安装Arduino IDE,你必须先获得系统的管理员权限。在成功取得了必需的管理权限之后,你就可以按照如下步骤进行安装操作了。(1)将安装文件下载到桌面上,并对其进行解压缩操作。(2)双击运行可执行文件(.exe文件)。(3)当安装过程结束后,你就可以将这个模块连接到你的计算机上了。2.在Mac操作系统上安装IDE

如果想在Mac操作系统上安装Arduino IDE,你必须先获得系统的管理权限。在成功取得了必需的管理权限之后,你就可以按照如下步骤进行安装操作了。(1)将安装文件下载到桌面上,并对其进行解压缩操作。(2)运行.dmg安装文件并按照屏幕中的指示进行操作。(3)当安装过程结束后,你就可以将这个模块连接到你的Mac计算机上了。3.GNU-Linux (Debian-Ubuntu)

如果想在Linux操作系统上安装Arduino IDE,你可以按照如下步骤进行安装操作。(1)在你确认了自己拥有超级用户的权限(当你拥有了的这个权限之后,在你所输入的命令之前都会有一个美元符号($))后,打开一个终端窗口,运行如下的命令:George:~$ sudo apt-get update //更新存储库George:~$ sudo apt-get install arduino //下载并安装George:~$ echo $? //测试(2)在最后一个命令输入完成之后,如果屏幕上输出了一个字符0,这表明了安装已经成功完成。如果不成功的话,请再次仔细执行前面的步骤。如果错误仍然存在,请参阅Arduino网站上的官方指南。(3)如果你使用的是其他的一些Linux发行版,而这些发行版并不含有高级程序包工具(Advanced Package Tool,APT)。那么你可以从Arduino的网站下载一个官方的.tgz库文件,然后执行以下步骤:George:~$ tar xvzf (filename.tgz) //解压缩文件George:~$ cd Arduino-1.X.Y… //修改文件目录George:~$ ./arduino //测试2.3.2 使用Arduino IDE开始工作

在成功地安装了Arduino IDE之后,让我们来继续了解它的各个组成部分,并逐步熟悉如何利用Arduino IDE来配置Arduino Uno。当然,首先必须将Arduino Uno和你的计算机连接到一起。接下来,按照如下步骤来配置IDE。(1)如图2-3所示,首先要在IDE窗口最顶端的导航栏处选中Tools选项,然后在Tools下拉菜单中选中Board,在Board的下一级菜单中选中Arduino UNO。图2-3 在Arduino IDE中选中Arduino UNO(2)然后,还是在最顶端的导航栏处选中Tools选项,然后在Tools下拉菜单中选中Serial Port,这表示我们在这里选择使用串口来连接Arduino Uno。如果选中的端口不能工作的话,可以尝试使用一个不同的端口。选中的端口不能正常工作,往往是由于这个端口已经被一个连接到了你计算机上的真实或者虚拟设备占用。

到此为止,我们成功建立了用来进行项目开发的软件工作环境。怎么样,很简单吧?如果你之前有过其他微控制器开发的经验,那么你一定会发现Arduino开发环境的搭建多么容易。

接下来我们来介绍这个界面友好的开发环境的详细信息,如图2-4所示。● 在界面的上方,你可以看到一个绿色的图形化工具条,它包含了

6个小图标,第一个图标是对勾,最后一个图标是一个放大镜。● 下面是这些图标的详细功能。● 编译(Verify):这个操作负责在代码载入到芯片之前对其进行检查,并对这些代码进行编译,将这些代码转化为一种机器可以理解的语言。● 上传(Upload):这个选项可以将代码烧录到Arduino UNO上。● 新建程序(New):使用这个选项,你可以打开一个空白的项目文件,然后在文件中编写新的代码。● 打开程序(Open):使用这个选项,你可以打开一个保存在计算机中的代码文件。● 保存程序(Save):使用这个选项,你可以用来保存你编写完的代码文件。● 串口监视器(Serial Monitor):这是最常用的选项之一,通过它可以实现计算机和Arduino开发板之间的通信。一般而言,它是一个可以记录向Arduino UNO发送和从Arduino UNO接收信息的界面。图2-4 Arduino IDE的细节● 在白色的画布部分可以输入项目的代码,随后我们将讲解代码,

并对代码进行检查和编译,然后将其发送到Arduino Uno。● 最后的一部分是屏幕最下方的控制台(黑色盒状区域),这是一

个调试用的工具。如果某些代码中出现了错误,它将会在这里被

显示出来以便我们发现。2.4 Hello World

现在是时候来开始学习和Arduino相对应的软件/代码部分了。Arduino UNO允许你使用多种编程语言来进行项目的开发,但是如果你此前对编程开发并不熟悉或者现在想采用一种快速而简洁的编程解决方案,在这里我推荐你采用项目本身自带的Arduino语言(这是一种过程语言演变而来的语言)。

一个程序的结构如下所示,它将作为我们今后程序的范例:// 这一行是一个注释语句,Arduino IDE并不会编译这句代码// 我们必须使用注释来保证代码的可读性#include NAMELIBRARY //将 NAMELIBRARY库文件添加到项目中void setup(){ //函数入口,运行一次 //准备设置Arduino的输入输出引脚pinMode(10, OUTPUT); //将10引脚设置为输出引脚pinMode(11, INPUT); //将11引脚设置为输入引脚}void loop(){ // 在函数"setup"完成后开始执行 //迭代执行多次}

到此为止,我们已经有了足够的知识储备来创建一个小型的程序。如果愿意,你可以通过IDE环境自带的一些代码范例来进行学习。查看这些代码的方法是:首先选择File选项,然后在下拉菜单中选择Examples选项,在弹出的对话框中选中目录C:\Program Files (x86)\Arduino\examples\,就可以打开并查看实验项目的源代码(前提是你已经拥有了实例中所使用的必备硬件)。下面就是一个用于Arduino Uno的基础代码实例://我的第一个Arduino项目void setup(){ Serial.begin(9600); //打开串行端口}void loop(){ delay(1000); //等待1秒 =1000 毫秒Serial.print("Hello, I'm Arduino\n"); // 输出“Hello...” // "\n" 相当于ENTER键}

前面的例子展示了一个用来打开串行端口(如图2-5所示),并等待1 000毫秒的简单任务。在任务的最后打印输出了一句话“Hello, I'm Arduino”。图2-5 Arduino串行接口——输出2.5 Python和Arduino

在了解了串行接口的工作原理之后,我们的学习将迈上一个新的台阶。现在我们使用Python编程语言(Python的标识如图2-6所示)和Arduino UNO进行交互,在这个过程中将不会使用到串行监视器。图2-6 Python的标识

这里先对Python语言做一个简短的回顾,它是一门解释型的语言,这门语言的设立宗旨就是增加代码的可读性,使其具备模块化、灵活性以及多用性的特点。使用Python语言,我们可以完成数学运算,对复杂的方程式求解,创建图形化的界面,甚至可以将它应用于声音和图像方面。这是一门十分优秀的编程语言,所以真的很难用三言两句就讲清楚,这也是我向你推荐多阅读一些Python相关书籍的原因。

如果你是刚刚接触到这种语言的话,请访问https://www.python. org/ 来获得关于Python的基本思想作为这个项目的开始。

在本节中,你需要首先了解安装Python2.7的细节,并熟悉控制台或者图形化环境的使用。如果这是你第一次听到这些内容,也不用为此担心,之前给出的链接中提供了简明的教程和学习指南,相信这些内容可以使你快速地开始学习并持续提高开发能力。2.5.1 PySerial

从PySerial官方网站下载压缩文件:https://pypi.python.org/pypi/pyserial (注意Linux操作系统对应的版本为pyserial-2.7.tar.gz,Windows操作系统对应的版本为pyserial-2.7.win32.exe)。

可以按照如下的步骤来安装PySerial。● 在Windows操作系统环境下,双击执行.exe文件然后按照屏幕上

的提示完成安装的过程。● 在Mac/Linux操作系统环境下,你需要下载并解压正确的安装文

件。在终端中使用如下的命令来解压文件:tar xfvz /Downloads/pyserial-2.6.tar.gz● 使用如下的命令来更改目录并进行安装:cd pyserial-2.6sudo python setup.py install2.5.2 Arduino代码

现在,我们将再次利用那个通过串行接口实现周期性打印消息的Arduino代码。2.5.3 Python 代码

我们将创建一段Python代码,这段代码从同一个串行接口接收消息。下面就是这段代码:# This is a commentfrom time import sleepimport serialport = serial.Serial('/dev/…', 9600) # "…" Put your serial port# remember you can know it in the Arduino-IDE# go to Tools > Serial Portwhile True: # Enters a loop in which hears every 0.2 secondsprint port.readline()sleep(0.2)

你可以使用你最喜爱的文本编辑器来创建这段程序,并将它以serialpython.py为名保存。$ python SerialPython.py

这个程序执行后将会得到如下的输出:HELLO SERIALHELLO SERIALHELLO SERIAL2.6 小结

现在我们已经到达了这个章节的最后部分了。在本章中,我们走进了神奇的Arduino世界,了解了它的各个组成部分,学习了如何进行安全措施的管理,安装了开发环境并创建了我们的第一个Arduino程序。

这一章是十分重要的,所以,在开始后面几章的学习前,一定要先确保你已经彻底理解了本章的概念。好了,如果你已经准备好了,那么我们就开始下一章的学习。在下一章中,你将步入传感器的世界。第3章从代码到真实世界

当你掌握了在前面章节中讲到的内容之后,我们可以开始增长新的见识了。

通过本章的学习,你将可以熟练地阅读设备的技术规范表,并以此来了解设备的特性,比如设备的接口信息和工作原理,以及用来验证概念的必要组件的信息。在本章的最后部分,我们还将讲解到强大的NFC技术。通过NFC技术,我们可以提高Python脚本的能力。

在本章中,我们将从以下几个方面来开展学习:● ProtoBoards和接线● 信号(数字和模拟)● 端口● 数据手册3.1 ProtoBoards和接线

在使用电子组件进行实验和研究的时候,你有很多种可行的方案可以选择。其中一个很不错的方案就是使用ProtoBoard(也称为面包板)。使用面包板有一个很强大的优势,那就是我们可以在不进行焊接操作的情况下,就对它的组件和原型电路进行测试。这样做的好处很多,比如你可以反复利用同一组件,实现系统的快速开发,一旦发生错误可以很容易地修改,轻松完成系统的升级改进。

从外观上看,ProtoBoard像是一个长方形的盒子,它由一些排成行和列且内部互相联系的小插孔组成,有几组小插孔可以互相连接。这些孔通过插入组件的引脚来完成安装。

ProtoBoard可以被看作是迈向最终的PCB成品设计的阶梯,这个阶梯可以帮助你消除系统的错误,降低开发的成本。相关的更多信息请访问http://en.wikipedia.org/ wiki/breadboard。

使用面包板进行开发的时候,你将会对接线技术有更多的了解。相比起其他的开发板,你可以快速地对接线进行调整,这将可以为你带来更多的接线经验。在接线的过程中有一些必须遵守的规则,如果违反了这些规则,可能会直接导致元件的短路从而对电路板造成无法挽回的损害。

图3-1给出一张具体的ProtoBoard图片,从图中我们可以看出ProtoBoard主要包含了两种区域,两侧的垂直列部分(以+和-极性符号开始的列)和中间的水平行部分(由字母和数字组成的坐标系)。“+”表示用于连接电路板的电力供应,“-”表示用于接地。电子元件不应该插在垂直的那些列上,而是应该用线连接到ProtoBoard中间的那些行上。如果我们将电阻器的一条引线连接到了第一行的第一个插孔中,那么电阻器的其他引线就应当连接到其他行的插孔中,而不能再连接到同一行了。图3-1 一个ProtoBoard和一个Arduino Uno

这个面包板被一条无形的轴线分成了垂直对称的两个区域,这意味着这两个区域在电力的使用上是相互独立的。我们将利用这个特性来使用某些集成电路(Integrated Circuit,IC)。这些集成电路的安装将横跨两个区域。

仔细观察图3-2,图片的上半部分给出的都是错误的元件安装方式,而下半部分则给出了正确的元件安装方式。另外,图中横跨两个区域的芯片安置方式是正确的,这种用法在集成电路中是很常见的。图3-2 利用Fritzing得到的Protoboard图像

Fritzing是一个可以帮助我们为项目快速创建电路设计的工具。关于Fritzing这款工具的更多详情请访问网址http://fritzing.org/download/ 。3.2 模拟端口和数字端口

现在我们已经了解面包板的正确用法了。紧接着一个非常重要的概念——端口,摆在了我们面前。开发板包含了各种的输入和输出端口,端口的数量因我们所使用的开发板的型号差异而有所不同。

但是端口是什么呢?Arduino UNO开发板的端口在它的两侧。它们作为一种连接,来实现开发板与传感器、执行器以及其他设备(甚至是其他的Arduino开发板)的交互。主板的端口支持数字和模拟两种信号。这些端口的优势不仅在于它们的双向性,还包括开发者可以对这些端口的行为进行定义。

在下面的代码中,第一部分表明我们设定了将要使用端口的状态,下面就是setup函数的内容://代码开始void setup(){ //函数入口,运行一次 //准备设置Arduino的输入输出引脚pinMode(10, OUTPUT); //将10引脚设置为输出引脚pinMode(11, INPUT); //将11引脚设置为输入引脚}

下面让我们来看看Arduino UNO上的数字与模拟端口。3.2.1 模拟信号

模拟信号指的是随着时间连续变化的信号,模拟信号可以被理解为随着时间连续变化的电压。举个例子,它可能从2V变到3.3V再变到3.0V或者3.333V,电压随着时间逐渐变化,每次的值都不相同。两个值之间的数字是无限多的(理论上),这是一个很有意思的特性,而这个特性刚好是我们所需要的。例如,如果我们想要测量一个房间的温度,温度的测量值精确到小数,这就需要使用一个模拟信号来表示测量值。另外,我们平时所使用的十进制表示法中不可能存储无限长的小数,只能进行数学舍入(数值截断)。有一个被称为离散化的过程就被用来实现模拟信号到数字信号的转化。

无论是在现实世界中还是在微控制器的世界中,两个值之间的数字的个数都不会是无限大的。Arduino UNO的接口使用了0到1 023来描述一个模拟输入信号。某些被标记了PWM或者a~的端口可以创建一个在0到255之间变化的输出信号。3.2.2 数字信号

数字信号只包含了两个值——0和1。许多电子设备内部都设立好了一个范围,从3.5V到5V之间的电压值被看作是逻辑值1,从0V到2.5V之间的电压为逻辑值0。为了更好的理解这点,我们来看一个按下按钮触发警报的例子。对于警报来说只有两种有效的情况,一是当按钮被按下触发警报,另一种就是按钮没有被按下。这里只能观察到这两个状态。所以不同于之前那个有一个线性范围值的温度传感器的例子,这里只有两个值。从逻辑上讲,我们可以根据不同的目的使用这些特性。

Arduino IDE中包含了一些说明性的例子,你可以将它们加载到开发板上来研究模拟信号和数字信号的理论。加载的方法是在导航栏上依次点击File | Examples | Basic | Blink。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载