ラズパイで照度と温度を測定してみた【フォトトランジスタ/TMP36】

今回はRaspberry Piで、光の強さを測定できる照度計と温度計の使い方を解説していく。照度センサーはフォトトランジスタのNJL7502L、温度センサーはTMP36を使った。どちらもアナログセンサーなので、2チャネルのADコンバータMAX1118を使う。

MAX1118の使い方はこちらを参考に

照度センサー (NJL7502L)

NJL7502Lのデータシートはこちら

NJL7502Lの構造
NJL7502Lの構造

フォトトランジスタの出力電圧を測定するために組んだ回路図は次のとおり。ラズパイの+3.3V電源を NJL7502L のコレクタ(2番)につなぐ。エミッター(1番)には1kΩの負荷抵抗Rを通してグランドへつなぎ、抵抗Rにかかる電圧を照度センサーの出力電圧として MAX1118 のCH0へ接続した。

フォトトランジスタの回路例
フォトトランジスタの回路例

さて、NJL7502Lのデータシートから照度と電流のグラフを確認すると、100Luxの時33μA電流が流れるようになっている。照度と電流は比例関係にあり1000Luxの時330μAの電流が流れると言う具合に、照度が10倍になれば電流も10倍流れる関係になっている。

フォトトランジスタの照度と電流の関係グラフ
フォトトランジスタの照度と電流の関係グラフ

照度をL、電流をIとして、グラフの関係を数式に表すと次のようになる。

$$I = a \times L + b\tag{1}$$

100Luxの時33μA、1000Luxの時330μAより、a、bは次のように求められる。

$$a = 0.33 \times 10^{-6}$$

$$b = 0$$

これを(1)式に当てはめると、

$$ I = 0.33 \times 10^{-6} \times L\tag{2}$$

となる。

ところで、抵抗Rにも電流Iが流れるので電圧Voutは、オームの法則より

$$I = \frac{Vout}{R}\tag{3}$$

の関係になる。

また、R=1kΩであるから、(3)式を(2)式に代入すると、

$$ \frac{Vout}{1 \times 10^3} = 0.33 \times 10^{-6} \times L$$

となる。

これを展開して次の式となり、電圧Voutから照度Lを計算できるようになる。

$$ L = \frac{Vout}{0.33} \times 10^3\tag{4}$$

温度センサー (TMP36)

TMP36のデータシートはこちら

TMP36のピン役割
TMP36のピン役割

TMP36を使ったアナログ出力の回路図は次のようになる。+Vsはラズパイの+3.3V電源に接続、Voutは MAX1118 のCH1へつないだ。また、+VsとGNDの間の0.1μFは安定化させるためのおまじない。入れておこう。

TMP36の回路例
TMP36の回路例

さて、TMP36は、電源電圧が2.7〜5.5Vの範囲で動作する。+25℃の時、Voutからは750mV出力され、1℃上がるごとに10mV出力電圧が上がっていく。よって、ADコンバータで TMP36 のVoutを検知できれば、次の簡単な式で温度Tが導き出される。

$$T = \frac{Vout - 0.75}{0.01} + 25$$

TMP36 の測定できる温度は−40°C〜+125°Cとなっている。また精度は±1℃である。基準電圧を3Vとした場合、1℃の変化を測定できる出力電圧の最小単位ΔVは次の計算から導き出される。

$$ΔV = \frac{3}{125 - (-40)} = 0.018$$

つまり、1℃の変化を検知するのに、18mVの変化をADコンバータ側で検知できればよい。max1118 の分解能は8bitなので、リファレンス電圧を仮に3Vとして、256で割れば12mVが導き出される。これは TMP36 の分解能18mVより小さいので、max1118 の組み合わせで十分だと言える。

照度と温度を測定するPythonプログラム

ラズパイとMAX1118をつないで実験中
ラズパイとMAX1118をつないで実験中

ADコンバータ MAX1118 へ次にように接続して、プログラムを組んでいく。

MAX1118名称役割接続先
1Vdd正電源電圧+5V
2Ch0アナログ電圧入力NJL7502L
3Ch1アナログ電圧入力TMP36
4GNDグランドGND
5(REF)I.Cリファレンス入力3.3V
6CNVST変換/スタート入力SPIO CS0 (GPIO 8)
7DOUTシリアルデータ出力SPIO MISO (GPIO 9)
8SCLKシリアルクロックSPIO SCLK (GPIO 11)

照度と温度を測定するPythonプログラムがこちら。

# -*- coding: utf-8 -*-

import spidev
import time
import RPi.GPIO as GPIO


# MAX1118データシート
# http://akizukidenshi.com/download/ds/maxim/max111x.pdf
#
# NJL7502L
# http://akizukidenshi.com/download/NJL7502L.pdf
#
# TMP36
# https://www.analog.com/media/jp/technical-documentation/data-sheets/TMP35_36_37_jp.pdf

