分类目录归档:大话Arduino智能硬件

第5节 按钮开关

第5节 按钮开关

对于硬件的控制,我们常用硬件开关来控制Arduino开发板上其他外接硬件的通断逻辑。比如,一盏LED灯,硬件上最好有个开关,按一下开关,就让LED灯亮,再按一下开关,就让LED灯关闭。

开关的外形有多种式样,四根引脚、三根引脚。不论是三引脚还是四引脚,原理都是相同的。如果选择四引脚开关,开发者就得自己搭建一个简单的电路;三引脚的按钮开关是对四引脚开关的集成封装,简化了外围电路的设计,很适合对硬件缺乏深入认识的软件开发者。

这里我们选用使用最方便的三引脚按钮开关。我们安豆杂货铺提供的按钮开关,就是这样的三引脚开关。

5.1 硬件连接

三引脚按钮开关的引脚对应如下,

含义 引脚位置 连接 开发板引脚
控制 S <--> D10
VCC 电源 <--> 5V
接地 GND <--> GND

在实际的使用当中,按钮开关经常连接到扩展板上。例如这里将按钮开关连接到10组扩展口上,

含义 引脚位置 连接 扩展板引脚
控制 S <--> 10组S
VCC 电源 <--> 10组V
接地 GND <--> 10组G

5.2 控制代码

首先我们初始化引脚,按钮使用的是D10,就要初始化D10为输入引脚,

每按一次按钮,都会触发按下松开两个响应,也就是说,按钮按下后会自动弹起,不会保持被按下的状态,

  1. 当按下开关按钮的时候,S引脚会变成LOW电平;
  2. 当松开开关按钮的时候,S引脚会变成HIGH电平;

所以当出现了这两个变化的时候,才能判断按钮被按下并抬起了一次。

采用digitalRead()读取按钮对应引脚的电平,判断它当前是否被按下,

5.3 查看结果

把以上代码部署到设备上,打开串口调试窗口,按下并松开开关,可以看到类似如下输出信息,


***************************************


本系列课程使用到的Arduino开发板、扩展板以及其他相关的传感器,各位可以根据我们文章中介绍的硬件在淘宝网选购。
您也可以在我们的网店安豆的杂货铺中购买,这些相关硬件都由我们为您把关购买,为大家节省选择的精力与时间。同时也感谢大家对我们这些码农的支持。

最后再次感谢各位读者对安豆的支持,谢谢:)

第4节 蓝牙传输

第4节 蓝牙传输

智能硬件基本上都需要和手机相连,然后让手机控制这些硬件的工作。相连的方式不外乎以下三种,

  1. 数据线有线连接,通过一根数据线把智能硬件和手机连接起来。采用这种方式,需要一个特殊的带USB HOST功能的扩展板;

  2. WIFI连接,智能硬件和手机都连接到同一个WIFI路由器上,让彼此通过WIFI网络传输数据。采用这种方式需要一个WIFI模块;

  3. 蓝牙连接,智能硬件和手机通过蓝牙相连。采用这种方式需要一个蓝牙模块。通常情况下智能硬件等待其他设备的介入,而手机端会主动寻找可以连接的蓝牙设备,主动发起连接请求;

Arduino可以通过以上三种方式的任何一种实现与手机的连接。这里我们将选择蓝牙连接。

选择使用蓝牙连接的主要原因是,Arduino蓝牙模块的价格相对便宜,实现的成本低,而且编程很简单。

4.1 通信接口

Arduino开发板会提供一个至多个用于通信用的串口接口。开发板与任何通信模块的数据交换都是通过这些串口来完成的。

  1. UNO的串口硬件位置

    USB接口和0、1引脚都是对应着串口-Serial

  2. MEGA的串口硬件位置

    MEGA有多个串口,
    USB接口和0、1引脚对应着串口-Serial
    18、19引脚对应着串口1-Serial1
    16、17引脚对应着串口2-Serial2
    14、15引脚对应着串口3-Serial3

每一个串口都由一个输入引脚(RX)和输出引脚(TX)组成。硬件接收和发送数据的功能,就是通过对应的引脚实现的。

4.1.1 引脚的连接

在外接的通信模块中,至少也要有4个引脚接入开发板:输出TX、输入RX、电源VC、接地GND。有的通信模块可能还有额外的引脚作为额外的控制通道,但以上4个引脚是一定会有的。

