VEML6075 という UV インデックスセンサーを入手して Raspberry Pi で動かしてみました。UV インデックスセンサーの比較は英語ですがここ が詳しそうです。UV インデックスの数字の意味に関してはこのあたりが参考になります。
しかし Adafruit をはじめ既に VEML6705 の製品はほぼ売っていません。SI1145 や GUVA-S12SD なら引き続き販売されているようですが Adafruit の SI1145 ページにも VEML6075 を推奨すると書いてあり UV Index のセンサーとしては VELM6075 が優秀なようです。しかしなぜかは不明ですが製造元の Vishay がが製造を辞めてしまったようです。*
UV インデックスセンサー使ってみると言っても Adafruit のライブラリを使うので簡単です。まず CircuitPython ライブラリと adafruit-blinka (Blinka) をインストールします。CircuitPython とは MicroPython の一種で、adafruit-blinka は CircuitPython の API を Raspberry Pi では RPi.GPIO に変換するためのもののようです。Raspberry Pi だけではなく Arduino などでも使えるようです。*
OS のパッケージ最新にして python3-pip をインストールします。
$ sudo apt update && sudo apt upgrade -y
$ sudo apt-get install python3-pip
$ sudo pip3 install --upgrade setuptools
次に adafruit-python-shell を pip3 でインストールし raspi-blinka.py という名前のスクリプトをダウンロードします。
$ cd ~
$ sudo pip3 install --upgrade adafruit-python-shell
$ wget https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/master/raspi-blinka.py
$ sudo python3 raspi-blinka.py
raspi-blinka.py を実行すると adafruit-blinka がインストールされます。最後は Y と答えて Enter を押すと Raspberry Pi が再起動します。
~ $ sudo python3 raspi-blinka.py
This script configures your
Raspberry Pi and installs Blinka
RASPBERRY_PI_ZERO_W detected.
Updating System Packages
<snip>
Blinka Successfully installed Adafruit-PureIO-1.1.9 adafruit-blinka-6.18.0 pyftdi-0.53.3 pyusb-1.2.1 rpi-ws281x-4.3.1 sysv-ipc-1.1.0
DONE.
Settings take effect on next boot.
REBOOT NOW? [Y/n] Y
adafruit-blinka が正常にインストールされたかはここのコードを使って確認することができます。
再起動が完了したら veml6075 用のライブラリ (adafruit-circuitpython-veml6075) をインストールします。同時に adafruit-circuitpython-busdevice もインストールされます。
~ $ sudo pip3 install adafruit-circuitpython-veml6075
adafruit-circuitpython-veml6075 が正常にインストールされていれば以下のコマンドを実行した際に特にエラーなどは出力されません。
~ $ python3 -m adafruit_veml6075
配線はここにある通りこんな感じです。SparkFun や Garvity のものは I2C のケーブルを使って接続できるので便利です。
コードは以下のような感じです。
import time, board, busio
import adafruit_veml6075
interval = 3
i2c = busio.I2C(board.SCL, board.SDA)
while True:
try:
veml = adafruit_veml6075.VEML6075(i2c, integration_time=100)
print("UV index:", veml.uv_index)
time.sleep(interval)
except KeyboardInterrupt:
break
日中帯に太陽の方向にセンサーを向けて (窓は開けたほうが良いかもしれません) 上記を実行すると冬なら以下のような値を返します。室内で実行すると 0 に近い値が返ってくると思います。
~ $ python3 ./veml6075.py
UV Index: 0.6220514149999998
UV Index: 0.7128853399999999
UV Index: 0.74213456