如果要使用 Arduino 測量外部電壓,則必須使用 Arduino 開發板的模擬輸入引腳,因 Arduino 的輸入電壓限制為5V,這時 Arduino 的模擬輸入引腳僅能測試最高 5V 的電壓。但是,如果想測量大於 5V 的電壓該怎麼辦?這時就需要用到電壓傳感器模組,使用這個電模組,就可以測量高達 25V 的電壓。
此模組基於電阻分壓原理所設計,能使端子介面輸入的電壓縮小5倍,Arduino 類比輸入電壓最大為 5V,那麼電壓檢測模組的輸入電壓則不能大於 5V×5=25V(如果用到3.3V系統,輸入電壓不能大於3.3Vx5=16.5V)。因為Arduino所用 AVR 晶片為10位元AD,所以此模組的類比解析度為0.00489V(5V/1023),故電壓檢測模組檢測輸入最小電壓為 0.00489V×5=0.02445V。 電壓傳感器規格:
電流傳感器的電路圖如下:
輸入的電流從Vin輸入,這時電流 i1和 i2相同,為了找出電壓值,使用歐姆定律(V = i * R)來計算電壓值。
此模組基於電阻分壓原理所設計,能使端子介面輸入的電壓縮小5倍,Arduino 類比輸入電壓最大為 5V,那麼電壓檢測模組的輸入電壓則不能大於 5V×5=25V(如果用到3.3V系統,輸入電壓不能大於3.3Vx5=16.5V)。因為Arduino所用 AVR 晶片為10位元AD,所以此模組的類比解析度為0.00489V(5V/1023),故電壓檢測模組檢測輸入最小電壓為 0.00489V×5=0.02445V。 電壓傳感器規格:
- 電壓輸入範圍:DC 0 ~ 25V
- 電壓檢測範圍:DC0.02445V ~ 25V
- 電壓類比解析度:0.00489V
- DC輸入介面:端子正極接VCC,負極接GND
電流傳感器的電路圖如下:
輸入的電流從Vin輸入,這時電流 i1和 i2相同,為了找出電壓值,使用歐姆定律(V = i * R)來計算電壓值。
Vin = i * (R1 + R2) 亦即 i = Vin / (R1 + R2)要計算輸出電壓,使用歐姆定律計算,Vout = i * R2 ,將上式的電流 i 代入公式,得到
Vout = (Vin / (R1 + R2)) * R2要知道輸入電壓 Vin,根據上式得到:
Vin = Vout / (R2/(R1+R2))這也是以下程式中計算輸入電壓 vIN = vOUT / (R2/(R1+R2)) 的計算公式。
[材料]
- Arduino Uno
- 電壓感測模組
- LCD1602液晶顯示器
- I2C/介面 LCD1602轉接板 PCF8574
- 麵包板 x1
- 9V 電池 x1
- 排線 N 條
[接線與電路圖]
Arduino接腳 | 電源感測器 | LCD1602 |
---|---|---|
+5V | VCC | VCC |
GND | GND | GND |
A0 | S | - |
SDA | - | SDA |
SCL | - | SCL |
[程式]
#include <LiquidCrystal_I2C.h> // 引用 LiquidCrystal_I2C Library LiquidCrystal_I2C lcd(0x27,16,2); // 設定 LCD 位址為 0x27,有 16 個字元 2 列 const int voltageSensor = A0; float vOUT = 0.0; float vIN = 0.0; float R1 = 30000.0; float R2 = 7500.0; int value = 0; void setup() { Serial.begin(112500); lcd.init(); // 初始化 lcd lcd.backlight(); // 設定背板為亮 lcd.clear(); lcd.setCursor(0,0); lcd.print("Measure Voltage"); } void loop() { value = analogRead(voltageSensor); vOUT = (value * 5.0) / 1024.0; vIN = vOUT / (R2/(R1+R2)); Serial.print("Input = "); Serial.print(vIN); Serial.println(" V"); lcd.setCursor(0,1); lcd.print("Input = "); lcd.print(vIN); lcd.print(" V"); delay(500); }
想請問電壓感測器Vout端的Vcc接的用意為何? Vout端不是用GND跟S就好?
回覆刪除張貼留言