Raspberry Pi でクラフトビール発酵装置を作ろう!

crafts ラズパイでクラフトビール発酵槽!

発酵に大切なものといえば、

「発酵温度

発酵が適正範囲より高くなってしまうとオフフレーバーと呼ばれる臭みができたり、適正範囲より低くなってしまうと発酵が進まずに美味しいビールができません。

外出先から「今日暑いけど、温度大丈夫かなぁ」なんてことありますよね。たしかに、エアコンをつけっぱなしにすれば一発で解決する問題ですが、発酵が終わるまでの長期間、エアコンをつけておくのはエコじゃないし、電気代ももったいないので僕はやりたくありません。

この記事では、Raspberry Piを使って、できるだけ安く夏場も冬場も温度管理ができるクラフトビール発酵装置の作り方を説明したいと思います。このTipsは発酵装置に限らず、アクアリウムなどにも応用ができるので、そちらから来られた方もぜひ読んでいってくださいね。

今回説明する部分

Raspberry Piで水温を取得、スマホやPCからリアルタイムに確認できるようにする!

(長くなるのでキリがいいところで複数記事に分けて説明します)

必要なもの

  • Raspberry Pi
  • ADコンバーター(MCP3002)
  • サーミスタ(103-AT-11)
  • 抵抗(10 kΩ, 4.7 kΩ)
  • コンデンサ(100 μF)
  • HTTPサーバー(phpが動作するレンタルサーバー)

今回は秋月に水没できるサーミスタが売っていたので、それを使っていきたいと温度の取得にサーミスタとADコンバーターを使います。

ジャンパ線とかブレッドボードは適宜用意してくださいね!

サーミスタ

サーミスタは、温度によって電気抵抗が変わるセンサーです。
今回は秋月電子で購入しました。金額は200円でした。
通販でも購入できるので確認してみてください。

ADコンバーター

サーミスタからの信号は電圧です。
電圧はアナログ信号なので直接Raspberry Piに入れることができません。
そこでADコンバーターを使って電圧をデジタル値に変えて入力します。今回は秋月電子でMCP3002を入手して使いました。金額は180円でした。

配線図

この電圧Voutからサーミスタの抵抗値を求め、抵抗値から温度が求められます。

余談ですが、抵抗は秋月だとバラ売りがなかったので、秋葉原にあるバラ売りしてくれるお店で購入しました。一本10円。

Raspberry Piから温度取得

ラズパイ側で以下のPythonコードを作成し実行します。

実行前の注意点

  • importしたモジュールは必ず事前にインストールしてください。($ pip install モジュール名)
  • Raspberry Piの設定からSPI通信をONにしてください
  • inputdata.phpはラズパイから送られたデータをサーバー側でファイルに書き込むためのプログラムです。パスと、POSTで値を送信する際のnameは環境に合わせて書き換えてください。
  • サーミスタの各定数は、103-AT-11のものです。

実行するとサーミスタから取得された温度が画面に表示されているはずです。

また、取得したデータはHTTPサーバー側に送られています。

ADコンバーター(MCP3002)には、既存のモジュールが用意されており、たった1行で値を取得できました。私のような素人にはありがたい限りです。

#!/usr/bin/env python
#coding: utf-8
import time
import math
import requests
from datetime import datetime

from gpiozero import MCP3002 #ADコンバータ用モジュール

#サーミスタへの入力電圧
Vref=5.00000

#バランス抵抗の抵抗値(10kΩ)
bar_res=10000.0

#B定数(サーミスタの仕様書より)
b_val=3435.0

#25℃での抵抗値(サーミスタの仕様書より)
ther_rt0=10000.0

#基準温度(25℃)
t0=25.0

#HTTPサーバー上のinputdata.phpへのパス
url="http://hogehoge.com/inputdata.php"

while True:
    pot=MCP3002(channel=0) #ADコンバーターCH0から電圧の取得

    #電圧からサーミスタの抵抗値を計算
    ther_vol=pot.value*Vref
    ther_res=(Vref/ther_vol-1)*bar_res #サーミスタの抵抗
    
    #抵抗値を温度に変換し、小数点1桁で丸める
    ther_temp=round(1/(math.log(ther_res/ther_rt0)/b_val+(1/(t0+273)))-273,1)

    #日時の取得
    dtime=datetime.now().strftime("%Y/%m/%d %H:%M:%S")
    
    #カンマ区切りで日時と温度を結合し、画面に出力
    ther_data=dtime+','+str(ther_temp)
    print(ther_data)
    
    #サーバーへPOSTで受け渡し
    send_data=ther_data+'\n' #改行コードの追加
    try:
        ferm_condition={'名前': send_data} #名前はinputdata.phpと統一
        r = requests.post(url, data=ferm_condition)
    except requests.RequestException as e: #avoid error stop
        print(e)
        
    time.sleep(300) #300秒に1回実行する

HTTPサーバー側の設定

サーバー側でデータを受け取るための設定です。以下のようなファイルをサーバーに置きます。
getdata.pyから送られてくる温度データをデータファイルに書き込む動作をさせています。これで書き込まれない場合はデータファイルのファイルのパスが間違っていないかどうか、パーミッションが正しいかどうかを確認してみてください。

<?php
echo $_POST["名前"];

$a = fopen("サーバー上にあるCSVファイルのパス", "a");
 @fwrite($a, $_POST["名前"]);
 fclose($a);
?>

ここまでで、Raspberry Piで温度を取得し、サーバー上のデータファイルを更新できるようになりました。

長くなりますので、グラフ作成は次回にしたいと思います。