秋月電子に行ったら、「焦電センサ」が売られていた。付加回路のついたモジュールで、800円。秋月電子のサイトを見ると、他にも安いものはあるが、店頭にあるものではこれが一番安かった。
「焦電センサ」という言い方は随分通ぶった言い方で、一般的には「赤外線人感センサ」と言った方が通りがよかろう。
買ったものは5V・TTLの負ロジックで、35度くらいのものがセンサ前面の角度120°の範囲2メートル以内で動くと、出力が「負」になる。ロジック端子にプルアップ抵抗をつけて、5Vくらいをくれておいてやるとよいわけだ。
そこで、早速こんなふうにする。ブレッドボードシールド上にはプルアップ抵抗と、リード線を伸ばして3色LEDを取り付けるだけでいい。
スケッチをこんなふうに書けば、即席人感ランプの出来上がりである。
// // Pir2Led.ino // 焦電センサで遊ぶ。 // 秋月電子焦電センサモジュール「SE-10」使用 // https://satotoshio.net/blog/?p=1471 // 27.7.11 1100~ // 佐藤俊夫 // const int PIR = 8, LEDR = 9, LEDG = 10, LEDB = 11, LIGHTTIME = 5000, DULL = 100; // DULL 過敏さを抑えるため、100回くらい人感しないと点灯させない。 // LEDはアノードコモン、焦電センサは負論理なので、どっちも「負 LOW」で点灯 void setup() { pinMode(PIR, INPUT); pinMode(LEDR, OUTPUT); pinMode(LEDG, OUTPUT); pinMode(LEDB, OUTPUT); digitalWrite(LEDR, HIGH); digitalWrite(LEDG, HIGH); digitalWrite(LEDB, HIGH); } void loop() { static int pcount = 0; boolean p = HIGH; delay(20); p = digitalRead(PIR); if(p == LOW){ pcount++; } if(pcount >= DULL){ digitalWrite(LEDR, LOW); digitalWrite(LEDG, LOW); digitalWrite(LEDB, LOW); pcount = 0; delay(LIGHTTIME); }else{ digitalWrite(LEDR, HIGH); digitalWrite(LEDG, HIGH); digitalWrite(LEDB, HIGH); } }