光センサ(CDSセル)モジュールを使ってみる(Arduino)
今回は、光センサ(CDSセル)モジュールを使って、
センサ場所の明るさに合わせて、
LEDを消灯、暗点灯、明点灯の3段階に変化させてみます。
このCDSセル(フォトレジスタ)センサは、受光部に光を当てると、
2点の足(端子)の間の抵抗値が変化するというもので、
光による可変抵抗ですね。
CDSセル抵抗値は、
光の量が多ければ(明るいと)、抵抗値は小さくなり、
光の量が少なければ(暗いと)、抵抗値は大きくなります。
実際の抵抗値の値は、光センサ(CDSセル)のデータシートで確認して下さい。
また、受光部を明るくしたり暗くしたりして、テスターで測定されるのも良いでしょう。
私のCDSセルとテスターの組み合わせでの測定した結果は、
・暗らい部屋:40KΩ以上
・明るい部屋:2KΩ以下
でした。
※もちろんですがCDSセンサに種類や光の当たり方で値は大きく変化します。
今回使用するセンサです。
画像のものは、
・CDSセルは秋月電気通商
・CDSセルモジュールは大陸製
です 。
光センサ(CDSセル)モジュール
試してみる程度であれば、格安品の
aitendo
・CDSセル(5個入) [CDS5]
¥100-(税別)
https://www.aitendo.com/product/17325
・CDSセルモジュール [M3P-CDS]
¥350-(税別)
https://www.aitendo.com/product/11584
で、良いと思います。
このCDSセルはカドミウムが使用されており、
カドミウムはRoHS指令の規制対象元素であるため、
国によっては使用できません。(日本では、今でも使用可能です)
そのため、このCDSセルの代わりに、
・照度センサ(フォトトランジスタ)
・フォトICダイオード
などを使用した回路が利用されることが多いようです。
CDSセルを使用する場合、
電子部品に流れる電流を抑えるため、適切な抵抗を直列に繋いで使用します。
(抵抗値は10kΩのを使用します)
この抵抗を別途用意するのが面倒な私は、
抵抗が組み込まれているCDSセルモジュールを使用します。
私が使用するこのモジュールには、 10kΩの抵抗が組み込まれています。
※CDSセルの端子に極性はありません。
では、光の当たり具合で、CDSセルの値が
どのように変化するのか測定してみます。
回路は図の通りです。
この回路図の作図には fritzing を利用させて頂いております。
https://fritzing.org/home/
※実際の回路では、CDSセルモジュールを使用しています。
スケッチしてみます。
int PortNo = A0; // ポート情報
int p_data; // 取得情報用
void setup() {
// put your setup code here, to run once:
// アナログポート設定
pinMode( PortNo, INPUT );
// シリアルモニタ設定
Serial.begin( 9600 );
}
void loop() {
// put your main code here, to run repeatedly:
// ポートデータ取得
p_data = analogRead( PortNo );
// コンソールモニタへ出力
Serial.println( p_data );
// 1000ms待機
delay( 1000 );
}
Arduinoへ書き込み実行します。
シリアルモニタを開いて値をみてみると、
・やや暗めの部屋の中:300
・照明を当てる:100
・暗くする: 600
という値になっていました。
この値を使って、
LEDの点灯を制御してみます。
A0ポートが受け取る値が、
250未満:消灯
250以上、500未満:暗く点灯
500以上:明るく点灯
とします。
※この値は、私が適当に決めたものです。
回路は図の通りです。
スケッチしてみます。
int i_PortNo = A0; // ポート情報(センサ)
int o_PortNo = 6; // ポート情報(LED)
int i_data; // 取得情報用
void setup() {
// put your setup code here, to run once:
// アナログポート設定
pinMode( i_PortNo, INPUT );
// シリアルモニタ設定
Serial.begin( 9600 );
// LED回路の値を0に設定
analogWrite( o_PortNo, 0 );
}
void loop() {
// put your main code here, to run repeatedly:
// ポートデータ取得
i_data = analogRead( i_PortNo );
// コンソールモニタへ出力
Serial.println( i_data );
// LEDへの明るさ値を決め、ポートへ出力
if ( i_data >= 500 ) {
analogWrite( o_PortNo, 255 );
} else if ( i_data >= 250 ) {
analogWrite( o_PortNo, 127 );
} else {
analogWrite( o_PortNo, 0 );
}
// 1000ms待機
delay( 1000 );
// delay( 60000UL );
}
Arduinoへ書き込み実行します。
センサ部分を暗くしたり明るくしたりすると、
LEDの明るさが変化すると思います。
このような仕組みで、環境の明るさに合わせて、
照明を自働点灯(明るさを変化)するなどの
制御が可能になりますね。