PR

ラズパイで「♪お風呂が沸きました」お知らせ装置を自作してみた

太陽光でお湯を作る
当サイトはアフィリエイトプログラムに参加しています。記事内容は公平・素直を心がけています。

はじめに

ここ沖縄でも秋らしくなってきて、湯船につかりたい季節になってきました。

そうなんです。沖縄ってお風呂に入る文化がとても薄くて、一年中入らない人もたくさん居るし、そもそも家に湯船がない、というところも多いんですね。

一昔前では、水不足の時代があったこともあり、
「沖縄で風呂に入るやつはフラー(沖縄の言葉で「バカ」)だ」
って言われていたそうです。

しかしながら、関東出身の私は子供のころから毎日お風呂に入るのが当たり前で育ってきたので、沖縄でも冬はやっぱり湯船に浸かりたい・・・。

ところが、沖縄のお風呂文化が遅れているのもあり、わが家のお風呂は昔ながらの「手動」お湯張りです。最初からお湯が出てくるだけいいのかもしれませんが・・・

当然、自動で「♪お風呂が沸きました」なんて、アラームでお知らせしてくれるなんてことはないので、今まではお湯を入れてから、大体の時間でお風呂を見に行ってお湯を止めていました。

もちろん、お湯を入れたままで、長時間止めるのを忘れて、溢れんばかりにお湯を張りすぎてしまったことも何度もあります。(;^_^A

そこで、使っていなかったラズパイ(超小型パソコン Raspberry Pi ZERO)が眠っていたのを思い出し、自動でお湯が良い具合に張られた時に、音声でお知らせしてくれる装置(バスアラーム)を自作することにしました。

事前に似たような装置が一般販売されているか確認しまして、それらしい商品も売ってはいますので、面倒な方はこちら。
私は趣味の一環で自作したかっただけ、ですから。

材料

材料値段備考
Raspberry Pi ZERO W¥1,600くらい?余り物
温度センサー ¥1,000くらい?余り物
ラズパイに接続
GPIO備品(ケーブル、ジャンパーなど)余り物
秋月電子
Bluetooth スピーカー¥330余り物
以前ダイソーで買った
タッパー¥110ダイソーで買った
モバイルバッテリー¥550余り物
ダイソーで買った

ラズパイ関連備品は、家にあった余り物。それ以外は、みんなダイソー (笑)
ecoなIoTバスアラームです。

Raspberry Pi Zero WH スターターセット ヒートシンクケース アクリルケース GPIO 40ピン コネクタ ネジドライバー Raspberry Pi Zero W Zero用
DS18B20温度センサー 防水デジタルサーマルプローブセンサー

使ってみたところ【ギャラリー】

IoTバスアラームといっても、仕組みは簡単。

① 蛇口の調整で、適度な温度のお湯を出す。
② ラズパイをお風呂のフタの上に置いて、温度計のセンサーを適度な水位の高さになるように垂らす
③ 電源ONして、Bluetoothスピーカーに接続
④ あとは待つだけ。スピーカーは近くに持ってきとく。
⑤ 温度計が38℃になったら、アラームが鳴る(ようにプログラミングしておく)
⑥ お湯を止めにいく(結局、手動ですけどね(笑))

♪お風呂が沸きました♪

プログラム

raspberryPiの基本設定やアプリインストール等は省略しています。

関心のある方は、ご参考まで。

ファイル名役割備考
temperature.php温度の取得、アラート、CSV書き込み1wareの設定してから
index.phpCSV読み込み、webでのグラフ表示サーバーにアップロードして、ブラウザ閲覧
upload-temp.shファイルのアップロード
cron設定繰り返しの設定1分ごとに温度取得してcsvをアップロード
<?php
$deviceId = '28-01145393f0aa';
$today = date("Ymd");
$time = date("H:i");
$sensor_path = '/sys/bus/w1/devices/'.$deviceId.'/w1_slave';
$csv_dir = '/var/www/temperature/';
$csv_file = $today.'.csv';
$t = null;
//温度取得
exec("cat ".$sensor_path, $w1_slave);
if(isset($w1_slave[1])){
$tmp = explode('t=', $w1_slave[1]);
if(isset($tmp[1])) $t = $tmp[1] / 1000;
}
//アラート
if($t > 38){
exec("sudo paplay /var/www/html/noritz.wav");
}

//CSV書き込み
if(!file_exists($csv_dir)){
mkdir($csv_dir);
}
if( $handle = fopen( $csv_dir.$csv_file , 'a' ) ){
fputcsv( $handle, Array("'".$time."'", $t) );
fclose($handle);
}
return;
<?php
$today  = date("Ymd");
$csv_dir  = '';
$csv_file = $today.'.csv';
if (isset($_POST['csv_filename'])){	
  $csv_filename = $_POST['csv_filename'];	
  $csv_file = $csv_filename.'.csv';	
}
$grapgh   = '';
$csv_list_a = glob('*.csv');
rsort($csv_list_a);
$csv_list_b = str_replace('.csv','',$csv_list_a);
$csv_list = array_combine($csv_list_b,$csv_list_a);

foreach($csv_list as $csv_list_key => $csv_list_val){
    $csv_list .= "<option value='". $csv_list_key;
    $csv_list .= "'>". $csv_list_val. "</option>";
}


//CSV読み込み
if (($handle = fopen($csv_dir.$csv_file, "r")) !== false) {
    while (($line = fgets($handle)) !== false) {
     $grapgh .= '['.rtrim($line).'],'.PHP_EOL;
    }
    fclose($handle);
}else{
    echo 'no data';
}
?>
<html>
<head>
  <meta charset="UTF-8">
  <script type="text/javascript" src="https://www.google.com/jsapi"></script>
  <script type="text/javascript">
    google.load('visualization', '1.1', {packages: ['corechart']});
    google.setOnLoadCallback(drawChart);
 
    function drawChart() {
    var data = new google.visualization.DataTable();
    data.addColumn('string', 'Time');
    data.addColumn('number');
    data.addRows([
 
<?php echo $grapgh; ?>
 
    ]);
    var today = <?php echo $today; ?>;
    var fileName = <?php echo $csv_filename; ?>;
    var options = {
         title: 'Raspberry Pi 温度計 '+ fileName,
	 legend:{position:'none'},
         vAxis:{minValue:21,maxValue:50},
         height: 600,
	 lineWidth:4,
	 pointSize:6
    };
	var chart = new google.visualization.LineChart(document.getElementById('linechart_material'));
    chart.draw(data, options);
    }
  </script>
</head>
<style>
.form {
  text-align: center;
}
</style>
<body>
  <div id="linechart_material"></div>
   <form class="form" action="index.php" method="post" enctype="multipart/form-data">
    <select name="csv_filename">
      <?php echo $csv_list; ?>
  </select>
    <input type="submit" value="更新">
  </form>
</body>
</html>

おわりに

まぁこれだけの装置なら、はっきり言って「キッチンタイマーでいいんじゃない?」と言われればそれまでです(苦笑)
実際、以前はキッチンタイマー使ってましたし。

でも、「♪お風呂が沸きました♪」 のメロディが流れると、何だかちょっとうれしいんですよね。。
実際に、お風呂をあふれさせることもなくなりましたし。

あとは、ラズパイいじりの趣味ですから、作っている過程が楽しいので、自己満足の世界ですからご了承くださいませ。

DIYを楽しめて、さらに生活が便利になれば一石二鳥。

スキルも上がって自信もつくので、一石三鳥かな?

コメント

タイトルとURLをコピーしました