CEM5826-M11 试玩

分享作者:Mr_Fang
作者昵称:Mr_Fang
评测品牌:萤火工场
评测型号:CEM5826-M11
发布时间:2024-11-13 11:25:58
0
概要
简单试玩了 CEM5826,用 Python 写了个画图程序
开源口碑分享内容

接线图

串口接收数据

这里使用的是 mm32link-service 的在线串口。波特率 115200,8 位数据位,1 位停止位,校验位和流控为 None,接收设置选 ASCII,发送设置选 ASCII。打开串口后可以实时接收到雷达发送的数据:

另外,雷达还支持通过串口命令修改设置,详细命令可以查阅萤火工场 CEM5831G-M12 24GHz毫米波雷达模块规格书了解详情

使用 Python 绘图

编写了一段简单的代码,可以绘制出雷达检测到的速度折线图(按照文档:绿色曲线为人体靠近,红色曲线为人体远离)

import serial
import time
import matplotlib.pyplot as plt

# 配置串口参数
port = 'COM3'  # 串口号,根据实际情况修改
baudrate = 115200  # 波特率,根据实际情况修改
timeout = 1  # 超时时间,单位为秒

# 创建串口对象
ser = serial.Serial(port, baudrate, timeout=timeout)

# 检查串口是否打开
if ser.isOpen():
    print(f"串口 {port} 已打开,波特率:{baudrate}")

# 初始化速度列表和时间戳列表
speeds = []
timestamps = []


def hex_to_ascii(hex_data):
    ascii_data = ""
    for i in range(0, len(hex_data), 2):
        ascii_data += chr(int(hex_data[i:i + 2], 16))
    return ascii_data


# 计数器,用于跟踪接收到的数据点数量
counter = 0


def plot_with_colors(timestamps, speeds):
    plt.figure(figsize=(10, 5))
    for i in range(1, len(speeds)):
        v = speeds[i]
        if v > 1:
            color = 'green'
        elif -1 < v < 1:
            color = 'orange'
        else:
            color = 'red'
        plt.plot([timestamps[i - 1], timestamps[i]], [speeds[i - 1], v], color=color)
    plt.title('Speed Over Time')
    plt.xlabel('Time')
    plt.ylabel('Speed (km/h)')
    plt.grid(True)
    plt.show()


try:
    while True:
        if ser.inWaiting() > 0:
            # 读取数据
            data = ser.readline()  # 读取二进制数据
            hex_data = data.hex()  # 将二进制数据转换为十六进制字符串
            ascii_data = hex_to_ascii(hex_data)  # 将十六进制字符串转换为ASCII字符
            # 解析数据
            if "v=" in ascii_data and "km/h" in ascii_data and "str=" in ascii_data:
                try:
                    # 提取速度和字符串值
                    v = float(ascii_data.split("v=")[1].split(" ")[0])
                    str_value = int(ascii_data.split("str=")[1].split(",")[0])
                    print(f"速度:{v} km/h, 字符串值:{str_value}")
                    speeds.append(v)
                    timestamps.append(time.time())
                    counter += 1  # 增加计数器
                    if counter == 100:  # 每100次数据绘制一次图表
                        plot_with_colors(timestamps, speeds)
                        # 清空列表和计数器
                        speeds = []
                        timestamps = []
                        counter = 0
                except ValueError as e:
                    print(f"解析错误:{e}")
        time.sleep(0.1)
finally:
    # 关闭串口
    ser.close()
    print(f"串口 {port} 已关闭")

视频


全部评论
暂无评论
0/144