I've bought an HC-SR501-compliant PIR motion sensor (like this one) and connected it to a Teensy 3.1. The circuit seems fine, and the LED lights up. However, when nothing is moving in front of it, the sensor keeps reporting HIGH and LOW in suspiciously constant intervals. The monitor reads like this (numbers in milliseconds)
motion detected 4113
motion stopped 7234
motion detected 4114
motion stopped 7274
motion detected 4113
motion stopped 7204
motion detected 4111
motion stopped 7184
When it detects movement, it stays on the triggered position for longer, but even then goes back to predetermined intervals, e.g.
motion detected 4113
motion stopped 17204
motion detected 4111
motion stopped 41754
motion detected 4113
This is the sketch (as found on Adafruit):
int ledPin = 13; // choose the pin for the LED
int inputPin = 1; // choose the input pin (for PIR sensor)
int pirState = LOW; // we start, assuming no motion detected
int val = 0; // variable for reading the pin status
unsigned long lastTime = millis();
void setup() {
pinMode(ledPin, OUTPUT); // declare LED as output
pinMode(inputPin, INPUT); // declare sensor as input
Serial.begin(9600);
}
void loop(){
unsigned long currentTime = millis();
val = digitalRead(inputPin); // read input value
if (val == HIGH) { // check if the input is HIGH
digitalWrite(ledPin, HIGH); // turn LED ON
if (pirState == LOW) {
// we have just turned on
Serial.print("motion detected ");
Serial.println(currentTime - lastTime);
// We only want to print on the output change, not state
pirState = HIGH;
// Save time for measurement
lastTime = currentTime;
}
} else {
digitalWrite(ledPin, LOW); // turn LED OFF
if (pirState == HIGH){
// we have just turned off
Serial.print("motion stopped ");
Serial.println(currentTime - lastTime);
// We only want to print on the output change, not state
pirState = LOW;
// Save time for measurement
lastTime = currentTime;
}
}
}
Could this be a faulty device? I'm thinking about getting a new one for testing. While I can compensate for the gaps when triggered, I can't think of a way to make sure that it's not actually being triggered by this weird internal interval.
1 Answer 1
Try powering the PIR motion sensor with a higher voltage. I get the same problem you're seeing when powering it with the 3.3v output of an Adafruit Huzzah ESP-12, but it works just fine when I power it with the 5v USB power.
-
From the Adafruit page: "Runs on 5V-12V power (if you need to run it off of 3V you can do that by bypassing the regulator, but that means doing a bit of soldering)." So powering it from the Teensy's 3.3V may be the problem.Adrian McCarthy– Adrian McCarthy2018年03月12日 22:00:19 +00:00Commented Mar 12, 2018 at 22:00