照度センサー(フォトトランジスタ)を使ってみる!(NJL7302L-F5)(Arduino,ESP-WROOM02/32)
こんにちは!
この夏は異常に暑すぎますね!
電子工作する際も必ず涼しい部屋でやりましょう^^
今回はArduino、もしくはESP-WROOM02/32を使用して、光センサーで光量(lux)を測定してみようと思います!
※ESP-WROOM02をメインで解説いたします。
これは定番すぎることなので是非初心者のかたはやってみてください^^
ちなみにiuxとは明るさを表す指標で、数値が大きいほど明るいということです。
(lxと表すサイトもあればluxと表すサイトもありますが、どちらが正しいかわからないのでこのサイトではluxとします)
・今回使うセンサーはフォトトランジスタ(NJL7302L-F5)というセンサーで、
本来は光量を測るってよりも明るいか暗いかを判断するために使われるのが一般的ですが、
アナログ接続させて光量(lux)を測定してみたいと思います!
※ちなみに光センサーといえばCDSセンサーも定番ですが、少し角度を変えただけで
光量が大きく変化しますので、今回はフォトトランジスタ(NJL7302L-F5)を選びました!
(フォトトランジスタも角度によって光量の差は大きく出ますが、CDSセンサーよりかはマシだと思っております。)
①「使う部品」
・低損失三端子レギュレーター 3.3V1A TA48033S
・電解コンデンサ 47μF35V(秋月電子で購入すると、3端子レギュレータに付属されています。)
・セラミックコンデンサ 0.1μF(秋月電子で購入すると、3端子レギュレータに付属されています。)
・LED(起動などを確認するためのメッセージ用に使う。なので任意)
・タクトスイッチ(2個)(任意ですがあると便利です)
・抵抗(470Ω) (1本)
・ミニブレットボード(あると便利)
(ブレットボードで回路を組むとき、見栄え良く綺麗に繫げられますのであると便利)
※任意(楽したい方向け)
ESP-WROOM-02開発ボードを使うとすぐに開発ができるよう回路が組まれているため、上記の「ESP-WROOM02」「超小型USBシリアル変換モジュール」「3端子レギュレータ」「電解コンデンサ 47μF35V」「セラミックコンデンサ 0.1μF」「タクトスイッチ」は不要になり、手順も省けます!
②「ESP-WROOM02をArduinoIEDで使えるようにする」
※Arduinoでチャレンジされる方はこの項目は必要ありません。
※WSP-WROOM32でチャレンジされるこちらのサイトをご参考にお願いします。
・Arduino IEDにESP-WROOM02を使えるようにする!をご参考に!
③「回路」
・ESP-WROOM02の回路は再び下記サイトさんの「6.各部品の接続」を参考にしていただければと思います。
WROOM 単体に Arduino スケッチで Wi-Fi ストリーミング
・ESP‐WROOM02本体の接続箇所
pinナンバー | 状態 |
---|---|
GPIO 15(IO15) | LOW |
GPIO 2(IO2) | HIGH |
GPIO 0(IO0) | LOW |
EN | HIGH |
※GPIO 0(IO0)をLOWの状態で起動させるときのみ書き込みモード、LOWじゃなければ実行モードになります。なのでGPIO 0とGNDにダクトスイッチをかましとくと後が楽です。
※RST(リセット)もLOWにすることでプログラムのリセットが行えますのでRSTとGNDにダクトスイッチをかましておくと後が楽です。
※ESP-WROOM-02開発ボードをご使用の方はここからスタート。
・フォトトランジスタ(NJL7302L-F5)の接続図
下の写真からみて、左側(足が長い方)が + 、右側(短い方)が ー (GND)になります。
フォトトランジスタ(NJL7302L-F5) と抵抗(R1) | 接続箇所(接続pin) |
長い方(+) | 5V( + ) |
短い方( – ) と 抵抗(R1) | TOUT |
抵抗(R1) | GND( – ) |
・完成するとこんな感じになります!
※クリックすると拡大できます!
④「プログラム」
・早速コピペして書き込んでみましょう!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
//Arudinoだとアナログ0番pin、ESP-WRPPM02だとTOUTpinの役割になります。 const int voutPin = 0; //メッセージLED const int messageLed = 12; void setup() { Serial.begin(115200); //digitalpinセットアップ pinMode(messageLed, OUTPUT); //起動したら1秒光らせる digitalWrite(messageLed, HIGH); delay(1000); digitalWrite(messageLed, LOW); } void loop() { // R1の電圧を取得 int reading = analogRead(voutPin); // AD値をmVに変換 float voltage = ((long)reading * 5000) / 1024; // 電圧から電流を求める I=E/R (R=470) * 誤差防ぎ float microamp = (voltage * 1000) / 470 * 0.5; // 電流をlxに変換 float lx = microamp / (290 / 100); //luxをシリアルモニターに表示 Serial.print(lx); //printにlnを付け加えると改行するようになります。 Serial.println(" lux"); //1秒毎に更新 delay(1000); } |
※ビルドをした際に、こんなエラーが出たら書き込みモードになっていないのが原因です。
(GPIO 0(IO0)をLOWの状態で起動させるときのみ書き込みモード、LOWじゃなければ実行モードになります。)
改善されない場合はもう一度②「配線」を読み直してみてください。
※シリアルモニターに変な暗号が表示されたり、何も表示されない場合、シリアルモニターの右下にあるbpsが115200bpsになっているか確認してください。
※シリアルモニターが選択できない場合、まずツールの中にあります「シリアルポート:COM 」が選択されているか確認してください。
これが選択できない状態だたUSBケーブルが原因の可能性があります。USBケーブルは必ずデータ通信が可能なものを使用しましょう。
こんな感じで対応していけば解決できるかと思います!
⑤「実行結果・まとめ」
・部屋の電気を付けている状態の測ったところ約360lux!
それぞれの場所の平均的基準を見てみましょう!
場所 | lux |
屋外・快晴
|
100,000 |
屋外・曇天 | 30,000 |
手術台 | 20,000 |
野球場 内外野 | 2,000 |
町の街灯下 | 100 |
居間の全体 | 200 |
寝室の全体 | 30 |
満月の夜 | 0.2 |
星明かりのみの夜 | 0.02 |
闇夜 | 0.007 |
・比較した感じ、居間の全体は200lxとなっていますが恐らく部屋が狭く明るさMAXのLED電球を付けていたため基準よりも少し高い360という数値が出たと思われます!
スマートフォンに内蔵されている照度計で測定したところほぼ合ってました!
・手で影を作ってみたらこんな感じに変化します↓
・但し恐らくこのセンサーでは屋外の光を測定すると数値がオーバーして表示がバグると思われます!
このセンサーも含めて安価で買えるcdsセンサーなどはほとんど1000luxくらいまでしか測定できないと思いますので室内で使うことをお勧めします!
本来このセンサーの使用は明るいか暗いかを判断するためだけに使用されますので仕方ないですね(;^ω^)
・フォトトランジスタを使った理由としてCDSセンサーだと角度で大きく光量が変わるからというのを述べてましたが、フォトトランジスタも角度によって結構数値は変わりました(笑)
CDSセンサーよりかはマシかと思っています^^
以上、ご訪問ありがとうございました!
はじめまして。
突然ではございますが、デジタルマーティングの分野に従事しております高梨と申します。
今回こちらの記事を拝見し、電子部品関係メーカーの記事内での紹介等をご依頼させていただければと思いご連絡させていただきました。
もしよろしければ詳細についてメールにてご説明をさせていただければと思っております。お忙しいところ恐れ入りますが、一度ご連絡をいただけましたら幸いです。
お返事心よりお待ちしております。
高梨 百合
高梨様
コメント頂きありがとうございます!
詳細について是非、メールをお願いいたします^^
よろしくお願いします^^
初めまして、長谷部と申します。
今まで電子パーツ等に無縁でしたが、最近興味が湧きESP-WROOM02を見つけ素人ですがいじってみたくなりました。
一先ず部屋の照度を測れるにはと調べていますと当サイトにいきつきまして見ててどうしても分からないことがあり、コメントさせていただきました。
照度センサーに抵抗470Ωを取り付けておりますが、どういう計算で導き出したのかを教えていただけないでしょうか。
基本的な質問で申し訳ありませんが、よろしくお願いいたします。
初めまして!
返信遅くなり申し訳ないです。
本記事では抵抗470Ωを使っていますが、これはいろいろ試した結果この抵抗値が一番いい感じになったから使っただけで、特に計算とかはしていません。(計算苦手な物でして(;^ω^))
お役に立てなく申し訳ないです。