4.3.3 太陽紫外線検出器

4.3.3.1 概要

Img

太陽紫外線検出器は、太陽からの紫外線の強度を測定するための精密機器です。人間の目には見えない紫外線(UV)を検出し、その強度を定量化します。照度検出器と同様に光電効果をベースとしていますが、その核心は紫外線を選択的に検出する点にあります。

本プロジェクトでは、OLEDが検出した紫外線強度をリアルタイムに表示します。ある値を超えると、ボード上のスピーカーがアラームを鳴らし、5×5 LEDマトリクスが警告用のパターンを表示します。

紫外線検出器は「紫外線」を定量化する必要のあるほぼすべての場面で広く使用されています。UV硬化ランプや日焼け止め製品のテスト、紫外線光線療法機器、浄水システムや空気清浄システム内の紫外線殺菌ランプの監視などが含まれます。

Img

4.3.3.2 コンポーネント知識

Img

Solar Ultraviolet Sensor

Img

紫外線センサは紫外線を検出するためのもので、主に半導体フォトダイオードに基づく G365S01M で構成されています。環境中の紫外線照度を、マイコン(例:micro:bit ボード)で読み取れるアナログ電圧信号に変換できます。回路図は以下の通りです。

Img

フォト電気変換:センサ内部の紫外線フォトダイオードが紫外線にさらされると、非常に微弱な電流が発生します(紫外線強度に比例)。

電流増幅:この微弱な電流は内部に統合されたオペアンプで増幅されます。

信号出力:増幅された信号がピンから直接アナログ電圧として出力されます。電圧値は通常0V〜1Vの範囲です(3.3V電源時)。紫外線強度が強いほど電圧は高くなります。

仕様:

  • 動作電圧: DC 5V

  • 応答波長ピーク: 355nm (λmax)

  • ピーク感度 (355nm) : 0.18A/W (Rmax)

  • スペクトル応答範囲: 220~370nm

  • 紫外/可視光応答比 (Rmax/R400nm): > Img(VB)

Microbit 5×5LED マトリクス

Img

micro:bit ボードのLEDマトリクスは格子状に25個のLEDを含みます。テストコード内で位置値を指定することで特定のLEDを制御できます。理論上は複数のLEDを同時に点灯させてパターン、数字、スクロール文字などを表示できます。

Img

4.3.3.3 必要な部品

Img

Img

Img

micro:bit V2 メインボード ×1

micro:bit シールド ×1

OLED ディスプレイ ×1

Img

Img

Img

紫外線センサ ×1

micro USB ケーブル ×1

4 ピン ワイヤ ×1

Img

Img

Img

3 ピン ワイヤ ×1

電池ホルダー ×1

AA 電池(自分で用意) ×6

4.3.3.4 配線図

⚠️ 配線の際はワイヤの色にご注意ください。

OLED display

wire color

micro:bit shield pin

micro:bit board pin

GND

black

G

G

VCC

red

V2

V

SDA

blue

20

P20

SCL

green

19

P19

ultraviolet sensor

wire color

micro:bit shield pin

micro:bit board pin

G

black

G

G

V

red

V2

V

S

yellow

1

P1

Img

4.3.3.5 コードフロー

Img

4.3.3.6 テストコード

⚠️ Tip 1: Microbit ボードにコードをダウンロードする前に、ライブラリファイル “oled_ssd1306.py” をインポートしてください。参照:Import Library on MU” .

Img

⚠️ Tip 2: if() 文内のしきい値 5 は実際の状況に応じて変更できます。

Complete code:

'''
Theme: Solar ultraviolet detector
Function: OLED displays the intensity of ultraviolet rays and the ultraviolet sensor controls the 5×5 dot matrix and speaker
Compiling IDE: MU 1.2.0
Author: https://docs.keyestudio.com
'''
# import related libraries
from microbit import *
from oled_ssd1306 import *
import music
import math

# initialize and clear oled
initialize()  # initialize oled
clear_oled()  # clear oled

# Initialize the ADC pin (the ultraviolet sensor is connected to pin1)
uv_sensor = pin1

