Arduinoエネルギーモニターとデータロガーを構築する方法
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
このプロジェクトについて
(この投稿は、2017年9月19日にMediumで最初に公開された投稿に基づいており、GitHubでのライブラリの公開の詳細や例など、ここで更新され、最新のものになっています)。
この投稿では、さまざまな負荷の電流データとエネルギーデータを簡単に収集し、Excelなどのプログラムを使用してその情報をプロットするのに役立つArduinoエネルギーモニターとデータロガーをどのように構築したかを紹介します。
<図>ワトソン博士(電力監視ICである#Microchip#MCP39F521に基づく)と呼ばれる新しいエネルギー監視ブレークアウトボードを、#Arduinoライブラリと#Pythonライブラリ( #RaspberryPiや#BeagleBoneBlackなどのボードの場合)高品質のエネルギーデータを次のプロジェクトに簡単に統合できます!聞いたことがなく、詳細が必要な場合は、https://upbeatlabs-wattson.launchrock.com/で詳細を確認してください。 Tindieでも利用できます。
さまざまな負荷のエネルギー特性を研究するために、この投稿の主題であるArduinoエネルギーモニターとデータロガーを作成しました!
これは、Arduino(もちろん!)がDr. Wattsonボードと通信してエネルギーデータを取得し、SDカードにデータを書き込むことで構成されています。また、データログを切り替えるボタンと、データがログに記録されていることを示すLEDインジケーターを追加しました。ボタンとLEDを組み合わせることで、適切な負荷を接続したときにデータロギングを簡単に開始できました。
ログ記録とその後の分析を容易にするために、ログローテーションスキームも実装しました。これにより、実行ごとに異なるファイルにログが記録されます。出力はCSV形式であるため、Excel(またはMacの場合はNumbersなど)に簡単にインポートして、データをプロットできます。
<図>
セットアップ
ワトソン博士のボードをアクリルの筐体に入れて、ACワイヤーを密閉し、安全に使用できるようにしました。そのように:
<図>後でエンクロージャーを少し更新しましたが、Tindieで利用できるようになりました。これが今の様子です。簡単に接続できるように、追加のIECソケットとスペードコネクタを使用して、もう少しクリーンアップしました。
<図> <図>配線方法を示すユーザーマニュアルを用意しました。これはGitHubで入手できます。
エネルギー測定は電流および電圧変圧器を使用して分離された方法で行われるため、ワトソン博士からのデジタル出力は主電源から完全に分離されているため、デジタル出力は完全に安全に処理できます。
エンクロージャーに入ったら、ケーブルを既存のコンセントに接続し、デバイスをエンクロージャーのコンセントに接続するだけです。PCBは最大12Aの電流に対応するように設計されているため、非常によく構築されています。最大4Aの電流を測定するように校正されています(待機電力を測定するために非常に小さな電流を測定できるようになりました—ベースとなるMCP39F521チップの動的比は4000:1で、4Aから1mAまで測定できます)
<図>
回路
これが私が使った回路です:
私はAdafruitのものと同様のSDカードブレイクアウトを使用しました(それが最も近い部分だったので、Fritzingでそれを使用しました)。接続はかなり標準的です— CLK(Arduino Unoピン13)、MISO(Arduino Unoピン12)、MOSI(Arduino Unoピン11)、CS(チップセレクト)。 CSは構成可能ですが、ハードウェアCSのデフォルトはピン10です—私はそれを使用します。
ボタンには、Jack ChristensenによるButtonライブラリを使用します。このライブラリは、使いやすいパッケージでデバウンスやさまざまな便利な機能を提供します。 (https://github.com/JChristensen/Button)。ボタンはArduinoの内部プルアップを使用しているため、外部プルアップはなく、反転ロジック(高はオフ、低はオン)を使用します—これらはすべて、ボタンコンストラクターのパラメーターとして構成可能です。ボタンをピン4に接続しましたが、使用可能な任意のピンを使用できます。
ワトソン博士をフリッツの新しい部分としてモデル化する時間と忍耐力が本当になかったので、私はだまして、 Z-HUT のアドバイスを使用しました。 手間をかけずにカスタムパーツを簡単に作成できます。ぜひご覧ください! https://www.youtube.com/watch?v=dfxx8wF3Uhs —ありがとうございます Z-HUT ! :-)
唯一の欠点は、ワトソン博士を表すために変更した「汎用IC」パーツのブレッドボードイメージを使用することに満足しなければならないことです。 C’est la vie!
ワトソン博士のピンを(左から右に)見てみましょう:
- SCL — I2C通信の場合、Arduino UnoA5に移動します
- SDA — I2C通信の場合、Arduino UnoA4に移動します
- ZCD —ゼロクロス検出—この例ではこの機能を使用していません
- イベント—イベントインジケーター—この例ではこの機能を使用していません
- GND — ArduinoGNDに接続します
- VIN — Arduino5Vに接続
- 3.3v — Arduino3.3vに接続します
- GND — Arduino GNDに接続します(GNDピンの1つを接続するだけで済みます)
スケッチ
では、実際のプログラミングに移りましょう!
まず、スケッチについて説明します。 setup()では、最初にSDカード通信を設定し、Dr.Wattson通信をそれぞれのbegin()メソッドを呼び出して設定しました。
//カードが存在し、初期化できるかどうかを確認します。if(!SD.begin(CHIP_SELECT)){Serial.println(F( "Card failed、or not present")); //これ以上何もしません:} wattson.begin(); //適切なアドレスを渡します。デフォルトは0x74
また、LEDピンをOUTPUTとして初期化します。
//デジタルピンを出力として初期化します。 pinMode(LED、OUTPUT);
ボタンはグローバルに宣言されているので、ボタンの設定で何もする必要はありません。
#define BUTTON_PIN 4 //触覚ボタンスイッチ(または同様のもの)を// Arduinoピン4からアースに接続します。 #define PULLUP true //物事を簡単にするために、Arduinoの内部プルアップ抵抗を使用します。 state //ボタンが押されていないことを意味します。 (通常開いているスイッチを想定しています。)#defineDEBOUNCE_MS 20 // 20ミリ秒のデバウンス時間は、通常、触覚ボタンスイッチに適しています。ButtonmyBtn(BUTTON_PIN、PULLUP、INVERT、DEBOUNCE_MS); //ボタンを宣言します
私のデータロギングは、DATAXX.CSVのような名前のファイルで行われます。ここで、XXは数値です(00から99まで、つまり100ファイル)。 SDカードで既存のファイル名を確認し、最新の未使用のファイル名を選択します—たとえばDATA15.CSV
char filename [] ="DATA00.CSV"; setup(){... //(uint8_t i =0; i <100; i ++){filename [4] =iの新しいファイルを作成します/ 10 + '0'; filename [5] =i%10 + '0'; if(!SD.exists(filename)){Serial.print(F( "データファイルは")); Serial.println(ファイル名); //新しいファイルが存在しない場合にのみ開くbreak; //ループを離れます!これで、ファイル名は希望するものになります}} ...}
loop()関数では、ボタンを押すと、エネルギーデータを読み取るかどうかを制御するreadData変数が切り替わります。
void loop(){... myBtn.read(); //ボタンを読み取りますif(myBtn.wasReleased()){//ボタンが離された場合は、LEDの状態を変更しますreadData =!readData; digitalWrite(LED、readData); } if(readData){... //データを読み取ってSDカードに保存するなど.......}
readDataが切り替えられたら、Wattson博士からエネルギーデータを読み取り、時間を記録します。
UpbeatLabs_MCP39F521_FormattedData fData; int readMCPretval =wattson.readMCP39F521(&data、NULL); unsigned long currentMillis =millis();
SDカードに書き出す:
//ファイルが使用可能な場合は、次のように書き込みます。FiledataFile =SD.open(filename、FILE_WRITE); if(dataFile){dataFile.print(currentMillis); dataFile.print( "、"); dataFile.print(fData.currentRMS); dataFile.print( "、"); dataFile.print(fData.activePower); dataFile.print( "、"); dataFile.print(fData.reactivePower); dataFile.print( "、"); dataFile.println(fData.apparentPower); //シリアルポートにも出力します:dataFile.close(); } //ファイルが開いていない場合は、エラーをポップアップします。else{Serial.print(F( "erroropening")); Serial.println(ファイル名); }
ボタンをもう一度切り替えると、データの読み取り/記録を停止します。
アクション!
スケッチをコンパイルしてArduinoにアップロードすると、エネルギーデータの取得は非常に簡単でした。
選択した負荷を接続しました—CFLランプ。コールドスタートとウォームスタートの観点から、電流とエネルギーの消費量を確認したかったのです。ランプを接続しましたが、点灯しませんでした。
回路のボタンを押してエネルギー測定を開始しました—ログが記録されているときに、赤いLEDがそのように指示しました。次に、CFLランプをオンにして、十分なデータが得られたと思うまで待ちました—ご覧のとおり、CFLは、開始時に、宣伝されているよりも多くのエネルギーを消費し(私の場合は、14W CFL電球)、その後落ち着きます。最終的には約14Wになります。読みが落ち着くまで待ちました。次に、ボタンを押して読み取りをオフにしました。
これで、SDカードを取り出して、データの確認を開始できました。
PS —追加のデバイスからデータをログに記録するには、Arduinoをリセットするだけです—データをログインするために次に利用可能なDATAXX.CSVを選択するため、データを簡単に分離しておくことができます。
注: Arduinoシリアルモニターを使用する代わりに、Mac端末に組み込まれている「screen」コマンドをシリアル端末として使用します。スケッチでは、エネルギーデータをシリアルに印刷し、「クリアスクリーン」コマンドを発行して、出力が移動しないようにします。
Serial.write( "\ x1B" "c"); //通常の端末で画面をクリアしますwattson.printMCP39F521Data(&data);
これは、上記のような端末コマンドを受け入れることができる通常の端末でのみ機能し、残念ながらArduinoシリアルモニターでは機能しません。ただし、一度試してみると 画面 、Arduinoシリアルモニターに戻ることはできません!
コマンドは次のようになります:
$ screen /dev/tty.usbmodem1411 9600
最初のパラメータは「シリアルポート」で、2番目のパラメータはArduinoスケッチでシリアル接続用に設定した速度です。
Excelでデータをプロットする
ファイルはCSV形式であるため、ファイルの読み込みとExcelでのプロットは非常に簡単でした。 Excelでグラフを作成するためのチュートリアルはたくさんあるので、ここでは詳しく説明しません。列ヘッダーを含む行を挿入しました
タイムスタンプ、currentRMS、activePower、reactivePower、appearancePower
(自己に注意してください—これは私のSketchの将来の拡張機能になります— CSVに列ヘッダーを直接追加します!)
ログに記録してプロットするために、上記のデータポイントを選択しました。時間の経過に伴う消費電流は明らかに興味深いものです。なぜactivePower、reactivePower、appearancePowerなのか?デバイスの電気的特性に基づいて、抵抗性負荷、無効性負荷、またはその間のどこかになります。したがって、3つの電力パラメータは、その全体的な特性と、時間の経過とともに変化するかどうかを示します。またはそう思う…
コールドスタートからのCFLランプの結果を見てみましょう:
<図>電流は約0.21アンペアでピークに達し、最終的には約0.18アンペアに落ち着きます。
有効電力は約17ワットでピークに達し、最終的には約14.2ワットに落ち着きます。
それが落ち着いた後、私はCFLのスイッチを切り、しばらく待ってから再びオンにしました(したがって、上のチャートの電流が低下しました)。 CFLが「ウォームアップ」すると、定常状態の消費にすぐに落ち着くことがわかります。
結論
アプライアンスやデバイスからのエネルギーデータを使用して実行できる興味深いデータや実験はたくさんあります。いくつかのデータを手に入れてあなたと共有し始めることに興奮しました!
ワトソン博士との私の目標は、Makerの高品質のエネルギーデータを有効にし、よりアクセスしやすくすることです。これにより、ワイルドでクレイジーなアイデアの構成要素として使用できるようになります。
ワトソン博士は、安全に使用できるように設計されており(特にエンクロージャーで)、キャリブレーションされています(高品質のエネルギーデータをすぐに取得できるように)が、真面目なユーザー向けにさらに複雑な機能を公開しています
- キャリブレーションルーチン
- ZCD(ゼロクロッシング検出器)
- イベント通知(過電流、過電力、電圧低下/サージイベント)
- 読み取り値の範囲をカスタマイズする機能(負担抵抗器やCTを変更し、上記のキャリブレーションルーチンを使用して再キャリブレーションすることにより)
- 複数のDr.Wattsonsを単一のMCUと一緒に使用する(構成可能なI2Cアドレス指定を変更することにより)。
エネルギー監視に興味があり、ワトソン博士のように、ニュースや最新情報を入手するには、(https://upbeatlabs-wattson.launchrock.com/)にサインアップしてください。
乾杯、
スリダール
参考までに、これがスケッチ全体です。 Upbeat LabsのdrwattsonGitHubリポジトリには、他の多くの例とともに、それとDr.Wattsonライブラリもあります。
/ ******************************************* ************************************これは、UpbeatLabsのDr.Wattson Energy MonitoringBreakoutのスケッチ例です。 -> https://www.tindie.com/products/UpbeatLabs/dr-wattson-energy-monitoring-board-2/この例は、ワトソン博士からエネルギーデータを取得し、コンマで区切ってSDカードに書き込む方法を示しています。 (CSV)形式。ボタンはデータ収集を切り替えるために使用されるため、準備ができたらデータをログに記録できます。ボタンが測定を切り替えると、スケッチはエネルギーデータのモジュールのポーリングを開始し、それを印刷します。値を見やすくするために、画面のようなプログラムを使用してシリアル出力を表示します。シリアルは、通常の端末で画面をクリアするために必要な文字を書き込みます。これは、シリアル出力が所定の位置に留まり、時間の経過とともに更新されることを意味します。入力電源をオンにして、電圧RMSを確認します。ライン周波数値が適切な値に変化します。出力に接続されている負荷をオンにして、現在のRMS、力率、有効電力、無効電力、および見かけの電力値が変化することを確認します。これらの値はすべてCSV形式でSDカードに書き込まれ、Excelなどのプログラムで使用してデータを表示/プロットできます。ファイル名はDATAnn.CSVの形式です。セットアップ時に、まだ存在していない新しいファイル名が選択されるため、ファイルはDATA00.CSV、DATA01.CSV、DATA02.CSVなどになります。ロギングは、DATA99.CSVまで新しいファイルにローテーションします。通信はI2Cを介して行われます。インターフェースには2本のピンが必要です。ボードごとに4つの選択可能なI2Cアドレスの可能性があります(2つのはんだジャンパー(各ピンをハイまたはローに選択)を介して選択可能)これに基づいて、4つの可能なアドレスがあります:I2CアドレスSJ1 SJ2 0x74 LOW LOW 0x75 LOW HIGH 0x76 HIGH LOW 0x77 HIGH HIGH Dr. Wattsonには、通知に使用されるZCDまたはEventの2つの出力があるため、通常は外部で割り込み可能なピン(Arduino Unoのpin2またはpin3など)に接続されます。この例では、ZCDとEventは接続されていません。ボタンはピン4に接続されています。* SDカードは次のようにSPIバスに接続されています。** MOSI-ピン11 ** MISO-ピン12 ** CLK-ピン13 ** CS-ピン10LEDはピン9に接続されています。 Upbeat LabsLLCのSridharRajagopalによるBSDライセンス。上記のすべてのテキストは、再配布に含める必要があります* /#include #include "UpbeatLabs_MCP39F521.h" #include #include //https://github.com/JChristensen/Button#define BUTTON_PIN 4 //触覚のお尻を接続しますスイッチ上(または同様のもの)// Arduinoピン4からグランドへ。#definePULLUP true //簡単にするために、Arduinoの内部プルアップ抵抗を使用します。#defineINVERT true //プルアップ抵抗がピンをハイに保つため//スイッチが閉じていない限り、これは負の論理です。つまり、ハイ状態は//ボタンが押されていないことを意味します。 (通常開いているスイッチを想定しています。)#defineDEBOUNCE_MS 20 // 20ミリ秒のデバウンス時間は、通常、触覚ボタンスイッチに適しています。ButtonmyBtn(BUTTON_PIN、PULLUP、INVERT、DEBOUNCE_MS); // button#define LED 9を宣言します// LEDを(220オームの抵抗を介して)ピン9(アノード)からGND(カソード)に接続します。 #define CHIP_SELECT 10UpbeatLabs_MCP39F521 wattson =UpbeatLabs_MCP39F521(); bool readData =false; char filename [] ="DATA00.CSV"; void setup(){Serial.begin(9600); //シリアル通信をオンにしますSerial.println(F( "** Upbeat Labs Dr. Wattson Example Sketch **")); Serial.println(F( "Upbeat Labs Dr. Wattson Energy Data SDカードロギングの例のスケッチ")); Serial.println(F( "******************************************* *********************** ")); //デジタルピンを出力として初期化します。 pinMode(LED、OUTPUT); pinMode(CHIP_SELECT、OUTPUT); //カードが存在し、初期化できるかどうかを確認します:if(!SD.begin(CHIP_SELECT)){Serial.println(F( "*** SDカードが失敗したか、存在しません***")); //これ以上何もしません:} wattson.begin(); //適切なアドレスを渡します。デフォルトは0x74 //(uint8_t i =0; i <100; i ++){filename [4] =i / 10 + '0';の新しいファイルを作成しますfilename [5] =i%10 + '0'; if(!SD.exists(filename)){Serial.print(F( "データファイルは")); Serial.println(ファイル名); //新しいファイルが存在しない場合にのみ開くbreak; //ループを離れます!これで、ファイル名は希望するファイル名になります}} Serial.println(F( "** initialization complete。**"));} void loop(){myBtn.read(); //ボタンを読み取りますif(myBtn.wasReleased()){//ボタンが離された場合は、LEDの状態を変更しますreadData =!readData; digitalWrite(LED、readData); } if(readData){UpbeatLabs_MCP39F521_Data data; UpbeatLabs_MCP39F521_FormattedData fData; int readMCPretval =wattson.read(&data、NULL); unsigned long currentMillis =millis(); if(readMCPretval ==UpbeatLabs_MCP39F521 ::SUCCESS){//出力を出力Serial.write( "\ x1B" "c"); //通常の端末で画面をクリアしますwattson.convertRawData(&data、&fData); printMCP39F521Data(&fData); //ファイルが利用可能な場合は、次のように書き込みます。FiledataFile =SD.open(filename、FILE_WRITE); if(dataFile){dataFile.print(currentMillis); dataFile.print( "、"); dataFile.print(fData.currentRMS); dataFile.print( "、"); dataFile.print(fData.activePower); dataFile.print( "、"); dataFile.print(fData.reactivePower); dataFile.print( "、"); dataFile.println(fData.apparentPower); //シリアルポートにも出力します:dataFile.close(); } //ファイルが開いていない場合は、エラーをポップアップします。else{Serial.print(F( "erroropening")); Serial.println(ファイル名); }} else {Serial.print(F( "Error!")); Serial.println(readMCPretval); }}} void printMCP39F521Data(UpbeatLabs_MCP39F521_FormattedData * data){Serial.print(F( "Voltage =")); Serial.println(データ->電圧RMS、4); Serial.print(F( "Current =")); Serial.println(data-> currentRMS、4); Serial.print(F( "Line Frequency =")); Serial.println(data-> lineFrequency、4); Serial.print( "アナログ入力電圧="); Serial.println(data-> analogInputVoltage、4); Serial.print(F( "力率=")); Serial.println(data-> powerFactor、4); Serial.print(F( "Active Power =")); Serial.println(data-> activePower、4); Serial.print(F( "無効電力=")); Serial.println(data-> reactPower、4); Serial.print(F( "Apparent Power =")); Serial.println(data-> apparentPower、4);}
コード
- コードスニペット#1
- コードスニペット#3
- コードスニペット#4
- コードスニペット#5
- コードスニペット#7
- コードスニペット#11
コードスニペット#1 プレーンテキスト
//カードが存在し、初期化できるかどうかを確認します。if(!SD.begin(CHIP_SELECT)){Serial.println(F( "カードが失敗したか、存在しません")); //これ以上何もしません:} wattson.begin(); //適切なアドレスを渡します。デフォルトは0x74
コードスニペット#3 プレーンテキスト
#define BUTTON_PIN 4 //触覚ボタンスイッチ(または同様のもの)を// Arduinoピン4からアースに接続します。 #define PULLUP true //簡単にするために、Arduinoの内部プルアップ抵抗を使用します。#defineINVERT true //スイッチが閉じていない限り、プルアップ抵抗はピンをハイに保つため、//これは負のロジックです。 state //ボタンが押されていないことを意味します。 (通常開いているスイッチを想定しています。)#defineDEBOUNCE_MS 20 // 20ミリ秒のデバウンス時間は、通常、触覚ボタンスイッチに適しています。ButtonmyBtn(BUTTON_PIN、PULLUP、INVERT、DEBOUNCE_MS); //ボタンを宣言します
コードスニペット#4 プレーンテキスト
char filename [] ="DATA00.CSV"; setup(){... //(uint8_t i =0; i <100; i ++){filename [4] =i / 10+の新しいファイルを作成します'0'; filename [5] =i%10 + '0'; if(!SD.exists(filename)){Serial.print(F( "データファイルは")); Serial.println(ファイル名); //新しいファイルが存在しない場合にのみ開くbreak; //ループを離れます!ファイル名は私たちが望むものになります}} ...}
コードスニペット#5 プレーンテキスト
myBtn.read(); //ボタンを読み取りますif(myBtn.wasReleased()){//ボタンが離された場合は、LEDの状態を変更しますreadData =!readData; digitalWrite(LED、readData); } if(readData){... //データを読み取ってSDカードに保存するなど...
コードスニペット#7 プレーンテキスト
//ファイルが使用可能な場合は、次のように書き込みます。FiledataFile =SD.open(filename、FILE_WRITE); if(dataFile){dataFile.print(currentMillis); dataFile.print( "、"); dataFile.print(data.currentRMS); dataFile.print( "、"); dataFile.print(data.activePower); dataFile.print( "、"); dataFile.print(data.reactivePower); dataFile.print( "、"); dataFile.println(data.apparentPower); //シリアルポートにも出力します:dataFile.close(); } //ファイルが開いていない場合は、エラーをポップアップします。else{Serial.print(F( "erroropening")); Serial.println(ファイル名); }
コードスニペット#11 プレーンテキスト
/ ********************************************** *****これは、UpbeatLabsのDr.Wattson Energy MonitoringBreakoutのスケッチ例です。通信はI2Cを介して行われます。インターフェースには2本のピンが必要です。ボードごとに4つの選択可能なI2Cアドレスの可能性があります(2つのはんだジャンパー(各ピンをハイまたはローに選択)を介して選択可能)これに基づいて、4つの可能なアドレスがあります:I2CアドレスSJ1 SJ2 0x74 LOW LOW 0x75 LOW HIGH 0x76 HIGH LOW 0x77 HIGH HIGHDr。Wattsonには、通知に使用されるZCDまたはEventの2つの出力があるため、通常は外部で割り込み可能なピン(Arduino Unoのpin2またはpin3など)に接続されます。この例では、ZCDとEventは使用されません。 。ボタンはピン4に接続されています。* SDカードは次のようにSPIバスに接続されています。** MOSI-ピン11 ** MISO-ピン12 ** CLK-ピン13 ** CS-ピン10LEDはピン9に接続されています。 Sridhar Rajagopal for Upbeat LabsLLC。BSDライセンス。上記のすべてのテキストは、再配布に含める必要があります* / #include#include "MCP39F521.h" #include #include / /https://github.com/JChristensen/Button#define BUTTON_PIN 4 //接続します触覚ボタンスイッチ(または同様のもの)// Arduinoピン4からアースへ。 #define PULLUP true //簡単にするために、Arduinoの内部プルアップ抵抗を使用します。#defineINVERT true //スイッチが閉じていない限り、プルアップ抵抗はピンをハイに保つため、//これは負のロジックです。 state //ボタンが押されていないことを意味します。 (通常開いているスイッチを想定しています。)#defineDEBOUNCE_MS 20 // 20ミリ秒のデバウンス時間は、通常、触覚ボタンスイッチに適しています。ButtonmyBtn(BUTTON_PIN、PULLUP、INVERT、DEBOUNCE_MS); //ボタンを宣言します#defineLED9 // LEDを(220オームの抵抗を介して)ピン9(アノード)からGND(カソード)に接続します。#defineCHIP_SELECT 10MCP39F521 wattson =MCP39F521(); bool readData =false; char filename [ ] ="DATA00.CSV"; void setup(){Serial.begin(9600); //シリアル通信をオンにしますSerial.println(F( "** Upbeat Labs Dr. Wattson Example Sketch **")); //デジタルピンを出力として初期化します。 pinMode(LED、OUTPUT); pinMode(10、OUTPUT); //カードが存在し、初期化できるかどうかを確認します:if(!SD.begin(CHIP_SELECT)){Serial.println(F( "Card failed、or not present")); //これ以上何もしません:} wattson.begin(); //適切なアドレスを渡します。デフォルトは0x74 //(uint8_t i =0; i <100; i ++){filename [4] =i / 10 + '0';の新しいファイルを作成しますfilename [5] =i%10 + '0'; if(!SD.exists(filename)){Serial.print(F( "データファイルは")); Serial.println(ファイル名); //新しいファイルが存在しない場合にのみ開くbreak; //ループを離れます!これで、ファイル名は希望するものになります}} Serial.println(F( "** initialization complete。**")); } //これは、参考のためにMCP39F521Dataがどのように見えるかです!// typedef struct MCP39F521Data {// uint16_t systemStatus; // uint16_t systemVersion; // uint16_t VoltageRMS; // uint16_t lineFrequency; // uint16_t analogInputVoltage; // int16_t powerF / uint32_t currentRMS; // uint32_t activePower; // uint32_treactivePower; // uint32_tappearancePower; //} MCP39F521Data; void loop(){myBtn.read(); //ボタンを読み取りますif(myBtn.wasReleased()){//ボタンが離された場合は、LEDの状態を変更しますreadData =!readData; digitalWrite(LED、readData); } if(readData){MCP39F521Dataデータ; int readMCPretval =wattson.readMCP39F521(&data、NULL); unsigned long currentMillis =millis(); if(readMCPretval){//出力するSerial.write( "\ x1B" "c"); //通常の端末で画面をクリアしますwattson.printMCP39F521Data(&data); //ファイルが使用可能な場合は、次のように書き込みます。FiledataFile =SD.open(filename、FILE_WRITE); if(dataFile){dataFile.print(currentMillis); dataFile.print( "、"); dataFile.print(data.currentRMS); dataFile.print( "、"); dataFile.print(data.activePower); dataFile.print( "、"); dataFile.print(data.reactivePower); dataFile.print( "、"); dataFile.println(data.apparentPower); //シリアルポートにも出力します:dataFile.close(); } //ファイルが開いていない場合は、エラーをポップアップします。else{Serial.print(F( "erroropening")); Serial.println(ファイル名); }} else {Serial.println(F( "Error!")); }}}
Github
https://github.com/JChristensen/Buttonhttps://github.com/JChristensen/ButtonUpbeat Labs Dr. Wattson Energy Monitoring Board Library
Dr. Wattson Energy MonitoringBoardDrで使用するライブラリ。 Wattsonは、Arduino、Raspberry Pi、およびその他のメーカーフレンドリーなマイクロコントローラー用のエネルギー監視ブレイクアウトボードです。高品質のACエネルギー測定を次のプロジェクトに簡単に統合できます!Microchip社の単相電力監視チップであるMCP39F521に基づいて、ボードは広範囲の電圧に耐えるように設計されているため、 RaspberryPiまたはその他の3.3vMCUも同様に簡単です。ユニットは事前に校正されており(1mAから4Aまでの測定が可能)、2、3の簡単なコマンドで最初から高品質の測定を開始できます。追加のCTやその他のコンポーネントは必要ありません。より高度なユーザーの場合は、豊富なライブラリから利用できる幅広い機能に加えて、ニーズに合わせてハードウェアを微調整し、 library.https://github.com/upbeatlabs/drwattson 回路図
製造プロセス