2016-5-4 20:48:36 [显示全部楼层]
8478浏览
查看: 8478|回复: 2

[项目] PIR人体感应开关的应用

[复制链接]
PIR人体感应开关的应用


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


PIR人体感应开关的应用图2

单片机是AVR 8位机。

喇叭-5V

PIR  就是普通的淘宝货。实测可达3M。

PIR人体感应开关的应用图1



/////////////////////////////
//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 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;  

boolean lockLow = true;
boolean takeLowTime;  

int pirPin = 3;    //the digital pin connected to the PIR sensor's output
int ledPin = 11;
int led1=8;
int led2=7;


/////////////////////////////
//SETUP
void 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 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);
  }
  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



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


DSCN0026.JPG

 初级技匠

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

上来就占个沙发
回复

使用道具 举报

 初级技匠

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

作品不错,简直把人体感应发挥到了“极致”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail