RaspberryPi
紫外線をはかる

  紫外線の浴び すぎは、日焼け、しわ、シミ等の原因となるだけでなく、長年紫外線を浴び 続けていると、時には良性、悪性の腫瘍や白内障等を引き起こすことがあ るといいます。気象庁では紫外線の計測、データの公開を行っています。しかしながら最近その観測態勢が縮小され、「つくば」のみに集約され、あとの地点はコンピュータによる、解析値のみとなりました。
 紫外線は刻々と変化するので、リアルタイムにその値を知るにはコンピュータ解析ではなく、実測に勝るものはありません。最近半導体による紫外線センサーが安価に手にはいるようになりました。ここでは、半導体センサーを用いて計測器を自作・計測しています。

 (2018/03/29公開 ) 
紫外線には3種類
有害紫外線ネットワークによる

  紫外線は生物体に及ぼす影響の相違から、波長315nm〜400nmのA領域紫外線(UV-A)、波長280〜315nmのB領域紫外線( UV-B)、および波長280nm以下のC領域紫外線(UV-C)に分類されます。
 人体への影響は波長の短い紫外線の方が大きいですが、紫外線(UV-C)は空気中の酸素分子とオゾン層で完全にさえぎられて地表には届きません。B領域紫外線(UV-B)は、オゾン層などにさえぎられて地表に届く量が減りますが、人体にとって有害であることから、「有害紫外線」と呼ばれることもあります。また、A領域紫外線(UV-A)は、UV-BやUV-Cに比べて影響は小さいですが、その多くが地表に届くため、長い時間あたると肌などに影響があることが懸念されています。
 紫外線は、太陽光(日射)の一部であり、基本的な性質は可視光線と同じですが、大気中での散乱も相当に大きく、薄い雲では80%は透過し、太陽から直接届く紫外線量と、散乱し届く紫外線量はほぼ同量であることがわかっています。
 このように紫外線は波長によって強度が大きく異なるため、紫外線の強さをわかりやすく表現するには工夫が必要です。このための指標がUVインデックスです。

UVインデックスの求め方
 UVインデックスの求め方は少々やっかいで、波長別紫外線強度(Eλ 下のグラフの青線)を波長毎の人体への影響の大きさ(Ser グラフの赤線)で重み付けし、250〜400nmの波長で積分することにより得られます。日常生活で使いやすい簡単な数値とするために、25mW/uで割って指標化したものがUVインデックスです(左に定義式を示します)。



Icie は紅斑紫外線量(mW/u)、Eλは波長別紫外線強度[mW/(u・nm)]、Serは波長毎の人体への影響、IuvはUVインデックスを示す。
気象庁のホームページ
"UV Spectral Irradiances & Erythemal Action Spectrum". NOAA. 2006.

