Arduino魔法书:实现梦想的工具和技术
  • 推荐0
  • 收藏0
  • 浏览296

Arduino魔法书:实现梦想的工具和技术

Jeremy Blum 杰里米·布鲁姆 (作者)  况琪 (译者)

  • 书  号:978-7-121-24067-6
  • 出版日期:2014-10-16
  • 页  数:328
  • 开  本:16(185*235)
  • 出版状态:上市销售
  • 原书名: Exploring Arduino: Tools and Techniques for Engineering Wizardry [Paperback]
  • 原书号:9781118549360
  • 维护人:林瑞和
《Arduino魔法书:实现梦想的工具和技术》是一本关于使用Arduino实现梦想的作品。作者Jeremy Blum有一句名言:“我们生活在未来。”利用可用的工具和在本书中将学到的知识,任何人都有机会、也有能力选择一款Arduino微控制器并在几分钟内利用它控制周围的世界——这一梦想直到最近才成为可能。微控制器是一个可编程的平台,它使我们能够使用相对简单的命令,来定义复杂的机械、电气和软件系统的操作。通过对本书的学习,我们将使用Arduino制作各种作品,从运动检测到无线控制系统再到互联网通信。
本书适用于任何经验层级的Arduino爱好者。读者不需要具备或者只需具备少量编程和电气工程方面的经验。为了照顾到各个层次的读者,本书设计了各种可选章节、小栏目或短节选,并在其中详细解释了具体的概念。
献给我的祖母——那个终生保持着好奇心并
善于激励他人的人,她启发我每天不断向前。

关于作者

Jeremy Blum在康奈尔大学取得了电气和计算机工程专业的硕士学位,他还在同一领域取得了学士学位。在康奈尔大学,他通过由他发起并领导的康奈尔大学可持续设计组织(Cornell University Sustainable Design)监督了国内外几座生态建筑的设计和施工,该组织是一个美国承认的可持续设计组织,曾受到美国和世界绿色建筑委员会(U.S. and World Green Building Councils)CEO的特别称赞。同样,Jeremy也将他的激情付诸电气工程领域,设计了太阳能家庭能源监控系统、革命性的光导纤维LED照明系统及追踪太阳的智能太阳能面板。他还负责协助启动了一个首创的创业者协同工作空间,每年致力于许多学生创业项目(也包括一些他自己的创意)的合作开发。
Jeremy还设计了广受称赞的义肢控制方法、手势识别系统及楼宇自动化系统等许多项目。他设计了MakerBot Replicator 3D打印机(被世界各国的人们使用,包括像NASA这样知名组织)的电子系统,以及MakerBot Digitizer 3D扫描仪的原型电子系统和固件。作为知名组织Creative Machines Lab的研究员,他致力于制作能够自我组装的机器人、自学习四足机器人及重新定义个人制造的3D打印机。他将这项研究呈送给了同行审阅的期刊和远在印度的学术会议。
Jeremy制作的YouTube视频已经将数百万人带入了工程学的大门,是互联网上最流行的Arduino入门教程。他曾开发了入选探索频道(Discovery Channel)的开源硬件项目和入门教程,并因此被国际上的开源社区和“创客”社区所熟知,赢得了一些奖项和黑客马拉松(hack-a-thons)大赛。Jeremy入选了美国电气和电子工程师学会(American Institute of Electrical and Electronics Engineers)的2012工程学新面孔(2012 New Face of Engineering)榜单。
他通过自己的公司Blum Idea Labs LLC提供工程学咨询服务,并向纽约的年轻学生教授工程学和可持续发展课程。Jeremy的激情正在通过创新的工程学解决方案,改变着人们的生活和我们的家园。你可以在Jeremy的网站上进一步了解他和他的工作,网址是:www.jeremyblum.com。
关于技术编辑
¬¬Scott Fitzgerald是一名艺术家和教育工作者。自2006年起,他就在教学中将Arduino平台当作教具,并且自2005年起,就在纽约大学的交互性电信项目(Interactive Telecommunications Program,ITP)中教授物理计算,向艺术家和设计师介绍微控制器。Scott为Arduino团队工作,为新产品撰写文档,并创作入门教程来向人们介绍Arduino平台。他在2011年曾经是Making Things Talk第2版的技术编辑,并在2012年为Arduino官方入门套件(Arduino Starter Kit)撰写了附赠的图书。

