2012年2月16日木曜日

Arduinoから光センサを使って明るさの検出

今回は明るさを検出するために、光センサを使ってみます。
光センサは、CDSセルと呼ばれる部品を使います。

CDSセルを調べてみると、CDSセルは硫化カドミウムという物質を使っていて、 セルに光が当たっていると抵抗値が小さくなり、光が当たっていないと抵抗値が大きくなる性質を利用して明るさの検出に使用されています。おぉ~、そんな化学が使われている部品だったんだと感心してしまいました。


CDSセルの部品は、2本の線が伸びているけど、+と-は無く、これを極性が無いと言うそうです。
明るいときは600Ω、暗いときは1MΩだそうです。

それではさっそく回路図です。


Arudinoの右下側にある、ANALOG inの0番を今回は使います。

光センサのCDSセルと5Vの間には10KΩの抵抗を入れています。

左側のLEDは、明るさの検出状況を見るためのものです。12番ピンで接続します。そう、ここにも抵抗を入れるんでしたね。220Ωの抵抗をいれています。

部品点数が 少なく済むのは、初心者にとって、うれしいです。





次にスケッチです。

  void setup() {
     pinMode(12,OUTPUT) ;   // 12番ピンをデジタル出力に設定します。LED用です。
 }
 void loop() {
    int anain ;

     anain = analogRead(0) ;  // CDSを接続したアナログ0番ピンを読み取る
     if (anain >= 700) {      // 700がしきい値です
          // 光がしきい値より暗いとき
          digitalWrite(12, HIGH) ;  // LEDを点灯で出力
     } else {
          // 光がしきい値より明るいとき
          digitalWrite(12, LOW) ;   // LEDを消灯で出力
     }
 }

コメントを入れましたが、anain = analogRead(0) ; の行で、アナログ入力の0番ピンを読み取り、その値をanainという変数へ格納しています。

if文を使って、anain変数(analog inputの意味です) の値により、LEDをHighにするのかLowにするかを決めているわけです。応用として、 暗いときに消灯、明るいときに点灯したいときには、> の記号を逆にすれば、OKですね。

判定している700 という数値は、接続するCDSセルや周囲の明るさにより、調整したほうが良さそうです。
 
シンプルなスケッチなので、理解しやすいですね。

もうちょっと詳しく調べてみました。
Arduino は、analog入力として0~5Vまでを入力できます。(5V以上が流れると壊れちゃうってことで、素人にはちょっと怖い感じが・・・) 入力された電圧を0~1023までの値に分解して、扱えるですって。Arduinoは賢い。
だから、上のスケッチで使っているanainの変数にも、0~1023の値が入ることになります。

今日はここまでです。

ランキングに参加しています。ぼちっとお願います→

2 件のコメント:

  1. 最近Arduinoにはまりました。とりあえずLCDに顔文字を
    入れて、オフィスなんかに「食事中(`・ω・´)」にみたいに
    置きたくて遊んでいます。しかし、少しできるようになる
    といろいろなものをやってみたくなるのはやっぱり性です
    かね?このサイトに書かれていることを勉強させていただき
    ますので、よろしくお願いします!

    返信削除
    返信
    1. ウナさん

      コメントありがとうございます。
      LCDで顔文字の表示は、楽しいアイデアですね。

      少しでもこのサイトがお役に立てれば光栄です。

      削除