照度センサを使ってみた

今回は照度センサを使ってみます。

明るさを測る方法のひとつにフォトレジスタを使うものがあります。フォトレジスタは光を入射すると電気抵抗が変化する素子です。フォトレジスタには様々な種類がありますが、以前はCdS(硫化カドミウムセル)といわれるものがよく使われていました。CdSは「抵抗値の変化の幅が大きい」、「反応する周波数が広い」などの利点がありましたが、カドミウムがRoHS指令の規制対象元素になったため、あまり使われなくなりました。

現在フォトダイオードやフォトICなどの代替品が各社から販売されていますが、今回はCdSの代わりとして使いやすいパナソニック製NaPiCa AMS302を使いました。千石電商で入手できます。
NaPiCaはフォトダイオードのパッケージに増幅回路を内蔵しており、人間の視感度に近い特性を持っているのが特徴です。印加電圧は1.5~6V、ピーク波長は580nmです。周囲の明るさに比例した光電流がリニアに出力されます。

DSC01510s
回路を組んでみました。写真のブレッドボード上の透明なLEDのような形をした素子がAMS302です。AMS302は上がアノード、下の切り欠きのある側がカソードです。アノードのほうが足が長くなっています。抵抗をアノードとGNDの間につなぐことにより抵抗とアノードの間から出力(電圧)が得られます。今回は330Ωの抵抗をつなぎました。RaspberryHabuBasic側はアナログ入力0ピンを使っています。

 // napica.c sample program for RaspberryHabu
 // Licence CC 0 ( Public Domain )
 
 #include "stdio.h"
 #include "stdlib.h"
 #include "wiringPiSPI.h"
 #include "unistd.h"
 #define SPIBUFFSIZE 256
 unsigned char spidata[SPIBUFFSIZE];
 int MCP3008Read( int channel ){
   int spireturn,data;
   spidata[0]= 1; 
   spidata[1]= ( 0x80 | channel << 4 )  ;
   spidata[2]= 0;
   spireturn = wiringPiSPIDataRW( 0, spidata , SPIBUFFSIZE );
   data = ((spidata[1]&3) << 8) + spidata[2];
 return(data);
 }

int main()
{
  int spiresult;
  if (-1 == wiringPiSPISetup(0,1000000))
    {
      printf("SPI setup error!");
      exit(1);
    }
  while(1){
    spiresult=MCP3008Read(0);
    printf("channnel 0 : %d\n", spiresult);
    sleep (1);
  }
}

AD変換された10bitデータがそのまま表示されるコードです。1から1024の数字が出ます。暗いと小さくて明るいと大きい数字になります。

DSC01511通常時です。すこし暗めですが、数値は110付近ですね。

DSC01512センサを手で覆ってみました。数値は15付近。だいぶ暗いです。

DSC01514白いLEDで照らしてみました。数値は250付近でした。

このセンサを使えば明るさの変化に対応したシステムが組めます。
今後、いろいろ使って紹介していきたいと思います。

タグ付けされた , , , , , , . ブックマークする へのパーマリンク.

One Response to 照度センサを使ってみた

  1. ピンバック:OpenAirStar Inc. - OpenAirStar Inc.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>