|
我们发现很难通过阅读电阻上的颜色代码来确定其电阻值。为了克服确定电阻值的困难,我们将使用Arduino开发板构建一个简单的欧姆表。该项目背后的基本原理是分压器网络。未知电阻的值将显示在16 * 2 LCD显示屏上。
所需组件 ● Arduino Uno开发板 ● 16 * 2液晶显示屏 ● 电位器(1千欧) ● 电阻器 ● 面包板 ● 跳线
电路原理图
Arduino Uno开发板简介 Arduino Uno开发板是一款基于ATmega328p微控制器的开源微控制器电路板。它带有14个数字引脚(其中6个引脚可用作PWM输出)、6个模拟输入、板载稳压器等。Arduino Uno具有32KB闪存、2KB SRAM和1KB的EEPROM。它以16MHz的时钟频率运行。 Arduino Uno支持串行、I2C、SPI通信与其他设备进行通信。下表显示了Arduino Uno的技术规格。 | 单片机 | ATMEGA328P | | 工作电压 | 5V | | 输入电压 | 7-12V(推荐) | | 数字I / O引脚 | 14 | | 模拟引脚 | 6 | | 闪存 | 32KB | | SRAM | 2KB | | EEPROM | 1KB | | 时钟频率 | 16MHz |
16* 2 LCD显示屏简介 16* 2 LCD是嵌入式应用中广泛使用的显示屏。这里简要说明1602 LCD显示屏的引脚和工作原理。 LCD内部有两个非常重要的寄存器。它们是数据寄存器和命令寄存器。命令寄存器用于发送清除显示、光标归零等命令,数据寄存器用于发送要在16 * 2 LCD上显示的数据。下表显示16 * 2 lcd的引脚说明。 | 引脚序号 | 符号 | I/O | 描述 | | 1 | VSS | -
| 地 | | 2 | Vdd | - | + 5V电源 | | 3 | Vee | - | 控制对比度的电源 | | 4 | RS | I / O | RS = 0表示命令寄存器,
RS = 1表示数据寄存器 | | 5 | RW | I / O | R / W = 0用于写入,
R / W = 1用于读取 | | 6 | E | I / O | 使能 | | 7 | D0 | I / O | 8位数据总线(LSB) | | 8 | D1 | I / O | 8位数据总线 | | 9 | D2 | I / O | 8位数据总线 | | 10 | D3 | I / O | 8位数据总线 | | 11 | D4 | I / O | 8位数据总线 | | 12 | D5 | I / O | 8位数据总线 | | 13 | D6 | I / O | 8位数据总线 | | 14 | D7 | I / O | 8位数据总线 | | 15 | A | - | + 5V用于背光 | | 16 | K | - | 地 |
电阻颜色代码的概念 为了确定电阻的阻值,我们可以使用下面的公式。
在这里:
A =第一个色环中的颜色值。 B =第二个色环的颜色值。 C =第三个色环的颜色值。 T =第四个色环的颜色值。
例如,如果颜色代码是棕色 - 绿色 - 红色 - 银色,则电阻值计算为, - Brown = 1
- Green = 5
- Red = 2
- Silver = ± 10%
复制代码
从前三个色环中,R = AB * 10c
第四个颜色表示精确度为±10% - 10% of 1500 = 150
- For + 10 percent, the value is 1500 + 150 = 1650Ω
- For - 10 percent, the value is 1500 -150 = 1350Ω
复制代码
因此实际电阻值可以在1350Ω到1650Ω之间。
使用Arduino欧姆表计算电阻值 该电阻表的工作原理非常简单,可以使用下面显示的简单分压器网络进行解释。
从电阻器R1和R2的分压器网络, - Vout = Vin * R2 / (R1 + R2 )
复制代码
从上面的等式中,我们可以推导出R2的值为 - R2 = Vout * R1 /(Vin-Vout)
复制代码其中: R1 =已知阻值 R2 =未知阻值 Vin = Arduino的5V引脚产生的电压 Vout = R2相对于地面的电压。 注意:已知电阻(R1)的值是3.3KΩ,但用户应该用他们选择的电阻的电阻值替换。
所以如果我们得到未知电阻的电压值(Vout),我们可以很容易地计算出未知电阻R2。在这里,我们使用模拟引脚A0(见电路图)读取电压值Vout,并将这些数字值(0-1023)转换为电压,如下面的代码所述。 如果已知阻力值远远大于或小于未知阻力值,则误差会更大。所以建议保持已知电阻值接近未知电阻。
代码说明 本项目结束时会提供完整的Arduino程序。代码被分割成小块有意义的块并在下面解释。
在这部分代码中,我们将定义16 * 2 LCD显示器连接到Arduino的引脚。 16 * 2 lcd的RS引脚连接到Arduino的数字引脚2。使能16 * 2 lcd的引脚连接到Arduino的数字引脚3。 16 * 2 lcd的数据引脚(D4-D7)连接到Arduino的数字引脚4,5,6,7。 - LiquidCrystal lcd(2,3,4,5,6,7); //rs,e,d4,d5,d6,d7
复制代码
在这部分代码中,我们正在定义程序中使用的一些变量。 Vin是由arduino的5V引脚提供的电压。 Vout是电阻R2相对于地的电压。 R1是已知电阻的值。 R2是未知电阻的值。 - int Vin=5; //voltage at 5V pin of arduino
- float Vout=0; //voltage at A0 pin of arduino
- float R1=3300; //value of known resistance
- float R2=0; //value of unknown resistance
复制代码
在这部分代码中,我们将初始化16 * 2 lcd显示。这些命令被给予16 * 2 lcd显示,用于不同的设置,如清晰屏幕,光标闪烁显示等。
在这部分代码中,电阻R2(A0引脚)的模拟电压被转换为数字值(0到1023)并存储在一个变量中。 - a2d_data = analogRead(A0);
复制代码
在这部分代码中,数字值(0到1023)被转换成电压用于进一步的计算。 - buffer=a2d_data*Vin;
- Vout=(buffer)/1024.0;
复制代码
Arduino Uno ADC具有10位分辨率(所以整数值从0 - 2 ^ 10 = 1024)。这意味着它将0到5伏特的输入电压映射到0到1023之间的整数值。因此,如果我们将输入anlogValue乘以(5/1024),那么我们可以得到输入电压的数字值。
在这部分代码中,使用上述过程计算未知电阻的实际值。 - buffer=Vout/(Vin-Vout);
- R2=R1*buffer;
复制代码
在这部分代码中,未知电阻值打印在16 * 2液晶显示器上。 - lcd.setCursor(4,0);
- lcd.print("ohm meter");
- lcd.setCursor(0,1);
- lcd.print("R (ohm) = ");
- lcd.print(R2);
复制代码
这是我们可以使用Arduino轻松计算未知电阻的电阻。
代码 以下列出了本文使用的完整代码:
main.c
(705 Bytes, 下载次数: 76)
|