周りの明るさを感知してLEDの強さを調整してみた

今回使うのは照度センサと緑色のLEDです。照度センサは以前にも使ったパナソニック製NaPiCaです。

アナログ入力でNaPiCaの検知する明るさの値を取得してPWMで緑色LEDの明るさを調整します。
NaPiCaをアナログ入力0ピンにつなぎ、緑色LEDのアノード側(+、足の長いほう)をデジタル出力1ピンにつなぎます。緑色LEDのカソード側(-、足の短いほう)には抵抗(10kΩ)をつないでその先をGNDにつなぎます。

DSC01552

明るい時を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の値は実験環境に合わせて変えてみてください。

DSC01550暗い時

DSC01549明るい時

液晶のバックライトなどに応用できそうです。
PIRセンサと組み合わせて人がいるときだけ調整するデスクスタンドライトなどを作るのもよさそうですね。

ブックマーク へのパーマリンク.

コメントを残す

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

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