スマートアクアリウムのススメ① Raspberry Pi で 水温測定【DS18B20】

北海道で買ってきたまりもをこぢんまりと育てるつもりが、どんどんアクアリウムにハマって後戻りできない状態のgoldear@goldear820です。

アクアリウムで非常に重要になってくるのが「水温管理」ですが、我が家はNASが24時間稼働しているせいか異常に暑いです。

熱帯魚飼育には水温管理が大事!夏の暑さ対策をご紹介♪
実は日本の夏は熱帯魚にとって大変!適温を知り、適切に水温管理を行うことが大切です。なぜ大変なのか、そして水温を下げる方法など、解説いたします。適切な対策を知り、快適な水槽環境を整えてあげましょう!

まずスマートアクアリウムの第一歩として、水槽の「水温測定」をできるようにしてみます。

スポンサーリンク

全体図

簡易的な全体図になります。

スマートアクアリウムはRaspberry Piをベースに実装していきます。

Raspberry Piの持つGPIO経由で各種センサと接続してセンサ情報を収集、Raspberry Pi自身にセンサ情報を処理させます。

今回は温度&湿度センサDHT22を使って、機能を追加していきます。

今後、機能拡張を行うごとに全体図は更新していきます。現時点で実装予定の機能は以下のとおりです。

・室温/湿度測定
・CO2測定
・TDS(Total Dissolved Solids)測定
・センサ情報のOLED表示
・映像ストリーミング
・Webサーバにセンサ情報公開

準備物

Raspberry Pi

以前GPSロガーを作るために買ったが、GPSを全く補足できず余っていたRaspberry Pi ZERO WHを使用します。

Raspberry Piシリーズであればどの機種でも問題なく動きますが、機能拡張による処理増大・カメラモジュールによるリアルタイム映像配信を実施するにはZEROシリーズはあまりにも非力です。

今はZERO WHで実装しつつ、本番環境では2023年9月28日に発表された Raspberry Pi 5 に乗り換えようと考えています。(以下、ラズパイとして記載)

Raspberry Pi 5販売のご案内 - Raspberry Pi Shop by KSY

水温センサ DS18B20

水温センサ DS18B20 は中華製のよく分からないブランドのものを適当に選択しました。DS18B20であれば使い方は同じでしょう。

購入の際の注意点として2点あります。

・防水仕様であること

 DS18B20には非防水タイプのモジュールも販売されているため、水槽に使用するために防水タイプであることを確認しておきます。

・アダプタの有無
 プルアップ・プルダウン抵抗のアダプタ付きのものとセンサのみのものが販売されています。センサのみの場合、別途4.7k抵抗を用意する必要があります。

ブレッドボード & ジャンパワイヤ


今回はDS18B20センサとラズパイをジャンパワイヤで直接接続するため使用しませんが、今後拡張するセンサを挿していくブレッドボードは必須です。またDS18B20センサのみのタイプはコネクタのオスメス変換が必須なので注意が必要です。

設定

Raspberry Pi Zero WH でGPSロガーを作ってみる - 第01回 スタートアップ編
このブログで旅行のお供にGPSロガーアプリをオススメしてきたgoldear@goldear820です。 以前から気にはなっていたものの手を出さずにいた自作GPSロガーだったのですが、仕事でLinuxソフトに触れる機会が多くなり、慣れるという...

ラズパイの初期セットアップは以前、記事にまとめましたので、そちらを参考にどうぞ。

全体図と同様にセンサとラズパイを接続してから、ラズパイの設定を行います。まず「1-Wire」を有効化します。

pi@raspberry:~ $ sudo raspi-config

上記コマンドを実行することで、設定画面が表示されます。


「3 Interface Options」を選択します。
※ Debian 12ベースのRaspberry Pi OS「Bookworm」の設定画面です。バージョン違いで設定項目が異なる可能性があります。


「I6 1-Wire」を選択します。


「Yes」を選択して1-Wireが有効化されます。

はじめての 1-Wire® | テクニカルスクエア | 丸文株式会社
丸文株式会社よりアナログ・デバイセズ社のはじめての1-Wire®を紹介します。

1-Wireについて上記のページが分かりやすいです。

次にちゃんとデバイスとして認識しているか確認します。

pi@raspberry:/sys/bus/w1/devices/28-0000001548b9 $ cat w1_slave
b6 01 7f 80 7f ff 0a 10 2d : crc=2d YES
b6 01 7f 80 7f ff 0a 10 2d t=27375

ラズパイがデバイスを正常に認識している場合「/sys/bus/w1/device/28-XXXXXXXXXXXX 」というファイルができています。※XXX は固有番号

「t=27375」と読み出した値が水温になります。値は1000倍されているので、水温は27.375℃と分かります。

毎回この値を読み出すのは面倒なので、pythonプログラムを組んで水温を取得します。

実装

GitHub - timofurrer/w1thermsensor: A Python package and CLI tool to work with w1 temperature sensors like DS1822, DS18S20 & DS18B20 on the Raspberry Pi, Beagle Bone and other devices.
A Python package and CLI tool to work with w1 temperature sensors like DS1822, DS18S20 & DS18B20 on the Raspberry Pi, Be...

「w1thermsensor」モジュールを使用して、サクッと水温を取得します。

pi@raspberry:~ $ pip install w1thermsensor

開発環境によってインストールコマンドが apt-get install を使うのか pip install を使うのか異なります。私はpython仮想環境にインストールしていくので、上記コマンドでインストールしています。

#!/usr/bin/env python3

from w1thermsensor import W1ThermSensor

def main():
    # Create instance 
    temp_sensor = W1ThermSensor()

    # Get water temperature
    temp = temp_sensor.get_temperature()
    print("水温:{0:.2f}℃".format(temp))

    return

if __name__ == "__main__":
    main()

GPIOピンアサインとか必要ないです。サクッとコーティングしてみました。

動作確認

DS18B20センサを水の入った器に付け始めたら取得したが下がることを確認できました。氷を入れると一気に下がるので分かりやすいです。

pi@raspberry:~/work/smart_aquarium/script $ python ds18b20.py
水温:24.00℃
pi@raspberry:~/work/smart_aquarium/script $ python ds18b20.py
水温:19.88℃

作成したpythonプログラムを実行して水温取得してコンソールに出力することができました。

まとめ

スマートアクアリウムの第一歩として水槽の「水温測定」を行いました。水温だけ分かっても何ができるのか状態なので、これから機能拡張を行い使い勝手の良いシステムに仕上げていきます。

・温度&湿度測定の実装

スマートアクアリウムのススメ② Raspberry Pi で 室温&湿度測定【DHT22】
冬場はPC暖房で過ごすgoldear@goldear820です。 前回ススメ①で水槽の水温を測定できるようにしましたが、今回は水槽を配置している部屋の温度・湿度を測定できるようにします。 私の水槽は25x17x21cmの小型水槽なので、特に...

・TDS測定の実装

スマートアクアリウムのススメ③ Raspberry Pi で TDS測定【KS0429】
Raspberry Pi のセンシングにハマっているgoldear@goldear820です。 今回はTDS(Total Dissolved Solids 総溶解固形物)をラズパイで測定するのですが、しっかり意味を理解していないと全く意味の...

コメント