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 增加面包版实际电路照片