Arduino为什么这么红?
相信对嵌入式开发感兴趣的朋友一定对Arduino有或多或少的了解或熟知。而对初学者来说,也许经常听到“嵌入式开发从哪里上手最好?Arduino!”这样的说法。那么Arduino到底是什么呢?是一种新的控制芯片?还是一种新的开发软件呢?
首先我们先看看Arduino的实物图,下面是最常见的一种Arduino实物图片(关于Arduino的分类,我们会在后面详述):
图中已经用红线根据功能将各个模块区分出来,相信对单片机开发稍有了解的朋友一定已经发现,这不就是一个以AVR单片机最小系统为核心的控制板吗?
不错,Arduino就是以ATMEL公司的AVR单片机为核心的单片机控制板,板上除了ATmega168最小系统电路外,还包含了稳压电路,USB转串口电路,一些指示用的LED,以及一些扩展用的电路插座。
仅仅一个单片机最小系统,为何能风靡全球呢?
下面我们以图表的形式来比较一下单片机裸机、市面上一般的单片机开发板和Arduino之间的比较。
|
ATmega168裸机 |
Arduino |
ATmega168开发板 |
运算性能 |
相同 |
相同 |
相同 |
成本 |
最低 |
较低 |
较高 |
体积 |
最小 |
适中 |
较大 |
自由度 |
最大 |
除单片机正常运行需要占用的端口外,其他端口全部留给了用户使用 |
很多开发板集成了键盘、数码管、跳线开关等模块,占用了很多端口 |
标准度 |
完全符合ATmega公司公布的芯片资料 |
完全符合Arduino组织公布的标准 |
大多由各个供应商自主开发,各不相同 |
工作条件 |
需要自己搭建最小电路 |
通过USB线连上PC即可使用 |
通过USB或COM端口与PC连接即可使用 |
开发资料 |
任何ATmega168资料皆可,但一些细节需与自己的电路配合 |
英文资料丰富,目前中文资料略有欠缺。 |
一般开发板供应商都会提供各种学习资料,但大多杂乱无章,需学习者自己甄别 |
上面的表格中列出了三种选择方案的最直观比较(表中没有比较购买渠道的便利性比较,随着网络购物的普及,这一点已经不再成为爱好者们需要特别关注的问题),看起来似乎Arduino并没有特别的优势,那么为什么Arduino会得到如此热度的追捧呢?
要回答这个问题,我们必须首先回顾一下Arduino的发展历程。2005年,意大利 Ivrea 一家高科技设计学校的老师Massimo Banzi为了能给学生们提供一种便宜好用的微控制器平台,与当时在这所学校做访问学者的西班牙籍芯片工程师David Cuartielles合作设计了最初的Arduino电路板。随后Arduino便开始迅速的在欧洲流行起来,并且逐渐将春风吹到了美国、日本、中国台湾、中国香港等地区,最近一两年更是在大陆地区蓬勃的发展起来。
Arduino独有的几种优势表现在下列方面:
开放性:Arduino的硬件电路的软件开发环境都是完全开源的,在不从事商业用途的情况下任何人都可以使用、修改和分发它。这样不但可以使用户更好的理解Arduino的电路原理,更可以根据自己的需要而去修改它。比如由于空间的限制,需要设计异形的电路板;或是将自己的扩展电路与主控制电路设计到一起。
易用性:对于稍微有心的人,不论基础如何,只要他有兴趣,拿到Arduino之后的一个小时之内,应该就可以成功运行第一个简单的程序了。Arduino与PC的连接采用了当下最主流的USB连接,你可以像使用一只MP3一样把Arduino与电脑直接连起来而不要再额外安装任何驱动程序。而且Arduino的开发环境软件也非常的简单,一目了然的菜单,仅提供了最必须的工具栏,除去了一切可能会使初学者眼花缭乱的元素,你甚至可以不阅读手册便实现代码的编译与下载(我可没说编写)。
交流性:对于初学者来说,交流与展示是非常能激发学习热情的途径。但有些时候,你用AVR做了个循迹小车,我用PIC做了个小车循迹。那么对单片机理解还不是特别深刻的初学者来说,交流上恐怕就会有些困难。而Arduino已经划定了一个比较统一的框架,一些底层的初始化采用了统一的方法,对数字信号和模拟信号使用的端口也做了自己的标定,初学者在交流电路或程序的时候非常方便。
丰富的第三方资源:Arduino无论硬件还是软件,都是全部开源的,你可以深入的了解到底层的全部机理,也预留了非常友好的第三方库开发接口。秉承了开源社区一贯的开放性和分享性,很多爱好者在成功的实现了自己的设计后,会把自己的硬件和软件拿出来与大家分享。对于后来者来说,你可以在Arduino社区轻松找到自己想要使用的一些基本功能模块:舵机控制、PID调速、A/D转换等。特别一些模块供应商也开始越来越重视Arduino社区,会为自己的产品提供Arduino下的使用库,这些都极大的方便了Arduino开发者,使你可以不必拘泥于一些基本功能的编写,而可以把自己的精力更多的放在自己想要的功能设计中去。
是的,单纯从嵌入式开发的技术角度来说,Arduino并不是第一选择,为了尽可能的照顾初学者甚至是电子开发的门外汉,Arduino定制了很多底层的设计,这也是许多经验丰富的嵌入式设计人员对Arduino嗤之以鼻的原因之一。回头看看上面列出的那些Arduino的优势所在,那么Arduino的定位究竟在何处呢?
Arduino诞生之初确实是为嵌入式开发的学习而生,但发展到今天,Arduino已经远远超出了嵌入式开发的领域。在台湾地区,Arduino被称为“科技艺术”,很多电子科技领域以外的爱好者,凭借丰富的想象力和创造力,也设计开发出了很多有趣的作品。
在大陆,Arduino更多的还是作为一种嵌入式学习和开发工具出现,但是它的魅力绝不仅仅如此,它完全可以作为一种新“玩具”,甚至新的艺术载体,来吸引更多各个领域的人们加入到Arduino的神奇世界里来。
用Arduino控制的三轮小车
擦除白板的自动机器
发条微博自动给你煮咖啡
是不是已经迫不及待,想要开始你的Arduino之旅了?赶快到购物网站上搜一搜Arduino,然后……是不是被各种不同的Arduino控制板搞花了眼?
Arduino并不是一成不变的,每隔一段时间,Arduino官方组织就会发布最新的设计,对Arduino在原有基础上进行升级,让爱好者们更方便的使用。同时,为了满足不同层次的开发要求,Arduino也推出了不同版本的控制板设计,这里我们来认识一下使用最多的几种设计:
Arduino Uno
Uno版本应该说是Arduino的基础板,也是初学者的第一选择。它提供了基本的数据接口,对初学者足够的存储空间,无论是读取传感器,还是驱动电机,或者与电脑通信,都可以轻松的胜任。
Arduino Mega 2560
这一版可以算是Uno的升级版,各种接口的数量比Uno要多,而且其搭载的单片机型号也要比Uno的单片机更高级一些,运算速度更快。如果你觉得Uno的硬件资源无法满足你的需求,那么你可以尝试一下Mega,当然价格也会比Uno要更高一些。
Arduino Nano
这个可以说是Uno的简版,优先考虑了体积上的优化,尽量将体积做到最小,可以满足一些手持设备或体型微小的设备使用。当然性能上相比Uno也略有缩水。
也许有些心急的朋友已经要问了:哪一款可以控制步进电机?哪一款可以实现无线通信?哪一款可以演奏音乐……
如果我告诉你都不可以,你会不会很失望?
Arduino作为一种控制芯片,所起的作用类似于我们的大脑,大脑是无法自行运动或是发声的。大脑所起的作用类似于指挥官,Arduino也是如此,想要做一些实际任务,离不开外围电路的支持。
很多人又要头痛了,电子电路完全不懂怎么办?其实现在这一点也已经不是什么大问题。对于电子专业的学生,或是想要学习电子电路的爱好者,当然要一切靠自己,查资料,买元件,做PCB板,焊电路……这其中当然会有很多辛苦,可其中学到的知识无疑也是装入自己口袋的。
如果不想在电子电路方面花费太多的精力,也没有问题。现在很多厂商也开发了各种各样的Arduino外围功能电路,无论是电机驱动、无线通信、音乐播放,还是读取各种各样物理信号的传感器(压力、速度、倾角、方向等等),都应有尽有,而且使用方便,可以直接连到Arduino控制板上工作。
电机驱动板
蓝牙模块
霍尔传感器、光敏传感器、烟雾传感器
说完了硬件,那么我们接下来谈谈很多人都头痛不已的软件开发吧。Arduino的代码结构和一般的嵌入式代码结构略有不同,一般的嵌入式代码都是main函数中一个死循环,程序不断的反复执行,单片机在每个循环内读取各个外部端口的数据,然后根据这些数据来做出相应的策略判断,把指令再通过外部端口传出去,达到控制外部设备的目的。
Arduino的程序运行方式与此差不多,只是代码结构略有不同。Arduino代码中没有main函数,而是使用了两个不同的必备函数:
Void setup()
{
}
Void loop()
{
}
相信很多朋友已经猜出来了,Arduino代码是把初始化的代码放在了setup函数中,而把需要不断循环执行的代码放在了loop函数中。与传统的嵌入式程序虽然结构不同,但设计思想还是一致的。
开发环境软件截图(此开发环境可以在Arduino网站上免费下载)
Arduino的代码语法与C++类似,也包含了类和对象的支持。即便是没有任何代码编写的基础,也可以很快上手。关于Arduino的代码编写,无论是Arduino的官方网站,还是网络上都有了相当丰富的资料,这里不再累述。
很多Arduino制作还要涉及另外一种程序的编写,便是上位机程序。一般是PC端的程序,你可以采用任何你所熟悉的高级语言进行开发,接收Arduino控制板所传递过来的数据(串口传输),在屏幕上显示输出或写入文件。VB、VC++、Delphi、Flash script、Processing等等都能满足你的要求。
一个通过上位机程序控制外部电路灯的颜色
Arduino控制板 + 外围电路 + 程序编写 = 整个世界!
用Arduino制作的游戏手柄
--end--
声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com