电子说
步骤1:Arduino Uno简介
开发板概述
1。微控制器
该板的大脑是28针微控制器ATMega328。它放置在28针DIP插座中,因此可以轻松更换。微控制器的大脑是中央处理器-CPU,它控制微控制器内部的所有内容。它获取存储在闪存中的程序指令并执行它们。这可能涉及从工作存储器(RAM)中获取数据,对其进行处理,然后再放回去,例如,这可能意味着将数字输出之一从0V更改为5V。
2。电源
板可以通过USB连接器或外部电源插座供电。电源调节器将电源插座提供的7V至12V之间的任何电压调节为微控制器所需的5V恒定电压。
3。电源插针
电源插针由8个母头插针组成。首先是NC-未连接任何东西。第二个是IOREF,它用于屏蔽以确定Arduino板工作的电压水平(3.3V或5V,对于Arduino Uno是5V)。第三个是RESET引脚,当我们将其连接到0V时,微控制器中的程序将复位,这意味着它将从头开始重新启动。第四个引脚为3.3V电源引脚,第五个引脚为5V电源引脚。第六和第七引脚为GND-GrouND = 0V。第八个引脚是Vin,该引脚可用于稳压外部电源,对于Arduino Uno,您可以将此引脚连接到5V来为开发板供电。
4。模拟输入引脚
模拟输入引脚由标记为A0-A5的6个母头引脚组成。这些引脚可用于测量与其相连的电压电平。例如,湿度传感器输出,距离传感器输出或温度传感器输出等。
5。数字输入/输出引脚
数字输入/输出(I/O)引脚由18个母头引脚组成,分为两部分。其中的前14个标记为0-13的是数字I/O引脚,名称中带有波浪号(〜)的可以设置为PWM输出(稍后将详细介绍PWM)。第十五针为GND。第十六个引脚是Aref引脚,即模拟参考引脚,用作模数转换(ADC,后面会详细介绍)的参考电压电平。该引脚连接到Arduino Uno的5V。第十七和第十八引脚是SDA和SCL引脚,这些引脚用于“两线制”串行接口(在此Instructable中,我们将不介绍TWI)。数字I/O引脚0和1也被标记为Rx和Tx(接收和发送),可用于串行通信(串行或UART接口,稍后会有更多介绍)。请勿将这些引脚用作数字I/O引脚,因为在对微控制器进行编程时会使用它们。
6。板载发光二极管-LED
将一个橙色LED连接到数字I/O引脚13。当将板连接到电源时,一个绿色LED点亮,而在断开电源时,一个绿色LED熄灭。两个橙色LED连接到串行通信线路(Rx和Tx),并在使用串行通信时闪烁(通常在对微控制器进行编程时)。
7。板载编程电路
Arduino Uno板载板上还有另一个微控制器,它是Atmega 16U2。该辅助微控制器是USB到串行电路的一部分,用于对主微控制器进行编程。 Atmega16U2充当桥接器,用于转换来自微控制器的串行接口(UART接口)的信号和USB总线的信号。由于两个微控制器都具有此程序和预编程的引导程序,因此我们能够将Arduino Uno板与计算机连接并对其进行编程。
8。将Arduino开发板与计算机连接
要将Arduino Uno连接到计算机,您需要USB A至B电缆。当您从AZ-Delivery购买任何Arduino Uno开发板时,我们会在开发板上附带电缆。但请注意,某些主板出厂时没有电缆。因此,在购买电子产品时请格外注意。
步骤2:下载和安装Arduino IDE
IDE表示集成开发环境,这是一个类似文字处理器的应用程序,我们在其中编写微控制器的指令集(程序)。此应用程序将我们的代码转换为微控制器可以理解的机器语言,然后将其上传到微控制器。
要下载Arduino IDE,请访问Arduino官方网站,并在软件选项卡下,单击下载。 Arduino Web编辑器有一个选项。您可以仅使用浏览器和Arduino Web编辑器对Arduino开发板进行编程。在这里更多。还可以选择下载应用程序并将其安装在本地计算机上,在下载页面上找到您的操作系统并为您的操作系统下载文件。
对于Windows,我们建议您使用Windows 10,因为它自行安装驱动程序,因此您不必为此烦恼。我们还建议您是否使用Windows下载非管理员安装的zip文件-这样安装起来会容易得多。下载zip文件时,将其解压缩并转到解压缩的文件夹并打开arduino应用程序。就这样,您就可以继续下一步了。
但是,如果您使用的是Windows的较早版本,请转到此链接。了解如何安装驱动程序。
对于linux,请选择您的计算机体系结构并下载适当的文件。解压缩它,然后进入解压缩的目录,然后打开终端并输入。/arduino。这是打开Arduino IDE的方式,您准备好进行下一步。
对于Mac OS X,您必须按照此指南安装Arduino软件。
第3步:第一个程序-心跳
将您刚购买的Arduino Uno连接到计算机。您会看到绿色的LED亮着,橙色的LED(连接到数字插针13)闪烁。如果您之前使用过Arduino Uno,橙色LED可能不会闪烁(取决于您所使用的应用程序)。现在我们准备继续。
当您打开Arduino IDE时,为了正确设置IDE,请转到:工具》端口》……,然后选择带有Arduino Uno名称的端口。
对于Windows,它应该类似于“ COM4(Arduino/Genuino Uno)”。
对于Linux,它类似于“/dev/ttyACM0(Arduino/Genuino Uno)”。
,对于操作系统“/dev/cu.usbmodem1461(Arduino/Genuino Uno)”。
然后转到工具》板》 Arduino/Genuino Uno,然后选择您的板名称。
在继续之前,我们先解释几件事。首先,每个程序示例,甚至您编写的程序都称为草图。在Arduino IDE中,我们将向您展示的几乎所有内容都有大量的草图。因此,当您想做某事而又不知道如何做时,应该遍历整个草图列表,您可能会找到带有程序示例的草图。并且每个草图都被很好地注释,以便对每个动作进行解释。
现在,让我们将第一个草图和第一个程序示例上传到Arduino Uno板上。转到:文件》示例》 01.基本》闪烁。带有闪烁草图的新IDE将打开。在此草图中,我们使用一个LED并将其打开和关闭。因为这是一种检查一切是否正常的方法,所以此草图通常称为“ Hello world”示例。当您将此草图上传到板上时,您的Arduino会说:“我还活着,你好,世界!” :-)。草图中有很多注释,请阅读它们,通常它们会解释所有内容;-)。
但是我们将对其进行一些更改,因为仅打开/关闭LED灯很无聊。让我们模拟一个心跳。为了简单起见,我们删除了所有评论。更改像这样的循环函数,其余部分保持不变:
void loop() {
digitalWrite(LED_BUILTIN, LOW);
delay(1100);
digitalWrite(LED_BUILTIN, HIGH);
delay(150);
digitalWrite(LED_BUILTIN, LOW);
delay(100);
digitalWrite(LED_BUILTIN, HIGH);
delay(150);
}
现在,转到:“草图”》“上传”,或按“ Upload =》”图标上传。
如果一切顺利,您应该会看到板载橙色LED以心跳的方式闪烁。
如果您使用的是Linux,并且遇到“打开串口错误。..”之类的错误,则应阅读此书。
现在,让我们来解释一下草图。在几乎每个草图中,都有两个函数:setup()和loop()函数:
setup()函数在程序执行开始时仅运行一次,当您为电路板加电时,或重置板时。在此函数中,我们设置所有初始化,例如,声明我们使用的数字输入/输出引脚的状态。在此草图中,我们声明数字I/O引脚13(LED_BUILTIN)为数字输出引脚。在这里,我们还初始化了所需的所有内容,例如设置模拟输入引脚或用于串行通信的串行接口等(稍后对此进行详细介绍)。
loop()函数在setup()之后运行,并且无限期地反复运行,即所谓的“无限”循环函数。实际上,在电路板连接到电源时,它始终运行。这是因为电子设备中的程序永远都不会到达末尾,因为如果发生这种情况,则意味着您的设备与关闭设备一样好。在此草图中,我们将数字引脚13设置为ond,然后将数字引脚13设置为低值(0V或GND; LED熄灭),然后延迟该时间或等待1100毫秒(大于一秒),然后将数字引脚13设置为到高值(5V; LED亮),并等待150毫秒。关闭超过100毫秒,然后再次开启150毫秒。
步骤4:LED褪色
在此草图中,我们将使用带有330欧姆电阻的外部绿色LED。加载草图:“文件”》“示例”》“ 01.Basics”》“淡出”。
在继续之前,如果尚未在Arduino IDE中打开行号,则应打开行号。转到:文件》首选项。一个新的首选项窗口将打开。选中“显示行号”框,然后单击“确定”。
现在我们可以继续。在第16、17和18行上,定义了三个变量。首先是“ led”,在其中存储连接到LED的数字I/O引脚的数量。在此草图中为9。其他两个变量用于更改LED的亮度,第一个是亮度级别,第二个是代表两个亮度级别之间增加/减少步长的数字。
在setup()函数中,我们声明要输出的数字I/O引脚9的状态。没什么新鲜的,不是吗。
但是在loop()函数中,我们鲜有新事物。首先是analogWrite()函数,该函数定义数字I/O引脚的PWM“电压电平”(有关PWM和analogWrite()的更多信息)。在这种情况下,这就是LED亮度(LOB)的级别。然后剩下的loop()函数就是改变亮度的算法。这应该是不言自明的。如果没有,让我们快速进行一下。在第32行上,我们向当前LOB添加一个阶跃值,然后询问LOB是否小于或等于0(LOB不能为负值,因为您知道PHYSICS),并且大于255。为什么是255?因为PWM输出的分辨率为256,所以从0到255的值。这在analogWrite()函数中使用,因此电压电平以0到0的255到5V的255的形式表示(稍后将对此进行详细介绍)。如果不满足此条件,则程序将继续执行下一条指令,即delay(30)。因为它太快了,所以delay()只是减慢了这个过程。如果没有这行代码,您将看不到LED衰落的效果。..但是,如果满足条件,则我们将LOB步号更改为负,以便LOB开始下降。下次满足此条件时,负LOB步长将变为无穷大,依此类推,无限大。如果您希望进一步减慢处理速度,只需将delay(30)中的30更改为其他更高的值。
在此示例中,我们使用LED和电阻,因此让我们解释一下电阻和LED是什么。
第一个电阻器,它有两个支路,用于连接到电子电网中,并且用于限制电子电网中那部分的电流(电阻器的方向无关紧要,它将以两种方式起作用)。我们使用四分之一瓦的电阻。这是电阻的功率,这意味着当电流流过电阻时,电阻会发热。该电流越大,电阻将变得越热。电阻通过其电阻值和以瓦特(W)为单位给出的功率来评级,这些功率可以主要根据其大小来安全地耗散。它的表面积越大(电阻越大),它可以安全地散发到周围空气或散热器中的功率就越大。
您可以考虑一下,就像使用水软管浇灌植物,用手挤压软管,限制软管中的水流。在此示例中,您的手是电阻,水流是电流,水量是电压。
现在,二极管,它有两个腿,可以连接到电子电网,阳极和阴极。二极管是电子部件,它使电流仅从阳极到阴极的一个方向流动。如果将其反向,将不会有电流通过,但如果超过电流和电压限制,则可能会损坏二极管。
LED-发光二极管是一种特殊的二极管,当电流流过该二极管时会发出彩色光(LED的较长脚为阳极,而另一脚为阴极)。当我们超过电流和电压限制时,无论连接的方向如何,二极管也可能被破坏,因此请小心阅读数据表。这就是为什么我们在LED上使用电阻器,以便我们限制电流并防止LED损坏的原因。
现在,连接图上的所有内容并将草图上传到Arduino板上,看看LED褪色的魔力。/p》
第5步:按钮和LED指示灯
现在,让我们通过按下按钮或开关打开/关闭LED。什么是按钮,什么是开关?嗯,它们都是电子部件,具有两种状态,分别处于打开和关闭状态,并且都用于打开/关闭电子网格的某些部分。但是不同之处在于,当您更改开关的状态时,它将保持该状态,但是当您更改按钮的状态时,仅在将其保持在该状态时,它才会保持在该状态。当您停止按按钮时,它将返回其默认状态,在大多数情况下为关闭状态。有些开关具有两个以上的状态,但是我们不会在Instructable中使用它们。
在此步骤中,我们将使用无焊面包板。面包板是用于制作电子原型的电子部件。有了它,我们无需硬连接即可轻松连接其他电子部件,而无需断开它们,而无需焊接。面包板引脚。
与Arduino Uno,面包板,按钮,10k欧姆电阻,LED和330欧姆电阻建立连接,如图所示。
您可以看到,我们有两个原理图该图,它们分别起作用。您可以使用任何这些原理图来打开/关闭LED,因为它们执行的功能相同,但方式不同。 Arduino Uno用作稳定电源。左图为上拉电阻,右图为上拉电阻。通过查看10k ohm电阻器以及连接在哪个导轨上,您可以看到哪个是哪个电阻器(图中两个较低的电阻器)。上拉表示将电阻连接到地,上拉表示将电阻连接到5V电源。 LED附近的330欧姆电阻用作LED保护。当我们按下一个按钮时,它将打开相应的LED。当我们停止按下按钮时,它将关闭相应的LED。
您可能想知道,为什么所有这些?很简单,如果您使用数字I/O引脚作为输入,则必须始终将数字I/O引脚连接到GND(下拉电阻)或电源(上拉电阻)。您永远不能,永远不要将其断开,因为您会得到乱码。为什么?这是因为,数字输入引脚将从周围环境中读取电压,例如来自周围引脚的电压水平或来自引脚周围灰尘的静电电压水平等。当您读取未连接的引脚时,将会得到不稳定的值。在下一步中介绍串行通信时,我们将向您显示这些读数。
我们现在将读取数字I/O引脚2上的按钮的输入。连接所有内容,如图所示。
转到草图:“文件”》“示例”》“ 02.Digital”》“按钮” ,并将其上传到Arduino Uno。按按钮!板载橙色指示灯将点亮。凉!再次,阅读评论。此草图是不言自明的,我们不需要遍历。
步骤6:串行通信
现在终于有了一些有趣的东西。通过串行通信,您可以与Arduino Uno开发板进行通信。多么酷啊? :)
什么是串行通信?这是微控制器可以相互通信的一种方式。简而言之,一个微控制器输出(发送,传输)信号,在连接两个微控制器的电线上产生高低压脉冲。另一个单片机处于输入模式,监听电压脉冲,并像接收器一样工作。因此,这里有一个串行协议,即将数据编码为电压脉冲并将电压脉冲解码回数据的规则。最常见的串行模式是通用异步接收和发送或UART串行。
要发送一个字节的数据,我们有几个规则。
首先,我们必须就电压脉冲的速度,数据的发送和接收速度达成一致。该速度称为波特率,以每秒比特数表示。其值可以是:2400、4800、9600、14400、19200等。它可以高达250000。最常见的是9600。
第二个数据的每个字节必须具有起始和停止位,以便UART可以区分数据字节的开始和结束位置。
第三,我们可以调整数据字节的长度。 (我们不会对此进行详细介绍)默认值为8位,但也可以为9位或10位。
第四,在数据字节的和的停止位之前有奇偶校验位。该位是可选的,您不必使用它。用于检查数据字节中是否有错误。 (我们不会对此进行详细介绍)。
与Arduino设置串行通信非常容易,只需几行代码。让我们通过计算机通过串行通讯发送的命令打开板载LED。为此,您只需要将Arduino Uno板连接到计算机即可。
在Arduino IDE中,有一个用于监视串行接口的简洁工具,您可以称之为串行监视器。要启动它,请转到:工具》串行监视器。
将此小图写或复制/粘贴到IDE中,然后将其上传到您的Arduino Uno中。
void setup() {
// setting digital I/O pin 13 as output
pinMode(LED_BUILTIN, OUTPUT);
// setting up serial communication - 9600 is baud (communication) rate, 9600 bits per second
Serial.begin(9600);
}
void loop() {
// check if there is serial message on serial line
// Serial.available() returns the number of bytes that are in serial buffer
if (Serial.available() 》 0) {
// if it is, read it and store into letter variable
char letter = Serial.read();
if(letter == ‘1’) {
digitalWrite(LED_BUILTIN, HIGH);
// write back on serial line
Serial.println(“LED turned on”);
}
else if(letter = ‘0’) {
digitalWrite(LED_BUILTIN, LOW);
Serial.println(“LED turned off”);
}
}
}
现在,我们将解释此小图。首先,Serial.begin()函数。它用于设置Arduino Uno的串行接口。为此,我们在括号中输入波特率,在本草图中为9600。
现在,您必须设置侦听器进行通信。 Serial.available()函数侦听串行通信线路上的消息,并且当消息缓冲区中充满数据(即使只有一个字符)时,Serial.available()也会返回消息缓冲区中的字节数。我们等待该消息,然后将该消息放入消息缓冲区中,进行读取,然后检查其特定值。当消息为“ 1”时,它将打开一个指示灯,并将消息写回到串行线“ LED亮”。要写入串行线,我们使用Serial.println()函数。您只需用引号将要打印的文本写上并放在Serial.println()的括号中。
将此草图上传到Arduino Uno开发板时,启动Serial Monitor工具。写“ 1”并发送。而且,现在您正在与Arduino Uno通信:)
现在,让我们使用上一个示例中的按钮。让我们读取数字输入引脚的状态,然后将其发送到串行通信,首先断开连接,然后使用按钮和Pull Down或Pull Up电阻。为此,我们将使用Arduino Uno,一个按钮和一个10k欧姆的电阻。任何东西,然后启动“串行监视器”,这就是我们所写的那个乱码。这就是为什么当我们读取输入引脚状态时使用上拉或下拉电阻器的原因。
现在,进行连接,以便您可以使用上拉和下拉电阻器和按钮来创建原理图,如图所示。
您可以执行两次此操作,一次是上拉,一次是上拉,以获取我们得到的结果。如果您不希望这样做,则不需要同时制作这两者。
但是我们将使这项工作生效。我们需要稍微更改一下DigitalReadSerial草图,以便我们可以同时使用两个按钮。将此代码复制到IDE中:
int pullUp = 2; // button on digital I/O pin 2 - Pull Down
int pullDown = 3; // button on digital I/O pin 3 - Pull Up
void setup() {
Serial.begin(9600);
pinMode(pullUp, INPUT);
pinMode(pullDown, INPUT);
}
void loop() {
// read buttons states
int buttonUpState = digitalRead(pullUp);
int buttonDownState = digitalRead(pullDown);
// make a message that will be sent to the serial line
String message = “Pull Up: ” + String(buttonUpState);
message = message + “。 Pull Down: ” + String(buttonDownState);
// send the message
Serial.println(message);
delay(1); // delay in between reads for stability
}
在这里,没有什么新内容了,除了该行String message =“ Pull Up:” 。..在这里,我们正在创建将发送到串行的消息一口气排队。首先,我们创建一个名为message的字符串变量,然后向其中添加文本。 String()函数将整数值转换为字符串,以便可以将其串联为消息字符串。
将此草图上传到Arduino Uno,然后启动串行监视器。输出应为:
上拉:1.拉下:0
您看到区别了吗?当您使用上拉电阻(PUR)读取未按下的按钮时,它将读取数字1,而对于下拉电阻(PDR),它将读取数字0。当您按下连接到PUR的按钮时,串行监视器中的输出将变为数字零。当您按下连接到PDR的按钮时,输出将变为数字1。当两个按钮都按下时,输出应如下所示:
上拉:0。下拉:1
步骤7:按钮弹跳
从上一步中可以看到,当您按下一个按钮时,它将被读为一系列(对于带有下拉电阻的按钮)。无论您按多快然后释放它,读取的值仍将是一系列的值,但永远不会是单个值(0000000 1111111 00000000)。有时,在按下按钮时此零变为1之前会有一些值更改(00000 1 0 1 00 11 0 11111111111111 )。或者您可能是一个按钮的上帝,并且您能够做到,每个按钮一个按钮按xD。 (小笑话)
这称为反弹效果,解决方案是反跳算法。按钮弹跳是电子学中的严重问题,并且有numeros硬件和软件解决方案,但是对于Arduino IDE中的大多数草图,最简单的解决方案是软件弹跳算法。向下电阻连接到数字I/O引脚2。
将此代码复制到IDE:
// digital pin 2 has a pushbutton attached to it.
int button = 2;
// variable for counting button presses
int count_presses = 0;
// two helper variables, for detecting one physical press
int ones_count = 0;
int real_press = 0;
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
// make the button‘s pin an input:
pinMode(button, INPUT);
// to print first value of count_presses which is 0
Serial.println(count_presses);
}
void loop() {
// read the button input pin:
int button_state = digitalRead(button);
// check state of a button, check for digital ones when button is pressed, and count them
if (button_state) {
ones_count++;
}
else {
ones_count = 0;
}
// if number of ones is 10, you pressed button long enough, mark this with real_press
if (ones_count == 10) {
real_press = 1;
}
else {
real_press = 0;
}
// if flag is marked, count that, because it is one actual physical press, and send that number to the serial interface
if (real_press) {
count_presses++;
Serial.println(count_presses);
}
delay(1); // delay in between reads for stability
}
将其上传到Arduino Uno,然后启动串行监视器。
此代码所做的全部就是计数按钮的按下次数并将其打印在串行通讯线上。代码是不言自明的。
步骤8:ADC
ADC代表模数转换器或转化。为什么我们需要这个?好吧,我们在Arduino Uno中的微控制器是数字设备,这意味着它仅适用于数字信号。如果考虑电压,电压数字信号可以具有两个电平:数字零或0V和数字一或5V。但是,几乎所有其他功能都可以与模拟信号一起使用,模拟信号可以具有任何电平,电压范围在0V至5V之间。您可以在图像上看到它。
因此,为了使我们的微控制器能够理解模拟信号,我们需要一个转换器,这就是我们需要ADC的地方。
Aref引脚Arduino Uno用作模拟转换的电压参考引脚。该参考电压电平必须尽可能稳定,准确且无噪声,以便在ADC上获得准确的读数。我们为什么需要这个?好的ADC可以在0V和Aref引脚上的电压电平之间转换电压值,在大多数情况下为5V。但是我们可以根据应用程序更改此值。 Aref = 5V是Arduino Uno的默认设置,但是使用analogReference()函数可以更改此设置。 (我们不会在此Instructable中使用它)
那么ADC实际如何工作? ADC的核心实际上是DAC-数模转换器和比较器。比较器用于比较两个值,在这种情况下为两个模拟信号。最简单地说,如果一个信号大于另一个信号,比较器将返回数字一;如果一个信号小于另一个信号,它将返回数字零。这两个信号分别是来自模拟输入引脚的信号和来自DAC的信号。转换开始时,ADC将高数字值输入DAC,并将其转换为DAC可以产生的最高模拟电压(Aref),然后比较器将DAC的该值与模拟输入引脚的值进行比较。该ADC从比较器读取值后,确定DAC电压大于还是小于模拟输入引脚的电压。比ADC将DAC值一分为二,并重复整个比较/读取过程。重复此过程,直到ADC将输入电压电平定位在DAC可以产生的10位电压电平中的两个之间。 ADC的分辨率为10位(对于Arduino Uno主芯片= ATMega328P)。 ADC的分辨率是通过将Aref引脚上的电压电平除以可能的转换值的总数10位= 1024来定义的。这意味着ADC可以将0V和Aref之间的许多电压电平读取为1024个不同的值。如果参考电压(Aref)为5V,则ADC可以区分的最小电压电平为5/1024 = 0.00488 V = 4.9 mV。
ADC一次只能读取一个模拟引脚。为了读取Arduino Uno的6个模拟引脚,读取过程必须是多路复用的。这意味着ADC将先读取一个并存储其值,然后再读取另一个,依此类推,直到最后一个第六个模拟输入引脚。
但是创建Arduino是为了降低将所有ADC寄存器调整为仅一个函数AnalogRead()的复杂性。该函数返回的数字是特定模拟输入引脚上模拟电压电平的10位表示形式。如果要测量模拟电压,则必须将该数字除以1024并从5中减去。然后,我们将在小误差范围内为模拟输入引脚提供实际电压电平的值(对于Aref = 5V,∓4.9mV)
所以,理论终于结束了,让我们做一些实际的事情。让我们使用10k欧姆电阻和光电电阻创建一个分压器。
什么是分压器?好吧,这个名字说的一切都是由电路来分压的。我们使用两个电阻器,将它们串联连接,在串联连接的两端,我们连接输入电压和GND,输出在中间部分和GND之间。就像在图像上一样。
Т这是一个描述输入和输出电压之间的依存关系的方程式:
Vout = Vin * R2/(R1 + R2)
如果Vin = 9V,R1 = 10k ohm,R2 = 1k ohm,则我们得到的Vout = 818mV。如果Vin = 9V,但我们用R2代替R1,则我们得到Vout = 8,18V,就像下部的图像一样。
您可以使用上面的公式来计算。您将得到相同的结果。
在下一个示例中,我们将使用Arduino Uno,10k欧姆电阻器,光电电阻器和几根Jumber电线。像图中一样连接所有东西,然后将此草图上传到Arduino Uno:文件》示例》 01.Basics》 AnalogReadSerial。启动串行监视器。用光遮盖光电电阻。看到读数的差异。
现在上传这个小草图:
double voltageRef = 5.0; // Voltage reference level
double resolution = voltageRef / 1024.0; // smallest value that ADC can read = resolution
double voltageInput = 0; // Input voltage level
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(A0);
// equation for converting digital value from ADC into actual voltage level
voltageInput = voltageRef - (resolution * sensorValue);
Serial.println(voltageInput);
delay(10);
}
责任编辑:wv
全部0条评论
快来发表一下你的评论吧 !