2-2.照度センサ《Remo》
電気回路と電子工作
照度を感知できるセンサには、安価で利用が簡単な硫化カドミウム (CdS) セルもありますが、カドミウムはRoHS指令(ローズ指令:電子・電気機器における特定有害物質の使用制限についての欧州連合(EU)による指令)の規制対象元素のため、フォトトランジスタ を利用します。
フォトトランジスタはトランジスタと同様の原理で動作します。通常のトランジスタの端子は3本(エミッタ、コレクタ、ベース)ですが、フォトトランジスタ はエミッタとコレクタにつながる2本しかありません。フォトトランジスタ はベース部分に光を当てることでエミッタ〜コレクタ間の電流が流れることを利用して光を検出します。CDSセルは光度に応じて抵抗が変化しますが、フォトトランジスタ は光度に電流が変化しますので、その変化を利用して光度を測ります。
今回利用するフォトトランジスタの外観は以下となります。
【ESP32-DevKitCの入出力端子はこちらを参照下さい】
今回は正確なルクス(lux)を測定するようなものではなく、明るさを0から100までの数値で表す簡易的に光度を把握する方法となります。回路図の動作は光に応じてフォトトランジスタに流れる電流が変わりますので、抵抗の電圧は電流×︎抵抗(V=IR)なので変化します。電圧の変化を入力端子(GPI36)で取得し光度を表します。
フォトトランジスタの光と流れる電流の関係から明るさを数値で表示できる抵抗200Kオーム(赤黒黄金)としています。明るさの感知を変更したい場合は抵抗を変更して下さい。
スケッチ(制御ソフトウェア)
照度センサを読み取り、0から100に変換してシリアル通信でパソコンに表示させる制御ソフトウェアを以下に示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// IoT電子工作キット // 2-2.照度センサ const byte LIGH_SNR = 36; // ①照度センサのピン設定(GPI36) // ②起動時、最初に実行される処理 void setup() { Serial.begin(115200); // ③シリアルモニタ設定(115200bps) Serial.println(); // (見やすくするために改行) Serial.println("LightStart"); // ④シリアルモニタに開始を表示 } // ⑤setup完了後、電源OFFまで繰り返し処理 void loop() { delay(3000); // ⑥3秒待つ // ⑦温湿度センサーのデータ取得(1〜100で表示) unsigned short g_light = analogRead(LIGH_SNR) * 100 / 4095; // ⑧シリアルモニターにデータ表示 Serial.println( String(g_light) ); } |
スケッチの①で照度センサを読み取る端子番号の36を設定しています。③でシリアルモニタを利用しますので伝送速度115200bpsで開始します。④はモニタに開始がわかるように表示させています。ここまでがsetup関数の処理でloop関数前の事前処理となります。
loop処理内は最初に⑥で3秒待ち、⑦でGPI36の値を取得し0から100の数値に変換しています。「analogRead」で0から3.3Vの電圧を0から4095の値で読み取ることが軽ます。0から4095の値を0から100まで値に変換するため100で掛けて4095で割っています(プログラムの「* 100 / 4095」部分)。
取得した値を⑧で表示しています。正常に起動するとシリアルモニタに以下のように、3秒毎に計測され0〜100までの光度が表示されます。
【スケッチの検証と書込方法はこちらを参照ください】