Nima uchun mening PIR sensori ESP8266 chiqish taxtasi bilan yuqori bo'ladi?

Men VIN dan 5v yo'nalishidagi Amica nodeMCU kengashiga ulangan va sinov uchun USB port orqali biriktirilgan PIR sensor mavjud. Harakat aniqlanganida u internetga ulanadi va ma'lumotimni IFTTTga yuboradi va men telefonimga xabar beradi.

Quvvatlagach, PIR kalibrlashni to'xtatib turadi, keyin zudlik bilan YO'Q ketadi va mening telefonimda olgan harakatni aniqlaydigan qo'ng'iroqni o'chiradi. Ammo bundan keyin hech qachon pastga bormaydi, lekin har 5-8 daqiqada hech qanday harakat bo'lmasa, yana bir baland qo'ng'iroqni yuboradi.

Sinab ko'rish

  • Tried using separate 5v supply to PIR same thing happens
  • I have tried both retrigger modes (H & L) and experienced the same result
  • The same happens with the Adafruit featherwing huzzah board.
  • I have tested the PIR without a micro-controller and can confirm that it functions correctly -lighting an led
  • I have tested with an Arduino Nano with the same code and it functions correctly - lighting an led

My Code modified version of Arduino Playground PIR Project

//Sends IFTTT every 5 minutes it detects motion

#include 
//WiFi Settings

// Set up macros for wifi and connection.
#define SSID "my-network"   //SSID
#define PASS "mypassphrase"     //Network Password
#define HOST "maker.ifttt.com" //Webhost
//-------------------------------
const char* streamId   = "test";
const char* privateKey = "mysecretkey";

//PIR Settings
//the time we give the sensor to calibrate (10-60 secs according to the datasheet)
int calibrationTime = 10;        

//the time when the sensor outputs a low impulse
long unsigned int lowIn;         

//the amount of milliseconds the sensor has to be low 
//before we assume all motion has stopped
long unsigned int pause = 5000;  


int  interval = 1000;//Wait between dumps
boolean lockLow = true;
boolean takeLowTime;  
int ledPin = 1;
int pirPin = 2;    //the digital pin connected to the PIR sensor's output
int nPIR_detect;
int motion = 2;

int minSecsBetweenUpdates = 300;//5 minutes
long lastSend = -minSecsBetweenUpdates * 1000l;
//-------------------------------

// Begin Setup
void setup(){
  Serial.begin(115200);
  pinMode(pirPin, INPUT);
  digitalWrite(pirPin, LOW);

  //give the sensor some time to calibrate
  Serial.print("calibrating sensor ");
  for(int i = 0; i < calibrationTime; i++){
    Serial.print(".");
    delay(1000);
    }
  Serial.println(" done");
  Serial.println("SENSOR ACTIVE");
  delay(50);
   nPIR_detect = 0;  

 //Test ESP8266 module.
  Serial.println("AT");
  delay(5000);
  if(Serial.find("OK")){
    connectWiFi();
  }
}

void loop(){
 if(digitalRead(pirPin) == HIGH){
       digitalWrite(BUILTIN_LED, HIGH);   //the led visualizes the sensors output pin state
       if(lockLow){  
         //makes sure we wait for a transition to LOW before any further output is made:
         lockLow = false;            
         Serial.println("---");
         Serial.print("motion detected at ");
         Serial.print(millis()/1000);
         Serial.println(" sec"); 
         sendData(String(motion));
         delay(50);
         }         
         takeLowTime = true;
       }

     if(digitalRead(pirPin) == LOW){       
       digitalWrite(BUILTIN_LED, LOW);  //the led visualizes the sensors output pin state

       if(takeLowTime){
        lowIn = millis();          //save the time of the transition from high to LOW
        takeLowTime = false;       //make sure this is only done at the start of a LOW phase
        }
       //if the sensor is low for more than the given pause, 
       //we assume that no more motion is going to happen
       if(!lockLow && millis() - lowIn > pause){  
           //makes sure this block of code is only executed again after 
           //a new motion sequence has been detected
           lockLow = true;                        
           Serial.print("motion ended at ");      //output
           Serial.print((millis() - pause)/1000);
           Serial.println(" sec");
           delay(50);
           }
       }
}

