ラズパイと温度センサー

ラズパイと温度センサー

こんにちは!今回は、私が挑戦している「Smart Reef Tankプロジェクト」の一環として取り組んだラズパイと温度センサーの体験についてご紹介します。水槽の温度管理はサンゴの健康において重要な要素です。このシステムを使って、サンゴ水槽の温度をリアルタイムで監視し、異常時には通知を受け取れるようにしました。

目次

プロジェクトの背景と目的

サンゴ水槽を管理する上で、水温管理は極めて重要です。サンゴは水温の変化に敏感で、急激な変化は生態系に大きな影響を与えます。そのため、温度を可視化して管理し、異常があれば通知を受け取るシステムを構築することが必要だと考えました。そこで、ネットで豊富な情報を見つけることができるラズパイと温度センサーを組み合わせて、簡単なIoTシステムを構築しました。

ラズパイと温度センサーの選定

ラズパイは私にとって初めてのマイコンですが、情報が多く、電子工作にも向いているため選びました。低コストで小型なので、手軽に始められるのも魅力です。また、温度センサーには「DS18B20」を使用しています。手に入れやすく、インターフェースがシンプルであり、コードのサンプルも豊富だったので、ラズパイとの接続が容易でした。

セットアップと初期の挑戦

機器の接続

まず、ブレッドボードを使って「DS18B20」温度センサーをラズパイに接続しました。データ線をGPIO 4 (ピン7)、電源 (VCC) を3.3V、グランド (GND) をグランドピンに接続し、データ線とVCCの間には4.7kΩのプルアップ抵抗を設置しました。ハードウェアの接続が終わったら、ラズパイの「1-Wireインターフェース」を有効化します。ターミナルでsudo raspi-configを実行し、設定メニューから「Interface Options > 1-Wire」を選択して有効化しました。

初期のトラブル

セットアップ後、最初はデータが正しく取得できず、コードの見直しやケーブルの再接続を何度も繰り返しました。ラズパイの温度センサー用インターフェースがデフォルトで無効になっていることに気づくまで少し手間取りましたが、設定を有効にしてからはスムーズにデータを取得できるようになりました。

プログラミングとデータの取得

次に、Pythonで温度データを取得するコードを書き、ラズパイのターミナルにリアルタイムで温度を表示させました。データは自宅サーバにも送信され、データベースに保存される仕組みを作っています。これにより、過去のデータも含めて温度変化を追跡することができます。

import logging
import time
import mysql.connector
from w1thermsensor import W1ThermSensor

# 温度センサーの初期化
# W1ThermSensorライブラリを使用してセンサーを設定します
sensor = W1ThermSensor()

# ログファイルの設定
# 温度データとエラーメッセージを記録するログファイルを設定
logging.basicConfig(filename='temperature.log', level=logging.DEBUG)

# データベース接続を確立する関数
def connect_database():
    # MySQL接続情報の設定
    # ここには、データベース接続に必要な情報を入力します
    config = {
        'user': '※※※',        # データベースのユーザー名
        'password': '※※※',    # データベースのパスワード
        'host': '192.168.※※※.※※※', # データベースのホスト名またはIPアドレス
        'database': 'temperature', # 使用するデータベース名
        'auth_plugin': 'caching_sha2_password' # 認証プラグインの指定
    }

    try:
        # データベースへの接続を試みる
        cnx = mysql.connector.connect(**config)
        cursor = cnx.cursor()
        logging.debug("Connected to the database")
        return cnx, cursor
    except mysql.connector.Error as err:
        # エラーが発生した場合、ログに記録
        logging.error(f"Error: {err}")
        return None, None

# 温度を取得してデータベースに格納する関数
def save_temperature():
    # 温度を測定し、小数点以下1桁に丸める
    temperature = round(sensor.get_temperature(), 1)
    logging.debug(f"Measured temperature: {temperature}")

    # データベース接続の確立
    cnx, cursor = connect_database()

    if cnx is None or cursor is None:
        # 接続失敗時のエラーログ
        logging.error("Failed to connect to the database")
        return

    # データベースに挿入するSQLクエリを準備
    add_temperature = ("INSERT INTO temperature_data "
                       "(temperature, measured_time) "
                       "VALUES (%s, NOW())")
    data_temperature = (temperature,)
    try:
        # SQLクエリを実行し、データベースに温度データを挿入
        cursor.execute(add_temperature, data_temperature)
        cnx.commit() # データの変更をコミット
        logging.debug("Temperature data inserted into the database")
    except mysql.connector.Error as err:
        # エラーが発生した場合、ログに記録
        logging.error(f"Error: {err}")

    # データベース接続を閉じる
    cursor.close()
    cnx.close()

    # 温度データを情報ログとして記録
    logging.info(f'Temperature: {temperature}')

