工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

DS1820ワンワイヤー温度センサーをGPIOでRaspberry Piに接続する方法

Raspberry Piで室内または屋外温度を監視するには、最小限のセットアップで可能です。本ガイドでは、DS18S20(DS1820)1-WireセンサーをGPIOピンに直接配線し、ソフトウェアで温度を読み取り、RRDtoolでデータをログ記録する方法を示します。

Raspberry Piと1-Wire

DS18S20、DS18B20、DS1822はすべてTO-92パッケージに収まる1-Wire温度センサーで、センサー、ADC、シリアルインターフェースを一体化。ピンアウトとソフトウェアインターフェースは共通ですが、コストと精度で異なります – DS18S20は±0.5℃、DS18B20は±0.5℃、DS1822も±0.5℃ですがより安価。

各デバイスは3ピン:グランド(GND、ピン1)、データ(DQ、ピン2)、電源(VDD、ピン3)。寄生電源(3–5V)により、プルアップ抵抗を用いてデータラインのみからセンサーに給電可能。

抵抗1本だけ

センサーのDQピンをPiのGPIO 4に接続。GNDをPiのグランドに、VDDをGNDに接続し、寄生電源モードを有効化。3.3VとGPIO 4の間に4.7kΩプルアップ抵抗を配置。小型ブレッドボードや直角ヘッダで配線を整理し、Piの公式ケース内に収まります。

1-Wireソフトウェアドライバ

Raspbian(またはDebian系ディストリビューション)でカーネルモジュールをロード:

sudo modprobe w1-gpio pullup=1
sudo modprobe w1-therm

pullup=1フラグは、センサーがプルアップ抵抗経由で給電されることをドライバに伝えます。ロード後、各センサーは/sys/bus/w1/devices配下のサブディレクトリとして出現。ディレクトリ名はファミリコードとセンサー固有の64ビット識別子で構成:DS18S20/DS1820はファミリコード10、DS18B20は28、DS1822は22。

各ディレクトリ内のw1_slaveには2行が含まれます。1行目は生レジスタダンプとCRCチェック。2行目はt=xxxxで終わり、ミリ度セ氏単位の温度。例:

cd /sys/bus/w1/devices
cd 10-000801b5*
cat w1_slave
0f 00 4b 46 ff ff 06 10 0c : crc=0c YES
0f 00 4b 46 ff ff 06 10 0c t=7375

値7375は7.375℃に相当。データシート精度は±0.5℃なので、真の温度は読み取り値の±0.5℃以内。

起動時にモジュールを自動ロードするには、/etc/modulesに追加:

# /etc/modules
w1-gpio pullup=1
w1-therm

ラウンドロビンデータベース(RRDtool)

長期保存と可視化にはRRDtoolが最適。インストール:

sudo apt-get install rrdtool python-rrdtool

15分ごとに値を記録し、日次集計を10年保持するデータベース定義:

rrdtool create temperature.rrd --step 900 \
DS:temp0:GAUGE:1200:-40:80 \
DS:temp1:GAUGE:1200:-40:80 \
RRA:AVERAGE:0.5:1:960 \
RRA:MIN:0.5:96:3600 \
RRA:MAX:0.5:96:3600 \
RRA:AVERAGE:0.5:96:3600

Pythonによるデータ取得

以下はw1_slaveを読み取り、RRDtoolデータベースに値を挿入する最小限のPythonスクリプト。センサーパスとデータベースファイル名は適宜調整。

import os
import rrdtool
W1_PATH = '/sys/bus/w1/devices'
DB_FILE = 'temperature.rrd'

def read_temp(sensor_id):
    with open(f'{W1_PATH}/{sensor_id}/w1_slave') as f:
        lines = f.readlines()
    if lines[1].strip().endswith('YES'):
        temp_milli = int(lines[1].strip().split('t=')[-1])
        return temp_milli / 1000.0
    return None

# 2センサーの例
temps = {
    'temp0': read_temp('10-000801b5'),
    'temp1': read_temp('28-0000045e')
}
rrdtool.update(DB_FILE, ','.join(str(t) for t in temps.values()))

スクリプトを定期的に実行(例:cron経由)してデータベースを更新し続けます。

製造プロセス

  1. 5ドルI2C温度センサーで作るRaspberry Pi温度ロガー
  2. 複数DS18B20 1-WireセンサーをRaspberry Pi接続で精密温度監視
  3. Raspberry Pi 2でDS18B20温度センサー読み取りガイド
  4. Raspberry PiとDS18B20によるプロフェッショナルな温度監視
  5. Raspberry PiでMaxim 1-WireセンサーとDS2482 I2Cブリッジを用いた温度測定
  6. Raspberry PiでTMP006赤外線温度センサーを使う – Pythonライブラリとセットアップガイド
  7. Raspberry PiとPythonでリモート温度センサーを構築 – ステップバイステップガイド
  8. Raspberry Piで気象観測ステーションを構築し、日次天気データをメール送信
  9. Raspberry Piでサーバークローゼットの温度を正確に監視
  10. HC-SR04超音波距離センサーをRaspberry Pi 3に接続 – 完全ガイド
  11. Raspberry PiでPIRモーションセンサーとLEDを制御