void sendData(String motion){

  //Send the motion to IFTTT value1
  Serial.print("connecting to ");
  Serial.println(HOST);

 //Use WiFiClient class to create TCP connections
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(HOST, httpPort)) {
    Serial.println("connection failed");
    return;
  }

 //We now create a URI for the request
  String url = "/trigger/";
  url += streamId;
  url += "/with/key/";
  url += privateKey;
  url += "?value1=";
  url += "motion";

  Serial.print("Requesting URL: ");
  Serial.println(url);

 //This will send the request to the server
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + HOST + "\r\n" + 
               "Connection: close\r\n\r\n");
  delay(10);

 //Read all the lines of the reply from server and print them to Serial
  while(client.available()){
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }

  Serial.println();
  Serial.println("closing connection");

}

boolean connectWiFi(){
  Serial.println("AT+CWMODE=1");
  delay(2000);
  String cmd="AT+CWJAP=\"";
  cmd+=SSID;
  cmd+="\",\"";
  cmd+=PASS;
  cmd+="\"";
  Serial.println(cmd);
  delay(5000);
  if(Serial.find("OK")){
    Serial.println("Connection");
    return true;
  }
  else{
    Serial.println("No Connection");
    return false;
  }
}

OQ: Nima uchun PIR sensori ESP8266 chiqish taxtasi bilan yuqori bo'lib turadi?

Aslida, ketma-ket xabarni "harakati tugadi .." deb ko'rmayman.

3
5v signalini 3.3v ga qanday qilib aylantirasiz?
qo'shib qo'ydi muallif Al., manba
O'lchangan kuchlanish darajasi qanday ko'rinishga ega? Breakout taxtasi 5v chidamlimi?
qo'shib qo'ydi muallif Dave X, manba
5v belgisi qaysi gerben? (qayerdan?)
qo'shib qo'ydi muallif Ben DeMott, manba
Piter, @Verben 5v dan 3v ga o'zgartiradi
qo'shib qo'ydi muallif Ben DeMott, manba

3 javoblar

Ishonchim komilki, ehtimol siz ikkalasini ham qildingiz, ammo sizning ...

PIR sensori uchun Pin 2-ni ishlatayotgan kodingizni ko'rib turibman. Men ESP8266 dasturini har safar men dasturxonga qo'yganimdagidek emas deb hisoblayman, lekin PIRni 2-pin uchun ulanganligingizni tekshirib ko'ring, bu D2-ning GPIO2 etiketli ulanishi emas, bu etiketli yoki bo'lishi mumkin emas.

Buni to'g'ri deb hisoblasangiz, GPIO2 ning TXD1 bilan almashinishi ehtimoli mavjud bo'lishi mumkin. Shuning uchun GPIO4 ga o'tishni harakat qilib ko'ring.

2
qo'shib qo'ydi
GPIO2 dan GPIO4 ga o'zgartirish men uchun ishladi.
qo'shib qo'ydi muallif Owen, manba

Xuzuh va PIR bilan bir xil muammo bor. PIR shovqinli bo'lib, har 10-20 sida noto'g'ri balandlikda bo'laman, kod esa BMT tizimida muammosiz ishlaydi. O'ylaymanki, bu Wi-Fi dan PF ning kuchaytiruvchi devoriga aralashib HF aloqasi muammosi. PIRda HFni qutqarish yoki boshqa quvvat manbaidan foydalanish va optik chastota orqali signal chizig'ini birlashtirish uchun himoya va qopqoq/ferritlarni sinab ko'rishga harakat qilaman.

1
qo'shib qo'ydi

Ushbu muammoni hal qiladigan yechim PIR sensori chiqishi va ESP8266 ning kirish pinasi orasidagi 10k qarshilikdan foydalanadi.

10K eng yaxshi qiymat bo'lsa, boshqasi yaxshiroq qiymat topishi mumkin, ammo hozir, men uchun u ajoyib ish.

Jon

0
qo'shib qo'ydi