Raspberry PiとDS18B20によるプロフェッショナルな温度監視
概要
Raspberry Piは、英国のRaspberry Pi財団によって開発されたコンパクトなシングルボードコンピュータ(SBC)です。ARMベースの各種Linuxディストリビューションを実行し、GPIOピンを備えることで、センサーやアクチュエータなど多様な外部コンポーネントとの接続を可能にします。Piにはオンボードのアナログ-デジタル変換器(ADC)がないため、TMP36のようなアナログ温度センサーを直接使用することはできません。代わりに、DS18B20のようなデジタル温度センサーを用いることで、正確なシリアルベースの温度測定が可能になります。
必要なパーツ
- Raspberry Pi(最新モデルであればどれでも可)
- DS18B20デジタル温度センサー
- 4.7kΩ抵抗(標準値)
- プロトタイピングボード(ブレッドボードまたはPi-Cobbler)
- ハーフサイズブレッドボード(配線延長用、任意)
- ジャンパーワイヤ(オス-オス、オス-メスなど必要に応じて)
基本設計
ハードウェアセットアップ
基本構成は、Raspberry Pi、DS18B20、4.7kΩプルアップ抵抗、Pi-Cobbler(またはブレッドボードへの直接配線)、ジャンパーワイヤで構成されます。すべてのコンポーネントをブレッドボードに挿入することで、迅速なプロトタイピングと容易なデバッグが可能です。
配線図
DS18B20はシングルワイヤーシリアルインターフェースを使用し、複数のセンサーが同じデータラインを共有できます。Raspbian(またはその派生OS)では、適切なカーネルモジュールを読み込むと、センサーがシリアルデバイスとして認識されます。センサーはGPIOピン4(BCM 4)に接続する必要があります。これは1-Wireプロトコルをサポートする唯一のピンです。視覚的な参考資料は、AdafruitのDS18B20セットアップガイドで確認できます。
DS18B20の選択
DS18B20には以下の3つのバリエーションがあります:
- 標準DIPパッケージ(プロトタイピング用)
- ケーブル付き防水タイプ(環境モニタリングに適する)
- 高温モデル(最大125℃まで対応)
すべてのバリエーションに1-Wireインターフェースと温度変換ロジックが含まれ、デジタル読み取り値を直接Piに提供します。最新のRaspbianイメージには必要なドライバが含まれており、ファイルシステム経由で簡単にアクセスできます。
コマンドラインでの検証
配線完了後、ターミナルからセンサーを確認します:
sudo modprobe w1-gpio
sudo modprobe w1-therm
cd /sys/bus/w1/devices
ls
cd 28-xxxxxxxxxxxx # 実際のセンサーのシリアル番号に置き換え
cat w1_slave
出力の最後の行がYESで終わり、次の行に千分の1℃単位の温度値が表示されます。
ソフトウェア – 基本ロガー
以下のPythonスクリプトは、毎秒温度を読み取り、標準出力に表示します。temp_logger_basic.pyとして保存し、root権限で実行してください。
#!/usr/bin/env python3
import os
import glob
import time
# 1-Wireモジュールの読み込み
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')
BASE_DIR = '/sys/bus/w1/devices/'
DEVICE_FOLDER = glob.glob(BASE_DIR + '28*')[0]
DEVICE_FILE = f'{DEVICE_FOLDER}/w1_slave'
def read_temp_raw():
with open(DEVICE_FILE, 'r') as f:
return f.readlines()
def read_temp():
lines = read_temp_raw()
while lines[0].strip()[-3:] != 'YES':
time.sleep(0.2)
lines = read_temp_raw()
equals_pos = lines[1].find('t=')
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
temp_c = float(temp_string) / 1000.0
temp_f = temp_c * 9.0 / 5.0 + 32.0
return temp_c, temp_f
while True:
print(read_temp())
time.sleep(1)
実行すると以下のような出力が得られます:
(18.875, 65.975)
(18.875, 65.975)
(18.875, 65.975)
…
センサーファイルは保護されたシステムディレクトリにあるため、sudo python3 temp_logger_basic.pyとして実行してください。
応用設計
実運用では、ブレッドボードの代わりにはんだ付けされたPCBシールドを使用することで、より堅牢でポータブルなソリューションが構築できます。筆者はPiに直接挿せるカスタムシールドを製作し、コンパクトな黒いケースに収めました。ソフトウェアは1時間ごとに測定値をログし、MySQLデータベースに格納。データはGoogle Chartsで可視化し、明確なトレンド分析を実現しています。
応用ハードウェア
基本セットアップのすべてのコンポーネントに加え、以下が必要です:
- Adafruit Raspberry Piプロトタイピングシールド(または同等のカスタムPCB)
- オプション:エンクロージャとマウントハードウェア
詳細なガイドについては、DS18B20温度センサーガイドおよびRaspberry Piの1-Wireサポートに関するドキュメントを参照してください。
製造プロセス
- 5ドルI2C温度センサーで作るRaspberry Pi温度ロガー
- Python、SQLite、LabVIEWによるRaspberry Pi高精度温度プロファイリング
- Raspberry Pi温度・湿度ネットワークモニター – DIYセットアップガイド
- Raspberry Pi 2でDS18B20温度センサー読み取りガイド
- Raspberry PiでMaxim 1-WireセンサーとDS2482 I2Cブリッジを用いた温度測定
- Raspberry PiとPythonでリモート温度センサーを構築 – ステップバイステップガイド
- EzTempでRaspberry Pi上の温度・湿度をシームレスに監視
- Raspberry Piでサーバークローゼットの温度を正確に監視
- DIY自家醸造温度制御:Arduinoで監視・調節
- Raspberry PiでBMP085:I2C経由の高精度温度・気圧測定
- Raspberry Pi 3とPubNubでリモート気象監視