为什么第二个 PIR 传感器总是高电平?
Why 2nd PIR sensor is always HIGH?
我从串行监视器上的 'inputPintwo' 得到一个常量 HIGH。当 'inputPin' 变为高电平时,继电器被触发并正常工作,因为 'inputPintwo' 也处于高电平(一直)。
我的设置非常类似于:2 PIR motion sensors +Arduino
我没有像上面回答的问题那样使用引脚 0 或 1。我已经用另一个传感器更换了传感器,以防硬件损坏。我还拔下了传感器,它仍然显示为高电平。跳线在两个传感器上重新触发。
int ledPin = 13;
int inputPin = 2;
int inputPintwo = 4;
int pirState = LOW;
int val = 0;
int valtwo = 0;
#define RELAY1 7
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(inputPin, INPUT);
pinMode(inputPintwo, INPUT);
pinMode(RELAY1, OUTPUT);
Serial.begin(9600);
}
void loop(){
val = digitalRead(inputPin);
valtwo = digitalRead(inputPintwo);
if (val == HIGH && valtwo == HIGH) {
digitalWrite(ledPin, HIGH);
if (pirState == LOW) {
Serial.println("Motion detected!");
pirState = HIGH;
Serial.println("Light ON");
digitalWrite(RELAY1,1);
delay(500);
digitalWrite(RELAY1,0);
delay(500);
digitalWrite(RELAY1,1);
delay(500);
digitalWrite(RELAY1,0);
delay(500);
digitalWrite(RELAY1,1);
}
}
else {
digitalWrite(ledPin, LOW);
if (pirState == HIGH){
Serial.println("Motion ended!");
digitalWrite(RELAY1,0);
pirState = LOW;
Serial.println("Light OFF");
}
}
}
我希望两个传感器仅在检测到运动时才变为高电平,这将导致继电器打开和关闭几次,然后保持打开状态,直到传感器上的计时器用完。
要确定问题,我建议您从检查硬件开始。您将需要 voltmeter/multimeter.
- 仔细检查您是否正确连接了传感器(检查数据表)。你没有忘记连接吗?下拉电阻?
- 检查传感器上的电源电压——电压是否在
制造商规格?
- 如果您使用的是面包板,请检查连接。
- 检查传感器输出行为(电压),是否有运动。电压是否恒定?恒定电压意味着 PIR 传感器工作不正常。在执行此测试之前,断开 Arduino 输入的输出。
如果一切正常或者您没有电压表,请尝试断开 PIR 传感器并在 Arduino 引脚 4 和地之间连接一根电线。 digitalRead(inputPintwo) return 低吗?如果是,您知道读取引脚状态工作正常。
下面请查看与您的代码相关的一些建议:
- 使用#define 指令或static const int 变量类型来定义Arduino 引脚,就像您使用继电器输出引脚RELAY1 一样。
示例:
#define LED_PIN 13
#define INPUT_PIN 2
#define INPUT_PINTWO 4
或
static const int ledPin = 13;
static const int inputPin = 2;
static const int inputPintwo = 4;
- 在您的情况下,如果您只对数字值感兴趣 (LOW/HIGH),请在输入引脚上使用内置上拉电阻。因此日志。浮动输入引脚上的电压电平被定义为(高电平)。如果不使用上拉电阻,电压既可以对数。 0(低)或日志。 1(高),什么会导致奇怪的 program/state 机器行为
要激活输入引脚中的上拉电阻,请使用
pinMode(inputPin, INPUT_PULLUP);
pinMode(inputPintwo, INPUT_PULLUP);
我从串行监视器上的 'inputPintwo' 得到一个常量 HIGH。当 'inputPin' 变为高电平时,继电器被触发并正常工作,因为 'inputPintwo' 也处于高电平(一直)。
我的设置非常类似于:2 PIR motion sensors +Arduino
我没有像上面回答的问题那样使用引脚 0 或 1。我已经用另一个传感器更换了传感器,以防硬件损坏。我还拔下了传感器,它仍然显示为高电平。跳线在两个传感器上重新触发。
int ledPin = 13;
int inputPin = 2;
int inputPintwo = 4;
int pirState = LOW;
int val = 0;
int valtwo = 0;
#define RELAY1 7
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(inputPin, INPUT);
pinMode(inputPintwo, INPUT);
pinMode(RELAY1, OUTPUT);
Serial.begin(9600);
}
void loop(){
val = digitalRead(inputPin);
valtwo = digitalRead(inputPintwo);
if (val == HIGH && valtwo == HIGH) {
digitalWrite(ledPin, HIGH);
if (pirState == LOW) {
Serial.println("Motion detected!");
pirState = HIGH;
Serial.println("Light ON");
digitalWrite(RELAY1,1);
delay(500);
digitalWrite(RELAY1,0);
delay(500);
digitalWrite(RELAY1,1);
delay(500);
digitalWrite(RELAY1,0);
delay(500);
digitalWrite(RELAY1,1);
}
}
else {
digitalWrite(ledPin, LOW);
if (pirState == HIGH){
Serial.println("Motion ended!");
digitalWrite(RELAY1,0);
pirState = LOW;
Serial.println("Light OFF");
}
}
}
我希望两个传感器仅在检测到运动时才变为高电平,这将导致继电器打开和关闭几次,然后保持打开状态,直到传感器上的计时器用完。
要确定问题,我建议您从检查硬件开始。您将需要 voltmeter/multimeter.
- 仔细检查您是否正确连接了传感器(检查数据表)。你没有忘记连接吗?下拉电阻?
- 检查传感器上的电源电压——电压是否在 制造商规格?
- 如果您使用的是面包板,请检查连接。
- 检查传感器输出行为(电压),是否有运动。电压是否恒定?恒定电压意味着 PIR 传感器工作不正常。在执行此测试之前,断开 Arduino 输入的输出。
如果一切正常或者您没有电压表,请尝试断开 PIR 传感器并在 Arduino 引脚 4 和地之间连接一根电线。 digitalRead(inputPintwo) return 低吗?如果是,您知道读取引脚状态工作正常。
下面请查看与您的代码相关的一些建议:
- 使用#define 指令或static const int 变量类型来定义Arduino 引脚,就像您使用继电器输出引脚RELAY1 一样。
示例:
#define LED_PIN 13
#define INPUT_PIN 2
#define INPUT_PINTWO 4
或
static const int ledPin = 13;
static const int inputPin = 2;
static const int inputPintwo = 4;
- 在您的情况下,如果您只对数字值感兴趣 (LOW/HIGH),请在输入引脚上使用内置上拉电阻。因此日志。浮动输入引脚上的电压电平被定义为(高电平)。如果不使用上拉电阻,电压既可以对数。 0(低)或日志。 1(高),什么会导致奇怪的 program/state 机器行为
要激活输入引脚中的上拉电阻,请使用
pinMode(inputPin, INPUT_PULLUP);
pinMode(inputPintwo, INPUT_PULLUP);