風速計の制御

電子式風速計の制御


 

アマゾンなどで3000〜8000円で売られている 中国製の風速計である

中国製なので、おもちゃとして購入してみた。
取説は全く無い

ただ、DC5-30V と書かれているので、 12Vを加える
黄色線は NC
ブルーの線はトランジスタのオープンコレクタなので、5Vに10KΩでプルアップすると パルスが出る

20パルス=風速1.75m/sという仕様だけはある



茶色: 5〜30V
黒 : GND
青 : パルス出力
黄色: NC

設計概要ーーーーーーーーーーー
 
1秒間のパルスを読んで、計算をさせて表示させる
1秒ごとに、割り込みをかける。
ソフトが面倒なら、外部から 74ls121などの単安定マルチをつかって1秒測定してもよい。





カウント17 = 風速 1.48m/s である






タイマーは 16ビットのタイマー1を使った

/------- タイマー ------------------------

ISR( TIMER1_COMPA_vect)    // コンペアマッチA割込が発生したときの処理を行います。
  {
  wari_flg=1;
  }

void TIME_START(void)
  {
  TCCR1A = 0b00000000;
  TCCR1B = 0b00001101;    // 1024分周
  TIMSK1 = 0b00000010;     // 比較Aレジスタ
  OCR1A = 8000;         // コンペアマッチAレジスタに8000(1秒)を設定

  wari_flg=0;
  sei();

  }                 // CTCモード  分周=1024} 1秒

void TIME_STOP(void)
  {
  wari_flg=0;
  cli();
  }

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
割り込みがが入ると wari_flg =1 になる
フラグを 1 にすることで 
風速カウントのwhile(1)から break; で抜け出して 表示させる。

表示が終わったら、再度 割り込みスタートさせて カウントする

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

TIME_START();LED_GON;

while(1){
     if(fu_flg == 1){LED_RON;
             if(FU_OFF){fu_flg=0;}
             }
     if(fu_flg == 0){LED_ROFF;
             if(FU_ON){fu_flg=1;count++;}
             }

     if (wari_flg == 1){break;}
    }


TIME_STOP();LED_GOFF;