Arduino 使用 SCT013 量電流

Arduino 使用 SCT013 量電流

量電流方式有串聯方式與非接觸式,一般非接觸式都是使用霍爾電流感應方式量測,但因為使用感應電流方式取得一定比率的電流再回推實際值,這會因為環境因素影響準確性,但非接觸式有個好處如其名稱一樣,我們需要變更線路設計就能量測到電流。

準備工作

下面列出硬體方面的準備工作如下:

  • Arduin UNO

  • SCT013

  • SCT013 for Arduino 電路

SCT013輸出是電流的方式,但Arduino Analog IN是量電壓方式,所以需要另外接電路將電流轉換成電壓,而且電流帶有正負電壓的正弦波,需將電壓位準提升至0V以上,上圖為連接的示意圖,等效圖如下:

實際連接如下:

安裝Electricity monitoring library

下載EmonLib,解壓後安裝至Arduino的Library中,成功的話可以看到如下圖:

如果不清楚Library怎麼下載及安裝可以參考Arduino遙控大金(daikin)冷氣中的下載Arduino_IRremote_Daikin說明。

開啟範例程式

Library安裝完成後有附上範例程式,範例程式有量電流、量電流與量電壓,但我們的電路只有量流電,所以選擇current_only

接下來就會開啟一個視窗並且會看到範例程式的內容:

//-----------start-----------
// EmonLibrary examples openenergymonitor.org, Licence GNU GPL V3

#include "EmonLib.h"                   // Include Emon Library
EnergyMonitor emon1;                   // Create an instance

void setup()
{
  Serial.begin(9600);

  emon1.current(1, 111.1);             // Current: input pin, calibration.
}

void loop()
{
  double Irms = emon1.calcIrms(1480);  // Calculate Irms only

  Serial.print(Irms*230.0);        // Apparent power
  Serial.print(" ");
  Serial.println(Irms);            // Irms
}
//------------end------------

此範例作者是使用220V系統,在台灣是使用110V,以及接收Analog PIN也不同,所以更改一下程式:

emon1.current(5, 65);             // Current: input pin, calibration.

上面程式中的65為校正的調整值,依照電路圖中及110V系統,參考值約為65,使用時可以利用勾表配合調整該數值大小。

  Serial.print(Irms*110.0);        // Apparent power

因使用110V系統,所以顯示值將它乘上110,下面為完整的測試程式:

//-----------start-----------
// EmonLibrary examples openenergymonitor.org, Licence GNU GPL V3

#include "EmonLib.h"                   // Include Emon Library
EnergyMonitor emon1;                   // Create an instance
double Irms;
void setup()
{
  Serial.begin(9600);

  emon1.current(5, 65);             // Current: input pin, calibration.
  //依照你的電路需要使用勾表電流表來校準該值
  delay(100);
  Irms = emon1.calcIrms(1480);  // Calculate Irms only
}

void loop()
{
  Irms = emon1.calcIrms(1480);  // Calculate Irms only

  Serial.print(Irms*110.0);        // Apparent power
  Serial.print(" ");
  Serial.println(Irms);            // Irms
  delay(1000);
}
//------------end------------

輸出結果:

左邊數據為使用計算後使用的瓦數(W),右邊值為電流大小(A)

注意事項

  • 使用SCT013時要注意下圖的箭頭方向:

  • 這次使用到的外接電路:

  • emon1.current(5, 65);

    電路會受整體線路的阻抗產生的微弱電流會有所不同,65值利用勾表電流表所校準後的值,整體DIY成功後,需要自行重新校正該數值,比如在實作使用麵包版連接後所校正的值為45

麵包版電路照片

新增許多使用麵包板連接後電路的照片,希望提供更多想要DIY網友們參考。

Q & A

整理一些在問題中得到解決的答案,在你對於此文章實作上有問題時可以先參考:

電流數值沒有變化

數值沒有變化的原因有蠻多種的,目前歸納如下:

1.勾表只能勾單線:

勾表只能勾圈1條線,確定你所勾的線是不是單線,如果是延長線類型的,請在未接上電源時必需適度的將電線包覆外殼剝除才能勾單線,還是不能理解的話,網路有影片提供教學

2.接線是否正確:

確定SCT-013接出來的2條線是否連接正確,因SCT-013使用的輸出是立體聲耳機插頭,輸出會有三條線,其中一條線是未連接任何接點的 確認接線無誤

3.型號是否正確:

文章選用的是屬於SCT-013系列中的電流輸出型,外接電路是針對電流輸出時轉換成電壓以符合Arduino的類比輸入範圍(0V~5V)

詳細資料請至官網查詢

電容極性、耐壓

電容是選用有極性電容,其負極接地,耐壓選用10V以上的,互感器感器內已經有限壓二極體(TVS)來保護感應電流與你的電路配合時產生的電壓超過時就會進行保護,在此公開互感器的電實際電路照片:

電路部分因非專長,在此不做解釋,對於電路較熟悉的可以提供意見指教。

電流值如何校正

校正的方式不外乎提供一個參考點來校正,在此提供2個方式參考。

功耗固定參考法

你可以選擇一種功耗較能固定的電器或其他產品來當做參考並進確校正,例如傳統的電燈泡(非省電燈泡)都會標示功耗,60W、100W之類的,那就可以當成參考點來進確校正。

儀表參考法

購買具有電流顯示的產品,像Danny購買的松大變電家:

再接上會消耗電流的電子產品進行校正。

互感器到哪買

Danny早期因實作用途多買了好幾個,將剩下的賣給同樣需要的人,不過因使用的人不多就沒再繼續提供(未來或許會提供,因無法做後續的保固其他支援,價格上可能會比較便宜),不過因此篇文章的熱絡程度,目前露天已經有賣家提供此互感器,價格上請自行選擇合適的賣家,如果對於淘寶購物也很熟悉的話,可以至淘寶購買,Danny也是自行至淘寶購買,現在價格已經降下來蠻多。

電路有賣嗎

此製作電路的成本與實際用途並不是很划算,加上電路蠻簡單,零件材料也容易取得,所以請自行製作,製作上有問題可以回來文章提出你的問題,你的問題就是大家的問題,這也是這篇文章後續有Q&A的原因。

結語

文章從2014年9月開始至今已經累績許多網友的回饋,這也是此文章會陸續更新的原因,未來也會視需求不斷的對此文章做更新,也會利用此互感器延伸至其他的平台

參考資料

OpenEnergyMonitor

更新資訊

日期 內容
2017/03/30 補充Q&A
2015/01/27 增加麵包版實際電路照片