当开发板与外接通信模块进行连接的时候,要按照如下的方式进行,

开发板引脚 连接 外接通信模块引脚
电源VC <—-> 电源VC
接地GND <—-> 接地GND
输出TX <—-> 输入RX
输入RX <—-> 输出TX

*注意开发板和外接通信模块相连的时候后,是TX连着RX,一个发送,另一个当然就是接收了;并且VC/GND不和TX/RX不能接反了,不然会烧毁蓝牙模块。
电源的两根线不能接到数据发送的两个的引脚上,否则会烧毁蓝牙模块
电源的两根线不能接到数据发送的两个的引脚上,否则会烧毁蓝牙模块
电源的两根线不能接到数据发送的两个的引脚上,否则会烧毁蓝牙模块

如此一来,开发板和外接的通信模块就可以通过串口来进行通信了。

在实际的操作当中,我们还是会使用到扩展板来进行引脚的连接。

4.1.2 数据的读写

在进行读写之前,要判断一下串口是否可用,

当我们想在代码中使用这些串口读取数据的时候,可以,

  1. 读一个字节,

  2. 读到数组缓冲区-buffer中,

当我们想在代码中使用这些串口发送数据的时候,可以,

  1. 发送一个byte,

  2. 发送一个缓冲区的内容,

4.2 蓝牙模块

蓝牙模块与Arduino开发板之间就是通过串口进行数据传输的。

我们经常见到的蓝牙模块有HC-05 HC-06HC-06拥有4个引脚,输出TX、输入RX、电源VC、接地GND。还有一种形式的蓝牙模块,它就远不止4个引脚了。

我们安豆杂货铺提供的蓝牙模块,就是功能最为简单的HC-06蓝牙模块,它只能够被动的接收其它蓝牙模块发起的连接请求,连接时的配对密码默认是1234

4.2.1 蓝牙模块的硬件连接

这些蓝牙模块的连接非常简单。这里我们选择的器件有,

  • 1个MEGA开发板;
  • 1个HC蓝牙模块;
  • 4根连接线;

根据之前串口连接的原则,我们将蓝牙模块与Arduino开发板用插线连接起来。我们选择将蓝牙模块的RX TX连接到MEGA开发板的0和1引脚--使用Serial这个串口。

或者使用扩展板来连接蓝牙模块,这里我们使用HC-06举例,将HC-06连接到MEGA扩展板的Serial接口上,

扩展板引脚 连接 蓝牙模块引脚
0组V(电源VC) <—-> 电源VC
0组G(接地GND) <—-> 接地GND
1组S(TX) <—-> 输入RX
0组S(RX) <—-> 输出TX

当开发板通电(USB数据线连接上电脑)以后,蓝牙模块的指示灯就亮了。此时它就进入了工作状态:其他蓝牙设备就可以查找并连接这个外接的蓝牙模块了。

*注意:假如你使用的是UNO开发板,也可以按照上面的引脚进行连接,不过当D0 D1引脚被蓝牙设备占用的时候,是不能向UNO开发板部署代码的。因此每当你要部署代码的时候,需要将D0 D1引脚断开,部署完成后再重新连上。如果使用MEGA开发板,你就可以将蓝牙接到其它的串口上(MEGA有多个串口,而UNO只有一个),避免每次刷机都要重新连接硬件。所以我们建议你最好还是采用MEGA开发板。

4.2.2 蓝牙通信的实现

接下来,我们做个简单的程序:让蓝牙模块接受其他蓝牙设备发送过来的数据,每次收到该数据后,又把数据原封不动的回传给发送设备,

  1. setup()中,初始化好蓝牙设备的波特率,为9600,因为我们硬件连接的是Serial,所以就要初始化Serial

  2. loop()中,不停的尝试读取串口(蓝牙设备)收到的消息,一旦收到,就通过串口(蓝牙设备)把收到的内容原封不动的发送出去,

4.2.3 结果验证

最后我们需要一个蓝牙设备上的应用程序,来连接这个正在工作的蓝牙模块,并向它发送数据。该应用收到蓝牙模块回传的消息后,能够向开发者展现出来。

这里可以使用我们另一篇文档《手把手教你做蓝牙聊天应用》开发的AnddleChat来连接设备、发送数据、显示接收的内容。

