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 增加麵包版實際電路照片

  • yi-shan wu

    你好 我也嘗試做了這個裝置 可是出現了一些狀況 想和版主請教 在還沒有負載的狀態下 我的值就會一直跳動 加上負載後 值的轉換並沒有很顯著 請問這大概會是哪裡有問題呢?

    • 感應是有方向性的,你可以確認一下接線方向是否正確,另外要注意一下你感應電流使用方式是否正確,可以拍張你使用的方式及你接線的圖幫你看一下

      • yi-shan wu

        有請人確認過接線方向和電流方向了 因為是將各用具焊上板子的 照片可能會較難讀懂 目前值出現的不太規律 偶爾會跳出很高的數值

        反覆測試幾次後 終於沒有問題時 將線路用焊接固定後 值的出現卻不太符合正常變化了 例如調高吹風機的風速 她的值並不會依風力的強度增加 甚至將吹風機關掉時 值也不會下降 請問可以推測是哪一方面問題呢?

        • 假設你的電路都沒問題情況,這個出來的感應電流很小,在焊接時盡量降低阻抗,比如焊點簡單,導線粗一點的,我有發生過手焊第二塊時出來的值不正確,後來修一下電路的焊點就正常了,還有這類的要量微小電流可能準確性不高,這點要注意,如果你要量的電流很小就要改用ACS-712這種的可能比較適當

          • yi-shan wu

            好的 謝謝

  • yi-shan wu

    嘗試很多次後 現在用麵包板試 可以幫忙看一下線路這樣對嗎?

    還有 我對loop內的這行 double Irms = emon1.calcIrms(1480); 裡面的1480這個值有疑問 請問怎麼來的呢? 我想嘗試手動把值調高

    • 這個是取樣次數的值,數值愈多取樣次數愈多,準確度會高一點點(但差異不太大),1480是在台灣算還合用的參考值,如果你要校準的話應該要調整emon1.current(5,65)中的65值,至於校準需要用到市面上的勾表來輔助校準。(你的圖接線錯了,下圖試試)

      • yi-shan wu

        謝謝

    • 已經補上麵包版電路照片

  • Guest

    嘗試很多次後 現在用麵包板試 可以幫忙看一下線路這樣對嗎?

    還有 我對loop內的這行 double Irms = emon1.calcIrms(1480); 裡面的1480這個值有疑問 請問怎麼來的呢? 我想嘗試手動把值調高 謝謝你的幫忙

    • 這個是取樣次數的值,數值愈多取樣次數愈多,準確度會高一點點(但差異不太大),1480是在台灣算還合用的參考值,如果你要校準的話應該要調整emon1.current(5,65)中的65值,至於校準需要用到市面上的勾表來輔助校準。

      • Sean Wang

        請問如果是sct-013-060 他本身是電壓1v輸出 是否就不用再接電容轉成電壓

        • 可以啊,不過你要將準位做一些調整才能配合library

          • Sean Wang

            所以您在本範例使用的是 http://goods.ruten.com.tw/item/show?21110264485194 是這個嗎 我看規格 只有這個訊號是電流 其他都是電壓 抱歉 還是不確定再跟您問一下 那如果是像 http://goods.ruten.com.tw/item/show?21602665849065 能請問電路該怎麼接嗎 不好意思 對這個完全不懂

          • 雖然我這是電流,但有經過轉成電壓動作,您的如果已經輸出是電壓,且確定輸入時不會超過Arduino輸入的承受電壓(<5V),那就可以接入後試試調整emon1.current(5, 65); 之中的65值(配合電流表校正),您可以改成30試試看。

          • Sean Wang

            請問這個 偏移植 是指 我電表量測到得值 與 輸出的 比例值嗎? 很感謝您寫這範例,我請廠商將 零件的3.5mm拆掉 直接拉線出來接 照您的 電路輸出 初步有成功量測到數值

          • 的確為比例值,所以您要先大約校正一下才能量出接近實際的值

          • Sean Wang

            能否請問一下 電容耐壓應該買幾v的呀, 小弟碰到一個很怪的狀況 電源都關的 但是感測器 竟然有輸出值 用 電表量測也是0 這樣算是壞掉媽

          • 感測器是利用霍爾電流的方式感應電流再轉成電壓,所以本身有沒有插電,如果它能感應到電流且夠大就能轉成電壓的,這算正常

          • Sean Wang

            不好意思 丹尼大 能幫我看一下 我這樣接有錯嗎 電阻值有量測過 ok , 電容10uf/50v 我的問題在於 電流從0.1升到0.7安培 , 都感測不到== 輸出都一直在0.2上下跳動這樣

          • SCT013-060?電壓型中間不用接33歐姆的電阻。

          • Sean Wang

            不好意思 能再請教一下嗎 電容是 正極接地嗎? 因為看電路圖看不出來 謝謝

          • 負極接地

        • Sean Wang

          另外能否請教 3.5mm那個插座名稱是?

  • yi-shan wu

    安安 謝謝版主一直以來的幫忙 我按照版主的建議去更改接線 做出來的值在吹風機調整風速時 有了合理的變化 但目前最為頭痛的問題是 當沒有任何負載時值也會一直瘋狂地跳亂 且忽大忽小 另我無法直接扣除該值

    請問這該怎麼處理呢?

    • 使用互感的方式取得的容易受環境影響,解析度也如此,所以可能你要設限去忽略低於某些值情況下算是”雜訊”,如果你無負載時的跳動範圍非常的寬時就要注意電路的設計是否過長(因在此電路上並未做特別的放大處理)。

      • yi-shan wu

        謝謝 我會試試

  • yi-shan wu

    丹尼大大 很抱歉我聽了你的說明後 每次嘗試都沒有成功 我實驗非常需要這個模組 請問可以直接跟你買一整套嗎? 請寄信給我 和我談細節 我會和你解釋我的用途 真的非常非常急需你的幫忙

  • chen jimmy

    能不用外接電路 也有 功能麼

    • 不行喔!

    • chen jimmy

      SCT 013 插頭 插的是 耳機座麼

      • 轉接成耳機的插頭再配合耳機座進行連接

      • chen jimmy

        想問的是 如果sct 013我買來 用插頭拆下的兩條線來做 會影響到麼?

        • 不會,只知確定2條線的定義去連接就能正常使用,並需要耳機接頭去使用

  • chen jimmy

    SCT 013 030 跟 文中的 020 有差麼

    • 不同,030、020輸出是電壓,文中是 000 輸出是電流再經過電路轉換

      • chen jimmy

        意思是如果使用030 將電壓弄成arduino 能量測到的範圍就可以?

        • 對啊!

          • chen jimmy

            那程式有差別麼 畢竟 000是量電流

          • chen jimmy

  • Pingback: Arduino 使用 SCT013 量電流(ADS1115) | 可丁丹尼@一路往前走2.0()

  • Nickman

    您好,我在使用SCT013時發生了一些問題,希望能跟您請教一下。 我用以下電路測試時感測值一直都沒變化 後來我發現就算把耳機插座(或藍色的線)拔起來,數值也沒變化 https://uploads.disquscdn.com/images/9d64c071a8db71519152395bae50965929cafbe41b9261997d3a16ad8a32f00a.jpg 我有試著換過立體音耳機插座和單聲道耳機插座,但結果都一樣 請問這可能是哪裡出了問題呢?

    • 範例中使用的是SCT013是輸出電流喔。確認一下,或是拍完整的照片^^

      • Nickman

        所有的排列組合都試過了,也試過用電線跟耳機插頭接觸,一樣都沒變化

        • 您確定你的是SCT-013 000?

          • Nickman

            是的,跟您文章中的附圖一樣。 我目前在想會不會是我的SCT013壞掉了,不過我不知道該怎麼測試 。https://uploads.disquscdn.com/images/b850b878128507cb8944ce1592ff7bc97ae9215b2a4b89ed744eab12aba95bec.jpg

          • 應該不太會,這只能感應交流電流,而且只能單線感應喔!你可以拆開藍色塑膠殼看看接線有沒有斷掉

          • 接上後單純用analogyRead()在loop裡面印看看有沒有變化值

          • Nickman

            感謝版主的幫忙,問題解決了。 後來發現數值沒變化的原因是我操作錯誤,把火線和地線圈在一起,結果造成的磁場相抵而量不到。

            在此補上正確接法,希望不要有人跟我一樣犯傻。 https://uploads.disquscdn.com/images/f4949fe75523e2e365b106c793bc2d1994bb28f6dc38bcbd49f1b520832a7bc8.jpg

          • 很高興你能解決問題。記住這最下電流只能量>0.5A以上的電流。