Arduino为什么这么红?

相信对嵌入式开发感兴趣的朋友最近一定不会对一个新名词陌生—— Arduino。尤其对初学者来说,恐怕都听到过「嵌入式开发从哪里上手最好?Arduino!」这样的说法。那么Arduino到底是什么呢?是一种新的控制芯片?还是一种新的开发软件呢?

首先我们先看看 Arduino的实物图,下面是最常见的一种Arduino实物图片(关于Arduino的分类,我们会在后面详述):

图中已经用红线根据功能将各个模块区分出来,相信对单片机开发稍有了解的朋友一定已经发现,这不就是一个以AVR单片机最小系统为核心的控制板吗?

不错,Arduino就是以ATMEL公司的AVR单片机为核心的单片机控制板,板上除了ATmega168最小系统电路外,还包含了稳压电路,USB转串口电路,一些指示用的LED,以及一些扩展用的电路插座。

仅仅一个单片机最小系统,为何能风靡欧美台湾的学生爱好者呢?

下面我们以图表的形式来比较一下单片机裸机、市面上一般的单片机开发板和Arduino之间的比较。

上面的表格中列出了三种选择方案的最直观比较(表中没有比较购买渠道的便利性比较,随着网络购物的普及,这一点已经不再成为爱好者们需要特别关注的问题),看起来似乎 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函数,而是使用了两个不同的必备函数:

1
2
3
4
5
6
Void setup()
{
}
Void loop()
{
}

相信很多朋友已经猜出来了, Arduino代码是把初始化的代码放在了setup函数中,而把需要不断循环执行的代码放在了loop函数中。与传统的嵌入式程序虽然结构不同,但设计思想还是一致的。

开发环境软件截图(此开发环境可以在 Arduino网站上免费下载)

Arduino 的代码语法与C++类似,也包含了类和对象的支持。即便是没有任何代码编写的基础,也可以很快上手。关于Arduino的代码编写,无论是Arduino的官方网站,还是网络上都有了相当丰富的资料,这里不再累述。

很多 Arduino制作还要涉及另外一种程序的编写,便是上位机程序。一般是PC端的程序,你可以采用任何你所熟悉的高级语言进行开发,接收Arduino控制板所传递过来的数据(串口传输),在屏幕上显示输出或写入文件。VB、VC++、Delphi、Flash script、Processing等等都能满足你的要求。

一个通过上位机程序控制外部电路灯的颜色

Arduino 控制板 + 外围电路 + 程序编写 = 整个世界!

The Why·Liam·Blog by WhyLiam is licensed under a Creative Commons BY-NC-ND 4.0 International License.

WhyLiam创作并维护的Why·Liam·Blog采用创作共用保留署名-非商业-禁止演绎4.0国际许可证

本文首发于Why·Liam·Blog (https://blog.naaln.com),版权所有,侵权必究。

本文永久链接:https://blog.naaln.com/2013/04/arduino-why-so-red/