2-1-2.照度センサ

2020年5月7日

電気回路と電子工作

照度を感知できるセンサには、安価で利用が簡単な硫化カドミウム (CdS) セルもありますが、カドミウムはRoHS指令(ローズ指令:電子・電気機器における特定有害物質の使用制限についての欧州連合(EU)による指令)の規制対象元素のため、フォトトランジスタ を利用します。
フォトトランジスタはトランジスタと同様の原理で動作します。通常のトランジスタの端子は3本(エミッタ、コレクタ、ベース)ですが、フォトトランジスタ はエミッタとコレクタにつながる2本しかありません。フォトトランジスタ はベース部分に光を当てることでエミッタ〜コレクタ間の電流が流れることを利用して光を検出します。CDSセルは光度に応じて抵抗が変化しますが、フォトトランジスタ は光度に電流が変化しますので、その変化を利用して光度を測ります。
今回利用するフォトトランジスタの外観は以下となります。

また、照度センサ回路図及び配線図は下図に示します。


【ESP32-DevKitCの入出力端子はこちらを参照下さい】

【注意】
1.回路図にはありませんがESP32開発ボードにソフトを書き込む場合はEN端子を0.1μFのコンデンサでGNDへ配線して下さい。ESP32開発ボード(30pin)固有の利用方法なので回路図は省略させて頂きます。
2.回路図、配線図は2-1から順次配線した図になります。(LEDなど配線した部品は取り外さず追加で配線しています)

今回は正確なルクス(lux)を測定するようなものではなく、明るさを0から100までの数値で表す簡易的に光度を把握する方法となります。回路図の動作は光に応じてフォトトランジスタに流れる電流が変わりますので、抵抗の電圧は電流×︎抵抗(V=IR)なので変化します。電圧の変化を入力端子(GPI36)で取得し光度を表します。
フォトトランジスタの光と流れる電流の関係から明るさを数値で表示できる抵抗200Kオーム(赤黒黒橙茶)としています。明るさの感知を変更したい場合は抵抗を変更して下さい。


スケッチ(制御ソフトウェア)

照度センサを読み取り、0から100に変換してシリアル通信でパソコンに表示させる制御ソフトウェアを以下に示します。

スケッチの①で照度センサを読み取る端子番号の36を設定しています。③でシリアルモニタを利用しますので伝送速度115200bpsで開始します。④はモニタに開始がわかるように表示させています。ここまでがsetup関数の処理でloop関数前の事前処理となります。
loop処理内は最初に⑥で3秒待ち、⑦でGPI36の値を取得し0から100の数値に変換しています。「analogRead」で0から3.3Vの電圧を0から4095の値で読み取ることが出来ます。0から4095の値を0から100まで値に変換するため100で掛けて4095で割っています(プログラムの「* 100 / 4095」部分)。

また、2020年4月(Arduino用ESP32ソフトVer1.0.4)現在、本来0.8で割る必要がありませんが今回利用している開発ボード特有の問題で8割しかADC端子に入力されませんので0.8で割ることで0から100となるように計算しています。(電圧値は問題ありませんでしたが開発ボード特有の問題のためソフトVersionUpなどにより改善される可能性があります。)

センサーから取得し計算した値を⑧で表示しています。正常に起動するとシリアルモニタに以下のように、3秒毎に計測され0〜100までの光度が表示されます。

【スケッチの検証と書込方法はこちらを参照ください】