面白いセンサを使ってみよう
スイッチばかり使うのはどうかと思うので、光センサを使ってみることにした。今回使う、CdSセルというのはフォトレジスタの一種で、光が多く当たると抵抗が少なくなる特殊な性質を持っている。これを利用すれば暗くなったらLEDを点灯するということも可能になる。
ただLEDをチカチカさせるのも面白くないので、光量に応じて光るLEDが変わるような回路をつくってみた。明るいと青、暗いと赤、中間では緑のLEDが点く。さっそくやってみよう。
前回の回路を流用してくる。スイッチのところを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に投稿してみた。
- 作者: 鈴木美朗志
- 出版社/メーカー: 東京電機大学出版局
- 発売日: 2012/12/20
- メディア: 単行本
- この商品を含むブログ (2件) を見る