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

树莓派3测试Distance Censor报错及代码NameError问题求助

树莓派3距离传感器调试及NameError问题解决方案

嘿,我来帮你搞定这两个问题!先从那个烦人的NameError说起,再给你传感器调试的实用建议~

一、解决NameError: name 'start' is not defined错误

这个错误本质很简单:你代码里用到了名为start的变量或函数,但它还没被定义就直接调用了。常见原因包括拼写错误、作用域搞错,或是漏写了start的定义逻辑。

给你一份优化后的HC-SR04(树莓派常用超声波距离传感器)示例代码,结构清晰且完全避免这类错误:

import RPi.GPIO as GPIO
import time

# 定义GPIO引脚(这里用BCM编号模式,可根据自己接线调整)
TRIG_PIN = 23
ECHO_PIN = 24

def init_sensor():
    """初始化传感器GPIO配置"""
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(TRIG_PIN, GPIO.OUT)
    GPIO.setup(ECHO_PIN, GPIO.IN)
    GPIO.output(TRIG_PIN, GPIO.LOW)
    print("传感器初始化完成,等待1秒稳定...")
    time.sleep(1)

def measure_distance():
    """测量距离并返回厘米值"""
    # 发送触发信号
    GPIO.output(TRIG_PIN, GPIO.HIGH)
    time.sleep(0.00001)
    GPIO.output(TRIG_PIN, GPIO.LOW)
    
    # 记录ECHO引脚的电平变化时间
    start_time = time.time()
    stop_time = time.time()
    
    # 等待ECHO变为高电平
    while GPIO.input(ECHO_PIN) == 0:
        start_time = time.time()
    
    # 等待ECHO变为低电平
    while GPIO.input(ECHO_PIN) == 1:
        stop_time = time.time()
    
    # 计算距离(声速取34300cm/s,除以2是因为声波往返)
    time_elapsed = stop_time - start_time
    distance = (time_elapsed * 34300) / 2
    
    return round(distance, 2)

def main():
    try:
        init_sensor()
        while True:
            dist = measure_distance()
            print(f"当前测量距离: {dist} cm")
            time.sleep(1)
    except KeyboardInterrupt:
        print("\n程序已终止")
    finally:
        GPIO.cleanup()  # 退出前清理GPIO资源

if __name__ == "__main__":
    main()

你可以对照这份代码检查自己的问题:如果之前的start是指测量的起始时间,这里用start_time明确定义了;如果是想写初始化函数,参考init_sensor()的封装方式即可。

二、树莓派3距离传感器测试排错建议

如果传感器本身工作异常,按以下步骤排查:

  • 硬件接线检查:
    • 确认传感器VCC接树莓派5V引脚(别接3.3V,大部分超声波传感器需要5V供电),GND接树莓派GND
    • TRIG和ECHO引脚要和代码里的定义对应,别接反或接错
    • 检查接线有没有松动,传感器探头是否被遮挡、有没有物理损坏
  • 软件环境检查:
    • 确保已安装RPi.GPIO库:sudo pip install RPi.GPIO
    • 运行代码时要加sudo,访问GPIO需要管理员权限:sudo python3 your_script.py
    • 通过raspi-config的Interfacing Options -> GPIO确认GPIO功能已启用
  • 场景优化:
    • 传感器有效测距范围一般是2cm-400cm,太近或太远都会返回错误值
    • 避免在多传感器环境下测试,防止超声波互相干扰
    • 周围有大量反射物(比如墙面、玻璃)时,会影响测量精度,尽量在开阔环境测试

内容的提问来源于stack exchange,提问作者Rodo Anh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:31:57