Arduino: ことはじめ。CdS センサの照度を読んでみる。

SparkFun の Starter Kit for Arduino が届いたので、この中に入っていた CdS センサの出力を見てみた。CdS センサ GL5528 (datasheet)は明るいほど抵抗値が小さくなる。Arduino Uno の詳細は http://arduino.cc/en/Main/ArduinoBoardUno から回路図ほかを見ることができる。回路図は以下の通り。



以下のスケッチにあるように、数点をサンプルして平均を取り込み、表示している。照度 Lx には datasheet の関係を簡単な式にして使ってみた。明るいオフィスは 400 lx 程度、月明かりは 0.2 lx 程度なので、今回の暗い室内の数十 lx は、まぁ、大きくは外れていない。

int analogpin0 = 0; // Analog data input pin number

int i;
int num_of_loop = 5;
int delay_of_loop = 2;
int sum;

double data;

long msec;
long sec;
long minute;

double vcc = 5.0;
int adcmax = 1024;
double refres = 10.0; // kOhm
double volt;
double outres; 
double lx;

int INTERVAL = 100;

void setup(){
  analogReference(DEFAULT); // DEFAULT = 5.0 V
  Serial.begin(9600); // Serial Speed
  Serial.print("-------------------\n");
  Serial.print("  CdS Data Logger  \n");
  Serial.print("-------------------\n");
  Serial.print("INTERVAL=");
  Serial.print(INTERVAL);  
  Serial.print("\n");
}

void loop(){
  sum = 0;
  for(i=0; i<num_of_loop; i++){
    sum = sum + analogRead(analogpin0); // read analog0 pin 1024 ch
    delay(delay_of_loop);
  }
  data = double(sum) / double(num_of_loop);
  
  sec = msec * 0.001;
  minute = sec/60.0;
  volt = double(data) / double(adcmax) * vcc ; // volt
  outres = refres * (vcc / volt - 1.0) ; //Ohm
  lx = pow(outres/7.0, -1.49);
  
  Serial.print(sec);
  Serial.print("sec ");
  Serial.print(minute);
  Serial.print("min ");
  Serial.print(data); 
  Serial.print("ch ");
  Serial.print(volt);
  Serial.print("v ");
  Serial.print(outres);
  Serial.print("kOhm ");
  Serial.print(lx);
  Serial.print("lx \n");
 
  delay(INTERVAL);
  msec = msec + INTERVAL;  
}


出力はこんな感じ。

41sec 0min 829.00ch 4.05v 2.35kOhm 5.08lx 
41sec 0min 827.80ch 4.04v 2.37kOhm 5.02lx 
41sec 0min 827.00ch 4.04v 2.38kOhm 4.98lx 
41sec 0min 825.20ch 4.03v 2.41kOhm 4.90lx