我们发现很难读取电阻器上的颜色代码来找到其电阻。为了克服查找电阻值的困难,我们将使用Arduino构建一个简单的欧姆表。该项目背后的基本原则是分压器网络。未知电阻值显示在16*2液晶显示屏上。
所需组件:
Arduino Uno
16*2液晶显示屏
电位器(1公斤欧姆)
电阻
面包板
跳线
电路图:
Arduino Uno:
阿杜伊诺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 |
电丙胺 | 1KB |
时钟速度 | 16兆赫 |
16x2 液晶显示器:
16 * 2 LCD是嵌入式应用中广泛使用的显示器。以下是有关16 * 2液晶显示器的引脚和工作的简要说明。LCD内部有两个非常重要的寄存器。它们是数据寄存器和命令寄存器。命令寄存器用于发送清晰显示、光标在家乡等命令,数据寄存器用于发送要在16*2 LCD上显示的数据。下表显示了16 * 2 LCD的引脚说明。
针 | 象征 | I/O | 描述 |
1 | VSS | - | 地 |
2 | Vdd | - | +5V电源 |
3 | V形 | - | 用于控制对比度的电源 |
4 | RS | 我 |
RS=0 为命令寄存器 , RS=1 用于数据寄存器 |
5 | 乌尔曼 | 我 | R/W=0 表示写入,R/W=1 表示读取 |
6 | E | I/O | 使 |
7 | D0 | I/O | 8位数据总线 |
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 | 一个 | - | +5V背光 |
16 | K | - | 地 |
电阻颜色代码的概念:
为了确定电阻值,我们可以使用以下公式。
R= { (AB*10c)Ω ± T% }
哪里
A = 第一个波段中颜色的值。
B = 第二波段中颜色的值。
C = 第三波段中颜色的值。
T = 第四波段中颜色的值。
下表显示了电阻器的颜色代码。
颜色 | 颜色的数值 | 乘法因子(10c) | 公差值(T) |
黑 | 0 | 100 | - |
棕色 | 1 | 101 | ± 1% |
红 | 2 | 102 | ± 2% |
橙 | 3 | 103 | - |
黄色 | 4 | 104 | - |
绿 | 5 | 105 | - |
蓝 | 6 | 106 | - |
紫 | 7 | 107 | - |
灰色 | 8 | 108 | - |
白 | 9 | 109 | - |
金 | - | 10-1 | ± 5% |
银 | - | 10-2 | ± 10% |
无乐队 | - | - | ± 20% |
例如,如果颜色代码为棕色 – 绿色 – 红色 – 银色,则电阻值的计算公式为:
Brown = 1 Green = 5 Red = 2 Silver = ± 10%
从前三个波段开始,R = AB*10c
R = 15 * 10+2 R = 1500 Ω
第四波段表示公差± 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显示器,用于不同的设置,例如清晰的屏幕,光标闪烁时的显示等。
lcd.begin(16,2);
在代码的这一部分中,电阻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),则得到输入电压的数字值。在此处了解如何在 Arduino 中使用 ADC 输入。
在代码的这一部分中,未知电阻的实际值是使用上述程序计算的。
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轻松计算未知电阻器的电阻。
#include
LiquidCrystal lcd(2,3,4,5,6,7); //rs,e,d4,d5,d6,d7
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
int a2d_data=0;
float buffer=0;
void setup()
{
lcd.begin(16,2);
}
void loop()
{
a2d_data=analogRead(A0);
if(a2d_data)
{
buffer=a2d_data*Vin;
Vout=(buffer)/1024.0;
buffer=Vout/(Vin-Vout);
R2=R1*buffer;
lcd.setCursor(4,0);
lcd.print("ohm meter");
lcd.setCursor(0,1);
lcd.print("R (ohm) = ");
lcd.print(R2);
delay(1000);
}
}
全部0条评论
快来发表一下你的评论吧 !