今回は照度センサを使ってみます。
明るさを測る方法のひとつにフォトレジスタを使うものがあります。フォトレジスタは光を入射すると電気抵抗が変化する素子です。フォトレジスタには様々な種類がありますが、以前はCdS(硫化カドミウムセル)といわれるものがよく使われていました。CdSは「抵抗値の変化の幅が大きい」、「反応する周波数が広い」などの利点がありましたが、カドミウムがRoHS指令の規制対象元素になったため、あまり使われなくなりました。
現在フォトダイオードやフォトICなどの代替品が各社から販売されていますが、今回はCdSの代わりとして使いやすいパナソニック製NaPiCa AMS302を使いました。千石電商で入手できます。
NaPiCaはフォトダイオードのパッケージに増幅回路を内蔵しており、人間の視感度に近い特性を持っているのが特徴です。印加電圧は1.5~6V、ピーク波長は580nmです。周囲の明るさに比例した光電流がリニアに出力されます。
回路を組んでみました。写真のブレッドボード上の透明な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の数字が出ます。暗いと小さくて明るいと大きい数字になります。
センサを手で覆ってみました。数値は15付近。だいぶ暗いです。
このセンサを使えば明るさの変化に対応したシステムが組めます。
今後、いろいろ使って紹介していきたいと思います。
ピンバック:OpenAirStar Inc. - OpenAirStar Inc.