Arduino筆記(85):電壓感測器(Voltage Sensor)

如果要使用 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。 電壓傳感器規格:
  • 電壓輸入範圍: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
+5VVCCVCC
GNDGNDGND
A0S-
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);
}

[實作結果]

使用電壓感測器測得9V壓為9.50V,使用電表量測同一個電池,得到的結果為9.57V,與電壓感測器測得的數據相差0.07。

1 留言

  1. 想請問電壓感測器Vout端的Vcc接的用意為何? Vout端不是用GND跟S就好?

    回覆刪除

張貼留言

較新的 較舊