今回もArduinoでセンサーを扱う方法について扱ってみたいと思います。前回は、超音波距離測定センサー(HC-SR04)を使って距離を測定する方法でしたが、今回は光センサー(CdSセル)を使った明るさの測定方法です。
ちなみにCdSセルの「CdS」とは硫化カドミウムのことです。CdSセルは、この硫化カドミウムの光の強さに応じて電気抵抗が低下するという性質を応用した抵抗器なのです。人の目の特性に近い特性を持っており、明るさを測定するセンサーとして多用されています。
目次
- 必要なもの
- 回路を組み立てよう!
- スケッチのサンプル
- まとめ
1.必要なもの
まずは必要なものについてです。下記にまとめてみました。ArduinoはポピュラーなUNOを使用します。光センサー(CdSセル)は秋月電子通商でもamazonでも入手可能です。
Arduinoをまだ持っていない人は、スイッチサイエンスの「Arduinoをはじめようキット」もオススメです。UNOだけでなくブレッドボードやジャンパーワイヤー、LED、光センサー、カーボン抵抗等が入ったスターターキットになっていますので、初めての人はとりあえずこれだけ買えば今回の回路を組み立てることができます。
※上記のリンクはamazon、秋月電子通商へのリンクとなっています。
2.回路を組み立てよう!
それでは早速回路を組み立ててみましょう。今回は単に明るさを測定するだけではつまらないので、部屋の明るさに応じてLEDの明るさを変化させる回路にしてみました。
下記の写真と接続図を参考に組み立てしてみてください。


3.スケッチのサンプル
では次に、明るさを測定するためのスケッチを完成させましょう。下記のようにコーディングしてください。
const int led = 9;
int res = 0;
int val = 0;
int sec = 0;
void setup() {
Serial.begin(9600);
pinMode(led, OUTPUT);
}
void loop() {
// センサー値を読込み
res = analogRead(0);
// LEDの明るさを計算
val = res / 4 * -1 + 255;
analogWrite(led, val);
delay(10);
sec++;
// 1秒毎にセンサー値を出力
if(sec >= 100) {
Serial.print("val:");
Serial.print(val);
Serial.println("");
sec = 0;
}
}
スケッチの解説
6〜9行目:
計測した明るさは一応シリアルモニタで出力するので、setup関数内で「Serial.begin(9600)」を宣言します。またpinMode関数でピンの設定を行います。
14行目:
analogRead関数でセンサーからの戻り値を受け取ります。ここには0〜255の整数が入ります。
17行目:
ここでは、センサー値に応じてLEDの明るさを計算しているのですが、LEDの明るさは、センサー値が「0」つまり真っ暗の状態の時に最大の「255」に。そしてセンサー値が「255」の時に消灯させるため、このような式となっています。
19行目:
LEDの明るさを計算したあとに、LEDに必要な電流を通すため、analogWrite関数で値を出力します。
25〜30行目:
センサー値はシリアルモニターにも出力させますが、1/100秒だと流石に頻繁すぎるので、1秒毎に出力させるようにしました。
4.まとめ
今回はArduinoで光センサー(CdSセル)を使って明るさを測定する方法について扱ってみました。サンプルスケッチでは、部屋の明るさに応じて自動でLEDの明るさを調整させるような回路にしてみたのですが、他にもアイデア次第でいろいろ応用できそうですね。