def read_uv_index():
    # Read the analog value (0-1023 corresponds to 0-5.0V)
    raw_value = uv_sensor.read_analog()
    # Make sure the value is within the valid range
    if raw_value > 1023:
        raw_value = 1023
    elif raw_value < 0:
        raw_value = 0
    # Map to the ultraviolet index range of 0 to 15
    # The mapping range can be adjusted according to the actual characteristics of the sensor
    uvi = raw_value * (15.0 / 1023)

    return round(uvi, 1)

while True:
    clear_oled()   # clear OLED
    uv = read_uv_index() # Read the ultraviolet intensity level detected by the ultraviolet sensor
    add_text(0, 0, "UV Intensity:")  # Display the character string in the corresponding position of OLED
    add_text(14, 0, str(int(uv)))  # Display Ultraviolet intensity level in the corresponding position of OLED
    if uv >= 5:    # when uv level >=5
       display.show(Image.NO)    # LED matrix displays the no pattern
       music.play("B5:4")        # speaker plays B5 tone
       sleep(100)
       music.play("C5:4")        # speaker plays C5 tone
       display.show(Image.SAD)   # LED matrix displays the sad pattern
       sleep(100)
    else: # or
       display.show(Image.HAPPY)  # LED matrix displays the happy pattern
       music.reset()              # no tone
    sleep(1000)

Img

簡単な説明:

① microbit、oled_ssd1306、music、math のライブラリをインポートします。

from microbit import *
from oled_ssd1306 import *
import music
import math

② OLED を初期化し、クリアします。

initialize()  # initialize oled
clear_oled()  # clear oled

③ 太陽紫外線センサのピンを初期化します。

uv_sensor = pin1

④ センサが検出した紫外線値を返すサブ関数を定義します。

def read_uv_index():
    # Read the analog value (0-1023 corresponds to 0-3.3V)
    raw_value = uv_sensor.read_analog()
    # Make sure the value is within the valid range
    if raw_value > 1023:
        raw_value = 1023
    elif raw_value < 0:
        raw_value = 0
    # Map to the ultraviolet index range of 0 to 15
    # The mapping range can be adjusted according to the actual characteristics of the sensor
    uvi = raw_value * (15.0 / 1023)

    return round(uvi, 1)

⑤ センサの紫外線値を読み取りOLEDに表示します。

uv = read_uv_index() # Read the ultraviolet intensity level detected by the ultraviolet sensor
add_text(0, 0, "UV Intensity:")  # Display the character string in the corresponding position of OLED
add_text(14, 0, str(int(uv)))  # Display Ultraviolet intensity level in the corresponding position of OLED

⑥ 判定文: if()…else…

太陽光の検出された紫外線強度が5以上の場合、5×5 LEDマトリクスは ImgImg を表示し、スピーカーがアラームを鳴らします。そうでない場合、マトリクスは Img を表示し、スピーカーはアラームを鳴らしません。

if uv >= 5:    # when uv level >=5
   display.show(Image.NO)    # LED matrix displays the no pattern
   music.play("B5:4")        # speaker plays B5 tone
   sleep(100)
   music.play("C5:4")        # speaker plays C5 tone
   display.show(Image.SAD)   # LED matrix displays the sad pattern
   sleep(100)
else: # or
   display.show(Image.HAPPY)  # LED matrix displays the happy pattern
   music.reset()              # no tone

⑦ 1000ms(1秒)待機します。

sleep(1000)

4.3.3.7 テスト結果

Img

配線後、micro USB ケーブルで電源を入れ、外部電源(6本のAA電池)を接続して十分な電源供給を確保し、「Flash」をクリックしてコードをmicro:bitボードにダウンロードします。

Img

テストコードをアップロードしたら、micro:bit の裏面にあるリセットボタンを押してください。

Img

⚠️ 注意: 紫外線センサのテスト環境: 正午前後の日光(10:00〜14:00);影を避ける;センサを直接太陽に向けること。

OLEDは検出された紫外線強度をリアルタイムで表示します。太陽光の検出された紫外線強度が5以上の場合、5×5 LEDマトリクスは ImgImg を表示し、スピーカーがアラームを鳴らします。そうでない場合、マトリクスは Img を表示し、スピーカーはアラームを鳴らしません。

Img

⚠️ 注意: 実験で使用するブロック(building blocks)はこのキットに含まれていません。

Tip: 結果が観測されない場合は、micro:bit ボードのリセットボタンを押してください。)

Img