センサはS9648-100を使用します。
照度といっても、日常生活の中では全くの暗闇から最も照度の高い日中の太陽光まで0ルクス〜約32000ルクスの幅があります。これは、Arduino のアナログ検出幅1024段階をゆうに超えているので、屋内での照度0ルクス〜1000ルクスの範囲内での計測を前提とします。
材料
フォトICダイオード S9648-100
炭素皮膜抵抗 330Ω 1個
炭素皮膜抵抗 1KΩ 1個
参考
センサ活用の素1
電子回路の基礎
回路図
フォトICダイオードは、カソードをプラスに、アノードをマイナスに接続します。
S9648-100に流せる最大電流が5mAであり、この時に5Vにするために1KΩの抵抗を取り付けます。
オームの法則
E(電圧 : V) = I(電流 : A)× R(抵抗 : Ω)
5V = 0.005A × 1000Ω
これにより、S9648-100には5Vの電圧で5mAの電流が流れこみます。S9648-100を真昼の日光にあてて最低抵抗をテスタで計測してみるとおよそ330Ωでした。つまり、S9648-100が計測できる最も明るい照度の時に最も高い電流を流せる(S9648-100が最も低い抵抗値を示す)ということです。
Arduinoのアナログ0ピンに計測電圧を送るために、アノードとGND間に330Ωの抵抗を取り付けて分圧します。S9648-100が330Ωの抵抗値の時、分圧の法則により、アナログ0ピンには約1/5の電圧(1V)が流れます。
アナログ0ピン入力電圧 = 5V ×(330Ω / (1000Ω + S9648-100の抵抗値 + 330Ω))
これにより、アナログ0ピンには0V〜1V(読み取り値は0〜204)が流れることになり、1mVが1ルクスに相当するようになります。
ルクス = Analog IN Pin入力値 × 5000 ÷1024
Arduino スケッチ
float val=0;//入力値の変数を用意し、0に設定
void setup(){
// シリアル通信速度
Serial.begin(9600);
}
void loop(){
//ANALOG INの0番ピンを読み取りvalに代入
val=analogRead(0);
val = (val*5000)/1024;
Serial.println(val,DEC);
//1秒ループにするdelay(1000);
val = 0;
}
スケッチを実行し、Arduino のシリアルモニタで値をチェックします。ルクス換算された値が表示されます。
センサを手で覆うと10以下まで下降し、LEDペンライトをあてると1000近くまで上昇します。
8/1 追記
上記の回路では、Arduino のアナログ読み取り値は0〜204(0〜1000ルクス)であるため、アナログインピンの解像度は1/5になっています。解像度を上げるために、オペアンプを使ってアナログ読み取り値を0〜1023にしてみます。
参考
Flashで、温度センサーを使う
回路図
オペアンプLMC6032と非反転増幅回路を使用しました。
1kΩと4kΩ1Vの抵抗により、LMC6032に流れ込む最大1Vの電圧は最大5Vまで増幅されます。つまり、計測ルクス0〜1000が0V〜5Vになります。
5V = 1V × (1 + (4kΩ / 1kΩ))
Arduino スケッチ
float val=0; //入力値の変数を用意し、0に設定
void setup(){
// シリアル通信速度
Serial.begin(9600);
}
void loop(){
//ANALOG INの0番ピンを読み取りvalに代入
val=analogRead(0);
val = map(val, 0, 1023, 0, 1000);
Serial.println(val,DEC);
//1秒ループにする
delay(1000);val = 0;
}
植物・農業・エレクトロニクス・音楽...。実験とプロジェクトのblog。 ▶ projects : Biotope |
0 件のコメント:
コメントを投稿