まごころせいじつ堂

浜町庄金 研究開発  マイコンで遊んでばっかりで

S9705

S9705照度計をスケッチのみで/Arduino 1.6.6のシリアルプロッタ

※参考linkを追加

 以前実験した、浜松ホトニクスのS9705による照度計。ライブラリに依存しているのでArduino Leonardoなどでは動かない。そこでPulseIn()を使ってスケッチだけで書き直した。

S9705 照度ー周波数変換フォトICを使った照度計

以下の部品を使った。
照度・周波数変換フォトIC 550nm S9705(2個入)(秋月電子)
1.27mm8ピンDIP変換基板(5枚入)(秋月電子)


S9705 接続: pin1(RST)=GND pin4(OUT)はArduinoのD5。あとは電源でpin2=GND,pin3=Vdd。

2015FreqLx2photo

スケッチは以下から:
https://gist.github.com/houmei/4347458b6f17de207670

これは単純にカウントするだけなので、精度を上げるためにはRST端子を制御してカウント開始をきちんと制御する等工夫が必要。


なおピン名をP1_5の様に変更するだけでMSP430 LaunchPad/Energia IDEでも動作した。

さて、Arduino 1.6.6ではシリアル出力をグラフにするシリアルプロッタが追加された。
Arduino IDEの新機能、シリアルプロッタが便利(Make:)

シリアル出力に数値のみを書き出すようにして、Arduino IDEのツールからSerial Plotterを選択する。

2015SerialPlotter

 こんな感じ。縦軸は自動的に変化する。

 今のところ単機能だけど、スペースなどで区切った数値で複数の折れ線が出たりしたら面白そうね。

参考:
Frequency counter using arduino(Circuits Today)
pulseIn(pin, value, timeout) (Arduino日本語リファレンス)



S9705 照度ー周波数変換フォトICを使った照度計

 秋月電子で売っている照度ー周波数変換フォトIC S9705 を使った照度計を作った。

照度・周波数変換フォトIC 550nm S9705(2個入)

資料:S9705 (浜松フォトニクス)

作例:■簡易照度計V2(S9705) (電子工作etc) こちらによると、100lx=50KHzなので周波数を測定したあと÷500をするだけでよいとのこと。
 では、手持ちのArduinoでやるには周波数カウンタがあればよいわけだ。探したらライブラリがありました。
Arduinoで遊ぼう - 周波数カウンタ(なんでも作っちゃう、かも。)
Arduino Frequency Counter Library(Lab III)

 これはATMega328内蔵のカウンタを使ってArduino Pin5に入るパルスを一定時間カウントするもの。ゲートタイムを1秒に設定すればそのままカウント数が周波数になる。S9705の出力はデューティ50%で最大周波数は10Klxで1000KHz、とあるので充分。

2013photoIC
 Arduino IDE1.0.5で確認した。先程のArduino Frequency Counter Libraryからライブラリをダウンロードし、ライブラリをインストールする。MacOSXだとArduinoのアイコンを右クリックして「アプリケーションの内容を表示」をクリック、Contents→Resources→Java→Libraries以下にフォルダごとコピー。

 最初はまったのはArduino Leonardoで動作しなかったこと。ライブラリ中、defined (__AVR_ATmega328P__) という箇所があるので__AVR_ATmega32U4__と追加したらエラー発生。AVRのレジスタに関するシンボルが見つからないみたい。32U4もハードウェアとしてはカウンタを持っているはずなのでここをちゃんと定義してやれば使えそうだが、Arduino Unoに変えて楽することに。
 と思ったらヨソで使用中なので現在手持ちにArduino Unoがない。で、鳥人間のHarpy nanoがあったなあと引っ張り出してきて使用。マイコンボードはArduino Pro or Pro Mini (3.3V, 8MHz) w/ ATmega 328を選択する。S9705を3.3Vで使用することになるが問題ない。
2013photoIC3

スケッチは以下:サンプルを少し改変した程度。
#include <FreqCounter.h>

void setup() {
  Serial.begin(9600);                    // connect to the serial port
  Serial.println("Frequency Counter");
}

long int frq;
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
 Serial.print(frq);                // 
 Serial.print(" ");                // 
 Serial.println(frq/500);                // S9705 100Lux=50KHz
  delay(80);
}
 これでシリアルコンソールに周波数と照度を垂れ流す。一応、同じく秋月電子で買った照度計で大きくずれてないか確認した。

2013s9705

記事検索
プロフィール

hardyboy

カテゴリ別アーカイブ
月別アーカイブ
QRコード
QRコード
  • ライブドアブログ