【Raspberry Pi Pico入門 – 17】CdSセル(光センサ)を使ってみる

2023年9月29日Raspberry Pi Pico入門,基本編Arduino,Raspberry Pi Pico

概要

今回は光センサを使って周囲の明るさを計測してみます。CdSセルとは光センサの1種で、硫化カドミウム(CdS)を使っているのでCdSセルと呼ばれています。光が当たると抵抗値が小さくなる素子で、光の変化に対して抵抗値の変化がワンテンポ遅れますが素子自体がかなり安いので昼夜の感知などによく使われます。
※ヨーロッパではカドミウムを使っているということで取引が規制されているようです。

実行環境

IDE:Arduino IDE 2.2.1
MCU:Raspberry Pi Pico

CdSセルはスターターキットのものを使います。型式はわかりませんが、おそらく↓これだと思います。

フォトレジスタ GL5528

回路

以下のように配線します。CdSセルには極性は無いので、向きはどちらでも大丈夫です。

コーディング

新しくスケッチを作成し、以下の内容をコピペしてください。

const int CDS_CELL_PIN = 26;
const int THRESHOLD = 2000;

void setup() {
  Serial.begin(115200);
  analogReadResolution(12);
  pinMode(CDS_CELL_PIN, INPUT);
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  int volt = analogRead(CDS_CELL_PIN);
  Serial.println(volt);

  if (volt < THRESHOLD) {
    digitalWrite(LED_BUILTIN, HIGH);
  } else {
    digitalWrite(LED_BUILTIN, LOW);
  }

  delay(200);
}

動作確認

Arduino IDEのシリアルコンソールを開くと数字が0.2秒毎に出力されていると思います。CdSセルを手で覆った時に数字が小さくなり、2000以下でRaspberry Pi Pico内蔵のLEDが点灯すれば成功です。
※「THRESHOLD = 2000」は感度のパラメータです。この数字は蛍光灯か太陽光か等で変わるので、周囲の明るさに合わせて調整が必要です。このサンプルコードは夜に蛍光灯の下で調整しました。

解説

回路

今回の回路は以下のような回路図になっています。チュートリアルとはCdSセルの位置が異なっています。この位置に置くと明るければ明るいほどSIGの電圧が高くなりADCの値が大きくなるので、明るさと数字の大きさが比例関係になるからです。

CdSセルの部分を等価回路に置き換えると下のようになります。可変抵抗と同じく分圧回路になっており、明るいときは左のようにR1の抵抗が小さくなるのでSIG電圧は大きくなります。暗いときは右のようにR1の抵抗値が大きくなるのでSIG電圧は小さくなります。

明るいとき
暗いとき

CdSセルの明るいとき・暗いときの抵抗値は型式で大きく異なります。回路に使うときは事前に購入ページでスペックを確認するか、買ったものをテスターや今回の回路を使って抵抗値を確認してください。
例えばGL5539という型式のCdSセル(100kΩ~5MΩ)を今回の回路で使った場合、どんなに明るくてもSIG電圧は0.3Vまでしか上がらず、ADCの値も0~372しか変化しないので明るさの精度が悪くなってしまいます。

またこの回路ではどんなに明るくてもSIG電圧は3.3Vにはならないので、ADCの機能をフルに使うことは出来ません。明るさの測定精度を上げるために少しでも広い範囲で使うにはR2の抵抗値を小さくすればいいのですが、小さくしすぎると別の問題が発生します。
この回路には下図の赤矢印のルートで常に電流が流れています。この電流はR1やR2が発熱することで熱に変わってしまって捨てられてしまうので、R2を小さくしすぎると電流が増えてしまい電池で動かしたときに電池の減りが早くなってしまいます。