メイカーズ塾実習 シャッターテスタ作り(6) 最終回

Arduinoで4センサシャッターテスタのプログラムサンプルを以下に示す。

測定結果は、comポート経由でパソコンのシリアル通信ウィンドウに表示させている。せっかくArduinoなのに、単体で表示させていないところは、少々情けないが。

これだけで、動作はすることまで確認したが、本当に正しいかどうかについては、検証していないため、正確性については怪しいことはゴリか頂きたい。

正確な測定結果を得ようとすれば、センサの反応時間(立上がり、立下がり)を測定して、実際の計測結果を補正する必要がある。興味がある方は、ぜひトライしてみてもらいたい。

メイカーズ塾実習としてのシャッターテスタ作りは、今回で終了とする。

以下は、小型液晶を接続して、測定結果を表示してみた際の写真である。

20150204_210513

// シャッターテスタ本格版
// フォトトランジスタ(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秒待ち
}
}
}

前回へ  初回へ

(Visited 1,355 times, 1 visits today)
スポンサーリンク

シェアする

フォローする