今回使うのは照度センサと緑色のLEDです。照度センサは以前にも使ったパナソニック製NaPiCaです。
アナログ入力でNaPiCaの検知する明るさの値を取得してPWMで緑色LEDの明るさを調整します。
NaPiCaをアナログ入力0ピンにつなぎ、緑色LEDのアノード側(+、足の長いほう)をデジタル出力1ピンにつなぎます。緑色LEDのカソード側(-、足の短いほう)には抵抗(10kΩ)をつないでその先をGNDにつなぎます。
明るい時をPWM100%に、暗い時を0%にします。
// lednapica.c sample program for RaspberryHabu
// Licence CC 0 ( Public Domain )
#include "stdio.h"
#include "stdlib.h"
#include "wiringPPI.h"
#include "wiringPi.h"
#define TEISU 20
#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,led;
if (-1 == wiringPiSPISetup(0,1000000))
{
printf("SPI setup error!");
exit(1);
}
if (-1 == wiringPiSetup())
{
printf("setup error!");
exit(1);
}
pinMode(1,PWM_OUTPUT);
while(1){
spiresult=MCP3008Read(0);
led = 1023 - (spiresult * TEISU) ;
if(led>1023){
led = 1023;
}else if(led<0){
led = 0;
}
printf("channel 0 : %d led %d\n", spiresult,led);
pwmWrite(1,led);
usleep (50000);
}
}
動かしてみると、少し見にくいですが緑のLEDの明るさが変化しているのがわかります。TEISUの値は実験環境に合わせて変えてみてください。
液晶のバックライトなどに応用できそうです。
PIRセンサと組み合わせて人がいるときだけ調整するデスクスタンドライトなどを作るのもよさそうですね。


