先学Arduino而不是先学单片机

突然想起一个很重要的问题,为什么大家(包括我)都认为参加电子设计大赛,或者做点什么制作都非得要先学好单片机,还有模电数电这些基础知识?
本文针对还没有足够专业知识的同学,大神可忽略~

在实验室的时候,每当有师弟(师妹)来问“怎样才能弄出这个东西?”大家通常都会说“先学好单片机基础啦,像操作IO口啊,至少点亮个LED先,还有中断定时器串口I2CSPI什么的,然后就是学习控制一些芯片模块啊,对了还有模电数电基础,画电路板,做板要转印显影腐蚀,最后焊接调试。。。”如果不是对这些非常有兴趣的同学估计都要光速逃跑了。然后实验室留下的,都是对电子制作抱有强烈兴趣,能学下去的同学。

直到今天我才想起一个最基本的问题,我们学这些的最终目的:

  • 不是要做一样东西出来吗?
  • 不是想把心目中的一个想法实现出来吗?

一定需要学好那么多东西才能付诸实现?
10年前的我们也许就需要这样,但是赶上时代发展的我们有Arduino这一神器。

What is Arduino?

首先,Arduino算是一个开发平台,其中一个型号的开发板是长这样的

ArduinoUno_R3_Front_450px.jpg

图片引用:arduino.cc

Arduino是一个开发各类设备,让你比台式电脑更能充分感知和控制物理世界的生态系统。Arduino是一个基于一系列单片机电路板的开源物理计算平台,一个编写用于Arduino和Genuino开发板的软件开发环境和一个拥有活跃开发者和用户社区。
Arduino可用于开发交互式物体,接受来自各类开关或传感器的输入,并能控制各种灯光、马达和其他物理输出装置。Arduino项目可以单独运行,也可以与您计算机上运行的软件(Processing、MaxMSP)配合使用。您可以手动组装简单的开发板,或购买预装的整套开发板, 还可以免费下载开源Arduino软件(IDE)。
Arduino编程所用编程语言是以Processing多媒体编程环境为基础的物理计算平台Wiring。通过多年的努力,Arduino软件(IDE)已经演变成能支持由英特尔和三星等公司制造的众多核心板和开发板。

官方的介绍不明觉厉,简单地说,就是一个开发平台,使用C/C++编写代码,普通人都能轻松上手,制作出想要的东西。简单的可以做个自动或者手动遥控小车。

mini-dfrobotshop-rover-kit-arduino-uno-large.jpg

图片引用:www.robotshop.com

复杂的或者做个目前比较火的3D打印机

2000550803.jpeg

图片引用:ic.tweakimg.net

当然最好的,还是把你脑海中的创意付诸于实现。
简而言之,你想做东西又不想学习单片机什么的,Arduino就是快速实现创意的最佳平台,但写代码是逃不掉的了(`・ω・´)

Why Arduino

明明有一个最快最简便的实现方法摆在面前,虽然我一直都知道这东西,却没想过它的意义何在。我们常常从51开始学单片机,然而

  • 当我们在学单片机架构,CPU,ROM,RAM,寄存器等各种理论的时候,用Arduino的人在准备开发环境。
  • 当我们在研究IO口,中断,定时器,如何使用各种通信协议的时候,用Arduino的人已经在尝试跟着教程写程序了。
  • 当我们在纠结Keil破解之类的问题时,用Arduino的人大概已经自己写出了完整的程序了。

在Arduino写程序的时候,完全不需要知道单片机是什么东西,只需要根据官方提供的各种函数写代码,就像编写电脑程序一样,做到了底层无关,底层硬件对用户是透明的,我们只需要集中精力在软件方面。这样的好处是,至少不会再有这些学习51单片机几乎都要问一遍问题:

  • delay函数要怎么写?我看不懂这些for语句是干什么的?
  • I2C怎么写?为什么一直都通信不了?
  • 串口怎么没输出的?怎么都是乱码?

这些基本的驱动函数Arduino中都已经全部编写好,使用时只需要调用函数即可。入门速度跟51单片机相比提高的不只是一点点。这也是Arduino项目最开始的目的,让一般人,让不懂什么电子知识的人都能很方便的实现自己的想法,就像开车不需要了解里面各种构造一样。官方也提供了大量示例程序,这些程序基本通用而且简单容易上手,也推出了一些外围器件模块,方便用户拓展。

然而,虽然安利了一大波,但并不是说Arduino就是什么神器,简单地说就是把单片机操作各种底层寄存器羞涩难懂的步骤省掉了。Arduino开发板本身并没有任何模块,因此你在最开始学习时只是学怎么操作这块板的芯片。当你需要操作矩阵键盘,数码管,液晶屏,电机这些东西(统称为外设)时,还是需要了解这些外设其中的原理,但单片机这个门槛你已经跨过了。
但是,

  • 学习Arduino之前首先要学习C语言,此乃基本功。
  • 操作一些官方没有例子的器件(芯片)的时候,还是需要看芯片手册或者一些教程。
  • 当需要更深入了解底层/电子知识时,就需要进一步的学习了。

总而言之,Arduino就是创作/电子制作启蒙工具,实质还是电子积木的形式,但这的确是快速实现一些idea最理想最便捷的平台。不过未来要把做出来的东西整合起来的话,就需要更深入学习其他知识了,例如绘制和制作电路板。

当然,Arduino并不适合所有人,有的同学的确是想学习了解单片机的内部结构,或者从一开始起点比较高,做出来的东西接近一个实际产品(比如我,逃

也许有同学要问:

那已经不再需要学习单片机了?

Arduino使用的就是一款AVR单片机,当你已经不满足于仅使用Arduino提供的库函数的时候,你就可以打开库函数的源代码,当你都看懂之后,你会发现你已经学会如何使用AVR单片机了

当你掌握AVR单片机再回头看51单片机,你就会发现

“51单片机好难用啊”

虽然我最开始不是从Arduino学起,都是先学习51单片机,但当我接触AVR后,我就发现

卧槽我一定是我用过最爽的单片机(手动滑稽

最后,更多Arduino信息可以在官方网站了解更多https://www.arduino.cc


如果还有同学有兴趣并看到这个地方的话

  • 我想说我们常说的单片机比较正确的叫法是微控制器/微处理器,不过因为历史的原因已经习惯这个叫法了。
  • 对于很多工科专业的同学来说,51单片机是大学课程的内容之一,但Arduino对于大一大二模电数电单片机都还沒教的同学来说,Arduino会比较适合入门电子世界。