白旗製作所

Raspberry Pi + RaXino電力計の可視化画面

この記事の続きで、電力計を分電盤に取り付け、電力可視化部分を作りました。

分電盤を開けて,計測したい箇所の電線にCTを取り付けます.
(今回はCTを取り付けたりテスターで測るだけで盤改造するわけではないため,
 電気工事士の資格は必要無いと思いますが,
 取り付けの際は活線の横を触れることになるので感電に注意し,
 できれば電気工事士レベルの知識を持った人が行ってください.)

製作開始時に見落としていたのですが,うちの引込線は単相3線式100V/200Vでしたので,
赤/黒の電圧側電線2つを両方測って加算しないと家全体の電力が取れません.仕方なく,黒/赤両方にCTを付けます.
残りのCTは電気を多く食うリビングエアコン,給湯器,冷蔵庫,浴室乾燥機につけておきます.

取り付けた様子
DSC_0705.jpg

Raspberry PiとRaXino基板はプラ箱にネジ止めして納めてぶら下げておき,USBで電源を引っ張ってきます.
これである程度固定されましたのでよしとします.

次に可視化部分ですが,なぜかRaspberry Piにmatplotlibどころかpandasすら入らなかったので
生データをGoogle Chart APIでグラフにするスクリプトを突貫で用意しました.

Google Chart APIの使い方は以前記事にした通りで、
ここに取得した電力計のCSVデータを突っ込めば⬇の様にキレイなグラフになります。

Charts of home power consumption

自分がどれだけ電気を使っているか見えるのはなかなかおもしろいです.
あとは,データを家のPCに移して,現在1秒サンプルのデータを1分くらいにリサンプルして,
家の電力消費傾向を分析出来るようにしようかと思っています.
  1. 2017/09/28(木) 23:58:31|
  2. 未分類
  3. | トラックバック:0
  4. | コメント:0

Google Chart APIによるデータのグラフ描画

Raspberry Piを使用してロギングしたデータを手軽に直接可視化する方法として
Google Chart APIを使用するという方法があります.

基本的な使い方は以下のページに事例が載っています.
Using Google charts in Python CGI scripts

