Arduino - PIR 传感器
Arduino: PIR 运动传感器接口
Section titled “Arduino: PIR 运动传感器接口”被动红外(PIR)传感器对于检测运动至关重要,使其成为安防系统、自动照明和交互式项目的基石。它们检测由温暖物体(例如人类)发出的红外辐射变化。
主要特点和优势
Section titled “主要特点和优势”- 低功耗: 电池供电应用的理想选择。
- 成本效益高: 价格低廉且广泛可用。
- 接口简单: 通常提供简单的HIGH/LOW数字输出。
- 耐用: 固态设计意味着它们不会磨损。
PIR 传感器通过使用两个热释电子传感器工作。它寻找其中一半传感器检测到的红外线水平与另一半不同的变化,这表明有物体在其视野中移动。请注意,PIR 传感器检测的是红外线的变化,而不是静态存在。如果一个人完全静止不动,传感器最终将停止检测到他们。
大多数PIR传感器模块有两个电位器用于调整:
- 灵敏度: 调整检测范围(例如,从3到7米)。
- 延时: 调整检测到运动后输出信号保持HIGH的时间长度(例如,从几秒到几分钟)。
重要提示: 初次上电时,大多数PIR传感器需要30-60秒的预热和校准期。在此期间,它们可能会不可预测地触发。请在传感器稳定时保持区域内没有移动。
- 1 × Arduino UNO R3 或兼容开发板
- 1 × PIR 运动传感器 (例如,HC-SR501)
- 1 × LED (用于视觉反馈)
- 1 × 220Ω 电阻 (用于LED)
- 跳线
// PIR 传感器连接// (引脚标签可能不同,请查阅传感器的数据手册)PIR VCC Pin --- Arduino 5VPIR OUT Pin --- Arduino Digital Pin 2PIR GND Pin --- Arduino GND
// LED 指示灯连接Arduino D13 --- [220Ω Resistor] --- [LED Anode (+)]Arduino GND --- [LED Cathode (-)]现代化 Arduino 代码
Section titled “现代化 Arduino 代码”这段修订后的代码使用清晰、基于状态的方法来监控PIR传感器。它是非阻塞的,并且易于扩展。
/** * @文件 modern_pir_sensor.ino * @简介 一种清晰、基于状态的 PIR 运动传感器读取方法。 * @作者 现代化教程 */
// 定义引脚,以提高可读性和可维护性。constexpr int PIR_PIN = 2;constexpr int LED_PIN = 13;
// 跟踪运动的状态变量。// 使用枚举使代码更具自解释性。enum MotionState { NO_MOTION, MOTION_DETECTED };MotionState currentMotionState = NO_MOTION;
void setup() { Serial.begin(9600); while (!Serial); // 等待串口准备就绪(适用于 Leonardo/Micro 等现代开发板)
pinMode(PIR_PIN, INPUT); pinMode(LED_PIN, OUTPUT);
Serial.println("PIR 传感器预热和校准中..."); Serial.println("请保持区域内没有移动30秒。"); delay(30000); // 在 setup() 中使用阻塞延迟进行校准是可接受的。 Serial.println("传感器就绪。");}
void loop() { // 读取 PIR 传感器的当前状态。 int pirState = digitalRead(PIR_PIN);
if (pirState == HIGH) { // 当前正在检测到运动。 digitalWrite(LED_PIN, HIGH); // 点亮指示灯 LED。
// 如果我们之前处于 NO_MOTION 状态,则这是一个新事件。 if (currentMotionState == NO_MOTION) { Serial.println("运动开始!"); currentMotionState = MOTION_DETECTED; // 更新状态 } } else { // 当前未检测到运动。 digitalWrite(LED_PIN, LOW); // 关闭指示灯 LED。
// 如果我们之前处于 MOTION_DETECTED 状态,则事件已结束。 if (currentMotionState == MOTION_DETECTED) { Serial.println("运动结束。"); currentMotionState = NO_MOTION; // 更新状态 } }
// loop() 可以在这里继续执行其他任务而不会被阻塞。}故障排除与常见问题
Section titled “故障排除与常见问题”- 误触发: 如果传感器在没有运动的情况下触发,请尝试降低灵敏度。附近电器的电气噪声也可能是原因。
- 未检测到: 确保传感器已完成校准。检查接线并提高灵敏度。请记住,传感器检测的是物体在其视野中横向移动,而不是直接靠近或远离它。
- 保持HIGH: 延时电位器可能设置到最大值。请将其调整为较短的持续时间进行测试。
实际应用与下一步
Section titled “实际应用与下一步”既然您能够检测运动,就可以构建令人兴奋的项目:
- 自动化照明: 控制继电器来切换交流电源供电的灯。
- 安防警报: 触发蜂鸣器或通过WiFi模块(如ESP8266或ESP32)发送通知。
- 交互式艺术: 当有人靠近时,将项目从低功耗睡眠模式唤醒。