致 谢

首先,必须感谢在Wiley出版社的朋友帮助我完成了这本书:感谢Mary James当初鼓励我撰写这本书;感谢Jennifer Lynn全程监督了我的写作。我还欠Scott Fitzgerald一个大大的感谢,感谢他在本书的技术编辑过程中的批判性眼光。
如果没有element14的鼎力支持,我可能永远无法制作出我的Arduino入门系列视频教程,它们是本书的序曲。尤其是Sabrina Deitch和Sagar Jethani,他们是绝佳的合作伙伴,我很荣幸能与他们一起工作。
在撰写本书主要部分的同时,我还要完成硕士学位并经营两家公司,所以我要特别感谢我的教授和同事,感谢他们在我尝试平衡所有责任时理解我。
最后,我想感谢我的家庭,特别是我的父母,还有我的兄弟David,是他们持续的激励,让我明白了做这些事情的意义。

前 言

你拥有绝佳的时机。正如我经常喜欢说的,“我们生活在未来”。利用如今可用的工具和书中的知识,你就有机会、也有能力让梦想变成现实。让任何人选择一款微控制器并在几分钟内利用它控制周围的世界——这一梦想直到最近才成为可能。你可能已经猜到了,微控制器是一个可编程的平台,它使你能够使用相对简单的命令,来定义复杂的机械、电气和软件系统的操作。Arduino微控制器平台将成为你的新宠,带你探索电子、编程、人机交互、艺术、控制系统及更加广阔的世界,有了它就有了无限的可能。通过对本书的学习,你将掌握使用Arduino制作各种作品的方法,从运动检测到无线控制系统再到互联网通信。
无论你是工程领域彻头彻尾的新手,还是打算入门嵌入式系统设计的经验丰富的老兵,Arduino都是一个绝佳的起点。你在寻找一本Arduino开发的通用参考手册吗?本书也非常适合你,它会引导你完成一系列具体项目,而你以后也可以再次翻阅本书来查找代码片段、最佳范例和系统原理图等资料。电气工程、系统设计、编程实践……这些你在阅读时学到的知识在Arduino平台之外也有广泛的应用。通过对本书的阅读,你将具备承担各种工程项目的能力,不论它们使用的是Arduino还是其他平台。
本书对象
本书适合任何经验层级的Arduino爱好者。章节是彼此相关的,要利用前面章节中的概念和项目组件来实现更加复杂的想法。但不要担心,当你面临全新的、复杂的想法时,会有一个交叉引用来提示你相关概念第一次出现在书中的何处,以便很快回想起来。
本书假设你不具备或者只具备很少的编程和电气工程方面的工作经验。为了照顾到各个层次的读者,本书设计了各种可选章节、小栏目或短节选,在其中详细解释了具体的概念。尽管这些小栏目对你更深入地理解Arduino的工作原理来说并不是必需的,但它们为更具好奇心的读者提供了进一步关注技术性话题的机会。
你将通过本书学到什么
本书不是食谱书。如果你想遵循手把手地指导自己如何搭建一个具体项目的书,而不需要解释为什么要这么做,那本书便不适合你。你可以把本书作为一本导论,其中介绍了电气工程、计算机科学、产品设计和高级思维;你也可以把Arduino作为媒介,通过动手实践的方式来体验这些概念。
当我们在本书中演示如何搭建Arduino项目的硬件组件时,你学到的将不仅是如何将它们连接在一起,还有如何阅读原理图,为什么将某个器件用于某项功能,如何通过数据手册为自己的项目选择合适的器件等。在编写软件时,我提供了完整的程序代码,但你会逐步走过几个迭代性的过程来创建最终的程序。这会帮助你巩固具体的程序函数、良好的代码格式化实践和对算法的理解。
本书会讲授物理概念、算法、数字化设计原理及具体的Arduino编程概念。我希望,通过对本书中案例的学习,你不仅能成为一名熟练的Arduino开发者,还能学会一些技巧,去开发更加复杂的电气系统,并在其他领域或其他平台上继续从事工程学方面的工作。
本书使用的标注
在本书中使用了下列标注和图标,以在一些最重要或最有用的信息上吸引你的注意。
警告 请你一定要留意这样的条目。如果一旦错误地执行某些步骤就可能导致电子器件损坏,你就会看到这种警告。
提示 这些条目包含了关于如何执行简单任务的快速提示,这可能对你手头的任务有所帮助。
注意 这些条目包含了对你来说可能很重要的额外信息,包括视频和在线资料的相关链接,它们会让具体项目的开发变得更加轻松。

