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

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秒待ち
 }
}
}

最後にこれまでの一連の内容を入れたテキストを以下に示す。

<前へ>                   <一覧へ>

タイトルとURLをコピーしました