ArduinoとCdS光センサ

ArduinoとCdS光センサ
ArduinoとCdS光センサ

この記事では、ArduinoでCdS光センサを使う方法を解説する。CdSとは、硫化カドミウムを使用した光センサーで、可視光線の光の強さによって抵抗値が低下する抵抗型センサーである。フォトトランジスタに比べると反応速度遅いが、たとえば日中と夜を判断する場合などの用途ではCdSセンサで十分である。

CdSで光の強さに反応する

開発環境

項目バージョン
ArduinoデバイスArduino Uno Rev3
CdSセル2MΩ
統合開発環境VS Code x Platform IO
パソコンmacOS Big Sur 11.0.1

CdSセルの抵抗値は、1MΩ程度のものを選ぶと良い。

ArduinoはArduino Uno Rev3を使用したが、皆さんはお好きなArduinoでどうぞ。

ArduinoとCdSの配線

ArduinoとCdSの配線
ArduinoとCdSの配線

CdSと10kΩの抵抗を直列に繋ぎ、両端に5Vの電圧をかける。そしてCdSと抵抗で分圧した点を、Arduinoのアナログ入力に接続する。CdSに極性はないので、とくに向きを気にする必要はない。

プログラム

CdSと抵抗で分圧された電圧を読み取ることで、光の明るさを検知することができる。次は、分圧された電圧をシリアルモニタに表示するだけの簡単なプログラムだ。CdSセルにライトを近づけたり離したりして実験してみよう。光の強さに応じて、0〜1023の値でシリアルモニタに表示されるはずだ。

#include <Arduino.h>


int A0 = 0;

void setup() {
  Serial.begin(9600);
  pinMode(A0, INPUT);
}

void loop() {
  float v = analogRead(A0);  
  Serial.println(v);
  delay(1000);
}

光の強さ左右の判定

次に、2つのCdSセルを使って左右のどちらが光が強いか判定させてみた。先ほどとの配線と同様にもう1つのCdSセルを抵抗で分圧して、A1へ繋いでみよう。下のプログラムでは光源が左右のどちらにあるか判定させている。ポイントとしては、光源が中央の場合のしきい値を設けているところだ。しきい値がないと、光源が中央にある場合に左右にふらついてしまい安定しないからである。

#include <Arduino.h>


int LEFT = 0;
int RIGHT = 1;
int threshold = 100;

void setup() {
  Serial.begin(9600);
  pinMode(LEFT, INPUT);
  pinMode(RIGHT, INPUT);
}

void loop() {
  int vL = analogRead(LEFT);
  int vR = analogRead(RIGHT);
  int diffLR = vL - vR;
  if (diffLR > threshold)
  {
    Serial.println("LEFT");
  }
  else if(diffLR < -threshold) {
    Serial.println("RIGHT");
  }
  else
  {
    Serial.println("CENTER");
  }
  delay(1000);
}

オペアンプの作動入力を使ったアイデア

先ほどの仕組みをさらに応用し、上下方向も判定させれば例えば太陽の方向にあわせて向きを制御することができるだろう。効率よく太陽発電させた場合に使えそうだ。しかし、CdSの数が増えるごとにアナログピンを占領していく。もう少しスマートにやる方法はないかと考えたのが次の回路である。

オペアンプの作動入力を使って光源を判定させる回路図
オペアンプの作動入力を使って光源を判定させる回路図

回路図のように、オペアンプの作動入力を使うことでどちらのCdSセルに光が強く当たっているか判定できる。作動入力とは、簡単に言えば2つの入力電圧の引き算を結果として出力する回路である。

この場合、

$$V_{OUT} = V_{IN+} - V_{IN-}$$

で出力電圧が計算される。また、回路図の100kΩの抵抗は増幅率を上げるために入れてある。

よって、オペアンプの出力電圧をArduinoのアナログ入力で読み取れば光源の位置を判定させることができる。アナログ入力を2つ使っていたところを1つで済ますことができるのだ。

記事に関するご質問などがあればTwitterへお返事ください。
この記事で紹介した商品
人気のArduino互換機
Arduinoで人気の周辺パーツ
Arduinoのオススメ参考書

▼ Arduino初心者向きの内容となっています。ほかのArduino書籍と比べて図や説明がとてもていねいで、読みやすかったです。Arduinoで一通りのセンサーが扱えるようになります。

▼ 外国人が書いた本を翻訳したものです。この手の書籍は、目からうろこな発見をすることが多いです。

▼ Arduinoの入門書を既に読んでいる方で、次のステップを目指したい人向きの本です。C言語のプログラミングの内容が中心です。ESP32だけでなく、ふつうのArduinoにも役立つ内容でした。

関連記事