大家可以,

  1. 下载该部分对应的源码,编译后获取可执行的程序;

  2. 也可以使用编译好的APK文件,直接安装测试。

安装完成后,启动应用,根据提示打开蓝牙功能,搜索要连接的Arduino蓝牙模块,选择连接。这里选择搜索到的HC-06设备,

在文字输入框输入内容123456789,获取对方接收到后到回应,

可以看到,我们返回的数据分成了两条:1 23456789。说明Arduino开发板在读取蓝牙串口的数据时,Serial.readBytes()并没有一次把所有数据读完,而是分两次接收到的。

所以,假如Arduino开发板希望将对方发送来的数据接收完全之后,在整个发送回去,需要将每次读到的数据保存下来,直到没有新的数据接收,然后再统一一次性的全部发送返回。


至此,Arduino通过外接蓝牙模块接收和发送数据的功能就完整的实现了。


/*/
* 版权声明
* 本教程只在CSDN安豆网发布,其他网站出现本教程均属侵权。

*另外,我们还推出了Arduino智能硬件相关的教程,您可以在我们的网店跟我学Arduino编程中购买相关硬件。同时也感谢大家对我们这些码农的支持。

*最后再次感谢各位读者对安豆的支持,谢谢:)
/*/

第3节 控制LED灯

第3节 控制LED灯

现在我们开始尝试用代码控制一个真正的直观的硬件设备。

第一个例子:让Arduino开发板上的一个LED小灯周期性的打开、关闭。
第二个例子:让LED灯亮度逐渐的变亮变暗。

3.1 LED灯的开关

3.1.1 原理介绍

Arduino开发板上,都会有两个LED指示灯。不同的开发板,LED指示灯的位置、颜色略有不同。

  1. 电源指示灯。当开发板连接上电源(或者通过USB线供电)后,用来指示电源是否接通。这个LED灯旁边肯定有一个“On”标记;

  2. 测试用指示灯。这是一个用来做内部测试的指示灯,也正是本示例要使用到的指示灯。在这个LED灯旁看到个‘L’标记;

前面的章节中,我们介绍了Arduino开发板提供了3类引脚。其中数字引脚D13就控制着这个测试用指示灯。因此我们只需要在代码中控制好这个引脚就好了。
没有可外接的LED模块时,就用D13引脚来做测试。

3.1.2 代码设计

通过菜单栏创建一个叫做LEDTest.ino的文件,启动这个示例。

  1. 任何引脚在使用之前,都要在setup()中对它进行初始化,告知这个引脚用来输出-OUTPUT,还是用来输入-INPUT。这里是要初始化D13引脚,让它作为输出。

  2. 通过digitalWrite()函数,让指示灯变亮一秒,然后变暗一秒,如此往复,

    loop()执行之后,会被循环再次执行,我们设计的效果就是LED灯一秒亮、一秒暗的不停的循环。

    digitalWrite()函数专门用来为数字引脚设置高低电平,

3.1.3 结果观察

将工程编译部署到开发板上,就能看到D13连接到LED指示灯,一秒亮、一秒暗的不停闪烁。

3.2 LED灯明暗调节

3.2.1 原理介绍

数字引脚只能输出高电平HIGH或低电平LOW两种,但是通过脉冲宽度调制(Pulse Width Modulation简称PWM)就能让数字端口模拟输出多级的电压(通常是0级~255级,0级代表没有,255级代表最高电压)。

数字引脚上的电压,可以看成是一个个脉冲方波,当引脚一直处于高电平的时候,输出为V,

当引脚电压的脉冲方波周期中,有50%的时间中处于高电平的时候,平均输出就为V/2;

当引脚电压的脉冲方波周期中,有33.3%的时间中处于高电平的时候,平均输出就为V/3;

以此类推。

*更官方的表述请参考官网

Arduino开发板提供的数字引脚中,有的引脚就具备了PWM的能力:能够设置这些数字引脚的电压输出级数。

通过官网给出的规格,可以看出Arduino MEGA开发板的D13引脚,是具备PWM功能的。所以我们可以让测试指示灯渐变明暗。

不过Arduino UNO开发板上的D13引脚并不具备PWM功能,因此要在它上面进行灯光强弱调整的实验,必须要在其他的引脚上,外接一个LED灯硬件。这部分内容,我们将在后面介绍。

3.2.2 代码设计

