簡體   English   中英

為什么第二個PIR傳感器始終為高?

[英]Why 2nd PIR sensor is always HIGH?

我從串行監視器上的“ inputPintwo”獲得了恆定的高電平。 當“ inputPin”變為高電平時,繼電器將觸發並正常工作,因為“ inputPintwo”也始終為高電平。

我有一個非常類似的設置: 2個PIR運動傳感器+ Arduino

我沒有像上面回答的問題那樣使用引腳0或1。 萬一它是不良的硬件,我已經用另一種傳感器代替了。 我也拔下了傳感器的插頭,它仍然顯示為HIGH。 跳線正在兩個傳感器上重新觸發。

    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");

        }
      }
    }

我希望兩個傳感器僅在檢測到運動時才會變高,這將導致繼電器打開和關閉幾次,然后保持打開狀態直到傳感器上的計時器用盡。

為了確定問題,我建議您首先檢查硬件。 您將需要電壓表/萬用表。

  1. 仔細檢查傳感器接口是否正確(檢查數據表)。 您是否忘了連接例如下拉電阻?
  2. 檢查傳感器上的電源電壓–電壓是否在制造商規定的范圍內?
  3. 如果使用面包板,請檢查面包板的連接。
  4. 如果有或沒有運動,請檢查傳感器的輸出行為(電壓)。 電壓是否恆定? 恆定電壓表示PIR傳感器無法正常工作。 在執行此測試之前,請斷開Arduino輸入的輸出。

如果一切正常,或者您沒有電壓表,請嘗試斷開PIR傳感器的連接,並在Arduino引腳4和地面之間連接導線。 digitalRead(inputPintwo)返回LOW嗎? 如果是,則您知道讀取引腳狀態很好。


下面請查看與您的代碼相關的一些建議:

  • 使用#define指令或靜態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(HIGH),可能導致奇怪的程序/狀態機行為

要激活輸入引腳中的上拉電阻,請使用

pinMode(inputPin, INPUT_PULLUP);
pinMode(inputPintwo, INPUT_PULLUP);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM