電子式風速計の制御
アマゾンなどで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;