RCWL-1601超声波传感器搭配Raspberry Pi Pico测距异常故障排查
RCWL-1601超声波传感器搭配Raspberry Pi Pico持续显示“Out of range”的排查与解决
问题概述
使用RCWL-1601超声波传感器(Adafruit标注等效HC-SR04)搭配Raspberry Pi Pico测距,接线为VCC接3.3V/5V(两种供电均测试)、Trig接GPIO3、Echo接GPIO2,通过Arduino IDE上传代码后,串口监视器持续输出Distance = Out of range。已排查传感器供电正常、更换过同款传感器、尝试不同Pico引脚、调整UART/I2C跳线,且Blink示例验证Pico烧录功能正常。
关键排查与解决步骤
1. 修改pulseIn超时参数
默认pulseIn超时为1秒,但RCWL-1601最大测距400cm对应的脉冲时长约为23323微秒,手动设置超时可避免提前返回0值。修改代码中pulseIn语句:
duration = pulseIn(echoPin, HIGH, 30000); // 超时设为30000微秒
2. 处理Echo电平兼容性
部分RCWL-1601模块Echo输出为5V电平,Pico GPIO仅支持3.3V输入,长期接入可能损坏引脚。建议:
- 加分压电路:用1kΩ+2kΩ电阻将5V分压至3.3V后接入Echo引脚
- 使用双向电平转换模块适配电平
3. 调整触发脉冲时序
部分RCWL-1601对触发脉冲时长要求与HC-SR04略有差异,延长触发高电平时间:
digitalWrite(trigPin, HIGH); delayMicroseconds(20); // 从10微秒改为20微秒 digitalWrite(trigPin, LOW);
4. 启用Echo引脚上拉电阻
若Echo引脚浮空,可能导致无法检测到脉冲。代码中修改引脚模式为上拉输入:
pinMode(echoPin, INPUT_PULLUP);
也可外接10kΩ上拉电阻至3.3V。
5. 打印duration值定位问题
在代码中添加duration打印语句,直接查看传感器是否返回有效脉冲:
Serial.print("Duration: "); Serial.println(duration);
- 若
duration始终为0:说明Echo未接收到脉冲,需检查触发信号或传感器工作状态 - 若
duration有数值但计算后超出范围:验证距离转换公式(当前公式(duration/2)*0.0343正确)
6. 示波器同步检测Trig/Echo信号
用示波器同时测量Trig和Echo引脚:
- 若Trig未输出正常脉冲:排查Pico引脚配置或接线
- 若Trig有脉冲但Echo无响应:传感器本身可能存在批次问题(即使更换过)
- 若Echo有脉冲但Pico未检测到:重点排查电平兼容性或引脚配置
调整后的示例代码
#define trigPin 3 #define echoPin 2 float duration, distance; void setup() { Serial.begin(9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT_PULLUP); // 启用上拉电阻 } void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(20); // 延长触发脉冲时长 digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH, 30000); // 设置超时时间 Serial.print("Duration: "); Serial.println(duration); // 转换并输出距离 if (duration == 0) { Serial.println("Distance = Out of range (timeout)"); } else { distance = (duration / 2) * 0.0343; Serial.print("Distance = "); if(distance >= 400 || distance <= 2){ Serial.println("Out of range "); } else{ Serial.print(distance); Serial.println(" cm"); } } delay(500); }
内容的提问来源于stack exchange,提问作者Davandjes
相关产品推荐
相关产品推荐

