Friday, July 11, 2014

RaspberryPiで電力ロガー/ 全体構想 ~ ここまでできた。



漠然とこんなことをやろうとしていて、ゴールを決めないとキリがないことに気がついた。
いったん整理しよう。

すでにできていること:
  • RaspberryPi で配電盤の電流を検出する(MCP3002を使用)
  • 測定した電流値(2秒ごとの値)を RaspberryPi 内のSQLサーバーに記録する
  • 測定したデータをRaspberryPi 内のWebサーバーから公開する
    (Bootstrap(タブレットでも操作しやすい、フラットUI)、Flotr2を使用(画像ではなくて、スケール操作のできるグラフ)、ダイナミックドメインにより外部へ公開)

ここまでやってわかったこと:
  • 交流電源は電流センサーだけでは電力は測定できない(マイコンで1000Hz以上の周期で測定し積分計算すればできるが、RaspberryPiでは無理)
    だから、表示はW(ワット)ではなくて、VA(ボルトアンペア)。電気代の計算には使えないが、短期長期の経時的変化を観察する=”見える化”には役立つ。
  • RaspberryPi で SQLのIOが輻輳すると、トランザクションの消失、測定の欠損が発生する。輻輳させない処理などロジックに工夫の余地があるかもしれないが、CPUパワーには限度がある。そうは言ってもクラッシュやフリーズもなくある意味堅牢に動き続けている。

まだできていないこと(したいこと):
  • クラウドSQLサーバーに記録できるようにする
    (5分間平均値を記録して保存する?2秒データでも直接クラウドに書く?
    → レスポンスによる)
    5分データから月間・年間推移を表示する
  • RaspberryPi から宅内機器のON/OFFができるようにする
  • あと1つセンサーを追加する(3線式単相なので、全電力を測るには2個のセンサーが必要)
  • 汎用A/DコンバータICではなく、電力取得専用ICに代えて、力率を考慮した電力が取得できるようにする
  • 制御のオプションとして、PWM調光
  • オマケ機能(天気予報、地震速報、センサーによる温度の表示)
上から4つまでできたら、とりあえずゴール。

Eco-Pi Graphのキャプチャー

プログラム構成はだいたいこんな感じ。


センサーが1個しかないし。


どこまで行けるか。

Thursday, July 10, 2014

Bootstrap + BootstrapSwitch がわかりにくかったのでメモしとく。

BootstrapSwitchは、Bootstrap本来のデザインを損なわずに実装できるスライドスイッチ(フリップスイッチ)プラグイン。
BootstrapSwitch2は、スイッチの枠の隅が欠けたように見えて、イマイチ。
BootstrapSwitch3では、デザインは改善されたが、すぐに使えそうなコード付きのサンプルがネットで見つけにくい。というかほぼ無い。

サンプル(非公式?):
http://www.jque.re/plugins/version3/bootstrap.switch/
やりたいことが実現できそうなので使いたいが、情報も知識も少なくどうしたものか。
本家サイトにサンプルコードがあるが、説明がそっけなく実装しようとしてもうまくいかない。しかも公式ドキュメントの記述が誤っている模様で難儀する。
で、上記のサンプルで動作している現物を手元に取り込んで必要なコードを抜き書いてみた。自分用テンプレートみたいなもの。
これはキャプチャ画像。
ようやくちゃんと実装ができたのでいろいろ試したところ、操作フィーリングもよいし、内部的にもきちんと動いているようにみえる。 ちなみに、他にもいくつか試して採用できなかったブラグインもある。 Switchery…スイッチの状態をdisableにできない。Flat UI…スライドスイッチだけを導入できずページ全体のデザインが変わってしまう。など。

