Arduino为什么这么红?

网友投稿 2019-11-05 13:58

相信对嵌入式开发感兴趣的朋友一定对Arduino有或多或少的了解或熟知。而对初学者来说,也许经常听到“嵌入式开发从哪里上手最好?Arduino!”这样的说法。那么Arduino到底是什么呢?是一种新的控制芯片?还是一种新的开发软件呢?

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

https://cdn.china-scratch.com/timg/191107/135T31563-0.jpg

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

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

仅仅一个单片机最小系统,为何能风靡全球呢?

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


ATmega168裸机

Arduino

ATmega168开发板

运算性能

相同

相同

相同

成本

最低

较低

较高

体积

最小

适中

较大

自由度

最大

除单片机正常运行需要占用的端口外,其他端口全部留给了用户使用

很多开发板集成了键盘、数码管、跳线开关等模块,占用了很多端口

标准度

完全符合ATmega公司公布的芯片资料

完全符合Arduino组织公布的标准

大多由各个供应商自主开发,各不相同

工作条件

需要自己搭建最小电路

通过USB线连上PC即可使用

通过USB或COM端口与PC连接即可使用

开发资料

任何ATmega168资料皆可,但一些细节需与自己的电路配合

英文资料丰富,目前中文资料略有欠缺。

一般开发板供应商都会提供各种学习资料,但大多杂乱无章,需学习者自己甄别

上面的表格中列出了三种选择方案的最直观比较(表中没有比较购买渠道的便利性比较,随着网络购物的普及,这一点已经不再成为爱好者们需要特别关注的问题),看起来似乎Arduino并没有特别的优势,那么为什么Arduino会得到如此热度的追捧呢?

https://cdn.china-scratch.com/timg/191107/135T34064-1.jpg

要回答这个问题,我们必须首先回顾一下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的神奇世界里来。

https://cdn.china-scratch.com/timg/191107/135T3J49-2.jpg

用Arduino控制的三轮小车

https://cdn.china-scratch.com/timg/191107/135T310F-3.jpg

擦除白板的自动机器

https://cdn.china-scratch.com/timg/191107/135T41I9-4.jpg

发条微博自动给你煮咖啡

是不是已经迫不及待,想要开始你的Arduino之旅了?赶快到购物网站上搜一搜Arduino,然后……是不是被各种不同的Arduino控制板搞花了眼?

Arduino并不是一成不变的,每隔一段时间,Arduino官方组织就会发布最新的设计,对Arduino在原有基础上进行升级,让爱好者们更方便的使用。同时,为了满足不同层次的开发要求,Arduino也推出了不同版本的控制板设计,这里我们来认识一下使用最多的几种设计:

https://cdn.china-scratch.com/timg/191107/135T5M41-5.jpg

Arduino Uno

Uno版本应该说是Arduino的基础板,也是初学者的第一选择。它提供了基本的数据接口,对初学者足够的存储空间,无论是读取传感器,还是驱动电机,或者与电脑通信,都可以轻松的胜任。

https://cdn.china-scratch.com/timg/191107/135T56454-6.jpg

Arduino Mega 2560

这一版可以算是Uno的升级版,各种接口的数量比Uno要多,而且其搭载的单片机型号也要比Uno的单片机更高级一些,运算速度更快。如果你觉得Uno的硬件资源无法满足你的需求,那么你可以尝试一下Mega,当然价格也会比Uno要更高一些。

https://cdn.china-scratch.com/timg/191107/135T5C18-7.jpg

Arduino Nano

这个可以说是Uno的简版,优先考虑了体积上的优化,尽量将体积做到最小,可以满足一些手持设备或体型微小的设备使用。当然性能上相比Uno也略有缩水。

也许有些心急的朋友已经要问了:哪一款可以控制步进电机?哪一款可以实现无线通信?哪一款可以演奏音乐……

如果我告诉你都不可以,你会不会很失望?

Arduino作为一种控制芯片,所起的作用类似于我们的大脑,大脑是无法自行运动或是发声的。大脑所起的作用类似于指挥官,Arduino也是如此,想要做一些实际任务,离不开外围电路的支持。

很多人又要头痛了,电子电路完全不懂怎么办?其实现在这一点也已经不是什么大问题。对于电子专业的学生,或是想要学习电子电路的爱好者,当然要一切靠自己,查资料,买元件,做PCB板,焊电路……这其中当然会有很多辛苦,可其中学到的知识无疑也是装入自己口袋的。

如果不想在电子电路方面花费太多的精力,也没有问题。现在很多厂商也开发了各种各样的Arduino外围功能电路,无论是电机驱动、无线通信、音乐播放,还是读取各种各样物理信号的传感器(压力、速度、倾角、方向等等),都应有尽有,而且使用方便,可以直接连到Arduino控制板上工作。

https://cdn.china-scratch.com/timg/191107/135T52X7-8.jpg

          电机驱动板                    

https://cdn.china-scratch.com/timg/191107/135T5A30-9.jpg

蓝牙模块

https://cdn.china-scratch.com/timg/191107/135TB442-10.jpg

霍尔传感器、光敏传感器、烟雾传感器

说完了硬件,那么我们接下来谈谈很多人都头痛不已的软件开发吧。Arduino的代码结构和一般的嵌入式代码结构略有不同,一般的嵌入式代码都是main函数中一个死循环,程序不断的反复执行,单片机在每个循环内读取各个外部端口的数据,然后根据这些数据来做出相应的策略判断,把指令再通过外部端口传出去,达到控制外部设备的目的。

Arduino的程序运行方式与此差不多,只是代码结构略有不同。Arduino代码中没有main函数,而是使用了两个不同的必备函数:

Void setup()

{

}

Void loop()

{

}

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

https://cdn.china-scratch.com/timg/191107/135TB464-11.jpg

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

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

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

https://cdn.china-scratch.com/timg/191107/135TAU5-12.jpg

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

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

https://cdn.china-scratch.com/timg/191107/135T64437-13.jpghttps://cdn.china-scratch.com/timg/191107/135TLA5-14.jpg

用Arduino制作的游戏手柄

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com