夏なので風鈴をつくってみた【python】

夏なので風鈴をつくってみた【python】

風鈴をつくろう!

こんにちは。連日の猛暑で毎日汗だくになっているハリボーです。

先日、強い日差しを浴びながら汗だくで街中を歩いていたときのこと。

早く日陰に、冷房のある場所に入りたいと思っていたら、

チリリーーン! という爽快な音が響き渡るのが聞こえました。

このときほど風鈴の効果を思い知ったことはありません。

一気に身体が楽になりました。

僅かに風が吹いただけなのに、こんなに体が軽くなる。

風鈴は素晴らしい!

この残暑を乗り切るために私も風鈴を作ってみます。

用意するもの

まずは「いらないものリスト」から。

  • ガラスのビン
  • 和紙
  • ひも

上記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"]

あとは円や長方形を組み合わせて風鈴っぽい形を整えていきます。

完成!

こちらが完成したソースコードです。

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)

実行結果はこちらです。

デジタル風鈴

富山市の現在の風速に合わせて風鈴が揺れます。

気温は一応表示させておきました。

夜に作っていたのであまり暑さが伝わらない気温になってしまいました。

これで残りの夏を涼しく過ごせそうです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です