Arduinoで照度計が作れないかと調べてみると、照度を周波数に変換するフォトIC「S9705」があることが解りました。
しかも、秋月電子で2個入りで¥400で販売されていましたので、早速照度計にチャレンジしてみました。
照度-周波数変換フォトIC S9705 (浜松ホトニクス株式会社製)
S9705は、入射光の強度に比例して発信周波数が変化する矩形波(デューティー比50%)が出力されます。
この矩形波をArduinoでカウントし照度(Lux)に変換します。
S9705の分好感度特性と出力周波数-照度(データシートより)
今回参考にしたページ
簡易照度計V2(S9705)
S9705 照度-周波数変換フォトICを使った照度計
S9705の出力測定
S9705は、約5mm角程の小さいものなので基板にとりた後、ブレッドボードで仮配線して出力周波数、波形等を計測してみました。
ブレッドボードで仮配線
S9705の出力波形
照度が低い時の出力波形 照度が高くなった時の出力波形
Arduinoと接続
光の強度に応じて、矩形波の周波数が変化することが確認できましたので、Arduinoに接続します。
スケッチ
Arduino でS9705 の出力をカウントするためには、周波数カウンタのライブラリが必要になります。
Arduino Frequency Counter Library の Down load >FreqCounter Libraryからライブラリがダウンロードできますので、それをダウンロードした後、Arduino IDE の libraries フォルダにコピーをしておきます。
また、出力された周波数から照度に変換するには、簡易的に「出力周波数/500 」で変換できるようですのでそれを採用します。
//Illminometer
#include <SD.h>
#include <FreqCounter.h>
long int frq;
long n;
void setup(){
Serial.begin(9600);
Serial.println("Frequency Counter");
if(!SD.begin(8)){
Serial.println("Card failed,or not present");
n = 0;
}else{
Serial.println("Card initialized.");
}
}
void loop ()
{
FreqCounter::f_comp = 8; // Set compensation to 12
FreqCounter::start(1000); // Start counting with gatetime of 1000ms
while (FreqCounter::f_ready == 0); // wait until counter ready
frq = FreqCounter::f_freq; // read result
n=n+1;
Serial.print(n);
Serial.print(",");
Serial.print(frq);
Serial.print(",");
Serial.println(frq/500); // S9705 100Lux=50KHz
File dataFile = SD.open("datalog.txt", FILE_WRITE);
if (dataFile) {
dataFile.print(n);
dataFile.print(",");
dataFile.print(frq);
dataFile.print(",");
dataFile.println(frq/500);
dataFile.close();
delay(981.7);
}
else{
Serial.print("error opening datalog txt");
}
}
シリアルモニタとLCDで測定値を表示
スケッチは掲載しておりませんが、最初に測定した周波数と照度の値をシリアルモニターとLCDで確認した見ました。
シリアルモニタ出力
LCDに出力して確認
測定値と照度計の比較
※コメント投稿者のブログIDはブログ作成者のみに通知されます