GY-30 照度センサーで明るさを数値で測る方法(BH1750FVI + Raspberry Pi Pico)

目次

はじめに

電子工作をしていると「光センサー」を使いたい場面がよく出てきます。
前回の記事ではフォトレジスタを紹介しました。安価でシンプルに明るさを検知できる便利なパーツでしたが、あくまで「相対的に暗い・明るい」を判断するもので、正確に数値として照度を測るのは得意ではありません。

そこで今回紹介するのが GY-30 照度センサー。
このモジュールは BH1750FVI という専用ICを搭載していて、周囲の明るさを直接 ルクス (lx) という単位で返してくれます。スマートフォンの自動輝度調整や、オフィスの照度計に使われる方式と同じで、精度はぐっと上がります。

「明るい/暗い」を超えて、「今ここは何ルクス?」と知りたいときにぴったりなセンサーです。

GY-30とは何か?センサーの特徴

GY-30 は BH1750FVI という環境光センサーを搭載したモジュールです。
内部で光を受けたフォトダイオードの電流を IC が直接 A/D 変換し、ルクス (lx) 単位のデジタル値を I²C 通信で返してくれます。

ポイント

  • アナログ回路不要
    前回の記事で紹介したフォトレジスタは抵抗値をADCで読み取りましたが、BH1750は内部で処理済み

  • 高精度
    1 lx から最大 65,535 lx まで計測可能。室内から屋外直射日光までカバー

  • デジタル出力
    I²C なので、Raspberry Pi Pico でも簡単に読み取れる

日常での利用例

・照度計(部屋の明るさを定量的に測る)

・スマートライトの自動調光(暗くなったら照明 ON)

・ロボットの環境認識(昼夜の判定)

・ディスプレイの輝度自動調整(スマホと同じ原理)

接続方法と配線例(Raspberry Pi Picoの場合)

Raspberry Pi PicoGY-30
VSYS(39番)VCC
GND(38番)GND
GP0(1番)SDA
GP1(2番)SCL

測定サンプルコードと動作確認

from machine import Pin, I2C
import time

# I2C初期化
i2c = I2C(0, scl=Pin(1), sda=Pin(0), freq=100000)

BH1750_ADDR = 0x23  # デフォルトアドレス
CONT_H_RES_MODE = 0x10  # 1lx分解能, 連続測定

# 測定モード設定
i2c.writeto(BH1750_ADDR, bytes([CONT_H_RES_MODE]))

def read_lux():
    data = i2c.readfrom(BH1750_ADDR, 2)
    raw = (data[0] << 8) | data[1]
    return raw / 1.2  # データシートより換算

while True:
    lux = read_lux()
    print("Light Level: {:.2f} lx".format(lux))
    time.sleep(1)

フォトレジスタとの違い(前回記事との比較)

項目フォトレジスタGY-30(BH1750FVI)
出力抵抗値変化(アナログ)ルクス値(デジタル)
接続Pico の ADC ピンI²C (SDA, SCL)
精度簡易的(相対的な明るさ)高精度、絶対照度
回路抵抗分圧が必要モジュール単体でOK

まとめ

前回のフォトレジスタは「安い・簡単・相対的」な光センサー。
今回の GY-30 は「正確・便利・数値化」できる光センサー。

使い分けとしては、

  • LEDを光/暗でON/OFFするだけ → フォトレジスタで十分
  • 数値として明るさを測定したい → GY-30 が適任
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次