You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arduino中超声波传感器为何仅输出0?求排查方案

问题排查:超声波传感器输出0的原因及修复

代码层面的问题(大概率是主要诱因)

  • 未初始化引脚模式:代码里直接对A0执行digitalWrite、对A1执行pulseIn,但未在setup()中设置引脚的输入输出属性。Arduino模拟引脚默认是输入模式,直接向A0写入电平可能无法有效触发传感器,导致无回波信号,pulseIn超时后返回0。
    修复:在setup()中添加引脚初始化代码:
    pinMode(A0, OUTPUT);
    pinMode(A1, INPUT);
    
  • pulseIn超时逻辑:pulseIn默认超时时间为1秒,若传感器未检测到回波(触发失败或无障碍物),会直接返回0。可以手动设置更合理的超时阈值(比如30000微秒,对应约5米的最大测距),避免不必要的等待:
    int duration = pulseIn(A1, HIGH, 30000);
    
  • 冗余库依赖:代码中引入的math.h并非必要,Arduino原生支持round函数,可直接删除#include <math.h>。

硬件层面的排查方向

  • 接线错误:确认传感器触发脚(Trig)接A0、回声脚(Echo)接A1,VCC接5V、GND接Arduino的GND。若VCC与GND接反可能损坏传感器;触发/回声引脚接错也会导致无回波信号。
  • 传感器故障:更换一组数字引脚(比如D2做触发、D3做回声)重新测试,或用已知正常的传感器替换,验证是否为硬件本身问题。
  • 供电不足:若传感器外接电源,确保输出电压稳定;若直接用Arduino的5V供电,避免同时连接其他高功耗模块,防止电压不足导致触发失败。

修复后的完整代码示例

void setup() {
  Serial.begin(9600);
  pinMode(A0, OUTPUT);
  pinMode(A1, INPUT);
}

void loop() {
  int dist = getcm();
  delay(100);
  Serial.println(dist);
}

int getcm() {
  digitalWrite(A0, LOW);
  delayMicroseconds(2);
  digitalWrite(A0, HIGH);
  delayMicroseconds(10);
  digitalWrite(A0, LOW);
  int duration = pulseIn(A1, HIGH, 30000);
  if (duration == 0) {
    return -1; // 用-1标记无回波,区分真实0距离场景
  }
  int distance = (duration * 0.0343) / 2;
  distance = round(distance);
  return distance;
}

内容的提问来源于stack exchange,提问作者Sithum Harshana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 17:20:36