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

寻求AJ-SR04M超声波传感器Python测距脚本技术指导

AJ-SR04M通过CH340 USB串口测距的Python实现方案

准备工作

  • 接线确认:CH340的TX接AJ-SR04M的Trig触发脚,RX接Echo回声脚;传感器需接5V电源,且CH340与传感器共地。若CH340 GPIO为3.3V,需加电平转换模块适配AJ-SR04M的5V电平
  • 安装依赖:执行pip install pyserial

两种实现方案

方案1:Arduino中转(推荐,稳定性更高)

先在Arduino上烧录以下代码,通过CH340串口输出测距数据:

const int trigPin = 9;
const int echoPin = 10;

void setup() {
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
  // 发送触发脉冲
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  // 读取回声时间并计算距离
  long duration = pulseIn(echoPin, HIGH);
  float distanceCm = (duration * 0.0343) / 2;
  
  Serial.println(distanceCm);
  delay(1000);
}

然后用Python读取串口数据:

import serial
import time

# 替换为你的CH340串口端口(Windows为COMx,Linux为/dev/ttyUSB0)
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)

try:
    while True:
        raw_data = ser.readline().decode('utf-8').strip()
        if raw_data:
            distance = float(raw_data)
            print(f"当前距离: {distance:.2f} cm")
        time.sleep(1)
except KeyboardInterrupt:
    ser.close()
    print("程序终止,串口已关闭")

方案2:直接通过CH340 GPIO控制(需模块支持GPIO)

部分CH340模块支持GPIO读写,可直接通过Python控制触发脚并读取回声信号:

import serial
import time

ser = serial.Serial(
    port='/dev/ttyUSB0',
    baudrate=9600,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    timeout=2
)

def get_distance():
    # 发送10us高电平触发信号(指令需根据CH340模块文档调整)
    ser.write(b'\x01')
    time.sleep(0.00001)
    ser.write(b'\x00')
    
    # 读取回声引脚的电平持续时间
    start_time = time.time()
    while ser.in_waiting == 0:
        if time.time() - start_time > 0.5:
            return "超时未检测到回声"
    
    echo_duration = time.time() - start_time
    # 声速取343m/s,距离计算:(时间*声速)/2,转换为厘米
    distance_cm = (echo_duration * 34300) / 2
    return round(distance_cm, 2)

if __name__ == "__main__":
    try:
        while True:
            dist = get_distance()
            print(f"当前距离: {dist} cm")
            time.sleep(1)
    except KeyboardInterrupt:
        ser.close()
        print("程序终止")

关键排查点

  • 确认CH340驱动已正确安装,设备管理器/系统串口列表中能识别到对应端口
  • 串口波特率、端口号必须与代码配置一致
  • 若使用方案2,需确认CH340模块的GPIO引脚定义,部分模块可能需要额外AT指令配置GPIO模式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 23:41:08