Arduino-CdSセル(光センサ)の使い方

当記事では、ArduinoでCdSセル(光センサ)を使う方法を詳しく解説します。
ArduinoのAnalog I/O(アナログ入出力)の関数を使ったプログラムで、CdSセルと抵抗を組み合わせた分圧回路から電圧を読み込みます。
なお、その他のArduino関数・ライブラリについては、以下の記事をご覧ください。

CdSセル(光センサ)はどんな電子部品?
CdSセル(光センサ)は、明るさによって抵抗値が変化する電子部品です。内部の材料に硫化カドミウム(CdS)が使われており、当たった光が強くなると抵抗値が小さくなる性質を持っています。
例えば、1MΩのCdSセル(GL5528やM1527など)であれば、暗い状態で1MΩ、明るい状態(10Lux時)で10~20KΩになります。
そのため、実際の電子回路では、CdSと抵抗を組み合わせて分圧回路を作り、明るい時に高い電圧値、暗い時に低い電圧値を読み込んで使用します。
当記事では、GL5528(1MΩのCdSセル)と10kΩの抵抗を組み合わせた分圧回路をブレッドボードを例に解説していきます。
サンプルプログラム(サンプルスケッチ)
サンプルプログラム(サンプルスケッチ)で、ブレッドボードを使います。ブレッドボードの詳しい使い方は、以下の記事をご覧ください。

CdSセルと抵抗の分圧回路から電圧を読み込み

- CdSセル GL5528
- 抵抗10kΩ
- Arduino Uno
- USBケーブル
- ブレッドボード
- ジャンパ線
- PC(プログラム書き込み・シリアルモニタ表示)
void setup() {
Serial.begin(9600);//シリアル通信を9600bpsで初期化
}
void loop() {
int analog_data;
float voltage;
analog_data = analogRead(0);//アナログ0番ピンの入力状態をanalog_dataに代入
voltage = float(analog_data) * (5.0/1023.0);//A/D値から電圧値を算出
Serial.print(voltage);//「voltage」を送信
Serial.println("V");//「V」を送信、改行
delay(1000);//1000msec待機(1秒待機)
}
2.40V
2.39V
0.21V
0.21V
0.20V
2.22V
2.35V
サンプルプログラムでは、CdSセルと抵抗の分圧回路から電圧を読み込みシリアルモニタに表示させます。
「analogRead()」は10bitのA/Dコンバータを使用するので、0~5Vの範囲であれば、0~1023の値を読み込みます。そのため、プログラムで読み込んだ値に(5/1023)をかけることで、電圧を算出します。
今回の分圧回路の構成であれば、室内程度の明るさ(10Lux)は約1.6~2.5V、暗くなるとほぼ0Vになります。
暗くなるとLED点灯

- CdSセル GL5528
- 抵抗10kΩ
- Arduino Uno
- USBケーブル
- ブレッドボード
- ジャンパ線
- PC(プログラム書き込み・シリアルモニタ表示)
void setup() {
pinMode(13, OUTPUT);//13番ピンを出力に設定
Serial.begin(9600);//シリアル通信を9600bpsで初期化
}
void loop() {
int analog_data;
float voltage;
analog_data = analogRead(0);//アナログ0番ピンの入力状態をanalog_dataに代入
voltage = float(analog_data) * (5.0/1023.0);//A/D値から電圧値を算出
if(voltage < 1.0) {//アナログ0番ピンの電圧が1V未満の場合、実行
digitalWrite(13, HIGH);//0番ピンの出力をHIGH(5V)に設定
}
else {//アナログ0番ピンの電圧が1V未満ではない場合、実行
digitalWrite(13, LOW);//13番ピンの出力をLOW(0V)に設定
}
delay(1000);//1000msec待機(1秒待機)
}
サンプルプログラムでは、CdSセルと抵抗の分圧回路から電圧を読み込み、暗い状態であればArduino Unoに実装されている内臓LEDが点灯します。
分圧回路の電圧が1V未満の場合、暗いと判定してLEDが点灯、それ以外はLEDが消灯するようになっています。
おすすめのArduinoボードはどれ?
当記事『Arduino-CdSセル(光センサ)の使い方』では、Arduino Unoを使用したサンプルプログラムを解説してきました。
やはり、たくさんの種類のあるArduinoボードの中でも、最も基本的なエディションのArduino Unoがおすすめなのですが、Arduino Unoと電子部品を組み合わせたキットも存在します。
電子工作初心者にとっては、いちいち電子部品を別途購入する必要がないので非常に有用です。以下の記事で初心者でもわかりやすいように、ランキング形式でおすすめのArduino Unoを紹介しているので、ぜひご覧ください。

また、以下の記事で、安価でWi-Fi/Bluetoothに対応している「ESP32開発ボード」についてもまとめてみました。
このボードは、Arduinoボードではありませんが、Arduino IDEでソフト開発ができるため、電子工作でIoTを実現したい方におすすめです。
