光センサ(CDSセル)モジュールを使ってみる(Arduino)

今回は、光センサ(CDSセル)モジュールを使って、
センサ場所の明るさに合わせて、
LEDを消灯、暗点灯、明点灯の3段階に変化させてみます。

このCDSセル(フォトレジスタ)センサは、受光部に光を当てると、
2点の足(端子)の間の抵抗値が変化するというもので、
光による可変抵抗ですね。
CDSセル抵抗値は、
光の量が多ければ(明るいと)、抵抗値は小さくなり、
光の量が少なければ(暗いと)、抵抗値は大きくなります。

実際の抵抗値の値は、光センサ(CDSセル)のデータシートで確認して下さい。
また、受光部を明るくしたり暗くしたりして、テスターで測定されるのも良いでしょう。

テスターで測定 (暗い環境)
テスターで測定 (明るい環境)

私のCDSセルとテスターの組み合わせでの測定した結果は、
・暗らい部屋:40KΩ以上
・明るい部屋:2KΩ以下
でした。
※もちろんですがCDSセンサに種類や光の当たり方で値は大きく変化します。

今回使用するセンサです。

CDSセンサ
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/

回路図1
回路図1

※実際の回路では、CDSセルモジュールを使用しています。

実際の回路1
実際の回路1

スケッチしてみます。

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へ書き込み実行します。

Arduino IDE シリアルモニタ画面
Arduino IDE シリアルモニタ画面

シリアルモニタを開いて値をみてみると、
・やや暗めの部屋の中:300
・照明を当てる:100
・暗くする: 600
という値になっていました。

この値を使って、
LEDの点灯を制御してみます。

A0ポートが受け取る値が、
250未満:消灯
250以上、500未満:暗く点灯
500以上:明るく点灯
とします。
※この値は、私が適当に決めたものです。

回路は図の通りです。

回路図2
回路図2
実際の回路2
実際の回路2

スケッチしてみます。

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へ書き込み実行します。

Arduino IDE画面
Arduino IDE画面

センサ部分を暗くしたり明るくしたりすると、
LEDの明るさが変化すると思います。

このような仕組みで、環境の明るさに合わせて、
照明を自働点灯(明るさを変化)するなどの
制御が可能になりますね。