Category Archives: 電子工作

Permalink to single post

F-PLUG (消費電力モニタ) をLinuxで使ってみた

大地震からも日が経ち、節電という言葉もだんだん聞かなくなりつつあるなか皆様いかがお過ごしでしょうか。

なんて偉そうな事言いつつ今回のはあまりそれとは関係ないんですが、前々から会社のいろいろな機材 (サーバーとか) で使ってる消費電力のモニタとかやりたいなぁと思っていたりして、ワットモニターUSBとか、スマートコンセントとか電力計の類をいろいろ調べてたんだけど、先週とある電気量販店でF-PLUGなるよさげなものを発見した。

F-PLUG

F-PLUG 近影

  • 一口 15Aまで
  • Bluetooth (RFCOMM)
  • この手のものにしては比較的安め (約5000円)
  • 電力に加えて、温度、湿度、照度まで図れる
  • リアルタイムの電力計測が可能、また一時間ごとの積算値もF-PLUG側で記録される

とまぁこんな感じです。これを使って、いろいろとデータをとってLinuxサーバーでモニタすればなにかいいことが起きるに違いないということでこれを購入。ソフトウェアは公式にはどうやらWindows用しかないようだったけど、とりあえずBluetooth (RFCOMM) ならLinuxでも比較的簡単に何とかなるだろうという目算。

現在値取得までは比較的容易に…

とりあえず/dev/rfcomm0を使えるようにするまでの接続はググって出てきたところ (→Rasperry PiにF-PLUGを2個繋いでみた 等) を参考に。まぁ普通のRFCOMM機器の接続手順です。

あとどうやらOBDNマガジンなるものにはfplug_for_linuxなるソフトウェアが掲載されているようで、とりあえずそれを使えば現在値の取得 (電力値[W]と温度・湿度・照度) まではできた。

しかし機能が足りない

リアルタイムでのいろいろな値をモニタするものやりたかった事だけど、一番やりたかったのは積算の消費電力量 [Wh] を出すこと。上記のものではそこまでの機能は提供されていない。

まぁ一秒ごとに電力値を計測して足していけば積算電力もだせるだろという話もあるけど、なんか無駄な感じするし、そもそも二秒おきぐらいにしか計測できないので誤差がけっこう出る気がして気持ちが悪い。

ということで作る。上記は簡単な小物作りには面倒なC言語で作られていたので、結局全部Pythonで書き直すことにした。

幸いなことに、(というかなぜか?) データの仕様がまるっと公式ページ (F-PLUGメッセージ一覧) に掲載されていた。正直かなり見づらい上に若干不正確  (というか舌足らず?) だったりもするけど、こういうものがあるだけでかなり助かる。なんかもともと業務用のなんかの製品だったりするのかな。

まぁということでひたすらこのコードを打ち込む。

成果物

とりあえず制御用ソフトウェアをせっかく作ったので、現段階までにできたものを公開しときます。

まだUIはありません。作ってません。pyfplugモジュールにある FPlugDevice クラスでF-PLUGの操作ができます。ほとんど全ての機能が使えると思います。

ちなみにDebian 7とGentoo Linux (ともに64bit) で動作確認してます。

ところで精度は・・・?

それは分かりません。かなりざっと不真面目にしか確認してないです。

  • 温度: 壁掛け時計の数値が23℃の時、F-PLUGの計測値は27.0℃
    • マシンに近かったり、F-PLUG自体たぶん発熱してるから高めになった?
  • 湿度: 壁掛け時計の数値が55%の時、F-PLUGの計測値は湿度は42%
    • 温度が高い分湿度が下がってるのかも
  • 照度はほかに計測機器がないから不明
  • 電流:
    • うちの安物クランプメーターで1.4 (A) 前後のとき、F-PLUGでは170 (W) 前後
    • 同様に10.90 (A)のとき 1063 (W)
    • 電圧100 (V)、力率1.0として計算すると、それぞれ21%、2.5%ほどの差になる
    • しかしそもそもこのクランプメーターも怪しい

これじゃ (精度計測としては) 参考にもならないですね。ただまぁこの感じからすると大きく外れた値はないので、とりあえずつくったプログラムはある程度正しく動いてるんでしょう。

他の所の報告ではそもそも個体差がけっこうたったりして、それなりの誤差があるようです。

怪しげなクランプメーター

怪しげなクランプメーターで計測するの図


今後…

  • かんたんなコマンドラインのUIつくる
  • Zabbixとかで使ってみる
Permalink to single post

コンデンサの単位がAh(アンペア・アワー)に代替できない理由

  • コンデンサの容量の単位→μF(マイクロファラド)
  • リチウム電池とか→mAh(ミリアンペア・アワー)

マイクロとかミリとかはいいとして、なぜコンデンサはAhで示されないのか

ちょっと考えてみたけど「なんかの次元がたりないのかもね〜」程度の
曖昧な考えしか出来なかったので、真面目に考えてみる