Vref = 3.335  # ラズパイの3.3V電源をテスターで実測

GPIO.setmode(GPIO.BCM)
GPIO.setup(8, GPIO.OUT)  # CNVST

spi = spidev.SpiDev()
spi.open(0, 0)  # bus0,cs0
spi.no_cs = True  # CSを使わない
spi.max_speed_hz = 1000000  # 1MHz
spi.bits_per_word = 8


def sendCNVST(CH):
    if CH == 0:
        GPIO.output(8, GPIO.LOW)
        GPIO.output(8, GPIO.HIGH)
        GPIO.output(8, GPIO.LOW)
    elif CH == 1:
        GPIO.output(8, GPIO.LOW)
        GPIO.output(8, GPIO.HIGH)
        GPIO.output(8, GPIO.LOW)
        GPIO.output(8, GPIO.HIGH)
        GPIO.output(8, GPIO.LOW)


def getVolts():
    adc = spi.xfer2([0x00])
    return adc[0] / 255.0 * Vref


time.sleep(1.0)

try:
    while True:
        sendCNVST(0)
        v0 = getVolts()
        lux = v0 / 0.33 * 1000

        time.sleep(0.1)

        sendCNVST(1)
        v1 = getVolts()
        temp = (v1 - 0.75) / 0.01 + 25.0
        # 25C = 0.75V
        # 10mV/C

        print("Lux: {:.0f}Lux (ch0: {:.3f}V)".format(lux, v0))
        print("Temp: {:.0f}C (ch1: {:.3f}V)".format(temp, v1))

        time.sleep(1.0)

except KeyboardInterrupt:
    spi.close()
    GPIO.cleanup()

Ambientへデータ送信

先ほどのプログラムで取得したセンサーデータを保存して、ウェブブラウザでグラフ表示できたらとても便利だ。それを可能にしてくれるのが、Ambientの無料のクラウドサービスだ。こちらの記事では、Raspberry PiからAmibentへデータを送る方法を説明しているのでよかったら参考に。

この記事で扱った関連製品はこちら

MCP3008 8チャネル 10ビット A/Dコンバータ(SPI接続)
MCP3008 8チャネル 10ビット A/Dコンバータ(SPI接続)

マイクロチップの10ビットADコンバータです。 ■主な仕様 ・8チャンネル ・16ピンDIP ・2.7V~5.5V動作(VREF=VDD固定) ・SPIインターフェース

Amazon
Raspberry Pi Zero W - ヘッダー ハンダ付け済み - ラズベリー・パイ ゼロ W ワイヤレス
Raspberry Pi Zero W - ヘッダー ハンダ付け済み - ラズベリー・パイ ゼロ W ワイヤレス

Amazon
正規代理店商品 Raspberry Pi 4 Model B (8GB) made in UK element14製 技適マーク入
正規代理店商品 Raspberry Pi 4 Model B (8GB) made in UK element14製 技適マーク入

Amazon

Raspberry Piの参考書

Raspberry Pi クックブック 第2版 (Make:PROJECTS)
Raspberry Pi クックブック 第2版 (Make:PROJECTS)

本書は、全世界で多くのユーザーの支持を集めているマイコンボード「Raspberry Pi」を使いこなすためのレシピ集です。ハードウェアの基本、オペレーティングシステムの使い方、ネットワーク接続、Pythonプログラミングの基本を紹介した上デ、実際の作品製作に必要になる、高度なPythonプログラミング、GPIO(汎用入出力)、モーター、センサー、ディスプレイなどの使い方へと解説を進めていきます。

Amazon
写真や図解でよくわかる ラズパイZeroを使い倒す本 Raspberry Pi Zero/Zero W対応
写真や図解でよくわかる ラズパイZeroを使い倒す本 Raspberry Pi Zero/Zero W対応

本書ではRaspberry Pi Zero / Zero Wの概要から必要な周辺機器の説明、OSの導入やセットアップなどといった準備、そしてLinuxに初めて触れる人に向けてLinuxの基礎やシェルの操作などを解説しています。また、準備が整ったら実際に電子部品をRaspberry Pi Zero / Zero Wで制御する方法も解説しました。

KindleAmazon
Raspberry Pi ZeroによるIoT入門- Zero W 対応
Raspberry Pi ZeroによるIoT入門- Zero W 対応

本書は、大人から子供まで、初心者の方でも、ラズパイZeroとラズパイZero WをIoTのデバイスとして使いこなせるようになることを目的とした入門書です。また、ラズパイZeroとラズパイZero WをUSBケーブル1本でパソコンに接続できる便利な「Zero over USB」について、日本で初めて詳しく解説しました。

Amazon

最後まで読んでいただきありがとうございました。

「この記事が参考になったよ」という方は、ぜひ記事をシェアをしていただけるととても嬉しいです。

今後も有益な記事を書くモチベーションにつながりますので、どうかよろしくお願いいたします。↓↓↓↓↓↓↓

あなたにおすすめ