#contents *概要 [#e2e25820] 時計の文字盤に12個のLEDを付けて、雨の降る時刻を教えてくれるシステムです。 - 1時間毎の天気予報データをxml形式でWEBから取得します。 - rubyでパースして、1時間毎に雨の予報かどうかを判定します。 - 雨の予報であれば、その時刻のLEDを点灯させます。 *外観 [#tde66cb0] #ref(IMG_20140823_133109.jpg) - 4時から6時に雨が降る予報を示しています *回路図 [#x13394b1] #ref(お天気時計回路図.PNG) - シリアルパラレル変換ICである74HC595を2個使用して12個のLEDを制御しています *プログラム [#program] - cronで1時間に1度実行させます #!/usr/bin/ruby require 'rexml/document' require 'open-uri' require 'pi_piper' # 市町村コードで天気予報データを取得(21202:大垣市) url = "http://api.tenki.jp/api/blog/parts/point_clock/forecast_map_point_21202.xml" doc = REXML::Document.new(open(url)) # 現在時刻の取得 JST(+9h) now = Time.now + 9*60*60 # シリアルパラレル変換にGPIO 23,24,25pinを使用 $pins = { :ser => PiPiper::Pin.new(:pin => 25, :direction => :out), # serial data :sck => PiPiper::Pin.new(:pin => 24, :direction => :out), # shift register clock :rck => PiPiper::Pin.new(:pin => 23, :direction => :out) # latch clock } def shift(key) $pins[key.to_sym].on $pins[key.to_sym].off end def reset $pins.values.each{|pin| pin.off} end def send_bits(data) printf "0x%04x\n",data 0.upto(15) do |byte| if ((1 << byte) & data) == 0 $pins[:ser].off else $pins[:ser].on end shift(:sck) end shift(:rck) end puts now bits = 0 for i in 1..11 do t = now + 60*60 * i str = t.strftime("%Y-%m-%d %H:00:00") id = doc.elements['//forecast[public_datetime="'+str+'"]/weather/id'] h = t.hour % 12 if id then wid = id.text.to_i print h, "\t", wid, "\n" # 強雨(3)または弱雨(4)ならLED点灯 if (wid == 3 || wid == 4) then bits |= 1 << (15-h) end end end puts "" reset send_bits(bits) - &ref(forecastclock.rb); ダウンロード用ファイル *Ogaki Mini Maker Faire 2014 [#s96eca42] - Ogaki Mini Maker Faire 2014に出展しました。 &ref(IMG_20141006_113532.JPG); &ref(お天気時計.png,zoom,50%); - Ogaki Mini Maker Faire 2014では、意外に多くの方から、「これ欲しい」「売り出さないの?」といった声をかけて頂きました。ハードウェアは初心者レベルですが、実用的な物が作ることができました。 *第1回みんなのラズパイコンテスト [#f3fb8904] 第1回みんなのラズパイコンテストでアイディア賞を頂きました。 - 第1回みんなのラズパイコンテストの結果 http://coin.nikkeibp.co.jp/coin/itpro-s/seminar/LIN/rpic15/ - お天気時計の紹介・作り方 http://itpro.nikkeibp.co.jp/atcl/column/15/030400035/030400004/ *NT京都2015 [#wb8e917f] - NT京都2015に出展しました。 http://wiki.nicotech.jp/nico_tech/?NT%E4%BA%AC%E9%83%BD2015 - NT京都2015まとめ前編 2:39~2:50 http://www.nicovideo.jp/watch/sm26052763