### 4.3.2 照度検出器 #### 4.3.2.1 概要 ![Img](./media/top1.png) 照度検出器(イリュミナンスメーター、Luxメーターとも呼ばれる)は、ある面に当たる光の総量(つまり照度)を測定するための専用機器です。主に光電効果に基づいて動作します。 このプロジェクトでは、光センサーで検出した明るさをOLEDにリアルタイム表示します。ある値を超えると、基板上のスピーカーがアラームを鳴らして注意・通知します。 照度検出器は、屋外・道路照明、屋内照明の設計・受入れ、写真・映像制作、建築や健康管理など、「光」を定量化する必要があるほとんどすべての場面で広く利用されています。 ![Img](./media/bottom1.png) #### 4.3.2.2 部品の説明 ![Img](./media/2top.png) **Microbit 光センサー** ![Img](./media/j101.png) micro:bit基板には独自のフォトレジスタが含まれていないため、LEDマトリクスがこの役割を担います。光信号は入力に変換され、電圧の減衰時間がサンプリングされることで、検出された照度は相対値として得られます。(**注**:明るさはシリアルポートに出力され、相対値です。) **Microbit スピーカー** ![Img](./media/j901.png) Micro: Bit基板には組み込みスピーカーがあり、プログラムで音を出すのが容易です。笑い声や挨拶、あくびのような音のほか、さまざまな音階やビートを鳴らすことができます。たとえば、曲「Ode to Joy」を演奏できます。 ![Img](./media/2bottom.png) #### 4.3.2.3 必要な部品 | ![Img](./media/microbitV2.png)| ![Img](./media/ExpansionBoard.png) |![Img](./media/OLED.png) | | :--: | :--: | :--: | | micro:bit V2 main board ×1 | micro:bit shield ×1 | OLED display ×1 | |![Img](./media/usb.png) |![Img](./media/4pin.png)|![Img](./media/batterycase.png)| | micro USB cable ×1 | 4 pin wire ×1 | battery holder ×1 | |![Img](./media/AAbattery.png)| | | |AA電池(**別途用意**) ×6| | | #### 4.3.2.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 | ![Img](./media/couj2.png) #### 4.3.2.5 コードの流れ ![Img](./media/flow-chart-02.png) #### 4.3.2.6 テストコード ⚠️ **ヒント1: Microbitボードにコードをダウンロードする前に、ライブラリファイル “oled_ssd1306\.py” をインポートしてください。参照** “[MUでのライブラリのインポート](https://docs.keyestudio.com/projects/KS4050/en/latest/docs/MicroPython/MU_development_environment.html#import-library-on-mu)” . ![Img](./media/WPSA1.png) ⚠️ **ヒント2: “if()...elif()...” 条件内のしきい値は実際の状況に応じて変更できます。** **Complete code:** ```Python ''' Theme: Light intensity detector Function: OLED displays the light intensity and the microbit light sensor controls the 5×5 dot matrix and speaker Compiling IDE: MU 1.2.0 Author: https://docs.keyestudio.com ''' # 関連ライブラリをインポート from microbit import * from oled_ssd1306 import * import music val1 = Image("90909:""09990:""99999:""09990:""90909") # パターンを設定 val2 = Image("00000:""00900:""09990:""00900:""00000") # パターンを設定 # OLEDを初期化してクリア initialize() # OLEDを初期化 clear_oled() # OLEDをクリア while True: clear_oled() # OLEDをクリア Lightintensity = display.read_light_level() # microbitの光センサーで検出した照度を読み取り、変数Lightintensityに代入 add_text(0, 0, 'Lightintensity:') # OLEDの該当位置に文字列を表示 add_text(16, 0, str(Lightintensity)) # OLEDの該当位置にLightintensityを表示 if Lightintensity >= 100: # 照度が100以上のとき display.show(val1) # 5×5LEDマトリクスにパターン1を表示 music.play("C5:1") # スピーカーがC5音を鳴らす sleep(50) music.play("D5:2") # スピーカーがD5音を鳴らす sleep(50) music.play("B5:4") # スピーカーがB5音を鳴らす sleep(50) elif Lightintensity > 0 and Lightintensity < 100: # 照度が0より大きく100未満のとき display.show(val2) # 5×5LEDマトリクスにパターン2を表示 music.play("C3:1") # スピーカーがC3音を鳴らす else: # それ以外 display.clear() # 全てのLEDの輝度を0(オフ)に設定 music.reset() # 音を止める sleep(1000) ``` ![Img](./media/line1.png) **簡単な説明:** ① microbit、oled_ssd1306、musicのライブラリをインポートします。 ```Python # 関連ライブラリをインポート from microbit import * from oled_ssd1306 import * import music ``` ② 2つのパターンを定義します。 ```Python val1 = Image("90909:""09990:""99999:""09990:""90909") # パターンを設定 val2 = Image("00000:""00900:""09990:""00900:""00000") # パターンを設定 ``` ③ OLEDのピクセルを初期化し、OLEDをクリアします。 ```Python initialize() # OLEDを初期化 clear_oled() # OLEDをクリア ``` ④ microbitで明るさの値を読み取り、OLEDに表示します。 ```Python Lightintensity = display.read_light_level() # microbitの光センサーで検出した照度を読み取り、変数Lightintensityに代入 add_text(0, 0, 'Lightintensity:') # OLEDの該当位置に文字列を表示 add_text(16, 0, str(Lightintensity)) # OLEDの該当位置にLightintensityを表示 ``` ⑤ 判定文:if()...elif()...else... 検出した明るさが100以上の場合、5×5 LEDマトリクスは ![Img](./media/AAB2.png) を表示し、スピーカーはアラーム音1を鳴らします(高レベルの警告)。 ```Python if Lightintensity >= 100: # 照度が100以上のとき display.show(val1) # 5×5LEDマトリクスにパターン1を表示 music.play("C5:1") # スピーカーがC5音を鳴らす sleep(50) music.play("D5:2") # スピーカーがD5音を鳴らす sleep(50) music.play("B5:4") # スピーカーがB5音を鳴らす sleep(50) ``` 検出した明るさが0から100の間の場合、5×5 LEDマトリクスは ![Img](./media/AAB1.png) を表示し、スピーカーはアラーム音2を鳴らします(低レベルの警告)。 ```Python elif Lightintensity > 0 and Lightintensity < 100: # 照度が0より大きく100未満のとき display.show(val2) # 5×5LEDマトリクスにパターン2を表示 music.play("C3:1") # スピーカーがC3音を鳴らす ``` それ以外の場合、5×5 LEDマトリクスは何も表示せず、スピーカーは鳴りません。 ```Python else: # それ以外 display.clear() # 全てのLEDの輝度を0(オフ)に設定 music.reset() # 音を止める ``` ⑥ 1000ms(1秒)待機します。 ```Python sleep(1000) ``` #### 4.3.2.7 テスト結果 ![Img](./media/4top.png) 配線してmicro USBケーブルで電源を入れた後、外部電源(AA電池6本)に接続して十分な電源供給を確保し、“Flash” をクリックしてコードをmicro:bitボードにダウンロードします。 ![Img](./media/A124.png) テストコードをアップロードしたら、micro:bitの背面にあるリセットボタンを押してください。 ![Img](./media/A455.png) OLEDには光センサーで検出した明るさの値がリアルタイムに表示されます。検出した明るさが100より大きい場合、5×5 LEDマトリクスは ![Img](./media/AAB2.png) を表示し、スピーカーは高レベルの警告としてアラーム音1を鳴らします。検出した明るさが0から100の間の場合、5×5 LEDマトリクスは ![Img](./media/AAB1.png) を表示し、スピーカーは低レベルの警告としてアラーム音2を鳴らします。それ以外の場合、5×5 LEDマトリクスは何も表示せず、スピーカーは鳴りません。 ![Img](./media/dongtu-2.gif) ⚠️ **注意: 実験で使用しているブロックはこのキットに含まれていません。** (**ヒント:** 結果が表示されない場合は、micro:bitボードのリセットボタンを押してください。) ![Img](./media/4bottom.png)