Arduino Uno 使用 ADC采集电压在LCD上显示

发布于:2022-07-26 ⋅ 阅读:(936) ⋅ 点赞:(0)

Arduino Uno 使用 ADC采集电压显示在LCD上

前言

在本教程中,我们将在 ARDUINO UNO 中介绍 ADC(模数转换)的概念。Arduino 板有六个 ADC 通道,如下图所示。其中任何一个或全部都可以用作模拟电压的输入。Arduino Uno ADC具有10 位分辨率(因此整数值来自 (0-(2^10) 1023))。这意味着它将 0 到 5 伏之间的输入电压映射为 0 到 1023 之间的整数值。因此,对于每单位 (5/1024= 4.9mV)。
在这里插入图片描述在所有这些中,我们将把一个电位器或电位器连接到“A0”通道,我们将在一个简单的显示器上显示 ADC 结果。简单的显示器是 16x1 和 16x2 显示单元。16x1 显示单元将有 16 个字符并且在一行中。16x2 共有 32 个字符,第 1行 16 个字符,第2行另外 16个字符。这里必须明白,每个字符有 5x10=50 个像素,所以要显示一个字符,所有 50 个像素必须一起工作,但我们不必担心,因为显示单元中有另一个控制器 (HD44780)控制像素的工作(您可以在LCD单元中看到它,它是背面的黑眼圈)。

所需组件

硬件: ARDUINO UNO,电源(5v),JHD_162ALCD(16x2LCD),100uF电容,100KΩ电位器或电位器,100nF电容。

软件: arduino IDE

电路图及说明

在 16x2 LCD 中,如果有背光,则总共有 16 个引脚,如果没有背光,则总共有 14 个引脚。一个可以为背光引脚供电或留下。现在在 14 个引脚中有 8 个数据引脚(7-14 或 D0-D7),2 个电源引脚(1&2 或 VSS&VDD 或 GND&+5v),第 3 个用于对比度控制的引脚(VEE-控制字符的厚度如图所示)和 3 个控制引脚(RS&RW&E)。

在电路中,您可以观察到我只接了两个控制引脚,对比度位和 READ/WRITE 不经常使用,因此可以将它们短接到地。这使 LCD 处于最高对比度和读取模式。我们只需要控制 ENABLE 和 RS 引脚来相应地发送字符和数据。

下面给出了为 LCD 完成的连接:
PIN1 或 VSS 接地

PIN2 或 VDD 或 VCC 到 +5v 电源

PIN3 或 VEE 接地(为初学者提供最佳对比度)

PIN4 或 RS(寄存器选择)到 ARDUINO UNO 的 PIN8

PIN5 或 RW(读/写)接地(将 LCD 置于读取模式,便于用户通信)

PIN6 或 E(启用)到 ARDUINO UNO 的 PIN9

ARDUINO UNO 的 PIN11 或 D4 到 PIN10

PIN12 或 D5 转 ARDUINO UNO 的 PIN11

ARDUINO UNO 的 PIN13 或 D6 到 PIN12

ARDUINO UNO 的 PIN14 或 D7 转 PIN13

ARDUINO IDE 允许用户在 4 位模式下使用 LCD。这种类型的通信使用户能够减少 ARDUINO 上的引脚使用率,不像其他 ARDUINO 不需要单独编程以在 4 it 模式下使用它,因为默认情况下 ARDUINO 设置为在 4 位模式下通信。在电路中,您可以看到我们使用了 4 位通信(D4-D7)。

因此,仅从上表观察,我们将 LCD 的 6 个引脚连接到控制器,其中 4 个引脚是数据引脚,2 个引脚用于控制。

在这里插入图片描述

Arduino使用ADC

analogRead(pin);
analogReference();
analogReadResolution(bits);

首先,UNO ADC 通道的默认参考值为 5V。这意味着我们可以为任何输入通道的 ADC 转换提供 5V 的最大输入电压。由于某些传感器提供 0-2.5V 的电压,使用 5V 参考我们得到的精度较低,所以我们有一个指令可以让我们更改这个参考值。所以为了改变我们的参考值(“analogReference();”)

默认情况下,我们得到的最大板 ADC 分辨率为 10 位,可以使用指令 (“analogReadResolution(bits);”) 更改此分辨率。在某些情况下,此分辨率更改可能会派上用场。

现在如果上述条件设置为默认值,我们可以直接调用函数“analogRead(pin);”从通道’0’的ADC读取值,这里“pin”代表我们连接模拟信号的引脚,在这种情况下它会为“A0”。来自 ADC 的值可以取整为“int ADCVALUE = analogRead(A0); ”,通过该指令将ADC后的值存储在整数“ADCVALUE”中。

现在让我们谈谈 16x2 LCD。首先,我们需要启用头文件(‘#include <LiquidCrystal.h>’),该头文件中写入了指令,使用户能够以 4 位模式将 LCD 连接到 UNO,而不会产生任何模糊。有了这个头文件,我们不必逐位向 LCD 发送数据,这一切都将得到处理,我们不必编写程序来逐位向 LCD 发送数据或命令。

其次,我们需要告诉开发板我们在这里使用的是哪种类型的 LCD。由于我们有许多不同类型的 LCD(如 20x4、16x2、16x1 等)。在这里,我们将连接一个 16x2 LCD 到 UNO,因此我们得到“lcd.begin(16, 2);”。对于 16x1,我们得到 ‘lcd.begin(16, 1);’。

在本指令中,我们将告诉电路板我们将引脚连接到何处,连接的引脚将按顺序表示为“RS、En、D4、D5、D6、D7”。这些引脚应正确表示。由于我们将 RS 连接到 PIN0 等,如电路图所示,我们将板上的引脚号表示为“LiquidCrystal lcd(0, 1, 8, 9, 10, 11);”。

上面剩下的就是发送数据了,需要在LCD上显示的数据写成“cd.print(“hello, world!”);”。使用此命令,LCD 会显示“你好,世界!”。

正如你所看到的,我们不需要担心其他任何事情,我们只需要初始化,UNO 就会准备好显示数据。我们不必在这里编写程序循环来逐字节发送数据。

在下面给出的 C 程序中逐步解释了使用 Arduino Uno 的 ADC 。

代码

#include <LiquidCrystal.h>


// initialize the library with the numbers of the interface pins


LiquidCrystal lcd(8, 9, 10, 11, 12, 13); // REGISTER SELECT PIN,ENABLE PIN,D4 PIN,D5 PIN, D6 PIN, D7 PIN


char ADCSHOW[5]; //initializing a character of size 5 for showing the ADC result


void setup()


{


// set up the LCD's number of columns and rows:


lcd.begin(16, 2);


}


void loop()


{


// set the cursor to column 0, line 1


lcd.print("   CIRCUIT DIGEST"); //print name


lcd.setCursor(0, 1); // set the cursor to column 0, line


lcd.print("ADC RESULT:"); //print name


String ADCVALUE = String(analogRead(A0)); //intailizing a string and storing ADC value in it 


ADCVALUE.toCharArray(ADCSHOW, 5); // convert the reading to a char array 


lcd.print(ADCSHOW); //showing character of ADCSHOW


lcd.print("   ");


lcd.setCursor(0, 0); // set the cursor to column 0, line1


}



网站公告

今日签到

点亮在社区的每一天
去签到