はじめに
熱帯魚を飼っているのだが夏場の水温がどれくらい上がっているか気になっていたので、せっかくなら温度センサーとラズベリーパイを使って温度管理システムのきっかけとなるようなものを作ろうと思った。
水温センサーは、安価で実装事例の多い、DS18B20を使用することにした。
水温センサーは、Amazonで購入できる。
https://www.amazon.co.jp/gp/product/B07PB9VGQ4/ref=ppx_yo_dt_bz_asin_title_o02_s00?ie=UTF8&psc=1
開発環境
- macOS Ventura13.4
- Python 3.11.2
- Raspberry Pi OS (64-bit)
準備するもの
- Raspberry Pi4 ModelB 4GB
- 水温センサー DS18B20
- ジャンパーワイヤー
- ブレッドボード
- はんだごて
ラズベリーパイの設定
OSのセットアップは完了しているものとします。
セットアップ方法は、他記事などで調べてください。
1-Wire通信を有効にする
raspi-config
コマンドでメニューを開く
sudo raspi-config
「3 Interface Options」→「I7 1-Wire」→「Yes」の順に選択する
boot/config.txtに以下を設定
dtoverlay=w1-gpio,pullup=on
モジュールのインストール
python実行ファイルを配置する位置に移動します。
cd /home/ds18b20/
Pythonに関するモジュールをインストール
仮想環境の作成
python -m venv env
仮想環境へアクティベート
source env/bin/activate
ライブラリのインストール
pip install w1thermsensor
水温センサー(DS18B20)の準備
配線を半田付けする
水温センサーは購入時のままだと、配線が剥き出しでブレッドボードに結線できないので、ジャンパー線3本それぞれにハンダ付けして使えるようにした。
ラズベリーパイに配線する
DS18B20の配線は以下のように接続します。
- 赤 (5V):ラズベリーパイの5V [1番ピン] へ接続
- 黒 (GND):ラズベリーパイのGND [39番ピン] へ接続
- 黄 (信号線):ラズベリーパイの[7番ピン]へ接続
ブレッドボード上で黄色の信号線ラインと5Vラインを4.7kの抵抗で接続します。
配線図
配線後の実物が以下。
プログラムの作成
ラズベリーパイ上で実行するpythonファイルは以下。
from w1thermsensor import W1ThermSensor
import time
def main():
ds18b20_sensor = W1ThermSensor()
while True:
try:
temperature = ds18b20_sensor.get_temperature()
print("{0:.3f} C".format(temperature))
time.sleep(3)
except Exception as e:
print(e)
break
return
if __name__ == "__main__":
main()
プログラムの実行
(env) $ python ds18b20.py
28.312 C
28.375 C
3秒おきに温度が表示されます。
終わりに
水温を測定してみたところ、27~28度と特に熱帯魚にとって冷却が必要な水温ではなかったので、一安心。
逆に冬は水温が下がり過ぎてしまいそうなので、ヒーターを付けて温度調整する必要がありそう。
あとは、温度監視しやすいようにWebアプリ化して常時監視できるようにもしていきたい。