焦電型赤外線センサー

焦電型赤外線センサー基板を利用できるように配線しなおす

焦電型赤外線センサモジュールは秋月電子通商で販売しています。単体のセンサを使うことも出来ますが、こちらの方がアンプなどが内蔵されているので開発が簡単です。


購入時はこのような姿です。
このままでは、電源入力は5V~12V(赤)で、アラーム出力(黒)はオープンコレクタでmbedで使用しにくいものです。ですから、電源が3.3Vで動くようにし、また、アラーム出力し3.3Vへのプルアップ抵抗も内蔵するように改造します。また、アラームは誤動作する場合もあるので、ハードウェアが判断する直前のアナログ値が読めれば便利かもしれません。基本的にはアラームを用い、補助的にアナログ値を利用します。利用しない場合は、当該部分の配線は必要ありません。
 感知角度が120度なのでちょっと広すぎる気もします。ですので、少し狭くしてみました。必要が無い場合も当該部分の作業は必要ありません。

表のカバーを外します。これは、裏の4箇所のとめているところを外すだけです。そして、接続されている配線を外します。写真は裏側の配線部分です。
CN2と書かれたところが外したところです。

配線の順番は余り関係ありませんが、ここではグラウンドから配線します。
グラウンドはCN2の真ん中の穴です。常識的に黒の線を用いましょう。
外側からの張力で外れないようにカバーの穴を通し、巻きつけます。

104と書いてある抵抗に近い方のC9の部分が3.3Vの電源入力になります。
電源は常識的に赤で配線します。これも外側からの張力で外れないように穴に巻きつけます。

22kΩの抵抗と、熱収縮チューブを用意します。熱収縮チューブは下の写真を参考にして適切な長さに切断しておきます。特に22kΩである必要はありません。大体3.3kΩから47kΩぐらいの範囲では大丈夫でしょう。もう少し外れていても大丈夫多も知れません。単なるプルアップ抵抗ですから。

IC1と書いてある近くの105と書いている抵抗のR4と書いてある側に22kΩを半田付けします。

上記で外したCN2の部分に22kΩの抵抗の反対側を接続するのと、外部にアラーム信号を取り出す配線を接続します。ここではオレンジの線を用いています。この信号はデジタルで22kΩで3.3Vにプルアップしています。 やはり、外側からの張力で外れないように穴に巻きつけます。

IC1の7番ピンに半田付けします。多分難しいので、基板の端のR8の抵抗(474と書いてある)に半田付けします。これはセンサーからのアナログ信号が増幅され積分されて、A/Dコンバーターで読みやすい値になっている場所です。 ここでは、緑の線を用いています。

外側からの張力で外れないように全ての線を穴に巻きつけ、熱収縮チューブで固定します。

アルミホイールを直径5cmぐらいに丸く切ります。

半分に折り、また半分に折り、さらに半分に折り中心角が45度になるようにします。

先端を5mmぐらい切り取ります。

先ほど作った丸い穴の開いたアルミホイールを内側に沿って入れます。

表から見たところ。

元の所に戻します。
アルミホイールを入れたのは前方からだけの赤外線を検出するためです。もう少し広くする場合には穴を広げてコントロールします。カバーをとめるための穴の一つは配線の強度のために用いているので、カバー側の止める部分をニッパーなどで切り取っておきます。


丸ピンIC連結ソケットを用いてコネクタを作ります。このソケットは同じ太さに見えますが、上記写真のように根元が平たい方の径が約0.6mm、右の写真の円錐状になっている方の径が約0.5mmです。0.5mmの方はブレッドボードから抜けやすいので、0.6mmの方を挿すように考えます。


コネクタの完成
順番はどうでもいいですか、基本的には逆挿しにしても回路が壊れない順番にします。
グランドと電源が共に一番端のように、逆挿ししたら逆電圧がかかるような順番は最悪です。

このように挿入して用います。


熱源があるとLEDを点灯させるプログラム



熱源があるとLEDを2秒間点灯させるプログラム
#include "mbed.h"
AnalogIn thermo(p20);

DigitalOut led(LED1);
DigitalOut int_led(LED2);
Serial pc(USBTX, USBRX); // tx, rx
InterruptIn button(p5);

void flip() 
{
  int_led=!int_led;
}

int main()
{
  float th;
  Timer tm;
  pc.baud(115200);
  button.fall(&flip);
  led=0;
  bool detected=false;
  while(true)
  {
    th = thermo;
    if(th > 0.62 && !detected) {
      led = 1;
      detected=true;
      pc.printf("%f\n", th);
      tm.reset();
      tm.start();
    }
    if(tm.read_ms()>2000) {
      led = 0;
      detected=false;
    }
  }
}
 1 
 2 アナログ入力
 3 
 4 アナログからの検出結果
 5 デジタルからの検出結果
 6 
 7 割り込み入力
 8 
 9 割り込み処理ルーチン
10 アラーム信号の立下りで割り込む
11 LEDを反転させる
12 
13 
14 
15 
16 
17 
18 
19 立下りで割り込むように設定する
20 LEDを消灯する
21 検出なしにする
22 
23 
24 データを取得する
25 新たに熱源を見つけたか?
26 LED点灯
27 検出したと記憶する
28 
29 タイマーリセット
30 タイマースタート
31 
32 タイマーが2秒経ったら
33 LEDを消灯させる
34 検出なしにする
35 
36 
37