【Arduino】 フォトインタラプタセンサーモジュール

LESSON 034

フォトインタラプタセンサーモジュール​で回転数を測定する。

 
○ 今回は速度測定モジュール用の写真遮断センサーについてを説明します。

○ LESSON 033  にで使用した 透過形フォト・マイクロセンサをモジュール化した物を使います。

○ 原理は

  ですが、検出物をエンコーダーに変更するとエンコーダーのスリットから光が通り、その通った光の数をカウントすれば回転数を算出出来ます。

  エンコーダーとは 
   
  今回は20のスリットの物を使用します。
  この様に使います。
目 次

    • 構成部品
    • 配線図
    • スケッチ
    • 結果
    • まとめ
       
構成部品

Arduino​
USBケーブル​
ブレッドボード​
OPT101モジュール
ジャンパー線 

      
配線図  

  5V         ⇒ VCC
  A0         ⇒ OUT    
  GND     ⇒  COM


   
   
  
        

スケッチ《 test026》  

   
#include <MsTimer2.h>
const int OUT_data=0; 
volatile long cnt = 0;
int data = 0;
boolean state  = 0; 
void Counter() {
  cnt = cnt*100;
  Serial.print(cnt);
  Serial.println("rpm");  
  cnt = 0; 
}
void setup() {
  MsTimer2::set(600, Counter);
  MsTimer2::start();
  Serial.begin(9600) ;
}
void loop() {
   data = analogRead(OUT_data);
  if (data > 512 && state == 1){
    state = 0;
    cnt++;
  }
  if (data < 256 && state == 0) {
    state = 1;
  }
}

      

  

解説
#include <MsTimer2.h>
  
 Timer2 を使用して割り込み関数を実行するライブラリです。
    
   型情報 変数 = 定数 ;
 ​  変数の宣言、変数の初期化
   
     const int OUT_data=0;
     volatile long cnt = 0;
       変数を割り込みサービスルーチンで扱う場合、変数をvolatileとして宣言します。
     int data = 0;
     boolean state = 0;
    ブーリアン型は、真理値の「真 = true」と「偽 = false」という2値をとるデータ型です。 
  
 
  • void Counter() {
    }
    サービスルーチン  
       
  • void setup()
    MsTimer2::set(unsigned long ms, void (*f)())
    オーバーフローする時間をmsで指定し、オーバーフローするたびに、関数fをよb

    MsTimer2::start();
    割り込みを有効にします。
      

    • void loop()

         data = analogRead(OUT_data);
              
         if (data > 512 && state == 1){
              state = 0;
              cnt++;
             }
             if (data < 256 && state == 0) {
             state = 1;
             }
             
              スリット部を光(data > 512)が通ればカウンターに1つ追加します
         
                a  &&  b   aとbが共に真の場合に真

           
      結果 

〇 プログラムの結果 (シリアルデータ)

    約60000 RPM になりますが、エンコーダーのスリットは20ありますので
    実際は20で割ると
  
       60000 ÷ 20 = 50 
   
       3000 RPM  になります。
   

〇 デジタルオシロスコープ と デジタル スマートテスターの実測値 
 

   ・ デジタルオシロスコープ       1000Hz
   ・ デジタル スマートテスター       997.8Hz  
     
    約1000 Hz になりますが、エンコーダーのスリットは20ありますので
    実際は20で割ると

       1000 ÷ 20 = 50 
 
           50 Hz  になります。Hzは 1秒当たりの振幅数なので1分間にすると60を掛けます。
 
       50 × 60 =3000

       3000 RPM  になります。

 

     

まとめ

○ プログラムでもデジタルオシロスコープ や デジタル スマートテスター  ほぼ同じ値が得られました。
  
○ Arduino を 学ぶ上で書籍やWebpageを参考に作っていますが、私なりに噛み砕いて書いているつもりですが、判らない点がありましたら連絡下さい。

目次