Mais conteúdo relacionado Mais de Kindai University (20) Syncro sitone~6. Fukuoka Ruby Award
BeagleBoneでやってみた
arduinoみたいなオープンソースハードウェア
Linuxが動く
Ruby1.9.3でフィジカルコンピューティング!
7. Fukuoka Ruby Award
九州電力の主要送電系統図
新小倉
福岡
北九州 苅田
玄海 唐津 豊前
飯塚
松浦
二日市
大分
大分
相浦 日田
天山 久留米
新大分
熊本
長崎
大平
苓北
(小丸川)
川内 宮崎
川内
鹿児島
8. Fukuoka Ruby Award
実際に設置してみた
新小倉
福岡
北九州 苅田
福岡
玄海 唐津 豊前
飯塚
飯塚
松浦 大分
二日市 大分
相浦 日田
天山 久留米
新大分
唐津
長崎
熊本
大分
大平
苓北
(小丸川)
二日市
川内 宮崎 久留米
川内
鹿児島
長崎
13. 0!
500!
1000!
1500!
2000!
2500!
3000!
3500!
4000!
4500!
1!
5!
9!
13!
17!
21!
Fukuoka Ruby Award
25!
29!
33!
37!
41!
45!
49!
53!
57!
61!
65!
69!
73!
77!
81!
85!
89!
93!
97!
101!
105!
109!
113!
117!
121!
125!
129!
133!
137!
141!
145!
149!
153!
157!
161!
165!
169!
173!
177!
181!
185!
189!
193!
197!
201!
205!
209!
213!
217!
221!
225!
229!
233!
ノイズだらけだけど、60Hzあたりの成分も見える
237!
241!
245!
249!
アンテナからの生データ
アナログポートに刺した
253!
系列1!
15. Fukuoka Ruby Award
時系列データを
周波数成分に分解する
25!
20!
15!
10!
5!
0!
1!
59.93
2!
59.94
3!
59.96
4!
59.97 59.98
5! 6!
59.99
7!
60.00
8!
60.01
9!
60.02
16. Fukuoka Ruby Award
Rubyなら
fft=->a{n=a.size!
FFTは2行
(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)}
17. 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)}
18. Fukuoka Ruby Award
3行にすると
ちょっと見やすいかも?
fft=->a{n=a.size
b=a[0...(n/2)].map
(n==1?a:fft[b.with_index{|x,i|x+a[i+(n/2)]}].zip
(fft[b.with_index{|y,i|(y-a[i+(n/2)])*
(Complex.polar(1,-2*PI/n)**i)}]).flatten)}
20. Fukuoka Ruby Award
Rubyでがんばった事
!
正確な時間間隔でサンプリング!
• 1/60秒=16.7ミリ秒、その倍の速度が必要!
• 5ミリ秒周期で正確にサンプリング!
収集途中でGCが入ってはだめ!!
ずっと安定して動き続けないとだめ!
24. Fukuoka Ruby Award
5ミリ秒ごとに駆動されるプログラム
(実際は微調整が必要!)
require 'eventmachine'
EM.run {n=0
EM.add_periodic_timer(0.005){
(時刻を調べて補正)
サンプリング実行
n+=1
EM.stop if n==N
} }
25. Fukuoka Ruby Award
サンプリング中に
GCを入れない
RubyのFiberでバッファ(ウィンドウ)
への書き込み処理をコルーチンにする!
継続で、配列オブジェクトを再利用!
26. 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
} }
27. Fukuoka Ruby Award
Rubyのクロージャで
窓関数をメモ化
2回目からは計算しない!
hamming=->i{m={}
m[i]||=(0.54-0.46*cos(2*PI*i/N-1))}
29. Fukuoka Ruby Award
電力事業者の
3つのサービス
電力卸売り市場で取引される対象!
• 電力供給!
• 電力余力供給!
• 周波数調整(アンシラリーサービス)!
! 九州電力の電力供給と電力余力
30. Fukuoka Ruby Award
周波数調整力の市場価値
アメリカの水道事業者!
揚水ポンプをインバー
ター型にして周波数調整
力を周波数制御卸売り市
場取引に参入!
!
PJM市場での周波数調整
力取引でポンプの電力料
金を2~3%削減!
31. Fukuoka Ruby Award
電力需用者側による
周波数調整サービス
ネガワット(需用者側の節電=発電)!
家庭用の蓄電池、スマート家電、スマートメータ!
デマンド・レスポンス!
33. Fukuoka Ruby Award
九州中のエアコンの出力を
瞬時にシンクロさせる
10分以内に九州中のオフィスのエアコンが一斉に反応で
きれば電源周波数調整力として市場価値がうまれる!
赤外線LED
ぴかぴか
エアコン
数万台規模
34. Fukuoka Ruby Award
本当にビジネスになるかも
オフィスのエアコンの前に設置するだけで、だれでも
電力事業者の立場になれる!!
周波数調整能力は500W出力の160万円の蓄電池にまけ
ないかも?(出力アップ側の制御も可能)!
!
!
+
ラズベリーパイ!
(35ドル)! 赤外線LED! 温度センサー!
4000円くらい
7円 100円
35. Fukuoka Ruby Award
成果
MakersのためのRuby!
• オープンソースハードウェアで
Makerになれるよ!!
• Rubyでフィジカルコンピューティ
ングすると楽しいことが実証できた
36. Fukuoka Ruby Award
これから
電気マネー!
• 周波数調整力を原資とするソーシャルマネー?!
節電劇場!
• ソーシャルゲーム!
• ギリシャの円形劇場+ギリシャ悲劇は!
社会や人生の問題を共有し理解する装置
37. Fukuoka Ruby Award
mrubyへの期待
event_macnineは標準装備してほしい!
• 誤差補正機能もほしい!
Fiberも貧弱なマシンにすごく有効 !
(初期のMacintoshみたいいに)!
GC.disable / GC.enable!
• GCのタイミングを意識して使いたい!