要するに・・・

この問題は、なぜF(静電容量)とAh(放電容量)が換算できないのか
という問題に帰着する。

単位の次元

違いを考えるために、とりあえず愚直に単位の次元を考えてみる。

静電容量について。定義から、
C = AsV=kg \cdot m^2\cdot s^3 \cdot A

ここから導くと

  • F = C \cdot V^{-1} = (A \cdot s) \cdot ( {kg}^{-1} \cdot m^{-2} \cdot s^{-3} \cdot A^{-1} )

次に、放電容量について。次元のみに着目すると、h(時)=s(秒)つまり、

  • Ah=A \cdot s

Fに比べるとAhはやけにシンプル。まぁ単位その物が原始的な次元になってるからね。。。

さて、二つを比較してみると差は明らか。Fの後半のややこしい部分、つまり電圧部分の次元が、Ahには丸ごとなくなっている。

つまり、電圧が与えられていないと、FとAhは変換できない、ということ。

・・・分かったような、分からないような。

真面目に考察してみる

とりあえず、エネルギーを計算して考えてみる。(大括弧内は単位)

まずは、リチウム電池について。
電池の放電容量をD[As]、出力電圧をVbat[V]とする。この二つの値は、電池の種類によって固定される。
放電時間をt[s]とすると、P=IV[W=AV]なので、

  • Pt=DV_{bat}

Pt=E[Ws=J]なので、

  • E=DV_{bat}

となる。変数は無い(すべて電池の定数)ので、最大エネルギーの値は完全に電池依存。

次に、コンデンサが充電されたときのエネルギーを考える。
コンデンサの容量をC[F]とする。これはコンデンサの種類で固定。で、あと充電電圧Vcap[V]が必要。
高校物理のとき(だったっけ?)に習った、静電エネルギーの公式E=1/2CVを使う。
Q=CVなので、

  • E=\frac{1}{2}C{V_{cap}}^2

Cはコンデンサの定数だけど、Vcapは充電時の電圧なので、電池だけでは決定されない、という意味で変数ということになる。

要するに・・・(結論)

  • 電池の放電容量の値→完全に電池依存
  • コンデンサの静電容量の値→コンデンサと充電電圧に依存

要するに、コンデンサは充電時の電圧によってエネルギー容量が変わるから、コンデンサを決めただけでは放電容量は決められない、ということだ。

電池の出力電圧は電極(と電解液?)に依存する、っていうのは化学で習ったとおり。つまり、電池はどうやって充電しても、出力電圧は一定になる。だから充電電圧には依存しない。

このように、化学変化を利用する電池と、物理現象のみを利用するコンデンサ、という根本的な原理の違いから、結局のところ単位の違いが出てくるわけだ。

換算式

無謀にも換算式を考えてみる。

上の式、E=DV_{bat}と、E=\frac{1}{2}C{V_{cap}}^2から

  • \frac{1}{2}C{V_{cap}}^2 = DV_{bat}
  • D[As] = \frac{C{V_{cap}}^2}{2V_{bat}}

As(アンペア秒)をAh(アンペア時)に変換すると

  • D'[Ah] = \frac{C{V_{cap}}^2}{7200 \cdot V_{bat} }

(D’: 放電容量[Ah]、C:静電容量[F]、Vcap:コンデンサの充電電圧[V]、Vbat:電池の公称電圧[V])

ただし、コンデンサと電池では電圧の取り出し方がぜんぜん違う。なので、電圧の変換とかにかかるロスやら電圧降下やらで、一概に比較することはできないようです。
あと電池も理想状態のみで計算しているし。

計算してみる

秋月に売ってた電気二重層スーパーキャパシタ。120F、最大定格で使うと2.5V。
これを公称3Vの電池で換算してみる。

<br /> \begin{align} D & = & \frac{C{V_{cap}}^2}{7200 \cdot {V_{bat}}} \\ & = & \frac{120 \times 2.5 \times 2.5}{7200 \times 3} \\  & = & 0.0347 \end{align}<br />

答え: 34.7mAh。

んー。。。こんなもんなのか。

ていうかここまで書いて何だけど、何気にこの記事の内容は自信ないな・・・。
絶対考え方間違えてる気がする。誰かに見てもらいたい。

Permalink to single post

tinyipmi lanカード

とうとう回路部分だけ完成。

↓裏面から

あとはパルストランスRJ45をどうつなげるか。。。

ていうか動作する気がしない

なんか一ヶ所やたらアクロバティックな抵抗の塊がありますが、なんかこのLANのチップ(ENC28J60)のデータシート読むと、2.32KΩの抵抗を要求していて。。。
さがしてもそんな抵抗ないし(2.4KΩとかしか売ってない)、仕方なく作ったらこうなってしまいました。

ちなみにこれは、1KΩ×3を直列でつないだ抵抗と、10KΩの抵抗を並列につなげてあります。

