风筝
发表于: 2018-3-26 22:35:14 | 显示全部楼层

Arduino-Ohm-Meter.jpg

我们发现很难通过阅读电阻上的颜色代码来确定其电阻值。为了克服确定电阻值的困难,我们将使用Arduino开发板构建一个简单的欧姆表。该项目背后的基本原理是分压器网络。未知电阻的值将显示在16 * 2 LCD显示屏上。


所需组件

●    Arduino Uno开发板

●    16 * 2液晶显示屏

●    电位器(1千欧)

●    电阻器

●    面包板

●    跳线


电路原理图

Arduino-Ohm-Meter-circuit-diagram.png


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 / ORS = 0表示命令寄存器,
RS = 1表示数据寄存器
5 RW I / OR / 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 -


电阻颜色代码的概念

为了确定电阻的阻值,我们可以使用下面的公式。

  1. R= { (AB*10c)Ω  ± T% }
复制代码

在这里:

           A =第一个色环中的颜色值。

           B =第二个色环的颜色值。

           C =第三个色环的颜色值。

           T =第四个色环的颜色值。


例如,如果颜色代码是棕色 - 绿色 - 红色 - 银色,则电阻值计算为,

  1. Brown = 1
  2. Green = 5
  3. Red = 2
  4. Silver = ± 10%
复制代码

从前三个色环中,R = AB * 10c

  1. R = 15 * 10+2
  2. R = 1500 Ω
复制代码

第四个颜色表示精确度为±10%

  1. 10% of 1500 = 150
  2. For + 10 percent, the value is 1500 + 150 = 1650Ω
  3. For - 10 percent, the value is 1500 -150 = 1350Ω
复制代码

因此实际电阻值可以在1350Ω到1650Ω之间。


使用Arduino欧姆表计算电阻值

该电阻表的工作原理非常简单,可以使用下面显示的简单分压器网络进行解释。


从电阻器R1和R2的分压器网络,

  1. Vout = Vin * R2 / (R1 + R2 )
复制代码

从上面的等式中,我们可以推导出R2的值为

  1. R2 = Vout * R1 /(Vin-Vout)
复制代码

其中:  R1 =已知阻值

            R2 =未知阻值

            Vin = Arduino的5V引脚产生的电压

            Vout = R2相对于地面的电压。

注意:已知电阻(R1)的值是3.3KΩ,但用户应该用他们选择的电阻的电阻值替换。

Arduino-Ohm-Meter-in-action.jpg


所以如果我们得到未知电阻的电压值(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。

  1. LiquidCrystal  lcd(2,3,4,5,6,7);   //rs,e,d4,d5,d6,d7
复制代码

在这部分代码中,我们正在定义程序中使用的一些变量。 Vin是由arduino的5V引脚提供的电压。 Vout是电阻R2相对于地的电压。

R1是已知电阻的值。 R2是未知电阻的值。

  1. int Vin=5;        //voltage at 5V pin of arduino
  2. float Vout=0;     //voltage at A0 pin of arduino
  3. float R1=3300;    //value of known resistance
  4. float R2=0;       //value of unknown resistance
复制代码

在这部分代码中,我们将初始化16 * 2 lcd显示。这些命令被给予16 * 2 lcd显示,用于不同的设置,如清晰屏幕,光标闪烁显示等。

  1. lcd.begin(16,2);
复制代码

在这部分代码中,电阻R2(A0引脚)的模拟电压被转换为数字值(0到1023)并存储在一个变量中。

  1. a2d_data = analogRead(A0);
复制代码

在这部分代码中,数字值(0到1023)被转换成电压用于进一步的计算。

  1. buffer=a2d_data*Vin;
  2. Vout=(buffer)/1024.0;
复制代码

Arduino Uno ADC具有10位分辨率(所以整数值从0 - 2 ^ 10 = 1024)。这意味着它将0到5伏特的输入电压映射到0到1023之间的整数值。因此,如果我们将输入anlogValue乘以(5/1024),那么我们可以得到输入电压的数字值。


在这部分代码中,使用上述过程计算未知电阻的实际值。

  1. buffer=Vout/(Vin-Vout);
  2. R2=R1*buffer;
复制代码

在这部分代码中,未知电阻值打印在16 * 2液晶显示器上。

  1. lcd.setCursor(4,0);
  2. lcd.print("ohm meter");
  3. lcd.setCursor(0,1);
  4. lcd.print("R (ohm) = ");
  5. lcd.print(R2);
复制代码

这是我们可以使用Arduino轻松计算未知电阻的电阻。


代码

以下列出了本文使用的完整代码: main.c (705 Bytes, 下载次数: 75)

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 705 | 回复: 1492



手机版|

GMT+8, 2024-12-4 16:46 , Processed in 0.098134 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表