赤外線モーションセンサモジュールを使う

HC-SR501をArduino UNOで使う


Arduinoを使って赤外線センサーライトを作ってみました。
使用したArduinoは送料込みで487円で購入した互換機です。


回路図は以下のとおりです。
青のライン(Pin#3)でMOSFETを駆動してUSBのGND側を制御しています。
使用したMOSFETは小型の2SK4017で、ゲート-ソース間 しきい値電圧が2.5Vと低く、マイコンでは使いやすいMOS-FETです。
データシートによると、Gateに3.3Vを加えると、Drain-Source間に4Aぐらい 流れるはずです。
大きさもパワートランジスターと比べ小型なので気に入っています。
Gateの抵抗は無くても動きます。






Arduinoのスケッチは以下のとおりです。
Arduinoの場合、シングルタスクなので全速力でループさせても何も問題ない(と言うかループするしかできない)ので、
このような用途には向いているかもしれません。
動きを検出してからintervalの間、動きがなければUSBをOFFにします。
まだライトセンサー(CDS)はつけていないので、明るさに関係なく動きを検出したらUSBがONになります。
#define pirPin 2
#define outPin 3
#define interval 10

int val;
unsigned long time;
unsigned long etime;
int outFlag;

void setup() {
  Serial.begin(9600);
  pinMode(pirPin,INPUT);
  pinMode(outPin,OUTPUT);
  digitalWrite(outPin,LOW);
  outFlag=0;
}

void loop() {
  val = digitalRead(pirPin); //read state of the PIR
 
  if (val == LOW) {
    Serial.println("No motion"); //if the value read is low, there was no motion
  }
  else {
    Serial.println("Motion!"); //if the value read was high, there was motion
    time = millis()/1000;
    etime=time+interval;
    digitalWrite(outPin,HIGH);
    outFlag=1;
  }

  Serial.print("outFlag=");
  Serial.println(outFlag);
  if (outFlag) {
    time = millis()/1000;
    Serial.print(time);
    Serial.print(" ");
    Serial.println(etime);
    if (time > etime) {
      digitalWrite(outPin,LOW);
      outFlag=0;
    }
  }
  delay(1000);
}

Arduinoの場合、直接アナログを読み込みことができるので、CDSを追加して明るさを判断するのは簡単にできそうです。

続く
....