いちおう高校のときに習ったであろう計算方法かいときます。
直列の合成抵抗は単純に足し算で、並列の合成抵抗は

合成抵抗の式

なので、当てはめて計算してみます。

ということで2.32kΩにすごく近い(誤差0.5%)抵抗になります。

あと下のチップは74HCT32APです。

ちなみにハンダ付けが汚すぎるのは仕様。

Permalink to single post

いそいでtinyipmiを設計

最近セキュリティキャンプ用の発表用のやつの製作が進んでない。やばい。
とりあえず作品名をtinyipmiということにした。
で、設計して回路図を書き上げる。
LANカードの部分と、M/BにSPIインターフェイスと3.3V電源ラインを追加。
そして回路図をさらしてみる。
TinyIPMI LANカード

TinyIPMI LANカード の回路図

tinyipmi M/Bの回路図

tinyipmi M/Bの回路図

。。。相変わらず字が汚い。

これで回路組んで、ソフトウェアを書き込めば動く。。。はずだけど
動く気がしない。

あとチョークコイルが手持ちが無い。買ってこなきゃ。。。

残り一週間とちょっと。はたして間に合うのか

あともしうまくいけばこれ製品化もできる。。。かも。

Permalink to single post

avr writer不調

avr writerの調子が悪くて(verify errorがでる)、いろいろ疑ってやってみたがだめだった。

  • 新しく作った電源がnoisyなのかとおもってスイッチング電源+5Vのレギュレータのみで電源回路を作ってみた
  • 基盤がダメなのかと、回路を作り直した
  • ケーブルがいかれたのかと、ケーブルなしで接続してみた
  • avrチップがこわれたのかと思って、かえてみた

そして原因判明。どうやらコンピュータのシリアルポートがいかれてたっぽい

別のマシンのシリアルポート使ったら正常に書き込めた。

そして使ってたマシンから試しにシリアルポートつかってサーバに接続してみたら完全に文字化けした。

さて、変な電圧かけたせいか

と、おもってもう一度サーバにシリアルでつないでみたら文字化けが直った
もう一度ライターにつなぎ直してやったら復活。

謎や。

シリアル経由で高電圧をかけてしまった→M/Bのシリアル付近のコンデンサに変に充電される→エラーでまくり→シリアルを別のPCに接続→放電→正常化

という推測を立ててみる。

まぁかけたからいいや。

ていうか風邪ひいた。辛い

Permalink to single post

電源的がらくた

電源・パネル

電源に複数チャンネル必要になったので改造した。
箱もしっかりしたの用意した。

あと計測パネルも任意の場所の計測点を選べるようにした。

こういうのって凝りだすと止まらない。脇道それすぎ。
しかも固定出力とかまだ作りたい部分がありすぎ

っていうか裏側から見るとどうみても映画に出てくる時限爆弾。

電源・内部

Permalink to single post

atmega64破壊。。。

mb2.jpg

M/Bに

  • デバッグシリアルIF
  • ISP-IF
  • デバッグポート
  • 電源コネクタ

をつけた。で、書き込みテストしようとしたら突如数アンペアの大電流が流れてしまった。
なんか電源のVccとGNDを逆にしたっぽい。

それいこう、まったく動かなくなった。一応、M/Bが悪いのかCPUが悪いのか切り分けの為にテストボードを作って書き込みテストしたらやっぱりCPUがおかしいらしい。

testmb.JPG

あーまた買ってこなきゃ。。。
こんどは多めに買っておこう。。

あと、逆電流保護のダイオードつけるようにします。。。

っていうかほんとこういうの作るの時間かかるな。。。

Permalink to single post

avr-gcc@gentoo

Gentooでavr-gccを利用するためのメモ

# emerge crossdev
(….)
# crossdev –target avr –b 2.16.1 –g 4.0.2 –l 1.4.4

あと

# emerge avrdude

ついでに

# emerge gnome-avrdude

取り合えずうちの環境ではこれで正常動作。

GCCのバージョンが新しすぎたり、libcのバージョンがあってなかったりするといろいろうまく動かない。

Permalink to single post

AVRライターやっと

シリアルAVRライター

先週作ったavrのライター
なんだかうまく動かなかった。

いや、まぁこの類のモノって初めからちゃんと動く方がおかしいんだけどね。

そんなわけで、テスター使って短絡してるとこないかさがしてみたり、逆につながってないところ捜したりしたけど、どんなにさがしてもライターの出来は完璧。ブレッドボードで作ったAVRの試験板の方を疑ってみて、これまたテスター使っていろいろ調べたけどやっぱり異常無し。

しかし直感的に、ブレッドボードが悪い気がして、急遽部品を集めてユニバーサル基板上で実装してみたらものすごい勢いで正常動作。

なにが悪かったのか。まぁ動いたからいいや。

まずは定番・LEDチカチカのAVRバージョンを。。。