お天気時計
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
#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個のL...
*プログラム [#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/fo...
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...
:sck => PiPiper::Pin.new(:pin => 24, :direction => :out...
:rck => PiPiper::Pin.new(:pin => 23, :direction => :out...
}
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+'"...
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.nikke...
- お天気時計の紹介・作り方 http://itpro.nikkeibp.co.jp/a...
*NT京都2015 [#wb8e917f]
- NT京都2015に出展しました。 http://wiki.nicotech.jp/nico...
- NT京都2015まとめ前編 2:39~2:50 http://www.nicovideo.jp...
終了行:
#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個のL...
*プログラム [#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/fo...
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...
:sck => PiPiper::Pin.new(:pin => 24, :direction => :out...
:rck => PiPiper::Pin.new(:pin => 23, :direction => :out...
}
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+'"...
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.nikke...
- お天気時計の紹介・作り方 http://itpro.nikkeibp.co.jp/a...
*NT京都2015 [#wb8e917f]
- NT京都2015に出展しました。 http://wiki.nicotech.jp/nico...
- NT京都2015まとめ前編 2:39~2:50 http://www.nicovideo.jp...
ページ名: