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