ここでは上記のページのスクリプトの解説と,複数グラフを書く場合の例を記載します.
前提としてPython(2系)CGIスクリプトの動くWebサーバ上の動作とします.
(Webサーバ環境構築方法は以下を参考ください.
Raspberrpy PiのWebサーバ(Apache)追加

2013.07.01;23
2013.07.02;67
2013.07.03;45
2013.07.04;17
2013.07.05;56
のようなセミコロン区切りのデータを描画する例です.


複数の系列がある場合にグラフを縦に並べるには,以下のようにします.
(Draw Multiple Chartsを参考にします.)


これで別のスクリプトで取得したCSVデータ等を全て並べてグラフ化することができます.
Google Chart APIはRaspberry Piに限らず使用できますし,Webサーバが立っている環境でササッと
可視化するにはなかなかよい方法だと思います.
  1. 2017/09/24(日) 23:43:09|
  2. Raspberry Pi
  3. | トラックバック:0
  4. | コメント:0

Linux(Raspberry Pi)でプログラムを走らせたままにしておく(screen, service)

Raspberry Piを使用していル際に,データ受信スクリプト等を走らせたまま
別作業を行なう方法として,screenコマンド,serviceの使い方を記載します.
他にも方法があると思いますが,以下の2つが確実性があり使いやすかったです.

①screenコマンド
 screenコマンドでは,単独のセッションを立ち上げて
 その中でスクリプトを走らせ別のセッションに移ることができます.
 ぱぱっとスクリプトを裏で動かしておきたいときに便利です.

 主に以下の5つのコマンドを知っておけばOKです.
 (a)新規セッションを作成する
 $ screen

 (b)セッションを離れる
 Ctrl+aを押した後dを押す

 (c)セッション一覧を確認
 $ screen -ls
 数字がセッションのID

 (d)セッションに再参加する
 $ screen -r XXXXX
 XXXXXは(c)で調べたセッションID

 (e)セッションを削除
 $ rm -rf /var/run/screen/S-UU/XXXXX.pts-*.raspberrypi
 UUはユーザー名,XXXXXはセッションID,*はよくわかりません.
 S-UU以下は(c)で調べれば名前がわかります.

②service
 スクリプトをOSのサービスとして登録しておけます.
 バックグラウンドで動かすことができるのはもちろん,
 電源投入次に自動で実行させることができます.

 (a).serviceファイルを作成
  サービス内容を記述するファイルを作成します.場所は/etc/systemd/systemに置いておきます.
  例として,シリアル通信でデータ受信するpythonスクリプトを登録します.
  $ sudo nano test.service
[Unit]
Description=SerialDataReciever
After=syslog.target
[Service]
Type=simple
WorkingDirectory=/home/pi/public_html/data
ExecStart=/usr/bin/python /home/pi/python/serialrcv.py
TimeoutStopSec=5
StandardOutput=null
[Install]
WantedBy = multi-user.target
 (b)サービスの開始
  $ sudo systemctl start test

 (c)サービスの停止
  $ sudo systemctl stop test

 (d)サービスの自動起動への登録
  $ sudo systemctl enable test

 (e)サービスの自動起動解除
  $ sudo systemctl disable test
  1. 2017/09/24(日) 21:50:05|
  2. Raspberry Pi
  3. | トラックバック:0
  4. | コメント:0

Raspberrpy PiのWebサーバ(Apache)化

Raspberry PiをWebサーバとして使用するため,Apacheをインストールする手順を記載します.
Apache公式のHow-To / チュートリアルも参考にしてください.
ここでは以下を行います.
・Apache2の導入
・Webサーバのポート番号の変更
・cgiの設定

①ダウンロードとインストール
 $ sudo apt-get install apache2

②動作確認
 /var/www/html/test.htmlに以下を記載


test

This page is test page.

  http://localhost/html/test.htmlにアクセスして動作確認

③ユーザーディレクトリの有効化
 デフォルトだと/var以下にhtmlファイルなどを置く必要があるので,
 ユーザーのディレクトリ(/home/pi/public_html)以下に置けるようにする.
 $ cd /home/pi
 $ sudo a2enmod userdir
 $ mkdir ~/public_html
 $ sudo cp /var/www/html/test.html ~/public_html
 $ sudo service apache2 restart
 で
 http://localhost/~pi/test.htmlにアクセスして動作確認
 
④ポートの変更
 $ sudo nano /etc/apache2/sites-available/default
 $ sudo nano /etc/apache2/ports.conf
 で双方ポートを任意の値に変更する.
 
⑤cgiの設定
 (a)cgiを有効にする
 $ sudo ln -s /etc/apache2/mods-available/cgi.load /etc/apache2/mods-enabled/cgi.load
 (b)cgiの設定を変更する
 $ sudo nano /etc/apache2/sites-enabled/000-default
 でInclude conf-available/serve-cgi-bin.confのコメントを外し,以下を変更する
(変更前)
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

(変更後)
ScriptAlias /cgi-bin/ /home/pi/public_html/cgi-bin

~~~
AddHandler mod_python .py
AddHandler cgi-script .cgi .py .pl

 /etc/apache2/mods-enabled/mime.conf 219行目
 で,AddHandlerのコメントを外し,.pyを追加
 #AddHandler cgi-script .cgi
 →AddHandler cgi-script .cgi .py
 (d)test.pyでテスト
 /home/pi/public_html/cgi-bin/test.pyに以下を記述
#!/usr/bin/python --
f=open('/home/pi/test.csv','a')
print "Content-type: text/html"
print
print ""
print ""
print "test"
print " "
print " This is a test page with python script."
print " "
 http://localhost/~pi/cgi-bin/test.pyにアクセス

 (e)アクセス権設定
 apacheのユーザ(www-data)は通常のユーザとは異なるため,直接ファイル操作等ができない.
 そのため操作するデータが格納されたディレクトリの所有者を以下のように変更しておく.
 $ sudo chown www-data:www-data /home/pi/public_html
 データの入ってるフォルダの所有権をwww-data(apacheの起動ユーザ)に移す
  1. 2017/09/24(日) 21:35:07|
  2. Raspberry Pi
  3. | トラックバック:0
  4. | コメント:0

RaXino+RaspberryPi電力計の電力計測部分の製作

この記事の電力計測部(CT~マイコン)の
詳細を書いていこうと思います.

電力計測部の回路は以下の図のようになっています.
CT.png
まず試験負荷としてドライヤーとスイッチを接続し,延長コードの1箇所にCTを取り付けます.
CTの負荷抵抗RLは100Ωとします.これで30A→1Vに変換できます.
ドライヤーは定格1200Wなので,大体12Arms→0.4Vrms→1.13Vp-pか,
これよりも小さいくらいの電流が検出できるはずです.

CTの負荷抵抗値について、秋月電子のHPやデータシートでは負荷抵抗RL=10Ωとしか記載がありませんでしたが,
以下のページを見ると300Ωまでは結合係数もよく計測できそうでした.
CTの最大スペックの80Aまでは使わないでしょうし,30Aで0.1Vだとあまり電気を使っていない時の精度が悪化しそうですので、なるべく負荷抵抗の値を上げて検出感度を高くしたいところです。
一方で、非線形な負荷だと電流のピークが通常の正弦波の倍とかになることもありますので負荷抵抗を大きすぎるのも考えものです。ここでは100Ωとしました.
参考:カレントトランス (秋月 SR-3702-150N/14Z) の特性測定 - ラジオペンチ



これを電流制限抵抗10kΩを経由してRaXino(RX62N)のアナログ入力AN0に入力します.
元は交流波形なのでADコンバータには0V中心に正負の電圧がかかりますが,
マイコンのアナログ入力には保護ダイオードがADコンバータ前に入っているため,
これで負電圧はカットし半波のみ検出することにします.

この回路を以下の写真のようにユニバーサル基板上に実装しました.
DSC_0653_.jpg


以下が負荷抵抗両端の波形です(200kHzのデジタルフィルタつき).
大体1.025Vp-pになっており,
きれいに電流を検出できていそうなことがわかります.
dry2.png

下がADコンバータの入力波形です.
元の波形と比較して負側の電圧が保護ダイオードのVfの-0.5V程度でカットされていることがわかります.
dry3.png

これをADコンバータで1ms周期で100サンプル取得した結果が以下のデータです.
AD生値
ADコンバータの電源は3.3V(この場合デバッガの電源を使ったので3.1Vくらい)で,分解能は12bitですから,
1.025/2/3.1*4096=677くらいのピークが読み取れており,大体一致しています.

このデータ列を全波整流したものとして積算しRMSを求めれば電流の実効値が求まります.
具体的には,
①データ列の2乗和平均の平方根を求める
②2乗の面積を2倍するためsqrt(2)をかける
③AD値→電圧→電流の変換係数(99/4096)をかける
と,10.5Aとなり,概ね正しい電流の実効値が得られます.
これにAC100Vをかければ瞬時電力になります.

以上の内容をマイコンに算出させて,RS232Cで送出させるプログラムを作成してやれば,電力計測部分は完成です.



次は可視化部分を書いていきます。
  1. 2017/08/18(金) 00:44:47|
  2. Raspberry Pi
  3. | トラックバック:0
  4. | コメント:0
前のページ 次のページ