RRP1320-2-01 に焦電センサー(焦電型赤外線センサーユニット) SE-10 を使っています。 センサー感度 約2m、検知角度 約 120 度 で、人が動くと出力がLowになります。 ただし、感知保持タイマー回路が無く、常に人が居ても出力が散発的に High になります。

モノマルチ

人を検出して「いらっしゃいませ」と発声させたいのですが、このままでは頻繁に「いらっしゃいませ」を繰り返してしまいます。 そこでソフトウェアで感知保持タイマー機能を実現します。

上図のように時間 t のタイマー(リトリガラブル・モノマルチバイブレータの様な働き)を使って、感知保持を行います。 焦電センサー出力が Low の時にタイマーを初期値に戻し、TIMER0 で 0 になるまで DEC (-1)します。加工後の出力はタイマーが 0 以外の間 Low を保ち、0になったら High に戻します。

サンプリングの結果、焦電センサー出力が Low の時には毎回タイマーを初期値(10秒)に戻す様子を破線で示しています。 代表的なタイミングだけですが、上図のように次々と初期値に戻される為、散発的な High 出力(斜線部)が無くなります。 一方で、最後に焦電センサー出力が Low であった時刻から設定時間(10秒)後に加工後の出力が High に戻る遅延が発生しますが、人を検出して「いらっしゃいませ」と発声させる用途であれば困らないと思います。

下図は実施例(アセンブラ・ソース)です。

感知保持タイマー

加工出力 inpds<bit2> は直前に 0 クリアされています。 RB0 が 0 (アクティブ)であれば感知保持タイマーを初期化します。 感知保持タイマーが 0 になったら加工出力を 1 にセットします。

感知保持タイマーデクリメント

なお、感知保持タイマーは TIMER0 割り込みの中で、上図のように条件付きデクリメント(値0でクリップ)されます。


楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。