技術を磨くだいぱんまん

散歩とインターネットが大好きなシステムエンジニア。暮らし、おでかけ、テクノロジーについて書いています。

Raspberry PiとスピーカーでつくるNORITZ風お湯はりタイマー

f:id:donchan922:20170615223023j:plain

こんにちは、だいぱんまん(@donchan922)です。

我が家ではほぼ年中お風呂を沸かすんですが、お湯はりタイマー機能がないのが不満なところ。なのでお湯がいい感じにたまる時間をスマホのタイマーで毎回測っています。この作業に業を煮やした妻に

ラズパイでなんとかしてよ

と言われたので、以下のようにRaspberry Piでお湯はりタイマー機能を実装してみました。

これまで これから
スマホのタイマーを設定する スイッチを押す
無機質なアラーム メロディ&人の声

特にメロディについては、ふろ給湯器メーカのNORITZ(ノーリツ)のお湯はり完了時に流れる音楽がいい!とのことだったのでそれも含めて電子工作してみました。

完成形がこちら

動画撮影用のため、スイッチを押してからお湯はり完了までの時間を短く設定しています。我が家のお風呂は22分でお湯はり完了なので、本来はスイッチを押して21分後に「もうすぐお風呂が沸きます」が流れ、その1分後にメロディ&「お風呂が沸きました」が流れるように設定しています。

このように環境に合わせてタイマーを設定できるのも電子工作の面白いところです

準備するもの一覧

まずは以下のものを用意しましょう。

Raspberry Pi

前提として、Raspberry Piのセットアップが完了しているものとします。セットアップに必要な機器および手順は以下の記事でまとめています。

Raspberry Pi 3にRASPBIAN JESSIE WITH PIXELをSSH経由でセットアップする方法 - 技術を磨くだいぱんまん

スピーカー

100均のものでも使えますが、音が小さいので聞き取りづらいです。

ジャンパワイヤ(メスーオス)

2本使います。

実現方法

「お風呂が沸きました」の音源を探す

www.youtube.com

お湯はり完了のメロディといえばこれ!ふろ給湯器メーカであるノーリツの「お風呂が沸きました」は聞いたことある人多いんじゃないでしょうか。

このメロディは「人形の夢と目覚め」というクラシック音楽で、ドイツの作曲家であるオースティン(テオドール・エステン)さんが作ったピアノ曲だそうです。

調べてみると著作権が切れていたので音源がどこかに落ちてないかなと思ったらありました。
音源は以下サイトから拝借しました。動画説明文にダウンロードリンクが貼ってあります。アップ主さんありがとうございました。

【MIDI】MIDIが沸きました【お持ち帰りOK】 by しろくま 音楽/動画 - ニコニコ動画

先ほどダウンロードした音源がMIDI形式だったので、ラズパイで簡単に再生できるWAV形式に変換しました。以下サイトで「ファイルを選択」ボタンで対象のMIDIファイルを選択し、「送信(変換開始)」ボタンを押せばあっという間に変換環境です。

SMF to MP3 converter with VOCALOU

ファイル名はbath_melody.wavとします。

SFTPでWAVファイルを転送する

WAV形式のファイルをRaspberry Piにファイル転送します。そのためにMacにCyberduckというSFTP(sshを利用したFTP)クライアントをインストールしましょう。ドラッグ&ドロップで簡単にファイル転送ができます。以下記事が大変参考になりました。

Macからラズパイにファイルを転送する - ものづくりブログ

Open JTalkを使って喋らせる

メロディの準備ができれば、次は人の声を喋らせます。具体的には以下の言葉を話すようにします。

  • お湯はりを開始します
  • もうすぐお風呂が沸きます
  • お風呂が沸きました

そのためにOpen JTalkという日本語音声合成を利用します。以下記事にOpen JTalkのインストールから使い方まで詳しく書かれています。

Raspberry piで日本語音声合成(Open JTalk)を試してみる。 - Qiita

上記記事に従って以下WAVファイルを作成します。

ファイル名 内容
bath_start.wav お湯はりを開始します。
bath_soon.wav もうすぐお風呂が沸きます。
bath_end.wav お風呂が沸きました。お風呂が沸きました。

実装!

ファイルが準備できればいよいよ実装です。以下記事を参考にほぼコピペでコーディングしました。
Raspberry Pi 2で遊ぶ:ボタン押したらコマンド実行なんて簡単だろうと思ったら結構大変だった | cozy attic

このプログラムをRaspberry Piの起動時に実行するようにしてやれば、ボタンを押すたびにお湯はりタイマーが使えて便利です。以下記事が参考になります。

Raspberry Piでプログラムを自動起動する5種類の方法を比較・解説

import RPi.GPIO as GPIO
from time import sleep
import subprocess

GPIO.setmode(GPIO.BCM)
GPIO.setup(21, GPIO.IN, pull_up_down=GPIO.PUD_UP)

# 各ファイルパスは適宜変更してください。
CMD1 = "aplay bath_start.wav"
CMD2 = "aplay bath_soon.wav"
CMD3 = "aplay bath_melody.wav"
CMD4 = "aplay bath_end.wav"
# お湯はり完了時間(秒) - 60(秒) 。適宜変更してください。	
TIMER = 1260

try:
    while True:
    	# スイッチが押された場合
        if GPIO.input(21) == GPIO.LOW:
            subprocess.call(CMD1, shell=True)
            # お湯はり1分前まで待つ
            sleep(TIMER)
            subprocess.call(CMD2, shell=True)
            # お湯はり完了まで待つ
            sleep(60)
            subprocess.call(CMD3, shell=True)
            subprocess.call(CMD4, shell=True)
        sleep(0.02)

except KeyboardInterrupt:
    pass

GPIO.cleanup()

ファイル名をbath.pyとすると、実行コマンドは以下のとおりです。

$ python3 bath.py

配線する

f:id:donchan922:20170611093553p:plain
配線はシンプルです。21ピン(GPIO番号)からタクトスイッチにつなげ、抵抗をはさんで、最後はグランドにつないでいます。

配線については以前書いた記事のときと全く同じです。あとはプログラムを起動してタクトスイッチを押せばお湯はりを開始してくれます。これでRaspberry PiとスピーカーでつくるNORITZ風お湯はりタイマーの完成です。お疲れ様でした。

まとめ

妻が気に入ってくれてよかったです。