syncro sitone~
DESCRIPTION
AC電源周波数調整を目的にした Ruby で開発したガジェットです。mruby でMakerになる人の参考になればTRANSCRIPT
Fukuoka Ruby Award
Synchro Sitone~AC電源周波数ウォッチソーシャルWeb
近畿大学山崎重一郎
Fukuoka Ruby Award
昨年の夏休みの発明品
Fukuoka Ruby Award
AC電源周波数検知アンテナ
電源コンセントの周波数を測定できます。50Hz 東日本60Hz 西日本
Fukuoka Ruby Award
電力の需要と供給需要が増えると 発電機のトルクが増える
手回し発電機モーター
電球 LED
おもいなあ
Fukuoka Ruby Award
電力の需要と供給
mortar
電力需要
周波数変動で瞬時に需給関係がわかる!
需要が増えると 発電機のトルクが増える
発電所
Fukuoka Ruby Award
BeagleBoneでやってみた arduinoみたいなオープンソースハードウェア
Linuxが動く Ruby1.9.3 でフィジカルコンピューティング!
Fukuoka Ruby Award
苅田
松浦
新小倉
豊前
大分
新大分
唐津
相浦
苓北
川内
玄海
川内
大平
福岡 北九州
長崎熊本
鹿児島
大分
日田
宮崎
久留米
二日市
飯塚
(小丸川)
天山
九州電力の主要送電系統図
Fukuoka Ruby Award
苅田
松浦
新小倉
豊前
大分
新大分
唐津
相浦
苓北
川内
玄海
川内
大平
福岡 北九州
長崎熊本
鹿児島
大分
日田
宮崎
久留米
二日市
飯塚
(小丸川)
天山
実際に設置してみた福岡
唐津
二日市
長崎
飯塚
大分
久留米
Fukuoka Ruby Award
設置方法山崎の自宅(福岡)の設置風景
Fukuoka Ruby Award
SynchroSitone~
Fukuoka Ruby Award
SynchroSitone~すっごくシンクロしている
Fukuoka Ruby Award
Rubyで実装した!はっきり言ってむいていないでも、mrubyの方向性では「あり」それを実証するの目的
Fukuoka Ruby Award
アナログポートに刺したアンテナからの生データノイズだらけだけど、 60Hzあたりの成分も見える
Fukuoka Ruby Award
FFT 高速フーリエ変換ってやつ
Fukuoka Ruby Award
時系列データを周波数成分に分解する
59.93 59.94 59.96 59.97 59.98 59.99 60.00 60.01 60.02
Fukuoka Ruby Award
RubyならFFTは 2行
fft=->a{n=a.size
(n==1 ? a : fft[(0...n/2).map{|i|a[i]+a[i+n/2]}].zip(fft[(0...n/2).map{|i|(a[i]-a[i+n/2])*((Complex.polar(1,-2*PI/n))**i)}]).flatten)}
Fukuoka Ruby Award
RubyならFFTは 2行
(拡大版)fft=->a{n=a.size
(n==1?a: fft[(0...n/2).map{|i|a[i]+a[i+n/2]}].zip(fft[(0...n/2).map{|i|(a[i]-a[i+n/2])*((Complex.polar(1,-2*PI/n))**i)}]).flatten)}
Fukuoka Ruby Award
Rubyの記述力!
でもまあ、このコードはちょっと変態かも
Fukuoka Ruby Award
Rubyでがんばった事
正確な時間間隔でサンプリング•1/60秒= 16.7ミリ秒、その倍の速度が必要•5ミリ秒周期で正確にサンプリング
収集途中で GCが入ってはだめ!ずっと安定して動き続けないとだめ
Fukuoka Ruby Award
正確な時間間隔でサンプリング
リアクタパターンを利用 event machineで実装
Fukuoka Ruby Award
rubygems のevent machine
ユーザ定義のイベントユーザ定義のイベント
リアクタリアクタ
プログラムプログラム
IOやイベント駆動
Fukuoka Ruby Award
rubygems のevent machine
ユーザ定義のイベントユーザ定義のイベント
リアクタリアクタ
プログラムプログラム
定期発生イベント
Fukuoka Ruby Award
5ミリ秒ごとに駆動されるプログラム(実際は微調整が必要!)
require 'eventmachine' EM.run {n=0 EM.add_periodic_timer(0.005){ (時刻を調べて補正 )
サンプリング実行 n+=1 EM.stop if n==N } }
Fukuoka Ruby Award
サンプリング中にGCを入れない
Rubyの Fiberでバッファ(ウィンドウ)への書き込み処理をコルーチンにする
継続で、配列オブジェクトを再利用
Fukuoka Ruby Award
Fiberで資源を節約 window=Fiber.new{i=0
buf=Array.new(SIZE) loop{r=Fiber.yield(buf) if r==0 then i=0 else buf[i]= サンプリング値 *窓関数 i+=1 end } }
Fukuoka Ruby Award
Rubyのクロージャで窓関数をメモ化
2回目からは計算しない
hamming=->i{m={}m[i]||=(0.54-0.46*cos(2*PI*i/N-1))}
Fukuoka Ruby Award
びっくりするくらい正確になった
Fukuoka Ruby Award
電力事業者の3つのサービス
電力卸売り市場で取引される対象• 電力供給• 電力余力供給• 周波数調整(アンシラリーサービス)
九州電力の電力供給と電力余力
Fukuoka Ruby Award
周波数調整力の市場価値アメリカの水道事業者揚水ポンプをインバーター型にして周波数調整力を周波数制御卸売り市場取引に参入
PJM市場での周波数調整力取引でポンプの電力料金を 2~3%削減
Fukuoka Ruby Award
電力需用者側による周波数調整サービス
ネガワット(需用者側の節電=発電)家庭用の蓄電池、スマート家電、スマートメータ デマンド・レスポンス
Fukuoka Ruby Award
SynchroSitone~2.0赤外線 LEDぴかぴか追加バージョン
赤外線 LED
Fukuoka Ruby Award
九州中のエアコンの出力を瞬時にシンクロさせる
10分以内に九州中のオフィスのエアコンが一斉に反応できれば電源周波数調整力として市場価値がうまれる
エアコン数万台規模
赤外線 LED
ぴかぴか
Fukuoka Ruby Award
本当にビジネスになるかも オフィスのエアコンの前に設置するだけで、だれでも電力事業者の立場になれる! 周波数調整能力は 500W出力の 160万円の蓄電池にまけないかも?(出力アップ側の制御も可能)
+
ラズベリーパイ( 35ドル)4000円くらい
赤外線 LED 7円
温度センサー100円
Fukuoka Ruby Award
成果Makersのための Ruby!
•オープンソースハードウェアでMakerになれるよ!
• Rubyでフィジカルコンピューティングすると楽しいことが実証できた
Fukuoka Ruby Award
これから電気マネー
• 周波数調整力を原資とするソーシャルマネー?
節電劇場• ソーシャルゲーム• ギリシャの円形劇場+ギリシャ悲劇は 社会や人生の問題を共有し理解する装置
Fukuoka Ruby Award
mrubyへの期待event_macnineは標準装備してほしい
• 誤差補正機能もほしいFiber も貧弱なマシンにすごく有効
(初期のMacintoshみたいいに )GC.disable / GC.enable
• GCのタイミングを意識して使いたい