サイトロゴ

ArduinoとCdS光センサ

著者画像
Toshihiko Arai

こんなこと、やります。

つかうもの

この記事で主につかうものは、ArduinoとCdS光センサと固定抵抗です。 ### CdSセル 光センサ CdSセルの光センサを使用します。抵抗値は、1MΩ程度のものが使いやすいです。

CdSとは

CdSとは、硫化カドミウムを使用した光センサです。可視光線の光の強さによって抵抗値が変化する抵抗型センサです。光が強くなればなるほど、センサの抵抗値が下がり、電流が流れやすくなります。 フォトトランジスタに比べると反応速度はだいぶ遅いですが、日中と夜を判断するような用途にはCdSセンサで十分です。

ちなみに、フォトトランジスタの使い方は をご覧ください。

ArduinoでCdS光センサをつかってみる

まずは、ArduinoにCdS光センサをつないで、光に応じて変化するセンサの値を読み取ってみましょう。 ### ArduinoとCdSの配線 CdS光センサと10kΩの抵抗を直列につないで、その両端に5Vの電圧をかけます。CdS光センサと抵抗で分圧した点を、Arduinoのアナログ入力へつなぎます。

CdS光センサに極性はないので、とくに向きを気にする必要はありません。

ソースコード

CdSと抵抗で分圧された電圧値をArduinoで読み取ってみましょう。こちらがソースコードです。

#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);
}

光センサの周辺の明るさを変えると、読み取ったアナログ値が変化するはずです。光センサにライトを近づけたり、離したりして実験してみてください。ちなみにArduinoでは、analogReadは0〜1023の値で変化します。

2つの光センサで光の方角を判定

次に、2つのCdSセルを使って光の方角を判定させてみます。

ArduinoとCdSの配線

先ほどの配線をベースに、さらにもう1つのCdSセルと抵抗を使って、分圧された地点をArduinoの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);
}

コード内のthresholdはしきい値です。しきい値がないと、光源が中央にあっても常に左右どちらかに振れてしまうので、そのために必要です。

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

さらにセンサを追加して、上下の方角も判定させることが可能です。ひまわりのように、太陽の方向にあわせて向きを変えることができれば、効率よく太陽発電ができそうです。 ただし、センサの数が増えるごとにアナログピンが占領されていきます。そこで、もう少しスマートにやれる方法を考えてみました。それが、オペアンプの作動入力を使ったアイデアです。回路図のように、オペアンプの作動入力を使うこと、どちらのセンサが明るい方角にあるか判定できます。

作動入力は、2つの入力電圧の引き算を結果として出力する回路です。 この場合、それぞれの入力に対する出力は次の式で計算できます。

\[V_{OUT} = V_{IN+} - V_{IN-}\]

回路図の100kΩの抵抗は、増幅率を上げるためのものです。 これを使えば、Arduinoのアナログ入力を2つ使っていたところを、1つで済ませることができます。 オペアンプに興味のある方は にさまざまな回路図例を掲載してます。

発展:センサひとつで方角を判定する裏ワザ

2つのセンサを使って方角を判定するのは、動物の目や耳もおなじです。いちはやく強敵や獲物の方角を探知できないと、自然界では生きてはいけないでしょう。そういった理由で、動物には目や耳が2つあるのかどうかはわかりませんが。

ところで、ひとつだけのセンサでも、方角を判定できるのをご存知でしたでしょうか。

こちらの映像のように、センサ自身が首を振ることで可能です。レーダーや潜水艦のソナーと同じような発想ですね。

関連記事