改造前面的LEDTest.ino文件。

  1. setup()中对它进行初始化,告知这个引脚用来输出-OUTPUT,或者用来输入-INPUT。这里是要初始化D13引脚,让它作为输出。

  2. 通过analogWrite()函数,让指示灯逐级变亮,然后逐级变暗,如此往复,

    loop()执行之后,会被循环再次执行,我们设计的效果就是LED灯逐渐变亮,再逐渐变暗。

    这里使用了analogWrite()函数向数字引脚设置电压0级~255级中的任何一级,

    可见analogWrite()函数并不像它的名字那样只是模拟引脚的专利,它对支持PWM的引脚同样适用。

3.2.3 结果观察

将工程编译部署到开发板上,就能看到D13连接到LED指示灯,一会儿亮一会儿暗的逐渐变化。

3.3 其他LED灯的使用

除了使用Arduino MEGA开发板的D13引脚,我们也可以使用任何其他带PWM功能的数字引脚。例如Arduino MEGA开发板的D2~D13 D44 D46;Arduino UNO开发板的3 5 6 9 10 11。将LED灯接到这些引脚上面,就能同样的实现对LED灯的控制。

3.3.1 LED模块

你的LED模块可能是单色的:只能发出一种颜色的光,这种模块有3个引脚,标注字符S的是控制灯光强度的引脚、VCC或者+是电源引脚、GND或者G是接地引脚,例如安豆的杂货铺中提供的单色LED灯模块,

LED灯也可能支持3种基础颜色-红绿蓝,这种模块有4个引脚,例如安豆的杂货铺中提供的三色LED灯模块,

  1. 标注字符R的是控制红色灯光强度的引脚;
  2. 字符G的是控制绿色灯光强度的引脚;
  3. 字符B的是控制蓝色灯光强度的引脚;
  4. GND是接地引脚,

3.3.2 连接模块

这里我们先用单色的LED灯模块举例。

MEGA开发板,2-13引脚都支持PWM,随便选一个都可以。

UNO开发板,3,5,6,9,10,11引脚支持PWM,可以在开发板上看到引脚数字边上有个'~'。

这里我们选择D9引脚来连接LED灯。

LED灯的S引脚连接到MEGA D9引脚;VCC接到MEGA 5V引脚;GND接到MEGA GND引脚。

早期的开发板,为了防止电压不稳定击穿电子器件,需要连接个电阻。
现在的开发板,只在接马达时才需要增加电阻,惯常的做法是增加一块扩展板。

在实际的硬件连接当中,我们通常用扩展板来连接LED模块和开发板。

这里我们使用传感器扩展板,

可以看到扩展板上已经印制出了每个引脚的含义,

对于数字引脚扩展槽来说,
GND或者G:接地引脚
VCC或者V:供电引脚
D或者S:被扩展出的引脚,其下方的数字代表该引脚的编号

对于模拟引脚扩展槽来说,
GND或者G:接地引脚
V或者+:供电引脚,
S:被扩展出的引脚,其下方的数字代表该引脚的编号

所以,对于这里的情况,我们选择标注了9的数字引脚扩展插槽。

扩展板引脚 连接 单色LED灯模块引脚
9组V <--->
9组G <---> G
9组S <---> S

3.3.3 修改代码

因为这次我们使用了D9引脚,所以需要修改前面使用的D13引脚为D9,

3.3.4 结果观察

将工程编译部署到开发板上,就能看到D9连接到LED指示灯,一会儿亮一会儿暗的逐渐变化。

3.3.5 使用三色LED灯

使用三色的LED灯模块,与使用单色的LED灯模块一样。在硬件连接时,要同时把红R、绿G、蓝B三种颜色对应的引脚连接到PWM接口上。例如使用数字引脚D9、D10、D11,分别对应红、绿、蓝三种颜色,就要多使用几个扩展板的插槽,将对应的R G B引脚插在标注了9 10 11编号的数字扩展口上,

在代码中要初始化三个PWM接口。


***************************************


本系列课程使用到的Arduino开发板、扩展板以及其他相关的传感器,各位可以根据我们文章中介绍的硬件在淘宝网选购。
您也可以在我们的网店安豆的杂货铺中购买,这些相关硬件都由我们为您把关购买,为大家节省选择的精力与时间。同时也感谢大家对我们这些码农的支持。

最后再次感谢各位读者对安豆的支持,谢谢:)

