gada888 发表于 2016-5-4 20:48:36

PIR人体感应开关的应用

PIR人体感应开关的应用

前几天一位朋友拿来一个PIR,那是深圳产的家庭智能控制设备的zigbee网联网的一个设备。属于安防设备。但他对它不太满意,认为每次都要手机点击好多页面很麻烦。因此他拿来了这个,希望楼主改一下。让它不受主控的控制,变成一个独立设备。而且出差住旅馆也可以用。他原本以为换一个元件的事。楼主就说了句这不是换个螺丝的事。然后就问他需要什么功能,也没跟他解释那么多。因为说不清楚。



单片机是AVR 8位机。
喇叭-5V
PIR就是普通的淘宝货。实测可达3M。




///////////////////////////////VARS//the time we give the sensor to calibrate (10-60 secs according to the datasheet)int calibrationTime = 45;      
//the time when the sensor outputs a low impulselong unsigned int lowIn;         
//the amount of milliseconds the sensor has to be low //before we assume all motion has stoppedlong unsigned int pause = 5000;
boolean lockLow = true;boolean takeLowTime;
int pirPin = 3;    //the digital pin connected to the PIR sensor's outputint ledPin = 11;int led1=8;int led2=7;

///////////////////////////////SETUPvoid setup(){Serial.begin(9600);pinMode(pirPin, INPUT);pinMode(ledPin, OUTPUT);pinMode(led1,OUTPUT);pinMode(led2,OUTPUT);digitalWrite(pirPin, LOW);
//give the sensor some time to calibrateSerial.print("calibrating sensor ");    for(int i = 0; i < calibrationTime; i++){      Serial.print(".");      delay(1000);      }    Serial.println(" done");    Serial.println("SENSOR ACTIVE");    delay(50);}void alert(){    digitalWrite(led1,HIGH);    digitalWrite(led2,LOW);        delay(50);    digitalWrite(led2,HIGH);digitalWrite(led1,LOW);    delay(50);    }
void loop(){
   if(digitalRead(pirPin) == HIGH){       analogWrite(ledPin, 50);          alert();       digitalWrite(led1,LOW);            digitalWrite(led2,LOW);
       ;//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");          delay(50);         }                  takeLowTime = true;       }
   if(digitalRead(pirPin) == LOW){                 digitalWrite(ledPin, 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);         }       }}
http://v.youku.com/v_show/id_XMTU1ODMwOTM4MA==.html?from=y1.2-1-105.3.1-2.1-1-1-0-0
http://v.youku.com/v_show/id_XMTU1ODMwOTM4MA==.html

以上代码的UNO上验证通过,我参考了部分这个代码。

发表于 2022-4-22 10:54:37

上来就占个沙发

发表于 2022-4-22 10:57:03

作品不错,简直把人体感应发挥到了“极致”
页: [1]
查看完整版本: PIR人体感应开关的应用