概要

時計の文字盤に12個のLEDを付けて、雨の降る時刻を教えてくれるシステムです。

  • 1時間毎の天気予報データをxml形式でWEBから取得します。
  • rubyでパースして、1時間毎に雨の予報かどうかを判定します。
  • 雨の予報であれば、その時刻のLEDを点灯させます。

外観

IMG_20140823_133109.jpg
  • 4時から6時に雨が降る予報を示しています

回路図

お天気時計回路図.PNG
  • シリアルパラレル変換ICである74HC595を2個使用して12個のLEDを制御しています

プログラム

  • 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)

Ogaki Mini Maker Faire 2014

  • Ogaki Mini Maker Faire 2014に出展しました。

IMG_20141006_113532.JPG お天気時計.png

  • Ogaki Mini Maker Faire 2014では、意外に多くの方から、「これ欲しい」「売り出さないの?」といった声をかけて頂きました。ハードウェアは初心者レベルですが、実用的な物が作ることができました。

第1回みんなのラズパイコンテスト

第1回みんなのラズパイコンテストでアイディア賞を頂きました。

NT京都2015


添付ファイル: fileIMG_20141006_113532.JPG 619件 [詳細] fileIMG_20140823_133109.jpg 654件 [詳細] fileforecastclock.rb 396件 [詳細] fileお天気時計回路図.PNG 817件 [詳細] fileお天気時計.png 732件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-02-12 (日) (641d)