样例标题
这样的条目对当前话题或相关话题做了更加深入的讲解。
获取器件
幸运的是,你可以方便地获得实施本书中项目所需的器件。本书译者已经根据本书内容提供了这些器件的获得地址:http://kuangqi.me/。
建议你先买基本套件。随着阅读的深入,你还可以购买扩展套件。不想购买套件吗?别担心。在每章的开头,有一个该章所需的详细器件列表。本书原著的专题网站www.exploringarduino.com,也提供了一些链接,通过它们可以找到每章所需的器件。
注意 你是否已经从Newark获得了本书的捆绑套装?如果是,那么你就可以继续了。
你需要什么
除了用来搭建Arduino项目的具体器件以外,你的Arduino探险之旅还需要一些其他工具和材料。最重要的是,你需要一台兼容Arduino集成开发环境(IDE)的计算机(Mac OS X 10.4以上版本,Windows XP以上版本,或者一个Linux发行版)。在必要时我会为这些操作系统中的操作做出说明。
你可能还想要一些额外的工具,用来调试、组装硬件等。它们对完成本书中的项目来说不是必需的,但在你拓展电气工程技能时,这些工具在其他项目中迟早有用。我推荐如下工具。
一把烙铁和一些焊料(完成本书中的项目并不需要焊接,但你可能希望在洞洞板上组装自己的电路,或者你可能想购买需要焊接组装的扩展板。)
一台万用表(在调试过程中有用,但不是必需的。)
一组小型螺丝刀
一支热熔胶枪
源代码和数字化内容
本书的主要专题网站是www.exploringarduino.com,它是由本书作者维护的。你可以在这个网站上找到每章的代码并下载(还有视频、链接及其他有用的材料)。Wiley也维护了一个关于本书数字化内容的仓库,网址是www.wiley.com。本书代码可在www.wiley.com/go/exploringarduino网页的“Download Code”标签下下载。
你也可以在www.wiley.com上根据ISBN(本书原著的ISBN为978-1-118- 54936-0)搜索本书原著,从而找到代码。
在每章的开始处,你可以找到本章主要代码的下载地址。在每章中,你还能在代码清单的标题和文本中找到你需要的代码文件的文件名。
在网站www.exploringarduino.com和www.wiley.com上提供的代码是ZIP压缩包。下载代码之后,使用适当的工具解压缩即可。
注意 由于许多图书的书名大同小异,所以通过ISBN搜索可能会更方便一些。本书原著的ISBN是978-1-118-54936-0。
勘误
我们尽力保证文本和代码的正确性。然而人无完人,错误在所难免。如果你在本书中发现了错误,比如拼写错误或者代码错误,我们会感谢你的反馈。通过提交勘误,你可能会消除其他读者几个小时的困惑,与此同时,你可以帮助我们提供更有用的信息。
要查找本书原著的勘误,请访问www.wiley.com/go/exploringarduino并单击“Errata”链接。
补充材料和技术支持
在你的Arduino探险之旅当中,不可避免地会遇到问题和麻烦。使用Arduino最大的一个好处就在于可以在网上找到绝佳的技术支持社区。这个极为活跃的Arduino用户大本营会十分乐意帮助你。下面列出了一些可能会帮到你的资源。
官方Arduino参考手册
www.arduino.cc/en/Reference/HomePage
我的Arduino入门教程系列视频
www.jeremyblum.com/category/arduino-tutorials
adafruit 公司的Arduino入门教程系列视频
learn.adafruit.com/category/learn-arduino
SparkFun的电子学入门教程
learn.sparkfun.com/tutorials
Arduino官方论坛
www.arduino.cc/forum
element14 Arduino社区
www.element14.com/community/groups/arduino
如果你用尽了这些资源,却还是无法解决你的问题,则请在Twitter(@sciguy14)上联系我,我也许能帮上忙。你也可以直接通过我的网站上的联系页面(www.jeremyblum.com/contact)来与我取得联系,但我通常没法保证快速回复。
Arduino是什么
Arduino原型平台的最大特点在于你想让它是什么,它就是什么。Arduino可以是一个植物灌溉自动控制系统,也可以是一个Web服务器,甚至可以是四轴飞行器的自动驾驶仪。
Arduino是一个微控制器开发平台,它配备了直观的编程语言,你可以使用Arduino集成开发环境(IDE)来开发它。你可以为Arduino安装传感器、效应器、灯、扬声器、扩展模块(shield,本书译作“扩展板”)及其他集成电路,来将Arduino变成一个可编程的“大脑”,应用于几乎任何控制系统。
本书不可能涵盖Arduino能做的所有事情,只要你的想象力是无穷的,可能性就是无穷的。因此,本书的目标是通过实施项目来让你熟悉Arduino的功能,学习开发自己的项目时所需的技巧。
你会在第1章中学到更多关于Arduino及这块板卡的变体。如果你渴望了解Arduino的所有内部工作原理,那么你很幸运:它是完全开源的,所有的电路图和文档都可以在Arduino网站上免费获得。附录提供了一些Arduino的技术指标。
一个开源平台
如果你是一个开源世界的新人,则你一定会满意的。本书不会详细介绍开源硬件运动,但你应该了解一点这种思想,是它让Arduino变得如此美妙。如果你想全面了解什么是开源硬件,则请查阅开源硬件协会网站(www.oshwa.org/definition)上的定义。
注意 你可以从我的TEDx演讲中学到所有关于开源运动的知识:http://kuangqi.me/arduino/,进入该网站即可找到。你也可以在本章开头处的Wiley网站上找到这个视频。
由于Arduino是开源硬件,所以任何人都可以免费获取所有的设计文件、原理图及源代码被。这不仅意味着你可以更方便地改造Arduino,以用于非常特定的功能,还意味着你可以将Arduino平台整合到你的设计中,制作并销售Arduino的复制品,并在其他项目中使用Arduino软件库。尽管本书使用的几乎全部是官方Arduino硬件,但你也可以使用数以百计的Arduino衍生板卡(它们通常添加了特别的功能)来制作本书中的项目。
Arduino的开源许可证还允许商业化地重用他人的设计(只要你不在自己的设计上使用Arduino商标)。所以,如果你在一个令人兴奋的项目原型中使用了Arduino,而你还想将其转化为一个商业产品,那么你是可以这样做的。举例来说,你可能听说过像MakerBot Replicator 3D打印机这样的产品,它的电子系统是基于Arduino Mega平台的(www.thingiverse.com/thing:16058)。(大爆料:我设计了那块主板!)
在使用本书时,请确保遵守了本书中源代码和硬件的许可证。一些许可证要求你在发布基于他人已有的设计时提供原始作者的信息;有的则要求你必须在相同的许可下分享你的改进工作。这样的分享帮助社区成长,所有了不起的在线文档和技术支持也正是源自于此,在你的Arduino探险之旅中,你一定会经常参考它们。我为本书编写的所有的代码示例(除非特别声明)都是基于GNU通用公开许可(GPL)的,你可以随心所欲地使用它们。
本书之外
有人可能对我在YouTube上流行的系列视频“Arduino和电子学入门教程”(www.youtube.com/sciguy14)很熟悉了。本书中我也多次提到它们,你可以通过这些视频更为深入地了解书中所涵盖的技术主题。对电子器件和微控制器利用计算机科学知识,将它们创造性地组合,来创造卓越的作品,如果你对此感到好奇,可以在我的作品集(www.jeremyblum.com/portfolio)中查看样例项目。同Arduino一样,我的绝大部分作品都通过开源许可发布,允许你针对自己的需求方便地复制它们。
我渴望知道你利用在本书中学到的技巧做了什么,并期待你将这些与我和其他朋友分享。祝你在Arduino探险之旅中好运!

目录

目录
第1部分 Arduino工程基础 / 1
第1章 让你的Arduino闪烁 / 2
探索Arduino生态系统 / 3
Arduino功能 / 3
Arduino板卡 / 7
创建你的第一个程序 / 12
下载并安装Arduino IDE / 12
运行IDE并连接Arduino / 13
分析你的第一个程序 / 15
本章小结 / 17
第2章 数字输入、输出和脉冲宽度调制 / 18
数字输出 / 19
连接一个LED并使用面包板 / 19
数字输出端口编程 / 23
使用for循环 / 24
analogWrite()与脉冲宽度调制 / 25
读取数字输入 / 28
读取带有下拉电阻的数字输入 / 28
使用“有弹性的”按键 / 30
制作一个可控的RGB LED夜灯 / 33
本章小结 / 37
第3章 读取模拟传感器 / 38
理解模拟和数字信号 / 39
比较模拟和数字信号 / 39
将模拟信号转换为数字信号 / 40
利用Arduino读取模拟传感器:analogRead() / 41
读取电位器 / 42
使用模拟传感器 / 45
利用可变电阻制作自己的模拟传感器 / 50
使用阻性分压器 / 50
利用模拟输入控制模拟输出 / 52
本章小结 / 54
第2部分 控制环境 / 55
第4章 三极管与电机驱动 / 56
驱动直流电机 / 57
操作大电流感性负载 / 58
利用PWM控制电动机转速 / 62
使用H-桥控制直流电机的方向 / 64
驱动伺服电机 / 70
理解连续旋转伺服电机和标准伺服电机的区别 / 71
理解伺服电机控制 / 71
控制伺服电机 / 75
制作扫描式距离传感器 / 76
本章小结 / 80
第5章 发出声音 / 81
理解扬声器的工作原理 / 82
声音的性质 / 82
扬声器是如何发声的 / 83
使用tone()发出声音 / 84
包含定义文件 / 85
给扬声器接线 / 86
产生声音序列 / 88
理解tone()函数的限制 / 91
制作一架微型钢琴 / 91
本章小结 / 94
第6章 USB和串口通信 / 95
理解Arduino的串口通信功能 / 96
使用内置或外置USB-串口转换器的Arduino板卡 / 97
使用次级含USB功能ATMega MCU来模拟串口转换器的Arduino板卡 / 99
使用单个带USB功能MCU的Arduino板卡 / 101
带有USB-Host功能的Arduino板卡 / 101
监听Arduino / 102
使用print语句 / 102
使用特殊字符 / 103
改变数据类型表示 / 105
与Arduino通信 / 105
从计算机或其他串口设备上读取信息 / 106
与桌面应用程序通信 / 112
与Processing通信 / 113
学习Arduino Leonardo(及其他基于32U4的Arduino)的特殊技巧 / 119
模拟键盘 / 119
模拟鼠标 / 124
本章小结 / 127
第7章 移位寄存器 / 129
理解移位寄存器 / 130
发送并行和串行数据 / 131
使用74HC595移位寄存器 / 131
使用Arduino进行串行移位输出 / 134
在二进制和十进制间转换 / 136
用移位寄存器控制灯光动画 / 137
搭建“光骑士” / 137
用LED条形图响应输入 / 139
本章小结 / 142
第3部分 Arduino通信接口 / 143
第8章 I2C总线 / 144
I2C总线的历史 / 145
I2C硬件设计 / 145
通信方案与ID值 / 146
硬件要求和上拉电阻 / 147
与I2C测温探头通信 / 148
设置硬件 / 148
参考数据手册 / 149
编写软件 / 151
将移位寄存器、串口通信和I2C通信结合 / 153
为温度监控系统搭建硬件 / 153
修改嵌入式程序 / 154
编写Processing程序 / 156
本章小结 / 159
第9章 SPI总线 / 160
SPI总线概述 / 161
SPI硬件和通信设计 / 162
硬件配置 / 162
通信方案 / 163
比较SPI与I2C / 164
与SPI数字电位器通信 / 164
从数据手册中获取信息 / 164
设置硬件 / 167
编写软件 / 169
用SPI数字电位器制作视听显示系统 / 171
设置硬件 / 172
修改软件 / 173
本章小结 / 175
第10章 连接液晶显示器 / 176
设置LCD / 177
使用LiquidCrystal库写入LCD / 180
向显示器输出文本 / 180
创建特殊符号和动画 / 182
制作一个私人自动恒温器 / 185
设置硬件 / 185
用按键调节设定值 / 188
添加声音报警和电扇 / 189
整合:完整的程序 / 190
升级项目 / 194
本章小结 / 194
第11章 使用XBee收发器进行无线通信 / 195
理解XBee无线通信 / 196
XBee无线收发器 / 197
XBee无线收发器扩展板和串口连接 / 198
配置XBee / 201
用扩展板或USB适配器配置 / 202
选择Xbee设置并将XBee连到主机上 / 203
用X-CTU配置XBee / 204
用串口终端配置XBee / 207
与计算机无线通信 / 209
为远程Arduino供电 / 209
回顾串口示例:用电位器控制Processing / 211
回顾串口示例:控制一个RGB LED / 214
与另一个Arduino通信:制作无线门铃 / 216
系统设计 / 217
发射器硬件 / 218
接收器硬件 / 218
发射器软件 / 219
接收器软件 / 220
本章小结 / 223
第4部分 高级的话题和项目 / 225
第12章 硬件和定时器中断 / 226
使用硬件中断 / 227
理解轮询和中断间的折中 / 228
理解Arduino的硬件中断能力 / 229
搭建并测试硬件消抖动的按键中断电路 / 230
使用定时器中断 / 237
理解定时器中断 / 237
获取软件库 / 238
近乎于同时地执行两个任务 / 238
搭建一个中断驱动的音响 / 239
音响硬件 / 239
音响软件 / 240
本章小结 / 242
第13章 用SD卡记录数据 / 243
数据记录的准备工作 / 244
用CSV文件格式化数据 / 244
为数据记录准备SD卡 / 245
将SD卡接入Arduino / 249
SD卡扩展板 / 249
SD卡SPI接口 / 253
写入SD卡 / 253
读取SD卡 / 258
使用一个实时时钟 / 261
理解实时时钟 / 261
使用实时时钟 / 263
做一个入口记录仪 / 268
记录仪硬件 / 268
记录仪软件 / 270
数据分析 / 273
本章小结 / 274
第14章 将你的Arduino联网 / 275
互联网、Arduino和你 / 276
网络术语 / 276
客户端与服务器 / 279
将Arduino联网 / 279
在网上控制Arduino / 279
准备I/O控制硬件 / 280
设计一个简易网页 / 280
编写Arduino服务器程序 / 282
通过网络控制Arduino / 286
把实时数据发送给绘图服务 / 290
在Xively上创建实时数据源 / 290
添加数据源组件 / 295
本章小结 / 299
附录 ATMega数据手册和Arduino原理图揭秘 / 300
阅读数据手册 / 300
分解数据手册 / 300
理解器件引脚定义 / 302
理解Arduino原理图 / 304

读者评论