第2节 Hello World

第2节 Hello World

万事开头难,这一节我们将写一个最简单的程序,让它在Arduino MEGA开发板上运行起来。

为此,我们需要准备,

  1. Arduino MEGA开发板;
  2. 一台开发用的电脑,Window、Linux、MacOS操作系统都可以;
  3. 一根连接Arduino MEGA开发板和电脑的USB数据线;
    注意,这根USB连接线的一端是方头的,它将和Arduino开发板提供的USB接口相连。这种方头的USB数据线接口叫做USB type-B,常用在打印机的接口上;而我们最常使用的那种USB数据线接口叫做USB type-A。

2.1 搭建开发环境

在官网下载相应操作系统的Arduino集成开发环境(简称Arduino IDE)。有了这个IDE工具,就能方便的编辑、编译代码,并把编译的结果通过USB连接线,部署到Arduino开发板上。

IDE下载完成后,就像任何普通程序一样,直接安装就行了。

双击Arduino的图标,IDE程序就运行起来了,

2.2 新建工程

启动Arduino IDE,点击菜单栏的文件->新建(或者使用快捷键Ctrl+N),生成新的工程文件,

点击菜单栏的文件->保存(或者使用快捷键Ctrl+S),保存生成的工程文件。

文件名填写HelloWorld。保存后,Arduino IDE会自动生成一个名称叫HelloWorld的文件夹,并在这个文件夹下生成一个同名的HelloWorld.ino文件。

.ino文件是Arduino工程的主文件,Arduino IDE要求工程项目的主文件必须置于同名文件夹之内

2.3 Hello World

接下来,我们来实现一个简单的功能:Arduino开发板通过串口,不断的向电脑端输出Hello World;同时,我们通过串口工具,看到Arduino开发板的输出信息。

2.3.1 原理介绍

Arduino开发板都会提供一个串口(如果你不知道什么是串口的话,可以把它想象成一条连接着开发板和其他外围设备的管道)供电脑调试Arduino开发板上运行的程序使用。

Arduino程序通过Serial.print()这样的函数就能把数据从开发板写入到串口中,如果电脑端有对应的接收程序,那么就能看到写入的数据。

Arduino IDE通过串口和PC(或其他设备)通讯。
在Arduino IDE中Serial对象就是串口的化身。
注意,Serial是系统的类对象实例,而不是类,所以直接使用Serial.print()这种方法。

详细内容可以参看官网的描述

  1. UNO的串口硬件位置

    USB接口和0、1引脚都对应串口-Serial

  2. MEGA的串口硬件位置

    MEGA有多个串口,
    USB接口和0、1引脚对应串口-Serial
    18、19引脚对应串口1-Serial1
    16、17引脚对应串口2-Serial2
    14、15引脚对应串口3-Serial3

2.3.2 代码设计

新生成的HelloWorld.ino文件中,自动生成了setup()loop()两个函数。

开发板的程序启动时,首先会调用setup(),进行初始化工作;
然后会循环的调用loop()函数,让开发板不停的运转起来。

程序的整个逻辑就像下面的c语言代码,

这里面的main和while代码去哪了呢?它们被Arduino的开发环境隐藏了起来,只是将setup()loop()开放给了开发者。

开发者只需要实现这两个函数就行了。这样设计的目的是让程序的结构更清晰。从这里可以看出,

  1. setup()只执行一次,用来完成初始化的功能;
  2. loop()不断的被循环执行,是实现开发板逻辑控制的地方;

在本例中,setup()函数里只需要设置串口波特率。

波特率指的是数据发送的速度,只有接收方和发送方都在同一个波特率上,才能正确的接收数据。这就好比调频的电台和收音机,两者的频率必须一致才能接收到声音。

loop()中,用串口输出”Hello world!”,每循环一次,就会输出一次这个字符串,

2.3.3 程序部署

程序写好以后,需要将电脑上编译好的程序,部署到开发板上,让程序运行起来,

  1. 用USB数据线,将开发板和电脑连接起来;现在的新版操作系统(Window10, MacOS X等等),不需要安装驱动,就能识别Arduino开发板;

  2. 选择菜单栏的工具->开发板,选择正在使用的开发板Arduino MEGA or MEGA 2560;

  3. 选择菜单栏的工具->端口,选择正在使用的设备端口(如果设备被操作系统成功识别,会在此处显示出来);

  4. 点击工具栏上的部署按钮,程序就会被编译,并部署到设备上运行了;

