如何在Arduino代码中将红外传感器设置为输入设备并读取数据
Arduino红外传感器配置为输入设备的实现方法
首先需要明确你使用的红外传感器类型:模拟输出型(如红外测距、红外灰度传感器,输出连续变化的数值)或数字输出型(如红外避障、人体红外PIR传感器,仅输出高低电平两种状态),两种的配置逻辑有细微差异。
1. 硬件连接要求
- 模拟输出型红外传感器:输出引脚接Arduino带
A标识的模拟输入引脚(如A0、A1) - 数字输出型红外传感器:输出引脚接Arduino任意数字IO引脚(如2、3、4)
- 传感器VCC接Arduino对应额定电压(多数为5V,部分小功率传感器支持3.3V),GND接Arduino GND
2. 核心配置逻辑
- 输入模式声明:在
setup()函数中用pinMode()函数将传感器连接的引脚设置为INPUT模式,模拟输入引脚可省略声明,默认就是输入状态,显式声明可以提升代码可读性 - 数值读取:模拟输出型用
analogRead(引脚号)读取0~1023范围的连续数值;数字输出型用digitalRead(引脚号)读取HIGH/LOW两种状态值
3. 可直接使用的示例代码
模拟型红外位置传感器示例(适配你的需求)
读取传感器数值,检测到红外位置变化超过阈值时点亮13号引脚自带LED:
// 引脚定义 const int irSensorPin = A0; // 红外传感器接A0模拟引脚 const int ledPin = 13; int irSensorValue = 0; // 存储当前红外传感器读取值 int lastIrValue = 0; // 存储上一次读取值,用于判断位置变化 void setup() { pinMode(ledPin, OUTPUT); pinMode(irSensorPin, INPUT); // 开启串口可以打印数值,方便调试阈值 Serial.begin(9600); } void loop() { // 读取红外传感器的位置对应数值 irSensorValue = analogRead(irSensorPin); // 串口输出数值,方便你实测自己传感器的变化范围 Serial.print("红外传感器当前值:"); Serial.println(irSensorValue); // 数值差超过50判定为位置发生变化,可根据实测调整阈值 if(abs(irSensorValue - lastIrValue) > 50) { digitalWrite(ledPin, HIGH); delay(1000); // 更新历史值 lastIrValue = irSensorValue; } else { digitalWrite(ledPin, LOW); } delay(100); }
数字型红外传感器示例(仅作扩展参考)
const int irSensorPin = 2; // 红外传感器接数字引脚2 int irState = 0; void setup() { pinMode(irSensorPin, INPUT); pinMode(13, OUTPUT); } void loop() { irState = digitalRead(irSensorPin); if(irState == HIGH) { // 传感器被触发 digitalWrite(13, HIGH); } else { digitalWrite(13, LOW); } delay(50); }
4. 注意事项
- 阈值需要根据你使用的传感器实测调整:先通过串口打印传感器无遮挡、有不同位置遮挡时的数值,再设置对应的判断阈值即可
- 如果是红外遥控接收头这类解码类红外传感器,需要额外调用IRremote等第三方库读取解码后的键值,不适用上述普通读取逻辑
内容的提问来源于stack exchange,提问作者darklight213
相关产品推荐
相关产品推荐

