我們發現很難讀取電阻器上的顏色代碼來找到其電阻。為了克服查找電阻值的困難,我們將使用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文章
22瀏覽量
10071 -
Arduino
+關注
關注
188文章
6472瀏覽量
187320
發布評論請先 登錄
相關推薦
評論