半導体によるUVセンサー
 気象庁で紫外線の計測はブリューワー分光光度計が用いられています。これは、回折格子を用いて太陽光を分光し0.5nm毎の紫外線強度を測定する大変複雑な測定器です。また、市販されている紫外線放射計は干渉フィルタ、蛍光体、カットフィルタによって、太陽光から紫外放射のみを取り出してその強さを測定しておりこれも高価です。(たとえば英弘精機株式会社
 一方、半導体(フォトダイオード)による紫外線センサーが開発され、アマチュアが紫外線計測器を簡単に自作することができます。デバイス自体は一辺が4mm程度の極く小さいもので、手作業で半田付けは不可能です。ハンダ付けが可能なブレイクアウト基板がいくつか市販されており、検索すると次のような製品がヒットします。(いずれも1000円程度)

型番 半導体メーカ ブレイクアウト基板 波長に対する出力特性(データシートより) インターフェース
VEML6070 Vishay ストロベリー・リナックス

I2C
ML8511 Lapis SparkFun

スイッチサイエンス


アナログ

 VEML6070はUV-Aのみに感度があり、ML8511はUV-AとUV-Bの領域に感度があります。有害紫外線といわれるUV-Bも計測するため、ML8511を用い紫外線センサーを作っていくこととします。

ML8511による紫外線センサー
 ML8511はこの手のセンサーとしては珍しく日本製です。沖電気工業製で2007年に発表されました。本センサは、ノイズが少なく高集積化が容易に行えるSOI(Silicon on Insulator)-CMOS技術を用い、従来は外付け部品として用意する必要のあったオペアンプを内蔵しています。紫外線のフォトダイオード出力電圧が低いのが一般的ですが、増幅しているため本センサのアナログ電圧をA-Dコンバータに直接接続でます。また出荷前に個々のセンサーのバラツキに応じ回路部を校正することで,従来にない感度特性の均一化が可能となるとしています。そのご沖電気の半導体部門は、ローム傘下となりラピスセミコンダクタとなりました。ML8511は優れものですが、現在製造中止、ブレイクアウトメーカの残った在庫が手に入るみです。わたしはSparkFunのブレイクアウトを国内のサイトでみつけ予備を含め購入しました。再生産を期待します。


ML8511の出力電圧からUVインデックスを計算する
 ML8511の出力は、太陽光のうち、上の特性グラフに合致するスペクトラムに比例する電圧を出力します。この電圧からUVインデックスの値に変換する必要があります。本来は上の定義式の積分をしなければいけませんが、ここでは簡便にすませます。その方法がラピス社のML8511アプリケーションノートにあります。
 出力電圧VoはML8511データシートによれば、紫外線量UV = 0のとき1.0V、UV = 10mW/cuのとき(すなわち100000mW/uのとき)、2.2Vです。UV を単位mW/uであらわすと
 Vo = 1.2 * UV /100000 + 1.0
すなわちは
 UV = (Vo - 1.0) /1.2 * 100000
UV のうち、UV-AとUV-Bの割合は地表においてつぎの値が知られています。
 UVa = UV * 94.1%
 UVb = UV * 5.9%
一方、人体への影響の大きさSerはグラフの赤の通り変化しますが、UV-AとUV-Bそれぞれ平均値SaとSbで代表値とします。すなわち
 Sa = 0.00071
 Sb = 0.05220
UVインデックスIuv は上記積分をつぎのようにもとめます。
 Iuv = (UVa * Sa + UVb * Sb) / 25
   = (0.941 * 0.00071 + 0.059 * 0.05220) * UV / 25
Voとの関係式を代入すると
 Iuv = 12.49 * Vo - 12.49

これによりML8511の出力電圧からUVインデックスを求めることができます。



工作
 ML8511はアナログ出力ですのでRaspberryPiと接続するにはA-Dコンバータが必要です。A-Dコンバータは16ビット4チャンネルA/DコンバータADS1115が手元にありましたので、これを用いました。出力はI2Cインターフェースです。チップはTI社製ですが、ブレイクアウト基板が Adafruit から発売され入手できます。データシートはこちら

構成は
 ML8511(アナログ出力)>ADS1115(I2Cインターフェース)>RaspberryPi(LAN接続)>WindowsPC

となります。

 ML8511とADS1115をひとまとめにして、適当なケースに入れ、RaspberryPiとはケーブルで接続します。ケーブルとしては雷センサーと同様にLANケーブルを用います。I2Cインターフェースは長延な伝送には適さず、接続の静電容量は400pF以下とされています。一般的なCAT5のLANケーブルは1mあたり50pFで優秀です。実験の結果3mほど離してもデフォルトの速度でエラー無く動作しました。LANケーブルは4対のより線で構成されていますので、対の片方をGround線としなければ性能が出ません。SDA、SCL、VDDそれぞれにGround線と共に1対を割り当てました。(決まりはありませんが、とりあえず下の表のように)

 LANケーブル        I2Cインターフェース 
 1   Ground 
 2   空き
 3   Ground 
 4   SDA 
 5   Ground 
 6   SCL
 7   Ground
 8   VDD

 下の図のように小さい基板を作りML8511の出力をADS1115のアナログ入力ピンA0に接続します。ADS1115のSCL、SDAは上の表のとおり、LANコネクタ(秋月)に出力します。

赤のML8511のほかに、左側には比較用にVEML6070と全日射量を計測するためのフォトダイオードSFH203Pを実装しています。実験用ですので、不要です。
RaspberryPi側はLANコネクタとRaspberryPiピンヘッダを接続(写真なし)
上のセンサーとは、市販のCAT5 LANケーブルで接続


 これを適当な雨よけのケースにいれて屋外に設置します。
 問題はケースは紫外線領域を透過する材料を用いる必要があるということです。通常の透明なアクリル板は紫外線を通さず、ACRYLITE #000 という材料をもちいるのがよいとデータシートにかかれています。手に入りませんでしたので、次善の策として紫外線の透過率が高いガラスしとして、ホウケイ酸ガラスが見つかりました。顕微鏡観察のため用いるプレパラートのカバーグラスがホウケイ酸ガラス製です。極薄いものが安価に手にはいります。サイズ18×18mm 厚さ0.12〜0.17mm(松浪硝子)が、アマゾンで100枚単位で売られていました。これほどの量は不要ですが、500円以下ですので、がまんします。

   
塩ビのパイプのキャップを雨よけケースとして使う
センサー用の10mmの穴をあけ、そこにカバーグラスを接着剤で固定する。ゆびを切らないように注意
内部にセンサー基板をとりつける

赤く見えるのがML8511 比較用のVEML6070とSFH203P 一日日影にならないところに水平に取り付ける。
雨の回り込みの対策のため薄いプラスチックのシート

RaspberryPiの準備

1.RaspberryPiでI2Cインターフェースを使えるようにしておきます。RaspberryPiのOSバージョンによってことなりますので、こちらを参照。

2.ADS1115とRaspberryPiの接続方法はこちらにあります。
Adafruit ADS1x15 Python libraryをインストールします。
sudo apt-get update
sudo apt-get install build-essential python-dev python-smbus git
cd ~
git clone https://github.com/adafruit/Adafruit_Python_ADS1x15.git
cd Adafruit_Python_ADS1x15
sudo python setup.py install

3.Pythonのライブラリを用いれば、簡単にADS1115を使うことができます。Pythonでつぎのような簡単なプログラムをつくります。

 UVインデックス計測プログラム  UVsensor.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 2018/02/25 (C)Dr.Ishikawa 


import time
import datetime
import Adafruit_ADS1x15

# ADS1115
ADS1115 = Adafruit_ADS1x15.ADS1115()
GAIN = 1

# ML8511 constants
ML8511_OFFSET = -0.01 #真っ暗の時に出力電圧1.0Vとなるように
ML8511_SCALEFACTOR = 1.0 #微調整の必要はなかった


while True:
	try:	
		# ML8511の出力をADS1115のA0端子に接続した場合
		ML8511_Raw = 4.096 * ADS1115.read_adc(0, gain=GAIN) / 32768.0
		ML8511_output = ML8511_Raw + ML8511_OFFSET 
		#出力電圧からUVインデックスを求める。本文参照
		ML8511_Index = ML8511_SCALEFACTOR * (12.49 * ML8511_output -12.49) 

		# Output data 
		now = datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S") 
		data = now + "," + str(ML8511_Index) + "\n"
		filename = 'UV_data/' + datetime.datetime.now().strftime("%Y%m") + 'UV_data.txt'
		file_data = open(filename , "a" )
		file_data.write(data)
		print (data)
		file_data.close() 
		time.sleep(59.5)
	except Exception as e:#I2Cの伝送エラーが起きることを想定
		print str(e)
		time.sleep(59.5)
 

4.起動はつぎのように
sudo python UVsensor.py

1分に1回計測し、UVindex値をカンマ区切りファイルを出力します。Excelなどで処理することができます。

WindowsPCでの処理
 WindowsPCでは次のような処理をおこなっています。適宜変更してください。
1.1分に1行出力されるカンマ区切りファイルを、10分に一度読み、UVインデックスの10分の移動平均値をもとめる(Java)
2.UVインデックスのその日の最大値をもとめる。(Java)
2.1時間ごとの棒グラフと、リアルタイム値をGNUPLOTでグラフ描画する。
3.ホームページに、移動平均値、最大値、グラフをFTPでアップロード。


補足
 ホームページでは、グラフを表示するほか、UVインデックス値(四捨五入)に対応する、UVインデックスロゴ、紫外線対策メッセージを次のように表示しています。


これは、WHO(世界保険機構)のUVインデックス値に対するつぎ情報によるものです。

UVIのロゴ、色づかいもWHOで標準化されており、当ホームページではこれに従っています。

 WHOに対応し環境省は紫外線環境保健マニュアルを公開し、対策メッセージを次のように定めています。この対策文をUVインデックス値に応じ表示しています。


 気象庁データのほか、環境省の有害紫外線ネットワークと比較し、正確性を確認しています。
 思ったより簡単に作れましたので、もっと使われても良いと思います。
 VEML6070はUV-Aのみしか計測できていません。VEML6070の改良版として、VEML6075が販売されています。A領域紫外線( UV-A)のみならずB領域紫外線( UV-B)も計測できるようで、いずれ評価してみようと思います。