# 温度を5分ごとに取得してデータベースに格納するループ
while True:
    # 現在の時間を取得
    current_time = time.localtime()
    # 現在の分が5の倍数であれば温度を取得・保存
    if current_time.tm_min % 5 == 0:
        save_temperature()
    # 1分間待機し、再度チェック
    time.sleep(60)

ラズパイと外部pcの接続方法は、下記のキャプチャの様になっています。
グローバルIPアドレスで自宅のルータに接続し、自宅サーバに通信します。その自宅サーバを踏み台として、ラズパイに接続することができる仕組みにしています。

温度データの可視化

温度データは、グラフやチャートを通してウェブサイト上で視覚化しました。データがWebサイトに表示されると、自分が構築したシステムが形となって動いていることを感じ、とても感動しました。また、グローバルIPアドレスを設定し、外部からもアクセスできるようにしたことで、どこからでも自分の水槽の温度を確認できるようになり、プロジェクトが一段と便利になりました。
現在は温度情報を、4時間おきにLINEに通知で知らせる仕組みになっています。この仕組みをカスタマイズすることで、異常時に管理者に通知することもできます。

水槽管理アプリケーション画面

LINE通知画面

プロジェクトを通じた学びと発見

トラブルシューティング

稼働中にラズパイ本体が過熱して動作が不安定になることがあり、空調ファンを取り付けて改善しました。また、温度センサーが長時間正確にデータを取れない場合には、自動でラズパイを再起動し、再度データ取得を実行するように設定しました。

新たなアイディア

今後は、室温や湿度、気圧も取得し、環境データと水槽内の温度変化を比較して、より精密な管理ができるようにしていきます。他にも、距離センサーや漏水センサーなどを追加して、Smart Reef Tankプロジェクトを拡張する予定です。

今後の展望とSmart Reef Tankプロジェクトへの応用

データを蓄積して長期的に分析することで、水槽の最適な環境を維持するための貴重なインサイトが得られると考えています。次に導入予定のセンサーには、気圧、湿度、室温センサーがあり、Smart Reef Tankプロジェクトを通じて、さまざまな生態管理に役立てていく予定です。

Smart Reef Tankの具体的な目標

温度センサーに加え、他のセンサーや自動化機能を取り入れることで、サンゴ水槽の維持をよりスマートにしていきます。温度管理や水質管理、照明や水流の自動制御など、プロジェクトの目標に向けて拡張していきます。

まとめ

温度センサーの導入はとてもシンプルで、ネット上に情報も豊富なので、初心者でも取り組みやすいと感じました。さらにセンサーで取得したデータをグラフ化して表示することで、水槽の状態を視覚的に把握でき、達成感を味わえます。他にも多角的に環境をモニタリングすることで、Smart Reef Tankのような自動管理システムが実現できると確信しました。

読者へのメッセージ

ラズパイと温度センサーの組み合わせは、電子工作の入門として最適です。ネットに豊富な情報があるので、興味がある方はぜひ挑戦してみてください。センサーを組み合わせて環境を把握することで、新しい発見や達成感を感じられるので、思い切っていろいろなセンサーに挑戦することをお勧めします!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

「アートとテクノロジーの交差点で、新たな生態系を創る!」

美術大学を卒業した異色のITエンジニアです。3Dモデリングと電子工作を趣味に、ものづくりの世界を楽しみながら、現在は全自動サンゴ水槽「Smart Reef Tank」の開発に挑戦中。サンゴや水槽生態系への情熱を、IoT技術や自動化に結びつけることで、持続可能な飼育システムの実現を目指しています。アートとテクノロジーの融合が生む新しい水槽管理の可能性を追求しながら、日々成長と発見を重ねています!

目次