Arduino 入門
Lesson 72
【非侵襲性AC電流センサ】
こにんちは、管理人のomoroyaです。
センサーの使い方の基本を学習する入門編。
本Lessonの電子部品も、部品庫の奥から引っ張り出してきました!
AC電流センサ(SCT-013-030)。
このセンサとArduinoを使用することで家庭のAC電流を測定することが可能です。
世の中には、まだまだ色々なセンサーがあります。
これからも、色々なセンサーで遊んでいきます。
※そろそろ部品庫のセンサがない・・・
本記事はLesson 72 【非侵襲性AC電流センサ】です。
※非侵襲性・・・導体自体を切断または変更する必要がない
本Lessonの「非侵襲性AC電流センサ」はYHDC社がリリースしているSCT-013-030を使用しています。
本Lessonで使用している「SCT-013-030」は以下が同等品。
※prime対応品
※出荷元:Amazon
Arduino入門編の解説にて使用しているArduinoは互換品です。
互換品とは言え、Arduinoはオープンソースであり複製して販売するのもライセンス的に問題なし。
そのため互換品の品質も悪くなく、それでいて値段は安いです。
正規品本体の値段程度で豊富な部品が多数ついています。
正規品(Arduino UNO R3)の本体単品がほしい方はこちらとなります。
Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)
はじめに
本Lessonで使用する「AC電流センサ」は型番が「SCT-013-030」。
データシートはすぐに見つけることができます。
種類は色々あるため、お好みで。
ただし、Arduinoでの制御を考えると電圧出力の方が接続が簡単かと思います。
本Lesson下記の2つのサイトを参考に学習しました。
センサ発売元の会社「YHDC」
また、下記英語のサイトは役に立つので興味があれば読んでみてください。
また、スケッチを簡単にするために上記サイトで紹介されていたライブラリを使用しています。
「EmonLib」
Lesson 72 目標
本Lessonの目標は以下です。
2.AC電流センサを動かすスケッチを描く
3.ACセンサからデータを取得する
いつものように、遊ぶことが重要です。
「AC電流センサ(SCT-013-030)」ですが、電圧出力であるためArduinoのアナログピンを使用します。
ADC変換ですね。
本Lessonでは「EmonLib.h」「LiquidCrystal.h」を使用します。
「EmonLib.h」はインストール必要。
「ツール」→「ライブラリを管理」→「EmonLib」にて検索することでインストール可能です。
もしくは、直接ダウンロードサイトからダウンロードしてもOKです。
「LiquidCrystal.h」はLCDモジュールの使用に使います。
以前のLessonにて解説しています。
本Lessonを始める前に読んでおくと取り組みやすいと思います。
準備
ではLessonの準備に取り掛かりましょう。
電子部品は「AC電流センサ(SCT-013-030)」のみ。
ただし、SCT-013のコネクタはオーディオジャックのため変換部品があると作りやすい。
例えば下記。
ない場合は、配線を切断して直接つなぐでOKです。
必要なもの
- USB接続用のPC(IDE統合環境がインストールされたPC)
→管理人が勝手に比較したBTOメーカーを紹介しています。 - UNO R3(以下UNO)、おすすめUNO互換品(ELEGOO)
- PCとUNOを接続するUSBケーブル
- ブレッドボード安価(大)、ブレッドボード安価(中)
※おすすめブレッドボード(大)、おすすめブレッドボード(中) - M-M Jumper wire(UNOと部品をつなぐための配線)
- M-F Jumper wire(UNOと部品をつなぐための配線)
- M-F M-M F-F セット Jumper wire(UNOと部品をつなぐための配線)
※ブレッドボードはセンサとUNOを直接つなぐ場合不要です。
※ジャンパワイヤーは「M-M」「M-F」を必要に応じて使い分けてください。
オーディオジャックの変換基板は、あると便利。
Jumper wire、抵抗は今後も頻繁に利用します。
Jumper wireはできれば、「オス-メス オス-オス メス –メス」の3種類を揃えておくことをお勧めします。
短めが使いやすい場合も。
抵抗も単品で揃えるよりはセットをおすすめします。
抵抗、LEDなどを個別でセット品を購入しても、そんなに使わない!
という方は、「電子工作基本部品セット」が使い勝手が良い。
使用部品説明
「AC電流センサ(SCT-013-030)」について説明していきます。
AC電流センサ「SCT-013-030」 実物写真
下の写真が「AC電流センサ(SCT-013-030)」の実物写真です。
■AC電流センサ(SCT-013-030)実物写真
■コイル部分
測定物を通せるように開く構造となっています。
クランプ電流計だと思ってもらってさしつかえありません。
■接続部分
SCT-013の接続部分はオーディオジャックになっています。
普段、Arduinoで遊んでいる場合は見慣れない接続端子で戸惑うかもしれません。
変換モジュールがない場合は、ぶった切って配線をむき出しにすれば使えます。
■変換基板
変換基板があるとブレッドボードで使いやすい。
電流センサ「SCT-013-030」 回路図
「AC電流センサ(SCT-013-030)」の回路図。
回路に興味がないかたは必ず読み飛ばしてください。
■回路図
簡単ですが書いておきます!
仕様から考えられる計算式も記載しますが間違ってたらすみません・・・。
ただし、「EmonLib.h」を使用するため必要な値は校正用の定数のみ。
= 1800 ÷ 62
= 29
また、図中に示した通りAC電流であるため電流は0を中心に±となります。
そのため、出力される電圧も0を中心に±。
Arduinoの測定電圧は0~5Vであることからマイナスはいただけません。
SCT-013-030の出力を持ち上げて0~5Vの範囲に収まるようにする必要があります。
Arduinoの5Vを抵抗で分圧すれば2.5Vはすぐに作ることができます。
電流センサ「SCT-013-030」 仕様
遊び、学習で使う分には気にする特性はとくにありません。
Name | Function |
---|---|
Input Current | 0 ~ 30A |
Output Type | 電圧出力 |
Output Voltage | 0 ~ 1V |
精度 | ±1% |
Non-Linearity | 2~3% |
動作温度 | -25° ~ +70° |
周波数 | 50Hz ~ 1KHz |
Build-in sampling resistance | 62Ω |
turns ratio | 1800:1 |
本Lessonは遊び、学習を想定しています。
Arduinoの仕様範囲内で使用していれば問題になることもありません。
遊び、学習以外での使用用途をお考えの場合はデータシートを必ず確認しましょう。
実践 回路作成とコード作成
最初に回路図を確認してください。
次に、回路図に合わせて部品を接続します。
最後にコードを書いて、「AC電流センサ」を接続してAC電流を測定してみましょう。
Arduinoのピン配置を確認したい方は番外編02を参照してください。
回路図
Arduinoの使用ピンは以下。
- LCD用ピン:D7、8、9、10、11、12
- SCT-013-030用ピン:A1
- 5V、GND
回路図がこちら。
こちらがブレッドボード図。
SCT-013-030のFrizting図はコイルで代用しています。
回路図は「fritzing」を利用しています。
「fritzing」の使い方は下記を参照してください。
接続
下図に示すように、用意した部品を使用して接続しましょう。
電子部品は「AC電流センサ」のみ。
使用するポートは
- LCD用ピン:D7、8、9、10、11、12
- SCT-013-030用ピン:A1
- 5V、GND
穴に挿入しづらいときは、ラジオペンチなどを使用してください。
コードの書き込み
接続が終わったら、USBケーブルを使用してUNOにプログラムを書き込んで行きましょう。
コードを書き終えたら、いつでも利用できるように「ファイル」⇒「名前を付けて保存」で保存しておきましょう。
コマンド説明
本Lessonでは、特に新しいコマンドはありません。
復習を兼ねてLiquidCrystal.hのコマンドを列挙しておきます。
コマンド | 説明 |
---|---|
LiquidCrystal(引数) 引数 rs,rw,enable, d0,d1,d2,d3,d4,d5,d6,d7 |
LiquidCrystal型の変数を生成。 rs:LCDのRSピンに接続するArduino側のピン番号 rw:LCDのRWピンに接続するArduino側のピン番号 enable:LCDのenableピンに接続するArduino側のピン番号 d0~d7:LCDのdataピンに接続するArduino側のピン番号 RWピンをGNDに接続すれば引数を省略できます。 |
begin(cols, rows) | LCDの初期化。 ディスプレイの桁数と行数の指定。 cols:桁数(横方向の字数) rows:行数 |
clear() | LCDの表示を消し、カーソルを左上隅に配置。 |
home() | LCDの左上隅にカーソルを配置。 |
setCursor(col, row) | LCDのカーソルの位置を指定。 |
write(data) | 文字をLCDに表示。 |
print(data) | テキストをLCDに表示。 |
cursor() | LCDのカーソルを表示する。 カーソルはアンダーラインで、その位置に次の文字が表示される。 |
noCursor() | LCDのカーソルを表示しない。 |
blink() | LCDのカーソルを点滅させる。 |
noBlink() | LCDのカーソルを点滅を停止。 |
display() | noDisplay()で消したディスプレイを元に戻す。 表示されていた文字やカーソルもリストアされる。 |
noDisplay() | ディスプレイを消す。 表示中の文字は保持される。 |
scrollDisplayLeft() | LCDに表示中の文字とカーソルを1文字分左へずらします。 |
scrollDisplayRight() | LCDに表示中の文字とカーソルを1文字分右へずらします。 |
autoscroll() | LCDの自動スクロールを開始。 |
noAutoscroll() | LCDの自動スクロールを停止。 |
leftToRight() | LCDの文字列の表示方向をデフォルトの「左から右」に設定。 |
rightToLeft() | LCDの文字列の表示方向を「右から左」に設定。 |
createChar(num, data) | ユーザ定義の文字を作成。 最大8文字まで登録可能。 |
サンプルコード1
まずは、EmonLib.hを利用したスケッチ。
先に述べましたが、仕様から校正用の定数は以下。
= 1800 ÷ 62
= 29 ←精度を求めるならキャリブレーションが必要な値
//Lesson 72 電流センサ(SCT013-030:電圧出力) //SCT013-030使用によるAC電流測定(0-30 A) //https://omoroya.com/ #include <EmonLib.h> #include <LiquidCrystal.h> // 変数の生成とPINの割り当て // rs:7 en:8 d4:9 d5:10 d6:11 d7:12 に対応 LiquidCrystal lcd(7, 8, 9, 10, 11, 12); EnergyMonitor emon1; int AC_Vol = 100.0; // AC電圧 int Pin_a = 1; // アナログピン設定 int CurrentConst = 29; // 校正用の定数 1800 / 62 = 29 精度を求めるなら29はキャリブレーションが必要 void setup() { emon1.current(Pin_a, CurrentConst); //校正用の定数設定 lcd.begin(16, 2); // LCDの行と列を設定 lcd.clear(); // LCDの表示を消し、カーソルを左上隅に配置 lcd.setCursor(0,0); // 1行目の表示 lcd.print("I.(A):"); lcd.setCursor(0,1); // 2行目表示 lcd.print("P.(W):"); } void loop() { double Irms = emon1.calcIrms(1480); // RMS電流計算 (1480:サンプル数) lcd.setCursor(10,0); // 1行目の表示 lcd.print(Irms); // Irms 電流表示 lcd.setCursor(10,1); // 2行目表示 lcd.print(" "); lcd.setCursor(10,1); // 2行目表示 lcd.print(Irms*AC_Vol,1); // 電流×電圧 delay(1000); }
サンプルコード2
内容理解のため、EmonLib.hを使用しないスケッチも予定しています。
こちらは、お待ちください。
動作確認
では、さっそく動作を確認していきます。
動作はTwitterに先に掲載しましたこちら。
ドライヤー(1200W)の電流測定。
ドライヤーon/offで確認。
12A程度の電流が取得できており精度もそれなり。
解説は執筆中!#arduino pic.twitter.com/L9Of6MbmqI— おもろや (@omoroya777) October 16, 2022
本Lessonで使用した「AC電流センサ」は安価ですが学習、遊びには十分。
しかも、非侵襲性のため測定対象を壊すこともありません。
家庭の日々の電力測定するデータロガー用のセンサとして利用するのもありです。
まとめ
本Lessonは、以下を目標としました。
2.AC電流センサを動かすスケッチを描く
3.ACセンサからデータを取得する
「非侵襲性AC電流センサ」は手軽に広い範囲の電流を測定することができます。
電力監視にはもってこいの電子部品です。
家庭の電力を測定して遊びましょう。
Lesson 72 【非侵襲性AC電流センサ】 はここまで。
疑問点、質問などありましたら気軽にコメントください。
次回、Lesson 73は思案中です。
最後に
疑問点、質問などありましたら気軽にコメントください。
この電子部品の解説をしてほしい!などなどなんでもOKです。
リンク切れ、間違いなどあればコメントいただけると助かります。
Arduino入門編、番外編、お役立ち情報などなどサイトマップで記事一覧をぜひご確認ください。
Arduino入門編、Arduino入門編2で使用しているUNOはAmazonにて購入可能です。
Arduino入門編では互換品を使用。
Arduinoはオープンソース。
複製して販売するのもライセンス的に問題なし。
そのため互換品の品質も悪くなく、それでいて値段は安いです。
正規品本体の値段程度で豊富な部品が多数ついています。
学習用、遊び用、お試し用には安価な互換品がおすすめです。
ELEGOO UNO キット レベルアップ チュートリアル付 uno mega2560 r3 nanoと互換 Arduino用
上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。
Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)
Amazonでお得に買う方法
Amazonでお得に購入するならAmazon Mastercard、Amazonギフト券がおすすめです。
時期により異なりますが、様々なキャンペーンを実施しています。
\Amazonギフト券/
Amazonギフトカード キャンペーン
\Amazon Mastercard お申込み/
Amazon Mastercard 申し込み
いずれの場合もプライム会員である方がお得!!
\Amazon Prime 30日間の無料会員を試す/
無料会員登録
コメント
横から失礼します。
ライブラリのソースファイル「EmonLib.cpp」。
この中の関数
double EnergyMonitor::calcIrms(unsigned int Number_of_Samples)
を追いかけてみてください。
関数の最後で、
double I_RATIO = ICAL *((SupplyVoltage/1000.0) / (ADC_COUNTS));
Irms = I_RATIO * sqrt(sumI / Number_of_Samples);
return Irms;
と値を返しているのをみれば、およその動きが想像できるかと。
フルスピードでA/D変換して、指定個数、A/D値を二乗して加算。
最後にその平均値の平方根を算出。
これで検出電流の実効値(RMS値)が得られます。
サンプリング間隔が不規則ですが、そこは数を頼りに。
こんな原理かと。
ハード的な整流回路は不要です。
Arduino 入門 Lesson 72 【非侵襲性AC電流センサ】
の記事について質問させていただきます。
電流センサーの出力をACのままAD変換に入力している理由は何ですか。
普通ならダイオードで整流してDCにしてからAD変換するのがシンプルだと思うのですが。