明るさが強くなると抵抗が低下するCds(硫化カドミウム)セルの特性を利用して明るさを測定し、測定値を前回の「【初級~中級編】LCDと半固定抵抗器を使用して文字を表示してみよう」で使ったLCDに表示すると共に、暗さ(明るさ)に応じてLEDの明るさを制御するスケッチを作ってみました。
今回必要な部品
- Arduino×1
- USBケーブル( Aコネクタ – Bコネクタ )
- Csdセンサ×1
- LCD×1
- LED×1
- 抵抗器(330Ω)×1本
- 抵抗器(10kΩ)×1本
- ジャンプワイヤー×5本
回路図
今回必要なコード
[code]
#include <LiquidCrystal.h>
// CdSセルにアナログ0番ピンを接続する
const int sensorPin = 0;
// LEDにアナログ9番ピンを接続する
const int ledPin = 9;
// LCDオブジェクト
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
// LEDに接続したピンのモードを出力に設定する
pinMode(ledPin, OUTPUT);
// LCDの桁数と行数を16桁2行に設定する
lcd.begin(16, 2);
}
void loop() {
// 明るさを読み取る
int brightness = analogRead(sensorPin);
// LCDの表示をクリアして、読み取った明るさを表示する
lcd.setCursor(0, 0);
lcd.clear();
lcd.print("CdS: ");
lcd.print(brightness);
// センサの値(0~1023)をLEDの輝度(255~0)に変換する
int intensity = map(brightness, 0, 1023, 255, 0);
// LEDの輝度を表示する
lcd.setCursor(0, 1);
lcd.print("LED: ");
lcd.print(intensity);
// LEDに接続したピンに輝度を出力する
analogWrite(ledPin, intensity);
// そのまま100ミリ秒待機する
delay(100);
}
[/code]
このスケッチはCdsで読み取った明るさをスケッチ例の“LiquidCrystal”によりLCDに表示すると共に、アナログ入力の明るさ(0~1023)をPWM出力の明るさ(255~0)に変換してLEDを制御するものです。明るい場所でCdsの表面を塞ぐか、暗い場所でCdsに強い明かりを当てるなどをすると、それにつれてLEDの明るさが変化するのを確認できるはずです。