2014年1月15日水曜日

Arduinoのバックライトを周辺光で制御

明度センサー(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 件のコメント:

コメントを投稿