2.3.4 数据观察

点右上角的按钮打开串口监视器(或者使用快捷键Ctrl+Shift+m)

右下角的波特率必须和setup()中设置的数值相同,本例是9600.

可以看到不断输出“Hello world!”


至此,一个简单的Arduino程序,就在设备上运行起来了。


***************************************


本系列课程使用到的Arduino开发板、扩展板以及其他相关的传感器,各位可以根据我们文章中介绍的硬件在淘宝网选购。
您也可以在我们的网店安豆的杂货铺中购买,这些相关硬件都由我们为您把关购买,为大家节省选择的精力与时间。同时也感谢大家对我们这些码农的支持。

最后再次感谢各位读者对安豆的支持,谢谢:)

第1节 我选Arduino

第1节 我选Arduino

高大上的无人机玩过吗?智能的家庭空气检测仪见过吗?手机控制的电子体重秤、血压仪用过吗?这些“高科技”都属于智能硬件。

作为软件开发者的你,有没有想过自己开发一个智能硬件呢?

也许你会觉得硬件开发的门槛很高,作为小白或者软件开发者难以企及,那么这你就想错了。其实,现在已经有了很多专门为软件开发者设计的智能硬件开发平台。例如现在火爆的树莓派-raspberry pi、英特尔推出的爱迪生-Edison,以及本系列讲重点介绍的Arduino

有了它们,即使你对硬件并不了解,也能开发出软硬件完美结合的智能小硬件。

这些硬件都有个共同的特点,采用主控制板+扩展板+外接硬件的方式工作。

  1. 主控制板:我们讲的平台(树莓派、爱迪生、Arduino),指的就是主控制板,它通常就是一个开发板。你可以把它想象成台式电脑上的主板,只不过这个主板已经焊接上了CPU和内存等最最主要的部件;

  2. 扩展板:主控制板上的针脚是有限的,扩展板可以把一个针脚扩展成多个针脚,让更多的设备与这个针脚连接。它们就好像是电脑主板上延伸出来的一根根USB数据线,把主板上的一个USB接口,转接成了多组不同的USB接口,放在电脑主机的前面和后面;

  3. 外接硬件:按钮开关、传感器等器件通过扩展板与主控制板的针脚相连。它们就好像是台式电脑上的USB接口可以连接的U盘、移动硬盘、USB Wifi等等外接设备;

可以想象的到,只要使用对应平台的扩展板,外接硬件可以连接在不同的平台上,正常的使用。所以那些外接的硬件有很高的通用性。

1.1 WHY Arduino

在前面提到的智能硬件开发平台中,我们选择了Arduino, 为什么?

  1. Arduino足够的便宜,一个Arduino开发板不到100块钱(即使是意大利原装板也只要300多人民币),投入的硬件成本很低,可以花很低的代价学习智能硬件开发;

  2. 作为智能硬件的初学者,总希望从最简单的开始,能学到原理,但是又不要有太高的学习门槛,有了基础以后再循序渐进。Arduino开发只需要开发者会基本的C语言就可以了,几乎不需要任何其他的编程、硬件基础;

  3. Arduino的运算能力足够制作一些简单的智能硬件了,而它又更接近一个单片机,很多智能硬件可以用它做功能的验证;

  4. Arduino是软硬件开源的,有很多的技术资料可以参考,有庞大的社区支持,可以找到很多志同道合的人交流、快速进步;

所以,我们选择这个性价比最高的的平台来开始智能硬件开发之旅。

1.2 Arduino开发板

Arduino开发板根据体积和性能,分为了多个子系列。

其中最常见、用来做入门学习的有两种,UNO和MEGA。

这两个开发板的功能几乎一样,MEGA使用的主控制芯片性能要高一些,针脚多一些,可以同时连接的外接硬件就要多一些。

相比之下,UNO配置低一些,价格也便宜一些。
MEFGA配置高一些,价格比UNO贵二十块人民币左右(意大利原版之间相比贵二十美元左右)。

我们使用Arduino开发板主要是用来学习,可能会同时要加装各种外接设备,MEGA开发板对此更有优势。

UNO接口太少,假如要做个四驱小车,一旦使用了四个马达后,基本就不能再添加其他硬件外设了。

