高大上的无人机玩过吗?智能的家庭空气检测仪见过吗?手机控制的电子体重秤、血压仪用过吗?这些“高科技”都属于智能硬件。
作为软件开发者的你,有没有想过自己开发一个智能硬件呢?
除此之外,假如你正在学习C/C编程语言,有没有觉得学习的内容很枯燥,不知道学习以后能做什么用呢?假如在学习的同时,将智能硬件的实践结合起来,你一定会发现学以致用的乐趣,并且一定会帮助你对整个C/C编程体系有非常深刻的、直观的认识和理解。
也许你会觉得硬件开发的门槛很高,作为小白或者软件开发者难以企及,那么这你就想错了。其实,现在已经有了很多专门为软件开发者设计的智能硬件开发平台。例如现在火爆的树莓派-raspberry pi、英特尔推出的爱迪生-Edison,以及本系列将重点介绍的Arduino。
有了它们,即使你对硬件并不了解,也能开发出软硬件完美结合的智能小硬件。
这些硬件都有个共同的特点,采用主控制板(开发板)+扩展板+外接硬件的方式工作。
主控制板(开发板):我们讲的平台(树莓派、爱迪生、Arduino),指的就是主控制板,它通常就是一个开发板。你可以把它想象成台式电脑上的主板,只不过这个主板已经焊接上了CPU和内存等最最主要的部件;
扩展板:主控制板上的针脚是有限的,扩展板可以把一个针脚扩展成多个针脚,让更多的设备与这个针脚连接。它们就好像是电脑主板上延伸出来的一根根USB数据线,把主板上的一个USB接口,转接成了多组不同的USB接口,放在电脑主机的前面和后面;扩展板也不一定必须使用到,它是主板的一个辅助工具,能方便的帮助使用者链接线路而已;
外接硬件:按钮开关、传感器等器件通过扩展板与主控制板的针脚相连。它们就好像是台式电脑上的USB接口可以连接的U盘、移动硬盘、USB Wifi等等外接设备;
可以想象的到,只要使用对应平台的扩展板,外接硬件可以连接在不同的平台上,正常的使用。所以那些外接的硬件有很高的通用性。
1.1 WHY Arduino
在前面提到的智能硬件开发平台中,我们选择了Arduino。先来看看关于它的来历的吧。
这个一个非常著名的开源硬件项目,诞生于意大利的一所学校。据说学校的学生们找不到好用的开发板。2005 年冬天, Massimo Banzi 跟朋友 David Cuartielles 讨论了这个问题,David Cuartielles 是一个西班牙芯片工程师,当时在这所学校做访问学者。两人决定设计自己的电路板,并请 Banzi 的学生 David Mellis 为电路板设计编程语言。两天以后,David Mellis 就写出了程序。又过了三天,电路板就完工了。
在学校附近的街上有家叫「di Re Arduino」的酒吧。Massimo Banzi经常光临这家酒吧,于是他将这个电子产品命名为 Aruino,以纪念这个地方。
任何人即使不懂电脑编程,也能用 Arduino 做出很酷的东西。
Arduino有什么优势呢?
Arduino足够的便宜,一个Arduino开发板也就几十块人民币(即使是意大利原装板也只要100多人民币),投入的硬件成本很低,可以花很低的代价学习开发;
作为智能硬件的初学者,总希望从最简单的开始,能学到原理,但是又不要有太高的学习门槛,有了基础以后再循序渐进。Arduino开发只需要开发者会基本的
C/C++语言
就可以了,几乎不需要任何其他的编程或硬件基础;Arduino的运算能力足够制作一些简单的智能硬件了,而它又更接近一个单片机,很多其他的智能硬件都可以用它进行功能的验证;
Arduino是软硬件开源的,有很多的技术资料可以参考,有庞大的社区支持,可以找到很多志同道合的人交流、快速进步;
所以,我们选择这个性价比最高的的平台来开始智能硬件开发之旅。
除此以外,在使用Arduino的过程中,你会感性的认识:
- 软件代码转变为机器指令执行的过程;
- 机器指令下载到硬件设备的存储模块进行保存;
- 硬件设备加电之后如何从你写的第一行代码开始执行;
虽然以上过程和一台真正的计算机从启动到运行的过程有很大不同,但是基本的原理都是一样的,会让你将C/C++语言和硬件打交道的整个逻辑关联起来,帮助你理解。假如你是位系统学习过软件开发的大学生,那么你会对编译原理、计算机原理、编程语言、应用程序的整个运行体系有一个整体的认识。
不过,即使你没有上述的基础知识也没有关系,通过Arduino,你会在不知不觉中掌握其中的概念,为以后的相关学习做好铺垫。
1.2 Arduino开发板
Arduino开发板根据尺寸、性能,分为了多个子系列。
其中最常见、用来做入门学习的有两种,UNO和MEGA。
这两个开发板的功能几乎一样,MEGA使用的主控制芯片性能要高一些,针脚多一些,可以同时连接的外接硬件就要多一些。
相比之下,UNO接口太少,配置低一些,价格也便宜一些。MEGA配置高一些,价格比UNO贵一点。
另外,UNO的串口控制器只有一个,假如你还要使用其他串口设备的时候,调试起来就比较吃力了。例如做蓝牙小车,因为Uno只有一个串口,蓝牙和USB都想要使用,你就得先拔下蓝牙模块的连接线才能部署程序到开发板;部署完成后,再插上蓝牙连接线才能开始测试。
如果出于批量生产成本考虑要使用UNO开发板也没有问题,可以先在MEGA上完成开发,最后在UNO上做测试,只要占用的硬件接口不大于UNO开发板提供的接口就行了。
我们使用Arduino开发板主要是用来学习,可能会同时要加装各种外接设备,在不太在意成本的情况下,MEGA开发板可能更有优势。
在选购Arduino开发版时,还需要注意的是,很多网上再售的开发板并不是意大利原厂的开发板,而是国产。
因为Arduino是开源项目,它的设计图纸任何人都可以使用,所以国内厂商都可以根据图纸自行设计和使用,唯一的区别就是不能在开发板上打上官方的logo,单它们的功能实际上完全一样,而且还要便宜的多。
另外,国内的开发板,也分为原版和改进版。所谓改进版,就是在厂家在原来图纸上进行了改造,增加了一些连线接口,并将数据连接的接口修改成了我们使用更多的micro USB接口,整体使用更加符合我们国人的习惯。所以在网络上进行选购的时候,选择原厂的、国产的或者国产改进的都是可以的。不过假如你还是有些许担心,那就买国产原版的吧,至少和原厂版的完全一致。
学习硬件开发的一个很大门槛就是要记住许多复杂的寄存器地址。Arduino的之所以被认为是给软件开发者设计的硬件,就在于它简化了硬件上的多种接口,把它们抽象成一个个可以直接控制的引脚位置。软件开发者编程时只需要对这几类引脚做操作就可以了。
Arduino开发板上的引脚数量,根据开发板的类型是不同的。例如,UNO有20多根引脚,MEGA有70多根引脚。这些引脚都有自己的名字。
这些引脚可以被分成3类,
电源引脚。利用电源引脚,可以为外界的扩展板或者硬件提供3.3V(引脚3V3) 5V(引脚5V)的电压,以及接地(引脚GND)的功能;也能通过引脚VIN接受外部提供的其他电压;
在UNO开发板中,电源引脚的位置大致如下,
在MEGA开发板中,电源引脚的位置大致如下,模拟引脚。区别于数字引脚只能输出0,1两种状态,模拟引脚可以输出包括0与1之外的很多数值。开发板有若干个模拟引脚,它们接收或输出模拟量:
0~1023
。
它们被编成了0~N
的数字号码,用A0~AN
来表示。
例如UNO开发板上的模拟引脚有6个,就是A0~A5
。
例如MEGA开发板上的模拟引脚有16个,就是A0~A15
。数字引脚。只能输出0和1两种状态的引脚。开发板有若干个数字引脚,它们只接收或输出高低电平两个值:HIGH或者LOW。
它们被编成了0~N
的数字号码,用D0~DN
来表示。在UNO开发板上的数字引脚有14个,就是D0~D13
。其中D0 D1 D3 D5 D6 D9 D10 D11
还具有其他的功能。
在MEGA开发板上的数字引脚有54个,就是D0~D53
。
以MEGA开发板来说,这些数字引脚还可以提供别的复用功能,PWM(Plus Width Module)。通过控制脉冲信号周期的方式,来调节数字引脚输出的电压大小;
通信引脚。作为串口输入和输出的接口;
不同的Arduino开发板,它们的引脚位置是不相同的,这里只是用UNO和MEGA开发板来做一个示例。目前我们只要知道有这些引脚的存在就可以了。今后要使用到这些引脚的时候,我们再来做详细的介绍。
*关于Arduino UNO开发板的详细介绍请参考官网。
*关于Arduino MEGA开发板的详细介绍请参考官网。
1.3 Arduino扩展板
1.3.1 官方扩展板
Arduino官方目前总共推出了5款扩展板。这些扩展板会插在主板上,方便引伸出更多的引脚,进而实现扩展。下图是扩展板和主板相连的实际展示图。扩展板不同,连接后的图也是不同的。
这些官方设计的扩展板分别是,
Arduino Motor Shield
1.3.2 第三方扩展板
Arduino是开放平台,有不少的第三方扩展板,它们根据开发者的需要,扩展出提供不同功能的接口。对于有能力的硬件开发者来说,可以随心所欲的设计和制作适合自己的扩展板。
例如,下面这款双L293D芯片的马达扩展板,
1.4 外接传感器硬件
Arduino可以外接多种传感器硬件。这些硬件可以,
直接接到开发板上;
接到扩展板上,然后通过扩展板连接到主控制板上;
1.4.1 感知型传感器硬件
感知型传感器是用来感知、测量某种环境数据的硬件。例如光线传感器、温湿度传感器、超声波探测器、粉尘传感器等等。
1.4.2 控制型传感器硬件
控制型传感器用来发出指令、改变硬件某个特性的硬件。例如直流马达、步进马达、舵机、LED灯等等。
关于这些传感器详细的原理和用法,我们将在以后的章节详细的介绍。