あさがおIoT観察日記③:Arduinoと照度センサTEMT6000で明るさを測定する【大人の自由研究】

アイキャッチ-Arduino Arduino
この記事は約4分で読めます。


前回まで/次回以降の取り組みはこちらから。

Arduinoで照度を測る

照度を測るにもいろいろなセンサがあります。
よく用いられるのはCdSやフォトトランジスタという部品です。
今回はTEMT6000というフォトトランジスタを利用し「環境光センサ」を使ってみます。

光の感度特性が人間の目の特性に似ていて、明るさを表す単位の「lx」(ルクス)単位で出力ができるということのようなので使ってみます。

前々回に紹介したパーツキットには入っていませんが、同じ部品を使ったモジュールが売られています。

今回は別のパーツキットに入っていた手持ちのものを利用しました。

もちろん、CdSや通常のフォトトランジスタでも構いません。

Arduinoに接続する

今回は使用する基板には動作に必要な抵抗が実装されています。
「+」ピンは5V、「ー」ピンはGND、「S」ピンはA0(アナログピンならどこでもよい)にそれぞれ接続します。

 (センサの陰でちゃんとつないであります…)

Arduinoで読み取ってみる 

今回はライブラリは不要です。
analogReadで読み取ればそのままセンサの出力を読み取ることができます。

ちょうど使えるサンプルスケッチがありますので、それを利用してみましょう。

サンプルスケッチを開く

メニューバー[ファイル]→[スケッチ例]→[03.Analog]からサンプルスケッチ「AnalogInOutSerial.ino」を開いてみます。

今回は書き換えの必要なく、このまま動かすことができます。

動かしてみる

ここまででArduinoに書き込んでみます。
(図が前々回の使いまわしやんけ…)

書き込んだら、シリアルモニタを起動します

照度がPCにシリアル通信で返ってきています。
センサに光を当てたり、手などで覆ってみたりすると数値が変化するのが分かります。

照度をlx単位で出力する

TEMT6000のデータシートによると、出力電流と照度はこんな特性になっています。

両対数グラフなので一見ややこしいですが、照度と電流は正比例しています。
電流と照度とを関数で表すと、

$ 電流[μA] = 照度[lx] × 0.5 $

一方、今回のセンサモジュールはこんな回路になっています。

VCCー出力間にセンサ、出力ーGND間に10kΩの抵抗が付いています。
直列接続なので、TEMT6000と10kΩの抵抗には同じだけ電流が流れます。
(実際には10kΩと並列にArduinoのアナログピンの入力抵抗がつながりますが、データシートを見ると入力Z=100MΩとのことなので、そちらに流れ出る電流は十分に小さい(1/1000)ため無視しました。)

オームの法則より、

$ 電圧V[V] = 抵抗R[Ω] × 電流I[A] $

今回知りたいのは10kΩの両端の電圧で、流れる電流センサが明るさに応じて流す電流と同じです。
つまり、センサモジュールの出力電圧と照度の関係は、

$ 出力電圧V[V] = 抵抗R[Ω] × センサ電流I[A] $

となります。つまり、

$ 出力電圧V[V] = 10×1000[Ω] × 照度[lx] × 0.5 $

という関係になりますので、

$ 照度[lx] = \frac{出力電圧V[V]}{10×1000[Ω] × 0.5} $

ArduinoのanalogReadでは0~5Vの電圧を0~1023の数字で表現しますので、だいたいanalogRaedの読み取り値≒lx単位の照度ととらえてよさそうです。

あさがお観察用スケッチを作る

今回もサンプルスケッチをもとに最終仕様のスケッチを作っていきます。
前回までに作成したスケッチに追加して、一つのスケッチにまとめます。

照度センサの読み取り値を「bright」というint型の変数に代入し、シリアル通信でPCに送るようにしてみました。

最終的にはシリアル通信でPCではなくRaspberryPiに送って、IoTサービスにデータをアップロードしていく、という流れになります。

最終的にはながーいケーブルで屋外にまで引き回して使いますが、ひとまずブレッドボード上での動作確認はこれでOK。

 


 

これで温度・湿度・気圧・照度が測定できるようになりました。
まだまだ続きます。

コメント

タイトルとURLをコピーしました