风筝
发表于: 2020-4-9 18:12:31 | 显示全部楼层

在本篇文章中,我们将讨论在夜间使用PIR传感器和Arduino制作家庭安全警报系统。夜间安全灯仅在天黑且检测到运动时才会打开。灯和蜂鸣器在黑暗和活动时会亮起。有光时,即使检测到运动,灯也会关闭。

Home-Security-Alarm-Using-PIR-Sensor-Arduino-for-Night.jpg


所需的组件

●    Arduino UNO开发板

●    PIR传感器HC-SR501

●    LED指示灯

●    蜂鸣器

●    9V电池


连接电路图

Circuit-Diagram.jpg


PIR传感器

被动红外传感器(PIR Sensor)比这类系统中介绍的许多其他传感器(例如光电管、FSR和倾斜开关)要复杂得多,因为有多个变量会影响传感器的输入和输出。

proximity_pir-diagram.png


PIR传感器本身具有两个插槽,每个插槽均由对IR敏感的特殊材料制成。这里使用的镜帽并没有做太多事情,因此我们看到两个插槽可以“看到”一定距离(基本上是传感器的灵敏度)。当传感器闲置时,两个插槽都检测到相同量的IR,即从房间或墙壁或室外辐射的环境量。当像人或动物这样的温暖物体经过时,它首先会拦截PIR传感器的一半,这会在两半之间产生正的差分变化。当身体离开感应区域时,情况发生相反的变化,从而传感器产生负的差分变化。这些变化脉冲是检测到的。


项目工作过程

该电路实际上是一个暗度有效的开关,用于测量环境光水平,并且仅在环境光水平低于阈值时才启用系统。这里,LDR(光敏电阻)用于测量光强度。当在其传感器输入端口上检测到“逻辑高(H)”电平信号时,将触发警报系统。

workin-of-project.jpg


可以用来检测入侵的最佳传感器是被动红外(PIR)传感器。当人体经过时,PIR传感器通过周围环境温度的变化来检测人体的运动,并当它检测到移动目标时,有效地控制开关。


源代码/程序

下面给出了使用PIR传感器和Arduino进行夜间家庭安全警报系统的代码。复制代码并将其粘贴到您的Arduino IDE,然后编译并最终将其上传到Arduino开发板。

  1. int ledPin = 5; // choose the pin for the LED
  2. int Buzzer = 6; // choose the pin for the Buzzer
  3. int inputPin = 2; // choose the input pin (for PIR sensor)
  4. int pirState = LOW; // we start, assuming no motion detected
  5. int val = 0; // variable for reading the pin status

  6. void setup() {
  7. pinMode(ledPin, OUTPUT); // declare LED as output
  8. pinMode(Buzzer, OUTPUT); // declare Buzzer as output
  9. pinMode(inputPin, INPUT); // declare sensor as input

  10. Serial.begin(9600);
  11. }

  12. void loop(){
  13. val = digitalRead(inputPin); // read input value
  14. int value_ldr = analogRead(A0); // read LDR value

  15. if((300>value_ldr) && ( val==HIGH) ){
  16. if (val == HIGH) { // check if the input is HIGH
  17. digitalWrite(ledPin, HIGH); // turn LED ON
  18. digitalWrite(Buzzer, 1); // turn Buzzer ON
  19. delay(5000);
  20. if (pirState == LOW) {
  21. // we have just turned on
  22. Serial.println("Motion detected!");
  23. // We only want to print on the output change, not state
  24. pirState = HIGH;
  25. }
  26. } else {
  27. digitalWrite(ledPin, LOW); // turn LED OFF
  28. digitalWrite(Buzzer, 0); // turn Buzzer OFF
  29. if (pirState == HIGH){
  30. // we have just turned of
  31. Serial.println("Motion ended!");
  32. // We only want to print on the output change, not state
  33. pirState = LOW;
  34. }
  35. }
  36. }
  37. }
复制代码

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1483



手机版|

GMT+8, 2024-5-8 09:34 , Processed in 0.036842 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表