另外,UNO的串口控制器只有一个串口,假如你还要使用其他串口设备的时候,调试起来就比较吃力了。例如做蓝牙小车,调试时噩梦就来了:因为Uno只有一个串口,要提供给蓝牙和USB共用。你得先拔下蓝牙模块的连接线才能部署程序到开发板;部署完成后,再插上蓝牙连接线才能开始测试。

如果出于批量生产成本考虑要使用UNO开发板也没有问题,可以先在MEGA上完成开发,最后在UNO上做性能测试,只要使用的硬件接口不大于UNO开发板提供的接口就行了。

基于以上这些分析,我们的建议是选Arduino的MEGA开发板。

学习硬件开发的一个很大门槛就是要记住许多复杂的寄存器地址。Arduino的之所以被认为是给软件开发者设计的硬件,就在于它简化了硬件上的多种接口,把它们抽象成一个个可以直接控制的引脚位置。软件开发者编程时只需要对这几类引脚做操作就可以了。

Arduino开发板上的引脚数量,根据开发板的类型是不同的。例如,UNO有20多根引脚,MEGA有70多根引脚。这些引脚都有自己的名字。

这些引脚可以被分成3类,

  1. 电源引脚。利用电源引脚,可以为外界的扩展板或者硬件提供3.3V(引脚3V3) 5V(引脚5V)的电压,以及接地(引脚GND)的功能;也能通过引脚VIN接受外部提供的电压;

    在MEGA开发板中,电源引脚的位置大致如下,

  2. 模拟引脚。区别于数字引脚只能输出0,1两种状态,模拟引脚可以输出0与1之间的中间状态。开发板有若干个模拟引脚,它们接收或输出模拟量:0~1023

    它们被编成了0~N的数字号码,用A0~AN来表示。例如MEGA开发板上的模拟引脚有16个,就是A0~A15

  3. 数字引脚。只能输出0和1两种状态的引脚。开发板有若干个数字引脚,它们只接收或输出高低电平两个值:HIGH或者LOW。

    它们被编成了0~N的数字号码,用D0~DN来表示。例如MEGA开发板上的数字引脚有54个,就是D0~D53

    这些数字引脚中,有的引脚还可以提供别的复用功能,

    1. PWM(Plus Width Module)。通过控制脉冲信号周期的方式,来调节数字引脚输出的电压大小;

    2. 通信引脚。作为串口输入和输出的接口;

不同的Arduino开发板,它们的引脚位置是不相同的,这里只是用MEGA开发板来做一个示例。目前我们只要知道有这些引脚的存在就可以了。今后要使用到这些引脚的时候,我们再来做详细的介绍。

*关于Arduino UNO开发板的详细介绍请参考官网

*关于Arduino MEGA开发板的详细介绍请参考官网

1.3 Arduino扩展板

1.3.1 官方扩展板

Arduino官方目前总共推出了5款扩展板。
分别是,
Arduino Motor Shield

Arduino Proto Shield

Arduino Ethernet Shield

Arduino GSM Shield

Arduino WiFi Shield 101

1.3.2 第三方扩展板

Arduino是开放平台,有不少的第三方扩展板。根据开发者的需要,扩展出提供不同功能的接口。对于有能力的硬件开发者来说,可以随心所欲的设计适合自己的扩展板。

例如下面这款双L293D芯片的马达扩展板,

1.4 外接硬件

Arduino可以外接多种硬件。这些硬件可以,

  1. 直接接到开发板上;

  2. 接到扩展板上,然后通过扩展板连接到主控制板上;

1.4.1 传感型硬件

用来感知、测量某种环境数据的硬件。例如光线传感器、温湿度传感器、超声波探测器、粉尘传感器等等。

1.4.2 控制型硬件

用来发出指令、改变硬件某个特性的硬件。例如开关、直流马达、步进马达、舵机、LED灯等等。


关于这些传感器详细的原理和用法,我们将在以后的章节详细的介绍。


***************************************


本系列课程使用到的Arduino开发板、扩展板以及其他相关的传感器,各位可以根据我们文章中介绍的硬件在淘宝网选购。
您也可以在我们的网店安豆的杂货铺中购买,这些相关硬件都由我们为您把关购买,为大家节省选择的精力与时间。同时也感谢大家对我们这些码农的支持。

最后再次感谢各位读者对安豆的支持,谢谢:)