Arduino Uno 引脚详解
Arduino Uno 引脚详解
Arduino Uno板有20多个引脚,可用于许多不同的应用。本文将为您提供Arduino Uno主要引脚的完整实用概述。
Arduino Uno板有20多个引脚,可用于许多不同的应用。在这篇文章中,我们将为您提供Arduino Uno主要引脚的完整实用概述。
如果您刚开始使用Arduino,或者您已经是一名软件开发人员并且想要了解有关Arduino板上软件和硬件之间桥梁的更多信息,那么您来对地方了!
在这篇文章中,您将看到:
- 您可以使用哪些引脚
- 你可以用它们做什么
- 以及有关如何将其他设备连接到Arduino引脚的一些提示
我们还将为您提供一些可与每个引脚功能一起使用的传感器/执行器示例。
这篇文章的重点是Arduino Uno板,但大多数解释(电路板上的引脚号除外)也适用于任何其他Arduino板。
Arduino Uno引脚图
以下是您可以在Arduino Uno板上找到的所有引脚的全局视觉描述。
一开始你可能会发现这很难理解。那么,让我们一一分解每种引脚。
接地引脚
如果关于接地有一件事(而且只有一件事)您应该记住,那就是:始终将电路的所有接地连接在一起,并确保所有组件都正确连接到地面。原理图上接地引脚通常用GND表示。
接地对于Arduino板测量和设置任何电压至关重要。基本上,电压是两点之间的电势差:这里取接地点和另一点。
因此,如果电路中的所有部件都连接到同一接地,则可以比较所有电压并且它们的值是相关的。如果没有共同点,那么3.3V是什么意思?是否大于您从电路另一点测量的5V值?
这就像测量两个人之间的身高差:如果其中一个人站在一个盒子上,那么地面参考就不一样。如果您不将两个人放在同一水平面上,您就无法获得有价值的测量结果。
好吧,我不会讲更多细节,但你明白这一点。
Arduino电源引脚
电源有两种方式:
- 您必须通过外部电源为Arduino Uno板供电
- 您还可以为插入主板的一些组件供电
为Arduino Uno板供电
要为Arduino Uno板供电,您有不同的选择。第一种方法是使用USB电缆将Arduino板连接到计算机 - 通常您在订购Arduino板时会得到一根USB电缆。
您还可以使用直流电源插孔为Arduino板提供7-12V电源。如果您使用的是由Arduino供电的一些业余爱好伺服电机,您可能需要使用直流电源插孔。来自USB电缆的功率较低。它非常适合您的板和计算机(或其他Arduino板)之间的通信,但可能不足以为某些实际电机提供动力。
因此,您已经有2种为Arduino Uno板供电的方法。现在,如果您查看电路上的电源引脚,您会看到Vin引脚。
您可以使用此引脚为您的主板提供7-12V电压。当您需要使用外部电源并将其直接连接到您的主板时非常实用。而且,正如您所猜测的,如果您使用Vin,您还需要正确使用接地,将其连接到外部电源的接地。
请注意,USB和DC电源插孔已集成接地,可连接到您插入的任何设备。事实上,USB连接器周围你可以触摸到的金属部分是直接接地的!
通过Arduino Uno电源引脚为组件供电
正如您所猜测的,每当您将外部组件连接到Arduino Uno板时,您都需要先将其接地。
然后您可以使用多个不同的引脚来为其供电。其中有3.3V和5V电源引脚。
注意 - 这很重要 - Arduino Uno在5V下运行。因此,对于我们将在本文下面看到的每个输出引脚,请务必记住这一点。如果将3.3V组件插入5V电源,可能会损坏该组件。
有2种替代方案:使用Arduino(集成电压桥)的3.3V电源,或使用带有电压电平转换器的5V电源。您可以轻松地将3.3V组件连接到5V组件,前提是您使用电阻器或直接使用电平转换器组件在它们之间转换电压。
Arduino数字引脚
您可以在Arduino Uno板上找到14个数字引脚。它们很容易识别,电路板上有从0到13的数字。
在数字引脚上读/写
您将使用数字引脚从某些组件(传感器)读取数据并将数据写入其他组件(执行器)。
数字引脚只能有2种状态:低电平或高电平。您可以将它们视为二进制引脚。
低电平表示该引脚上的电压为0V。HIGH表示Vcc,对于Arduino Uno来说是5V。
在实际使用数字引脚之前,您需要配置其模式。数字引脚可以处于输入模式或输出模式。当处于输入模式时,您将使用它来读取数据。当处于输出模式时,您将使用它来写入数据。
设置引脚模式后(通常在Arduino程序的setup()函数中使用pinMode()),您将能够使用digitalRead()/digitalWrite()读取/写入引脚的状态。
如果您已将引脚设置为输入模式,则可以读取其状态,即高电平或低电平。
读取时,任何施加到该引脚的电压低于0.8V将被视为低电平,任何大于2V的电压将被视为高电平。因此,我再次强调,你应该正确地将电路中的所有接地连接在一起,否则Arduino Uno将无法读取有价值的信息!如果您没有获得可靠且稳定的数据,请务必先检查地面,问题很可能来自那里。
有关如何使用数字引脚控制组件的示例,请查看此Arduino LED教程。
有关如何使用数字引脚从传感器读取数据,请查看此Arduino按钮教程。
如果您想使用数字引脚达到更高级的水平,请查看如何使digitalWrite()更快。
脉宽调制
一些数字引脚可用于写入PWM。
PWM(脉冲宽度调制)基本上是一种仅具有高/低(5V/0V)状态的特定电压(例如:4.1V)的方法。PWM产生一个以给定频率运行的脉冲——Arduino Uno为500Hz。然后,占空比参数将告知每个脉冲处于高状态或低状态的百分比。
高/低状态的频繁变化产生平均电压输出。例如,在50%占空比(50%的时间为高电平,50%的时间为低电平)时,输出电压将为2.5V。
当然,这个解释确实很简单,但这就是开始使用Arduino PWM所需了解的全部内容。
现在,您只能在某些数字引脚上使用PWM,这些引脚的编号旁边有一个“~”。与PWM兼容的Arduino Uno引脚为引脚3、5、6、9、10和11。因此您有6个引脚,您可以使用AnalogWrite()函数创建PWM。
这对于控制一些需要精细电压调节的执行器非常有用,而不仅仅是打开或关闭。
如果我们以LED为例,您可以使用analogWrite()函数来修改LED的亮度。
中断引脚
而且……数字引脚还有另一个可用的功能!您可以将其中一些用作Arduino程序中的中断引脚。
对于Arduino Uno,这些引脚的选择非常有限。只有数字引脚2和3可以用作中断引脚。
那么,它是如何运作的呢?
当您创建Arduino程序时,您必须知道您的代码是逐行运行的,不可能存在多线程。
假设您将按钮连接到中断引脚(并接地!)。在您的Arduino程序中,您可以附加一个特定的功能,以便在按下按钮时触发。因此,您可以直接使用中断行为来启动您的函数,而不必连续读取按钮状态。将其视为推送通知,就像在手机上一样。它会告诉您何时有新内容或需要执行特定操作。了解如何在代码中使用Arduino中断。
但是,这并不意味着您已经解决了多线程问题。当程序的执行切换到中断调用的函数时,它也会停止当前程序的执行,只有在中断函数完成后才返回到当前程序。
如果您想了解有关如何使用Arduino进行多任务处理的更多信息,请查看有关此主题的完整教程。
Arduino模拟引脚
您可以在Arduino Uno板上找到6个模拟引脚。您会在电源引脚附近找到它们,并且它们很容易识别,从A0到A5。
从模拟引脚读取值
模拟引脚对于读取不能只是0或1的值非常有用。假设您有一个电位计并且想要获取电位计值的百分比。使用数字引脚,您可以知道电位计何时处于最小和最大位置,但除此之外什么也没有。使用模拟引脚,您可以获得介于两者之间的所有值。
请注意,这些引脚上的模拟功能仅用于读取。通常它们甚至被称为“模拟输入引脚”。您无法通过这些引脚写入模拟值,请不要忘记!
那么,模拟输入引脚如何工作?
首先,它将接收输入电压并读取该电压。假设引脚读数为2.5V。然后,ADC(模拟数字转换器)会将模拟值转换为Arduino程序可以理解的数字值。
Arduino Uno板有一个10位ADC。如果您使用其他Arduino板,分辨率可能会有所不同。那么,10位是什么意思呢?简而言之,分辨率为2^10 = 1024。因此,从模拟输入引脚读取数据时获得的值在0到1024之间。
回到我们的2.5V示例:2.5V是5V(Vcc)的50%。在您的Arduino程序中,您将获得值512。根据该值,您可以轻松地反转计算并获取有关所施加电压的信息。
另外,一开始可能会很令人困惑,请记住PWM的AnalogWrite()函数仅适用于某些数字引脚,根本不适用于模拟引脚。
使用模拟引脚作为数字引脚
即使您只能从模拟引脚读取,您也可以选择将其用作“简单”数字引脚。(但事实并非相反)
如果引脚可以读取0到5V之间的任何值,那么它将只能读取低于0.8V(低)的值和高于2V(高)的值。
要将模拟引脚用作数字引脚,您只需设置该引脚的模式,就像在Arduino程序的setup()函数中设置数字引脚一样。然后,您可以使用digitalWrite()和digitalRead()函数,它将完美运行。
通过Arduino引脚的通信协议
这就是事情开始变得有趣的地方。通过Arduino Uno引脚的通信协议将允许您使用更先进的传感器和执行器。您将创建更复杂和有用的应用程序。
Arduino Uno板可通过电路引脚使用3种主要通信协议:UART、I2C和SPI。
但是……电路上什么也没有显示!
不要惊慌,通信协议正在使用电路上现有的引脚。
事实上,大多数引脚都可配置为使用备用功能,有时仅一个引脚就有多达4个备用功能。但让我们让事情变得简单。
UART引脚 - 串行
UART是Arduino最常用的协议——至少在您开始使用时是这样。
当您将Arduino Uno板连接到计算机并通过串行库进行通信时,嗯……您正在使用UART!
您还可以直接在Arduino Uno板上找到UART所需的2个引脚,即引脚0和1:RX和TX。R代表“接收”,T代表“发送”。这是双向通信。
请注意,USB使用的串行与引脚0和1使用的串行相同。因此,如果您想将另一个设备连接到主板的RX/TX引脚,请记住不要通过USB使用串行。
在其他一些Arduino板(例如Mega)中,有几种不同的可用UART。但对于Arduino Uno,你只有一个。
但是,如果您想使用更多UART,则始终可以使用SoftwareSerial库来实现。该库允许您将任何其他数字引脚用于UART目的。虽然这里有一个很大的区别:“真正的”串行使用Arduino Uno板的硬件功能,速度非常快并且不消耗太多计算能力。SoftwareSerial则相反:它用计算能力来补偿硬件。因此,首先从标准硬件UART开始,然后您将看到您的应用程序是否需要更多串行端口(在这种情况下,我建议您切换到Arduino Mega以获得许多硬件UART)。
要将组件连接到Arduino Uno引脚并使用串行通信,您需要4根电缆:
- 组件的RX和Arduino的TX之间的一根
- 组件的TX和Arduino的RX之间的一根
- 如果组件没有外部供电,则使用一根电缆从Arduino的电源引脚为其供电
- 还有……一个用于连接地线
如果您有兴趣通过串行在Raspberry Pi板和Arduino板之间进行通信,请查看此Raspberry Pi Arduino串行教程。
I2C引脚
I2C是一种总线协议,具有多主/多从架构。但为了简单起见(大多数应用程序都需要这一点),我们只讨论架构的单主/多从部分。
基本上,想象一下所有数据都经过的数据总线。巴士的车头就是主人。现在,您可以将任何新组件添加到总线,并将其配置为从属组件。此外,每个组件都有自己的ID。
主设备将通过总线上的通信并提供从设备的ID来向从设备发送数据和请求。如果主机需要响应,从机会将响应发送回总线。一旦主机收到响应,它就可以发送下一个指令/请求。
通常,您将使用Arduino Uno板作为主控板,并将一个或多个组件(通常是传感器)连接到I2C总线,每个组件都有不同的ID。在软件方面,您将使用开源Arduino Wire库。
但是,您应该将所有这些组件连接到Arduino Uno的哪个引脚?
对于I2C,您无法直接在电路板上看到任何指示。
您需要4根电缆才能使用I2C总线:
- 1个连接SCL引脚(时钟)
- 另一根用于SDA引脚(数据)
- 为总线上的组件供电
- 并达成共识
I2C兼容组件的一些示例:
- MPL3115A2温度传感器
- MPU6050陀螺仪+加速度传感器
- TCS34725颜色传感器
SPI引脚
SPI是另一种基于主从架构的协议。
您可以使用它将Arduino板连接到多个设备。请注意,通信速度比I2C和UART快,但不适合中长距离通信(电缆超过几厘米)。至于其他通信协议,您可以直接在Arduino程序上使用开源SPI库。
当您使用SPI设备并希望将其连接到Arduino板上的某些引脚时,以下是您需要使用的引脚:
用于连接具有SPI引脚的设备的电缆系统稍微复杂一些。您至少需要6根电缆:
- SCK引脚(时钟)
- MISO引脚(主输入,从输出)
- MOSI引脚(主输出、从输入)
- 每个CS/SS(片选/从机选择)一个。对于每一个额外的从属设备,您都需要再添加一个与Arduino引脚的连接。
- 一个为组件供电
- 以及一个共同点
SPI兼容设备的一些示例:
- AS5047D磁性位置传感器
- MAX31855热电偶转数字传感器
开始使用Arduino Uno引脚
正如您在这篇文章中看到的,在使用Arduino Uno引脚时,您有多种选择。
如果您刚刚开始使用Arduino,请先尝试使用数字和模拟基本功能。
然后,您可以开始进一步使用中断、PWM输出等。
最后,您可以将无限数量的传感器/执行器连接到Arduino Uno板来创建您的下一个项目!
您还可以将多个Arduino板甚至Raspberry Pi板连接在一起。
好了,现在您已经对Arduino Uno引脚有了更好的了解,是时候动手实践了!
如果您不知道如何处理所有这些引脚,请查看我们在本文中作为示例介绍的不同设备,这可能是开始并获得更多想法的好方法。