つくったブログ

ぼくがつくったもの。

光センサを使ってLEDチカチカ

面白いセンサを使ってみよう

 スイッチばかり使うのはどうかと思うので、光センサを使ってみることにした。今回使う、CdSセルというのはフォトレジスタの一種で、光が多く当たると抵抗が少なくなる特殊な性質を持っている。これを利用すれば暗くなったらLEDを点灯するということも可能になる。

フォトレジスタ - Wikipedia

 ただLEDをチカチカさせるのも面白くないので、光量に応じて光るLEDが変わるような回路をつくってみた。明るいと青、暗いと赤、中間では緑のLEDが点く。さっそくやってみよう。


f:id:kyokucho1989:20130615150801j:plain:w300


 前回の回路を流用してくる。スイッチのところをCdSセルに置き換える。LEDと違い、向きは関係ない。またCdSセルと抵抗の間から一本線を伸ばしてArduinoの「A0」というところにつなげる。これはCdSにかかる電圧を読み取るために必要になる。

 次にプログラム。

// Original 02: 光量に応じて光るLEDが変わる

const int red_LED = 13;        // 赤LEDが接続されているピン
const int blue_LED = 12;       // 青LEDが接続されているピン
const int green_LED = 11;      // 緑LEDが接続されているピン


int val = 0;           // 入力ピンの状態がこの変数(val)に記憶される
int state = 0;         // LEDの状態(0ならオフ、1ならオン)

void setup() {
  pinMode(red_LED, OUTPUT);    // ArduinoにLEDが出力であると伝える
  pinMode(blue_LED, OUTPUT);    
  pinMode(green_LED, OUTPUT); 
}

void loop() {
  val = analogRead(0); //センサから値を取得します
  if(val/4 < 30){
    state=0;
  }
  if(val/4 > 30 && val/4 <= 100){
    state=1;
  }
  if(val/4 > 100 && val/4 <= 170){
    state=2;
  }
  if(val/4 > 170){
    state=3;
  }
  
  //変化があるかどうかチェック
  
  if (state == 0) {
    digitalWrite(red_LED, LOW);
    digitalWrite(blue_LED, LOW);
    digitalWrite(green_LED, LOW);
  } else if (state == 1) {
    digitalWrite(red_LED, HIGH);
    digitalWrite(blue_LED, LOW);
    digitalWrite(green_LED, LOW);
  } else if (state == 2) { 
    digitalWrite(red_LED, LOW);
    digitalWrite(blue_LED, HIGH);
    digitalWrite(green_LED, LOW);
  } else if (state == 3) {
    digitalWrite(red_LED, LOW);
    digitalWrite(blue_LED, LOW);
    digitalWrite(green_LED, HIGH);
  }
  delay(100);
}
  • analogRead(pin番号)で、そのpin番号にかかっている電圧を読み取る。0~5Vが0~1023の整数に変換されて返ってくる。
  • valを4で割っているのは本に書いてあったプログラムの影響から。このプログラムでは特に意味はない。

 完成。数値のところは調節して、自分にあったものに変更してほしい。手を近づけると赤が点灯し、離すと青が点灯する。面白いなぁ。


youtubeに投稿してみた。

たのしくできるArduino実用回路

たのしくできるArduino実用回路