明度センサー(CDS)をアナログ入力ポートにつないで、PWM出力を液晶のバックライト(+)につないだだけですが、それだけではソフト屋として芸がないので「フワッ」と明るくなったり暗くなるように作ってみました。
なお、CDSは、+5V電源〜CDS〜アナログ入力へ〜抵抗〜GNDという配線です。手持ちのCDSの資料がなかったので、抵抗はまずボリュウムをつないでみて、どのぐらいで適当なアナログ入力が得られるかを測定しました。1200Ωと出たのですが、手持ちの関係で1KΩを使いました。
以下、関連するソースです。
// 宣言部
int backLight = 9; // pwm出力ポート
float cdsTarget = 0.0; // 最後のcds読み込み値
int lastMillis = 0; // 最後にバックライトを更新したミリ秒
// loopに以下の処理を追加:50ミリ秒ごとにバックライト更新
if ( millis() - lastMillis > 50) {
lastMillis = millis();
cdsToBacklight();
}
// 関数 : CDSの値でバックライトを制御
void cdsToBacklight() {
int current = analogRead(cds); // 明るさを読み込む
float diff = (current - cdsTarget) / 20.0; // 差分の1/20を変化値とする
cdsTarget += diff; // 差分を目標値に加算
int intTarget = cdsTarget;
int brt = intTarget >> 3; // 目標値の1/8をpwm値とする
// バックライトへの出力値を制限し、pwm出力
if (brt < 5) brt = 5;
if (brt > 128) brt = 128;
analogWrite(backLight, brt);
}
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。