バージョン:
Bootstrap 3.2.0
(http://getbootstrap.com/)
Bootstrap Switch 3
(http://www.bootstrap-switch.org/)

実装の方法:
bootstrap-switch.orgからダウンロードした bootstrap-switch-master.zip に含まれる2つのファイルをすでにBootstrapが使える環境に追加する。
static/js/bootstrap-switch.js
static/stylesheets/bootstrap-switch.css
(ダウンロード元:https://github.com/nostalgiaz/bootstrap-switch)

実装したコード。
やりたいことは、スイッチの色を変える、スイッチが押されたことを取得する(onClickイベント)、スイッチの状態を取得する(statusメソッド)、スイッチを無効化する(setActiveオプション)。など。
---------------------------- ----------------------------
このブログ本文にHTMLリストを表示するときの参考
http://www.netyasun.com/syntaxhighlighter/source-escape.html
※ コード中、<br>が反映されていません。

Tuesday, July 1, 2014

RaspberryPiで電力ロガー/電流センサー+MCP3002/測定→記録→表示の準備

前段階のブレッドボード基板からユニバーサル基板に。少し進化。
1本の電流を観測&記録&表示できるようになった。


プログラムを変更
・計測結果をコンソールへ表示するだけ → SQLite3ファイルに保存
・測定値の取得は理論と計算だけに基づく → 実測値もいれて実態に近くする
・init.d/に起動/終了スクリプトを追加して、電源ON時に自動起動できるようにした
[未対応] 2秒に1件を連続して書き込むと、何件かごとにSDカードへの書き込みが間に合わなくなるようで、データが飛ぶ。 データが欠損してもグラブ描画などには支障ないが、測定間隔をもっと短くした場合を含めて書き込みは10~20秒ごととか5件、10件ごとにまとめたほうがよいかも。

表示。
グラフ表示用プログラム
・Pythonによるcgi
・グラフの参考: Rickshaw (リキシャ)
( http://code.shutterstock.com/rickshaw/ )
・RaspberryPiのwebサーバーにPythonプログラム本体を置き、クライアントのプラウザから開くと、SQLite3からデータを読み込んで、ブラウザにJavaScriptを含んだHTMLを返す。グラフ用のデータは、SQLite3から読み込んだデータを、Pythonのリスト配列→JavaScriptの配列(オブジェクト)に変換してHTMLに埋める方式(埋め込みなので、更新が難儀)
・現状では、グラフ更新のために全体をリロードする必要あり >>> HTMLを主体にPythonを呼び、データはJSON渡しにするよう変更する
・10,000件のデータを読み込むのに数分かかる >>> グラフは10,000プロットあっても大丈夫。更新データだけ配列に追加できる方式に変更する
・レイアウト、コンテンツ :見た目をよくする、ボタンを追加
・現状の記録方式では、SQLite3ファイルが際限なく大きくなるので、順次、秒単位データ→分単位、時間単位の平均値データに置き換える必要あり
------------------------------------------------------------- -------------------------------------------------------------
プロジェクトの名前はEco-Pi(エコパイ)にしよう。
-------------------------------------------------------------
このブログ本文にHTMLリストを表示するときの参考
http://www.netyasun.com/syntaxhighlighter/source-escape.html

Sunday, June 22, 2014

RaspberryPiで電力ロガー/電流センサー+MCP3002/実験


spidev をRaspberryPiで使用する限りは、4本のIOピンのアサインメント(19,21,23,24)は固定。変更できるかどうか未調査。
spidev は、他のLinuxが可能なマイコンでも使用できそうだが、どうだろう?
ch0 へ電流センサーの電圧出力(電流を電圧に変換して整流したもの)を入力
ch1 のVRは、任意電圧の入力試験用
GPIO4(CON1の7番ピン)のLEDは、デバッグ用インジケータ。読み取りデータをDBに1件書くたびに点滅させる、とか。
MCP3002や3008はのAD変換の解像度は10bit=1023ステップ。
秋月の店頭では、12bit=4095ステップのICに置き換わっているようだ。(2014/06/24)

参考にした回路: 電流センサーの使い方(平均値整流型電流変換回路)
(http://www.u-rd.com/technical/kairo1.html より)

電流センサー SCT-013-030 (千石)
http://www.sengoku.co.jp/item/pdf/SCT013-030V.pdf

整流部(LEDドライバ基板をリユース)
ダイオード SS14 は、指定どおり(たぶん)低損失のショットキーバリア。
http://www.fairchildsemi.co.jp/ds/SS/SS14.pdf

26ピンのコネクタをつないで作った変換アダプタが接触不良で困る場面があった。
ブレッドボードには細いピンでないと安定しない。


(参考にしたコード: http://blog.goo.ne.jp/fdfpy/e/17fea75c9320d1b008ac124a6fe99f67)

実行中


実験OK。



RaspberryPiで電力ロガー/電流センサー+MCP3002/測定→記録→表示の準備 へ続く。

Thursday, June 19, 2014

3W x6灯 フレキシブルアーム、PWM調光

LED: 秋月 3w 基板付き WarmWhite x6
フレーム: 20x10mm アルミチャンネル
アーム: ヤザワ CLW7
ドライバ基板: 秋月 3w x1 用 PT4205版(改)
制御: dsPIC30F2012 (ハードウエア PWM 488Hzに設定(固定))
電源: 19V ACアダプタ(12vまたは24vの鉛バッテリーを想定) 





ドライバ基板(秋月 3w x1 用 PT4205版(青基板))を改造
・ 3w x3灯対応(インダクタ 47uH → 68uH)
  インダクタを交換、電源がVf プラス2Vくらい確保、ICの放熱 の3点を満たせば3灯(またはそれ以上)点灯可能。
・PT4205 からDIMピン(3番)を引き出し
(基板基板、DIM端子は未接続)
同様の改造は、CL6807使用の緑基板の製品でもできそう。

制御部回路
CPUのPWM出力は、ドライバ基板のDIM端子と接続する。
5V電源は TA48M05Fで作る(500mA)、電源用のインジケータLEDは省略した。
ブレッドボード時の実測: CPUに80mA、
PWMのインジケータのLEDに7.5mA(R=330)(R=1kのとき4.5mA)
dsPIC30Fの出力ピンのドライブ能力は、ポートごと、ポートにより50~100mA
(http://www.picfun.com/pic04.html)


EAGLE でユニバーサル基板用に配線を検討
・後日単体のCPUに置き換えできるように配慮

DCジャック用穴

実装

JW-CADで 穴あけ用の型紙 を作成
20x10アルミチャンネルで100mm間隔(放熱のために必要な間隔)
取り付けネジ穴は19.5mmピッチ、M3のタップを立ててプラネジで取り付け

LEDの基板にシリコングリスを塗布してフレームに取り付け

基板は、ドライバと一体にして根元の大プリップにネジどめ(ケースなし)


RWM1本とSW入力2本しか使っていないので、CPU機能を考えるとかなりもったいない。けれど、量産するわけでもないし有り物の活用ということで実験基板のままでよいかな。
次にPICで何か作製するときに、書き込み用のキットなど揃ったら、もっと小規模なPICに置き換えてみても。

調光値 0 のとき電源断すると、一瞬調光値がMAX(?)に光ってOFFになる。
CPUに電源断ディレイが必要かも。
ボタン押し時のディレイが200msecでは早過ぎるかも(調光が1段ずつ止まらないことあり)。
電源OFF時の調光値を記憶していないので、ON時はいつもMAX。

こんなメモから始めました。




Monday, June 16, 2014

dsPIC30F2012 の ハードウエアPWM(LED調光用)

※ 自分用学習実験の記録です。
 動作はしていますが、最適な出来栄えとは思えません。コードも未整理です。

やりたいこと:
PWM出力のデューティ比を[UP][DOWN]のスイッチで調整したい。
オシレータ機能を利用した出力にしたい。
環境:
CPU: dsPIC30F2012-30I/SO 基板名:MDSPIC2012 トラ技2007/8付録
コーディング: MPLAB® X IDE v2.10 / MPLAB® XC16 Compiler v1.21





参考にしたソース:
http://www.picfun.com/dsmoduleframe.html の 「出力コンペア/PWM」
http://www.ibrahimlabs.com/2013/07/pwm-generation-using-pic24-dspic33.html
参考にした書籍:
http://shop.cqpub.co.jp/hanbai/books/42/42111.htm


ソース表示の参考:
http://www.life-gp.net/2013/08/syntaxhighlighterblogger.html
http://blog.remora.cx/2010/10/syntaxhighlighter-with-script-tag.html