我們發(fā)現(xiàn)很難讀取電阻器上的顏色代碼來找到其電阻。為了克服查找電阻值的困難,我們將使用Arduino構(gòu)建一個(gè)簡(jiǎn)單的歐姆表。該項(xiàng)目背后的基本原則是分壓器網(wǎng)絡(luò)。未知電阻值顯示在16*2液晶顯示屏上。
所需組件:
Arduino Uno
16*2液晶顯示屏
電位器(1公斤歐姆)
電阻
面包板
跳線
電路圖:
Arduino Uno:
阿杜伊諾Uno是一款基于ATmega328p微控制器的開源微控制器板。它具有 14 個(gè)數(shù)字引腳(其中 6 個(gè)引腳可用作 PWM 輸出)、6 個(gè)模擬輸入、板載穩(wěn)壓器等。Arduino Uno具有32KB閃存,2KB的SRAM和1KB的EEPROM。它的工作時(shí)鐘頻率為16MHz。 Arduino Uno支持串行,I2C,SPI通信,用于與其他設(shè)備通信。下表顯示了Arduino Uno的技術(shù)規(guī)格。
微控制器 | ATmega328p |
工作電壓 | 5V |
輸入電壓 | 7-12V(推薦) |
數(shù)字 I/O 引腳 | 14 |
模擬引腳 | 6 |
閃存 | 32KB |
SRAM | 2KB |
電丙胺 | 1KB |
時(shí)鐘速度 | 16兆赫 |
16x2 液晶顯示器:
16 * 2 LCD是嵌入式應(yīng)用中廣泛使用的顯示器。以下是有關(guān)16 * 2液晶顯示器的引腳和工作的簡(jiǎn)要說明。LCD內(nèi)部有兩個(gè)非常重要的寄存器。它們是數(shù)據(jù)寄存器和命令寄存器。命令寄存器用于發(fā)送清晰顯示、光標(biāo)在家鄉(xiāng)等命令,數(shù)據(jù)寄存器用于發(fā)送要在16*2 LCD上顯示的數(shù)據(jù)。下表顯示了16 * 2 LCD的引腳說明。
針 | 象征 | I/O | 描述 |
1 | VSS | - | 地 |
2 | Vdd | - | +5V電源 |
3 | V形 | - | 用于控制對(duì)比度的電源 |
4 | RS | 我 |
RS=0 為命令寄存器 , RS=1 用于數(shù)據(jù)寄存器 |
5 | 烏爾曼 | 我 | R/W=0 表示寫入,R/W=1 表示讀取 |
6 | E | I/O | 使 |
7 | D0 | I/O | 8位數(shù)據(jù)總線 |
8 | D1 | I/O | 8位數(shù)據(jù)總線 |
9 | D2 | I/O | 8位數(shù)據(jù)總線 |
10 | D3 | I/O | 8位數(shù)據(jù)總線 |
11 | D4 | I/O | 8位數(shù)據(jù)總線 |
12 | D5 | I/O | 8位數(shù)據(jù)總線 |
13 | D6 | I/O | 8位數(shù)據(jù)總線 |
14 | D7 | I/O | 8位數(shù)據(jù)總線 |
15 | 一個(gè) | - | +5V背光 |
16 | K | - | 地 |
電阻顏色代碼的概念:
為了確定電阻值,我們可以使用以下公式。
R= { (AB*10c)Ω ± T% }
哪里
A = 第一個(gè)波段中顏色的值。
B = 第二波段中顏色的值。
C = 第三波段中顏色的值。
T = 第四波段中顏色的值。
下表顯示了電阻器的顏色代碼。
顏色 | 顏色的數(shù)值 | 乘法因子(10c) | 公差值(T) |
黑 | 0 | 100 | - |
棕色 | 1 | 101 | ± 1% |
紅 | 2 | 102 | ± 2% |
橙 | 3 | 103 | - |
黃色 | 4 | 104 | - |
綠 | 5 | 105 | - |
藍(lán) | 6 | 106 | - |
紫 | 7 | 107 | - |
灰色 | 8 | 108 | - |
白 | 9 | 109 | - |
金 | - | 10-1 | ± 5% |
銀 | - | 10-2 | ± 10% |
無樂隊(duì) | - | - | ± 20% |
例如,如果顏色代碼為棕色 – 綠色 – 紅色 – 銀色,則電阻值的計(jì)算公式為:
Brown = 1 Green = 5 Red = 2 Silver = ± 10%
從前三個(gè)波段開始,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Ω
因此,實(shí)際電阻值可以在1350Ω至1650Ω之間。
為了更方便,這里是電阻顏色代碼計(jì)算器,您只需輸入電阻器上環(huán)的顏色,您將獲得電阻值。
使用 Arduino 歐姆表計(jì)算電阻:
該電阻計(jì)的工作原理非常簡(jiǎn)單,可以使用如下所示的簡(jiǎn)單分壓器網(wǎng)絡(luò)進(jìn)行解釋。
從電阻R1和R2的分壓器網(wǎng)絡(luò),
Vout = Vin * R2 / (R1 + R2 )
從上式中,我們可以推導(dǎo)出 R2 的值為
R2 = Vout * R1 / (Vin – Vout)
其中 R1 = 已知電阻
R2 = 未知電阻
Vin = 在 Arduino 的 5V 引腳上產(chǎn)生的電壓
Vout = R2處相對(duì)于地的電壓。
注意:所選的已知電阻(R1)值為3.3KΩ,但用戶應(yīng)將其替換為所選電阻的電阻值。
因此,如果我們得到未知電阻(Vout)上的電壓值,我們可以很容易地計(jì)算出未知電阻R2。在這里,我們使用模擬引腳A0讀取電壓值Vout(參見電路圖),并將這些數(shù)字值(0 -1023)轉(zhuǎn)換為電壓,如下面的代碼中所述。
如果已知電阻的值遠(yuǎn)大于或小于未知電阻,則誤差將更大。因此,建議將已知電阻值保持在更接近未知電阻的位置。
代碼說明:
該項(xiàng)目的完整Arduino程序和演示視頻在本項(xiàng)目結(jié)束時(shí)給出。代碼被分成有意義的小塊,并在下面解釋。
在代碼的這一部分中,我們將定義將16 * 2 LCD顯示器連接到Arduino的引腳。16*2 LCD 的 RS 引腳連接到 arduino 的數(shù)字引腳 2。16 * 2 LCD的使能引腳連接到Arduino的數(shù)字引腳3。16*2 LCD的數(shù)據(jù)引腳(D4-D7)連接到Arduino的數(shù)字引腳4,5,6,7。
LiquidCrystal lcd(2,3,4,5,6,7); //rs,e,d4,d5,d6,d7
在代碼的這一部分中,我們將定義一些在程序中使用的變量。Vin 是由 arduino 的 5V 引腳提供的電壓。Vout是電阻R2處相對(duì)于地的電壓。
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顯示器,用于不同的設(shè)置,例如清晰的屏幕,光標(biāo)閃爍時(shí)的顯示等。
lcd.begin(16,2);
在代碼的這一部分中,電阻R2(A0引腳)的模擬電壓被轉(zhuǎn)換為數(shù)字值(0至1023)并存儲(chǔ)在變量中。
a2d_data = analogRead(A0);
在代碼的這一部分中,數(shù)字值(0至1023)被轉(zhuǎn)換為電壓以供進(jìn)一步計(jì)算。
buffer=a2d_data*Vin;
Vout=(buffer)/1024.0;
Arduino Uno ADC 具有 10 位分辨率(因此整數(shù)值從 0 - 2^10 = 1024 個(gè)值)。這意味著它將 0 到 5 伏之間的輸入電壓映射到 0 到 1023 之間的整數(shù)值。因此,如果我們將輸入 anlogValue 乘以 (5/1024),則得到輸入電壓的數(shù)字值。在此處了解如何在 Arduino 中使用 ADC 輸入。
在代碼的這一部分中,未知電阻的實(shí)際值是使用上述程序計(jì)算的。
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輕松計(jì)算未知電阻器的電阻。
#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);
}
}
-
歐姆表
+關(guān)注
關(guān)注
0文章
22瀏覽量
10066 -
Arduino
+關(guān)注
關(guān)注
188文章
6471瀏覽量
187289
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論