本記事で学べるもの
- Processingでのアプリ作成方法
- OpenWeatherMapの使い方
- 風速の取得とアプリの連携
デジタル風鈴をつくろう!
こんにちは。連日の猛暑で毎日汗だくになっているハリボーです。
先日、強い日差しを浴びながら汗だくで街中を歩いていたときのこと。
早く日陰に、冷房のある場所に入りたいと思っていたら、
チリリーーン! という爽快な音が響き渡るのが聞こえました。
このときほど風鈴の効果を思い知ったことはありません。
一気に身体が楽になりました。
僅かに風が吹いただけなのに、こんなに体が軽くなる。
風鈴は素晴らしい!
この残暑を乗り切るために私も風鈴を作ってみます。
デジタル風鈴を作るために用意するもの
まずは「いらないものリスト」から。
- ガラスのビン
- 和紙
- ひも
上記3点は今回作成する風鈴とは関係ないので、用意しなくて構いません。
用意するものリストはこちら。
- PC
- Processing
- OpenWeatherMap
上記3点を使ってデジタル風鈴を作成していきます。
リアル風速の取得とアプリの実装
まずはOpenWeatherMapから風速を取得する準備をします。
メールアドレスを登録するとAPIキーが貰えます。
続いてProcessingで風速を取得します。
あらかじめPython環境を整えておきます。「モードの追加」から設定できます。
jsonを使った天候情報の取得はこちら。
API_KEYには各自で取得したキーを入力します。
import json
import urllib2
city_name = "Toyama"
API_KEY = "0000000000000000000000000000"
api = "http://api.openweathermap.org/data/2.5/weather?units=metric&q={city}&APPID={key}"
weatherUrl = api.format(city = city_name, key = API_KEY)
weatherData = json.load(urllib2.urlopen(weatherUrl))
気温、風速はそれぞれ次のように取得できます。
temp = weatherData["main"]["temp"]
wind = weatherData["wind"]["speed"]
あとは円や長方形を組み合わせて風鈴っぽい形を整えていきます。
デジタル風鈴がついに完成!
こちらが完成したProcessingのソースコードです。
import json
import urllib2
import datetime
from time import sleep
counter = 1
wind = 1
def setup():
size(800,500)
background("#7fffd4")
fill("#f0f8ff")
noStroke()
rect(0,0,500,500)
fill("#000000")
textAlign(CENTER)
city_name = "Toyama"
API_KEY = "000000000000000000000000"
api = "http://api.openweathermap.org/data/2.5/weather?units=metric&q={city}&APPID={key}"
weatherUrl = api.format(city = city_name, key = API_KEY)
weatherData = json.load(urllib2.urlopen(weatherUrl))
myCity = "City:" + str(city_name)
textSize(28);
text(myCity,650,150)
temp = weatherData["main"]["temp"]
myTemp = u"Temp: " + str(temp) + u"°C"
text(myTemp, 650, 250)
wind = weatherData["wind"]["speed"]
myWind = "Wind: " + str(wind) + " m/s."
text(myWind, 650, 350)
def draw():
global counter,wind
counter+=0.1*wind
print(counter)
translate(0, 0)
fill("#f0f8ff")
noStroke()
rect(0,0,500,500)
fill("#00ffff")
ellipse(250, 150, 100, 80)
fill("#87cefa")
ellipse(250, 180, 84, 30)
fill("#f0e68c")
translate(250, 250)
if int(counter)%3 == 2:
rect(-20, -20, 40, 180)
elif int(counter)%3 == 1:
rotate(PI/12*wind)
rect(-20, -20, 40, 180)
else:
rotate(-PI/12*wind)
rect(-20, -20, 40, 180)
実行結果はこちらです。
富山市の現在の風速に合わせて風鈴が揺れます。
気温は一応表示させておきました。
夜に作っていたのであまり暑さが伝わらない気温になってしまいました。
これで残りの夏を涼しく過ごせそうです。
Processing関連記事もご参照ください。
(Visited 98 times, 1 visits today)