《Arduino项目DIY》可作为高等院校物联网、计算机、电子、自动化等专业课程的教材,也可作为从事物联网、智能家居、Arduino等技术工程师的参考用书,更是电子爱好者及开源硬件发烧友的入门宝典。
当前位置:首页 > 计算机/网络 > 软件工程/开发项目管理 > Arduino项目DIY(电子设计与嵌入式开发实践丛书)
作者:李明亮 编著出版社:清华大学出版社出版时间:2015年01月
- 版 次:1
- 页 数:
- 字 数:
- 印刷时间:2015年01月01日
- 开 本:16开
- 纸 张:胶版纸
- 包 装:平装
- 是否套装:否
- 国际标准书号ISBN:9787302375692
- 丛书名:电子设计与嵌入式开发实践丛书
一、关于Arduino
2011年3月举行的GoogleI/O会议主题报告中,Google推出了用于Android基于Arduino的附件开发套件。
为什么Google支持微控制器开发且选择Arduino?
答案很简单:成本、社区、发展和生态系统。Arduino技术成本低并拥有大型、充满热情和具有创造力的社区,而该平台和其授权方法被认为是创成式,它使衍生和兼容硬件、软件的生态系统日益增长。不用签署任何许可、合作伙伴或保密协议,无需支付任何费用,即可共享现有资源。在选择Arduino时,Google可使用不受法律约束的技术,以较低的门槛进入市场,并提供互补性硬件和软件的扩展生态系统。
Arduino是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(各种型号的Arduino板)和软件(ArduinoIDE)。它适用于艺术家、设计师、电子爱好者和对“互动”有兴趣的朋友们。
软件的开源在科技界有着悠久的历史。开放源码让安全漏洞更易暴露,迭代快速可满足用户需求,同时第三方还可以用它来开发新产品;但开源硬件并不如开源软件那样为人熟知,比如Arduino。
Arduino给自己的定位是开源电子原型开发平台,其软硬件设计资料都是全面开放的,构成一个可供用户搭建机器人及各类电子项目的开发环境。为什么要做Arduino,或者说为什么要做开源硬件?“因为开源硬件使得人们更容易地开发自己的产品。”Arduino创始人Banzi表示,“人们现在能在Arduino或者BeagleBone(同类产品)上做最初的原型开发,最后如果设计想要量产,他们也可以采购对应的处理器后在产品中使用我们的设计。”
近几年里,开源已经成为一个比较流行的趋势。例如众所周知的Linux,可以算是开源软件的代名词。随着开源运动的发展,开源硬件进入了人们的视线。
那么什么是开源硬件?所谓开源硬件,是指采用与自由、开放原始码的软件相同的方式设计的计算机和电子硬件。开源硬件开始考虑对软件以外的领域开源,这是开源文化的一部分。硬件开源的出现大大节省了公司研发的时间,大家可以直接下载电路图和源代码,直接使用和DIY设计,无需大量修改即可实现自己所需要的功能。
便于使用的开源平台的出现一直以来都在为“自己动手”的模式增加动力。现在,ArduinoSBC(单板计算机)已经是一个众人熟知的例子。Arduino基于Atmel8bitMCU,而且又是小巧型的集成电路,但仅仅这些还不能激起硬件专家对其的兴趣。Arduino如此受欢迎还因为以下两个因素:
(1)Arduino专注于灵活的使用性,它避免了不必要的工业硬件与软件技术的复杂性。有了Arduino,你不需要成为一个专业的“工程师”或者“编程人员”就能发挥科技的力量。但是,简单硬件解决方案并不是一个新的概念,真正区别于Arduino的是开源设计范式,这一范式轮流被一些诸如草根运动,或狂热者的“宽容政策”生态体系,或那些点燃全球合作热潮的供应商及附属品所推动着。甚至像Microship和TexasInstrument这样占主导地位的MCU供应商都开始关注并介绍具有它们自己风格的“兼容Arduino”的SBC。
(2)Arduino已经发布了许多不同版本的平台,有USB接口、蓝牙接口、以太网接口等,以及各种mini版本。最近Google发布了Android的配件标准(AndroidOpenAccessory)与ADK开发工具(基于Arduino平台)。Arduino有着庞大的用户基数,开源的电路设计、IDE,无数的代码,低廉的成本;另一方面,Android自身也有庞大的用户和开发者,当这两者结合,前途无可限量!
Arduino是基于AVR8位MCU发展而来的,随着Arduino的影响越来越大,越来越多的MCU厂商开始关注,并推出了各种与Arduino兼容的产品。同时,随着开源硬件的发展,会有更多基于32位MCU的兼容Arduino平台出现,竞争将会越来越激烈。
二、本书内容
本书按照循序渐进的过程编写,因此适合于各层次读者学习和参考。如果读者对于Arduino还一无所知,那么前面的理论基础篇会让读者对Arduino不再陌生;如果读者已经有了Arduino的基础知识,那么本书将使读者对于Arduino的学习更进一步。当然,此书也很适合高校学生学习,不仅有充分的理论知识,而且大量详细的实例让学习不再感觉乏味,理论与实践结合可使学习更加得心应手。
本书共分为入门篇、基础实验篇和项目提高篇三部分。
入门篇包括第1~4章。第1章主要介绍了Arduino的起源、Arduino开源文化及未来的发展趋势;第2章主要介绍了Arduino的硬件资源,包括主要的开发板与扩展板;第3章主要介绍了Arduino的开发环境以及它的搭建与使用;第4章主要介绍了Arduino编程所使用的语言以及所需要的库文件。
基础实验篇包括第5~14章,为技术入门者提供了必要的技术学习的实验,详细介绍了常用外设与Arduino平台的整合实验,包括LED、按键、LCD、步进电机、各类传感器(温度与湿度、气体等)以及无线通信模块(蓝牙、WiFi、ZigBee)等。
项目提高篇包括第15~17章。以项目研发为指导思想,详细讲解了基于Arduino平台的智慧宿舍、智能垃圾桶以及智能大棚系统的设计与实现。
三、致谢
本书由李明亮博士(石家庄经济学院)、易劲、王雨、赵泽通、赵晓宁、蔡石磊、何俊冬、吴肖等共同完成编写工作。其中第4~14章由李明亮博士编写;第1~3章由易劲、吴肖编写;第15章由赵晓宁和蔡石磊编写;第16章由赵泽通和王雨编写;第17章由何俊冬编写。李明亮博士完成了全部书稿的统筹及审核工作。
希望每位读者在学习完本书后都能自己动手进行Arduino的开发,也希望本书能为读者带来精彩的技术人生。
衷心感谢石家庄邮电职业技术学院的李学海副教授为本书指引方向;感谢石家庄格物电子科技有限公司的技术人员为本书的完成提供必要的技术支持;感谢在本书编写过程中帮助收集、编辑资料的石家庄经济学院的王翠翠同学及河北师范大学的司建龙、张亚奇、张鑫同学。
最后,要特别感谢清华大学出版社的全力支持,如果没有他们的努力和辛勤劳动,这本书不会这么快出版的。
由于时间仓促,加之作者水平有限,书中难免有不足之处,欢迎广大读者批评指正。
作者
2014年10月
(1) tone()
描述:在一个针脚上产生一个特定频率的方波(50%占空比)。持续时间可以设定,波形会一直产生直到调用noTone()函数。该针脚可以连接压电蜂鸣器或其他喇叭播放声音。在同一时刻只能产生一个声音。如果一个针脚已经在播放音乐,那呼叫 tone()将不会有任何效果。如果音乐在同一个针脚上播放,它会自动调整频率。使用tone()函数会与3脚和11脚的PWM产生干扰(Mega板除外)。
注意:如果你要在多个针脚上产生不同的音调,要在对下一个针脚使用tone()函数前,先使用noTone()函数。
语法:tone(pin, frequency) 或 tone(pin, frequency, duration)
参数:pin:要产生声音的针脚;frequency: 产生声音的频率,单位Hz,类型unsigned int;duration:声音持续的时间,单位毫秒(可选),类型unsigned long。
(2)noTone()
描述:停止由tone()产生的方波。如果没有使用,tone()将不会有变化。
注意:如果你想在多个针脚上产生不同的声音,你要在对下个针脚使用tone()前,先使用noTone()。
语法:noTone(pin)
参数:pin: 所要停止产生声音的引脚
(3)shiftOut()
描述:将数据的一个字节一位一位的移出。从最高有效位(最左边)或最低有效位(最右边)开始。依次向数据脚(dataPin)写入每一位,之后时钟脚被拉高或拉低,指示刚才的数据有效。
注意:如果你所连接的设备时钟类型为上升沿(rising edges),你要确定在调用shiftOut()前时钟脚为低电平,如调用digitalWrite(clockPin, LOW)。
语法:shiftOut(dataPin, clockPin, bitOrder, value)
参数:dataPin:输出位数据的引脚(int) ;clockPin:时钟脚,当dataPin有值时,此针脚电位变化(int);bitOrder:输出位的顺序,最高位优先MSBFIRST或最低位优先LSBFIRST;value: 移位位元输出的数据(byte)。
注意事项:dataPin和clockPin要用pinMode()设定为输出。shiftOut目前只能输出1个字节(8位),所以如果输出值大于255需要分成2个步骤。示例程序为
//最高有效位优先串行输出
int data= 500;
//移位元输出高字节
shiftOut(dataPin, clock, MSBFIRST, (data >> 8));
//移位元输出低字节
shiftOut(data, clock, MSBFIRST, data);
//最低有效位优先串行输出
data = 500;
//移位元输出低字节
shiftOut(dataPin, clock, LSBFIRST, data);
//移位元输出高字节
shiftOut(dataPin, clock, LSBFIRST, (data >> 8));
(4)shiftIn()
描述:将数据的一个字节一位一位的移入。从最高有效位(最左边)或最低有效位(最右边)开始。对于每个位,先拉高时钟电位,再从数据传输线中读取一位,再将时钟线拉低。
注意:这是一个软件实现,也可以参考硬件实现的SPI链接库,它速度更快但只对特定脚有效。
语法:byte incoming = shiftIn(dataPin, clockPin, bitOrder)
参数:dataPin:输入每一位数据的针脚(int) ;clockPin:时钟脚,触发从dataPin读取数据的信号(int) ;bitOrder:位的顺序,最高位优先MSBFIRST或最低位优先LSBFIRST。
返回:读取的值(byte)。
(5)pulseIn()
描述:读取一个针脚的脉冲(HIGH或LOW)。例如,如果value是HIGH,pulseIn()会等待引脚变为HIGH,开始计时,再等待引脚变为LOW并停止计时。返回脉冲的长度,单位为微秒。如果在指定的时间内无脉冲,函数返回0。此函数的计时功能由经验决定,长时间的脉冲计时可能会出错。计时范围从10微秒至3分钟。(1秒=103毫秒=106微秒)。
语法:pulseIn(pin, value) 或pulseIn(pin, value, timeout)
参数:pin:要进行脉冲计时的针脚号(int);value:要读取的脉冲类型,HIGH或LOW(int);timeout (可选):指定脉冲计数的等待时间,单位为微秒,默认值是1秒(unsigned long)
返回:脉冲长度(微秒),如果等待超时返回0(unsigned long)。
程序示例:
int pin = 7;
unsigned long duration;
void setup()
{
pinMode(pin, INPUT);
}
void loop()
{
duration = pulseIn(pin, HIGH);
}
Arduino项目DIY(电子设计与嵌入式开发实践丛书)下载