赤外線モーションセンサモジュール(HC-SR501)をArduino UNOで使う


DC3V〜5Vの入力をUSBの5V出力に変換する変換機を入手しました。
こちらで紹介しているUSB-SWと同じ内容のものですが、作る よりも買ったほうが安い(送料込みで101円)ので買ってみました。
そこで、Arduinoを使ってセンサーライトを作ってみました。




使用したArduinoはこちらも送料込みで487円で購入した互換機です。



回路図は以下のとおりです。
青のライン(Pin#3)がUSBモジュールへの給電です。



全体はこんな感じです。




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を追加して明るさを判断するのは簡単にできそうです。

続く
....