Arduinoで4センサシャッターテスタのプログラムサンプルを以下に示す。
測定結果は、comポート経由でパソコンのシリアル通信ウィンドウに表示させている。せっかくArduinoなのに、単体で表示させていないところは、少々情けないが。
これだけで、動作はすることまで確認したが、本当に正しいかどうかについては、検証していないため、正確性については怪しいことはゴリか頂きたい。
正確な測定結果を得ようとすれば、センサの反応時間(立上がり、立下がり)を測定して、実際の計測結果を補正する必要がある。興味がある方は、ぜひトライしてみてもらいたい。
メイカーズ塾実習としてのシャッターテスタ作りは、今回で終了とする。
以下は、小型液晶を接続して、測定結果を表示してみた際の写真である。
// シャッターテスタ本格版
// フォトトランジスタ(NJL7302L-F3)4つ
// GP2,3,4,5に接続
// 抵抗は各750Ω
#include <TimerOne.h>
#define NUM 4
unsigned char stage[]={0,0,0,0}; // 計測ステージ初期化
unsigned char pt[]={2,3,4,5}; // フォトトランジスタポート
unsigned long count[]={0,0,0,0}; // 計測カウンタ初期化
long time=10; // μs
void setup() {
Serial.begin(9600); // シリアル利用宣言
for(unsigned int i=0;i<NUM;i++){
pinMode(pt[i], INPUT); //フォトトラポートをインプットに
}
Serial.println(“Ready….”); // モニタ送信
// タイマ割込初期化
Timer1.initialize(time); // 割込周期timeでタイマ割込初期化
Timer1.attachInterrupt(callback); // コールバック関数名定義
}
void callback(){
for(unsigned char i=0;i<NUM;i++){
if(stage[i]==1) count[i]++;
}
}
void loop() {
unsigned char i;
float fcount[NUM]; //
for(i=0;i<NUM;i++){
int data=digitalRead(pt[i]); // センサ入力
switch (stage[i]) {
case 0: // 計測開始前
if(data){
stage[i]=1; // 計測開始ステージに
Serial.print(‘S’); // モニタ送信
Serial.println(i); // モニタ送信
}
break;
case 1: // 計測中
if(!data){
stage[i]=2; // 計測結果表示ステージに
Serial.print(‘F’); // モニタ送信
Serial.println(i); // モニタ送信
}
break;
case 2: // 完了
break;
}
if(stage[0]==2&&stage[1]==2&&stage[2]==2&&stage[3]==2){
for(i=0;i<NUM;i++){
Serial.print(“Time “); // モニタ送信
Serial.print(i); // モニタ送信
Serial.print(” = “); // モニタ送信
fcount[i] = count[i] / (1000./time);
Serial.print(fcount[i],3); // モニタ送信
Serial.println(” ms”); // モニタ送信
count[i]=0; // カウンタクリア
fcount[i]=0;
stage[i]=0; // ステージ初期化
}
Serial.println(“Next”); // モニタ送信
delay(100); // 0.1秒待ち
}
}
}