エネルギーモニターは、アパート全体をカバーする場合でも、1つのアプライアンスのみを監視するために展開する場合でも、消費量を追跡し、必要な調整を行う方法を提供します。それらがますます市場で利用可能になりつつある一方で、私のメーカーは、特定の個人的な要件を満たすように調整できるDIYバージョンを構築することは素晴らしいアイデアだと感じています。そのため、今日のチュートリアルでは、エネルギー消費量を取得してAdafruit.ioにアップロードできるRaspberryPi電力消費量モニターを作成します。
また、以前に構築したArduinoベースのIoTエネルギーメーターとプリペイドGSMエネルギーメーターを確認することもできます。
RaspberryPiスマートエネルギーメーターのブロック図
システムがどのように機能するかを示すブロック図を以下に示します。
ユニットを次々に選ぶには;
電流検出ユニット:電流検出ユニットは、購入したバージョンに応じて、最大100Aを測定できるSCT-013電流センサーで構成されています。センサーは、クランプされたワイヤーを通過する電流を小さな電流に変換し、分圧器のネットワークを介してADCに供給します。
電圧検出ユニット: 電圧センサーモジュールに手を置くことができませんでしたが、分圧器の原理を使用して電圧を測定するトランスレス電圧センサーをDIYで構築します。DIY電圧センサーには、高電圧がADCへの入力に適した値に変換される分圧器ステージが含まれます。
処理ユニット:処理ユニットは、ADCとRaspberrypiで構成されます。ADCはアナログ信号を受け取り、それをラズベリーパイに送信します。ラズベリーパイは、消費されている正確な電力量を計算し、指定されたデバイスクラウドに送信します。このチュートリアルでは、Adafruit.ioをデバイスクラウドとして使用します。他にも作りました
免責事項: 始める前に、このプロジェクトには危険なAC電源への接続が含まれ、安全に取り扱わないと致命的となる可能性があることに注意してください。これを試す前に、ACを回避した経験があることを確認してください。
準備はいいですか?に飛び込みましょう。
必要なコンポーネント
このプロジェクトをビルドするには、次のコンポーネントが必要です。
- Raspberry Pi 3または4(プロセスはWiFiドングルを備えたRPI2でも同じである必要があります)
- ADS111516ビットI2CADC
- YHDC SCT-013-000
- 2.5A 5VMicroUSB電源アダプター
- 2W 10K抵抗器(1)
- 1 / 2W 10K抵抗器(2)
- 33オームの抵抗器(1)
- 2W 3.3k抵抗(1)
- IN4007ダイオード(4)
- 3.6vツェナーダイオード(1)
- 10kポテンショメータ(またはプリセット)(1)
- 50v1ufコンデンサ
- 50v 10ufコンデンサ(2)
- ブレッドボード
- ジャンパーワイヤー
- RaspberryPiが使用するその他のアクセサリ。
上記のハードウェアコンポーネントに加えて、プロジェクトには、進行中にインストールするいくつかのソフトウェア依存関係とライブラリも必要です。
このチュートリアルは、使用するRaspberry pi OSに関係なく機能しますが、Pi3で実行されているRaspberryPiバスターOSを使用します(Pi 4でも機能するはずです)。RaspberryPiのセットアップに精通していることを前提としています。 Raspbian Buster OS(以前のバージョンとほぼ同じプロセス)であり、hyperなどのターミナルソフトウェアを使用してSSHで接続する方法を知っています。これに問題がある場合は、このWebサイトに役立つRaspberryPiチュートリアルがたくさんあります。
円周率の準備
コンポーネントの配線とコーディングを開始する前に、準備ができていることを確認するために、ラズベリーパイで実行する必要のあるいくつかの簡単なタスクがあります。
ステップ1:PiI2Cを有効にする
今日のプロジェクトの中核は、ラズベリーパイだけでなく、ADS111516ビットI2CベースのADCです。Pi自体にはADCが組み込まれていないため、ADCを使用するとアナログセンサーをRaspberryPiに接続できます。独自のADCを介してデータを取り込み、I2Cを介してラズベリーパイに転送します。そのため、Piと通信できるようにPiでI2C通信を有効にする必要があります。
PiのI2Cバスは、ラズベリーpiの設定ページで有効または無効にできます。起動するには、デスクトップのPiアイコンをクリックし、設定を選択してからRaspberrypi構成を選択します。
これにより、構成ページが開きます。I2Cの有効なラジオボタンを確認し、[OK]をクリックして保存し、Piを再起動して変更を有効にします。
Piをヘッドレスモードで実行している場合は、 sudoraspi-configを 実行してRaspbian構成ページにアクセスできます 。
ステップ2:AdafruitからADS11xxライブラリをインストールする
次に行う必要があるのは、ADCから値をフェッチするPythonスクリプトを簡単に作成できる関数とルーチンを含むADS11xxpythonライブラリをインストールすることです。
これを行うには、以下の手順に従ってください。
- 実行してpiを更新します。 sudo apt-getupdateの 後 に sudoapt-get upgrade を実行すると、piが更新され、インストールする新しいソフトウェアの互換性の問題が発生しなくなります。
- 次に、 cd〜 コマンドを実行して、ホームディレクトリにいることを確認します。
- 次に、実行してビルドエッセンシャルをインストールします。 sudo apt-get install build-essential python-dev python-smbus git
- 次に、実行して、ADSライブラリを含むAdafruitgitフォルダーのクローンを作成します。 git clone https://github.com/adafruit/Adafruit_Python_ADS1x15.git
- クローンファイルのディレクトリに移動し、;を使用してセットアップファイルを実行します。cd Adafruit_Python_ADS1x1z、 続いて sudo python setup.py install
これで、インストールが完了します。
以下の回路図セクションに示すようにADS1115を接続してライブラリのインストールをテストし、最初にライブラリに付属のサンプルコードを実行し、を使用してそのフォルダに変更します。 cdの例 と、;を使用して例を実行します。 python simpletest.py
ステップ3:Adafruit.IOPythonモジュールをインストールする
紹介で述べたように、電圧および電流センサーからの読み取り値をAdafruit IO Cloudに公開し、そこから世界中から表示したり、IFTTTに接続して必要なアクションを実行したりできます。
Adafruit.IO pythonモジュールには、データをクラウドに簡単にストリーミングするために利用するサブルーチンと関数が含まれています。以下の手順に従って、モジュールをインストールします。
- 実行 〜CDを ホームディレクトリに戻ります。
- 次に、コマンドを実行します。 sudo pip3 installadafruit-io 。Adafruit IOpythonモジュールをインストールする必要があります。
ステップ4:Adafruit.ioアカウントを設定する
Adafruit IOを使用するには、必ず最初にアカウントを作成し、AIOキーを取得する必要があります。このAIOキーとユーザー名は、PythonスクリプトがAdafruitIOクラウドサービスにアクセスするために使用します。アカウントを作成するには、にアクセスしてください。https://io.adafruit.com/で、[無料で開始]ボタンをクリックし、必要なすべてのパラメーターを入力します。サインアップが完了すると、ホームページの右側に[AIOキーの表示]ボタンが表示されます。
それをクリックしてAIOキーを取得します。
キーをコピーしたら、準備は完了です。ただし、クラウドサービスにデータを送信するプロセスを簡単にするために、データの送信先となるフィードを作成することもできます。(AIOフィードの詳細については、こちらをご覧ください)。基本的に消費電力を送るので、電力の供給を行います。フィードを作成するには、AIOページの上部にある[フィード]をクリックし、[新しいフィードを追加]をクリックします。
好きな名前を付けてください。ただし、わかりやすくするために、エネルギー消費と呼びます。また、電圧と電流のフィードを作成し、それらにデータを公開するようにコードを適合させることもできます。
これらすべてが整ったので、プロジェクトの構築を開始する準備が整いました。
パイエネルギーメーターの回路図
Raspberry Pi Energy Monitorプロジェクトの回路図は比較的複雑で、前述のようにAC電圧に接続する必要があります。感電を防ぐために、必要なすべての予防措置を講じてください。AC電圧の安全な取り扱いに慣れていない場合は、電源を入れずにブレッドボードにこれを実装する喜びを十分に味わってください。
回路図には、電圧および電流センサーユニットをADCに接続し、ADCがセンサーからRaspberryPiにデータを送信することが含まれます。接続を簡単にするために、各ユニットの回路図が独自に表示されます。
電流センサーの回路図
以下の回路図に示すように、電流センサーのコンポーネントを接続します。
このプロジェクトで使用されている変流器を以下に示します。これから、アース、Cout、3.3Vの3本のワイヤーがあります。
電圧センサーの回路図
以下の回路図に示すように、電圧センサーのコンポーネントを接続します。
処理装置の回路図
ラズベリーパイに接続されたADC(ADS1115)と、ADS1115のピンA0とA1にそれぞれ接続された電流センサーと電圧センサーの出力ですべてを接続します。
両方のセンシングユニットのGNDピンがADCまたはラズベリーパイのGNDに接続されていることを確認します。
少し揺れを少なくするために、Protoboardに電圧センサーと電流センサーを実装しました。また、ブレッドボードにAC主回路を構築することはお勧めしません。同じことを行うと、最終的なセットアップは次の画像のようになります。
接続が完了したら、プロジェクトのコードを作成する準備が整いました。
PiエネルギーメーターのPythonコード
ラズベリーパイプロジェクトではいつものように、Pythonを使用してプロジェクトのコードを開発します。デスクトップのラズベリーパイアイコンをクリックし、プログラミングを選択して、使用するPythonのバージョンを起動します。私はPython3を使用しますが、Python3の一部の関数はPython2.7では機能しない可能性があります。したがって、Python 2.7を使用する場合は、コードに大幅な変更を加える必要があるかもしれません。コードを小さなスニペットに分解し、最後に完全なコードを共有します。
準備はいいですか?涼しい。
コードの背後にあるアルゴリズムは単純です。私たちのPythonスクリプトは、ADS1115(I2C経由)に電圧と電流の読み取り値を照会します。受信したアナログ値を受信してサンプリングし、電圧と電流の二乗平均平方根値を取得します。キロワット単位の電力が計算され、特定の間隔の後にAdafruitIOフィードに送信されます。
使用するすべてのライブラリを含めることからスクリプトを開始します。これには、time andmathライブラリや以前にインストールした他のライブラリなどの組み込みライブラリが含まれます。
import time import Adafruit_ADS1x15 from Adafruit_IO import * import math
次に、今後物理ADCに対処するために使用されるADS1115ライブラリのインスタンスを作成します。
#ADS1115 ADC(16ビット)インスタンスを作成します 。adc1= Adafruit_ADS1x15.ADS1115()
次に、adafruitIOユーザー名と「AIO」キーを入力します。
username = 'この引用符の間にユーザー名を入力してください' AIO_KEY = 'aioキー' aio = Client(username、AIO_KEY)
キーは安全に保管してください。許可なくadafruitioアカウントにアクセスするために使用できます。
次に、ADCのゲイン、必要なサンプル数などの変数を作成し、丸めを設定しますが、これは絶対に重要ではありません。
GAIN = 1#潜在的な値については、ads1015 / 1115のドキュメントを参照してください。 samples = 200#ads1115の 場所から取得されたサンプルの数= int(2)#丸めを設定
次に、whileループを作成して、電流と電圧を監視し、データをAdafruitioに定期的に送信します。whileループは、すべての変数をゼロに設定することから始まります。
Trueの場合: #リセット変数 count = int(0) datai = datav = maxIValue = 0#サンプル内の最大電流値 maxVValue = 0#サンプル内の最大電圧値 IrmsA0 = 0#二乗平均平方根電流 VrmsA1 = 0#二乗平均平方根電圧 ampsA0 = 0#現在のピーク 電圧A1 = 0#電圧 キロワット= float(0)
AC回路を使用しているため、SCT-013の出力と電圧センサーは正弦波になります。したがって、正弦波から電流と電圧を計算するには、ピーク値を取得する必要があります。ピーク値を取得するために、電圧と電流の両方(200サンプル)をサンプリングし、最高値(ピーク値)を見つけます。
範囲内のカウント(サンプル)の場合: datai.insert(count、(abs(adc1.read_adc(0、gain = GAIN)))) datav.insert(count、(abs(adc1.read_adc(1、gain = GAIN)) )) あなたは新しいmaxValueのを持っている場合は#が見 印刷(ダタイを) :ダタイ> maxIValue場合 maxIValue =ダタイ 場合datav> maxVValue: maxVValue = datav
次に、ADC値から実際の値に変換して値を標準化し、その後、二乗平均平方根方程式を使用してRMS電圧と電流を求めます。
# サンプリングされたデータを使用して電流を計算します # 使用されて いるsct-013は、30Aで1000mVの出力用に校正されています。 IrmsA0 = float(maxIValue / float(2047)* 30) IrmsA0 = round(IrmsA0、places) ampsA0 = IrmsA0 / math.sqrt(2) ampsA0 = round(ampsA0、places) #電圧を計算 VrmsA1 = float(maxVValue * 1100 / float(2047)) VrmsA1 = round(VrmsA1、places) voltsA1 = VrmsA1 / math.sqrt(2) voltsA1 = round(voltsA1、places) print( 'Voltage:{0}'.format(voltsA1)) print( 'Current :{0} '。format(ampsA0))
これが完了すると、電力が計算され、データがadafruit.ioに公開されます。
#calculate power power = round(ampsA0 * voltsA1、places) print( 'Power:{0}' .format (power)) #データをadafruit.ioに 投稿EnergyUsage = aio.feeds( 'EnergyUsage') aio.send_data( ' EnergyUsage '、power)
無料アカウントの場合、adafruitは、リクエストまたはデータのアップロードの間にある程度の時間遅延があることを要求します。
#ループ 時間を繰り返す前に待機します。sleep(0)
プロジェクトの完全なコードは、このページの下部にあります。
デモ
コードが完成したら、それを保存して、PythonIDEの実行ボタンを押します。この前に、PiがWiFiまたはLAN経由でインターネットに接続されていること、およびaioキーとユーザー名が正しいことを確認してください。しばらくすると、Adafruit.ioのフィードに表示されるエネルギーデータ(電力)が表示されるようになります。デモ中の私のハードウェアセットアップはこのようなものでした
さらに詳しくは、adafruit.ioにダッシュボードを作成し、グラフコンポーネントを追加して、下の画像に示すようにデータのグラフィカルビューを取得できます。
これで、世界中のどこからでもエネルギー消費量を監視できるようになりました。本当に正確なソリューションに変換するには、さらに多くの微調整とキャリブレーションを行う必要があることに注意することが重要ですが、これにより、続行するために必要なほとんどすべてが得られると思います。
コメント欄からプロジェクトについての質問をお気軽にどうぞ。できるだけ多くお答えするように努めます。次回まで。