【雷达灯控】安信可 Rd-03E 距离提醒

[复制链接]
查看682 | 回复11 | 2024-3-25 17:40:45 | 显示全部楼层 |阅读模式

本帖最后由 wukong50 于 2024-3-25 17:45 编辑

本帖最后由 wukong50 于 2024-3-25 17:44 编辑

本帖最后由 wukong50 于 2024-3-25 17:42 编辑

感谢安信可送的雷达模组,感谢园长

以下是我用雷达模组做的电脑提醒小工具

因为我有一个儿子

他经常用电脑看动画片

稍不注意他就趴电脑屏幕上了

所以我就借雷达模组做了距离提醒工具

模组通过TTL直接与电脑通信

上位机使用Python来做

当检测到孩子趴在电脑前看

就播放语音(距离太近了)

让孩子自己往后挪

如果超过3次,孩子还不动

直接锁定屏幕

这下,想靠近看都不行了

另外,还添加了MQTT服务器连接

将每次检测到的距离信息传到MQTT服务器上

方便和其他设备联动

接线

直接使用USB转TTL连接即可

ba9987125186a275197ccdbf766328d.jpg

UART.py

# pip install pyserial
import os
import time
import serial
from playsound import playsound  
import mmqtt

num = 0     # 用于判断第几次触发
zhen_len = 7
# 打开串行端口
ser = serial.Serial('COM7', 256000, timeout=1)

if ser.isOpen():  
    print("串行端口已打开")  
else:  
    print("无法打开串行端口")  
    exit()  

# MQTT配置
client = mmqtt.mqtt_init()


while True:
    try:
        data = ser.read(7 * 11)  
        print(type(data))
        print(data.hex())
    except:
        data = []

    # 解析数据并存储
    juli_list = []   # 索引0 运动1还是微动2 ,索引1,距离
    for i in range(len(data)):
        if data[i] == 0xAA and data[i+1] == 0xAA:           # 第1,2位是AA
            if data[i+5] == 0x55 and data[i+6] == 0x55:     # 第6,7位是55
                # 数据验证成功 加入列表
                juli = data[i+4]*256+data[i+3]              # 小端
                print(juli)
                juli_list.append(juli)  

    # 过滤数据
    # print(juli_list)
    juli_list = sorted(juli_list)        # 排序
    # print(juli_list)
    # 计算需要去除的元素数量
    remove_count = 3
    juli_list = juli_list[remove_count:-remove_count]
    print(juli_list)
    juli = sum(juli_list) / len(juli_list)
    mmqtt.publish_msg(client, str(juli))
    if juli < 40 and juli > 0:
        num += 1
        if num < 4:
            # 播放音频
            playsound(r'D:\0.wav')
        else:
            num = 0
            # 锁定计算机
            # os.system('rundll32.exe user32.dll,LockWorkStation')
    elif juli > 100 or juli == 0:
        num = 0
        # 锁定计算机  
        # os.system('rundll32.exe user32.dll,LockWorkStation')
    time.sleep(10)



ser.close()

mmqtt.py

import paho.mqtt.client as mqtt  

# 配置MQTT连接参数  
MQTT_BROKER = ""  # 替换为你的EMQX服务器地址  
MQTT_PORT = 8883  # MQTT默认端口,如果EMQX配置了其他端口,请相应修改  
MQTT_TOPIC = "RD03E"  # 要发布的MQTT主题  
MQTT_CLIENT_ID = ""  # MQTT客户端ID  
username = ''
password = ''
# MQTT回调函数  
def on_connect(client, userdata, flags, rc):  
    print(f"Connected with result code {rc}")  
    # 订阅主题  
    client.subscribe(MQTT_TOPIC)  

def on_message(client, userdata, msg):  
    print(f"Received message '{msg.payload}' on topic '{msg.topic}' with QoS {msg.qos}")  

def mqtt_init():
    # 创建MQTT客户端实例  
    client = mqtt.Client(MQTT_CLIENT_ID)  

    # 绑定连接回调函数  
    client.on_connect = on_connect  
    # 绑定消息回调函数  
    client.on_message = on_message  
    client.tls_set(ca_certs='./emqxsl-ca.crt')
    client.username_pw_set(username, password)
    # 连接到MQTT代理  
    client.connect(MQTT_BROKER, MQTT_PORT)  

    # 开始MQTT客户端循环  
    client.loop_start()  

    return client

# # 发布消息  
def publish_msg(client, msg):
    client.publish(MQTT_TOPIC, msg)  

def mqtt_end(client):
    client.disconnect()  
    client.loop_stop(

语音文件评论区自取

代码输出

image.png

MQTT消息

image.png

数据过滤

在数据采集方面,我每次采集10次数据,并把距离信息从小到大排序

剔除三个最高分,剔除三个最低分,最后才把剩下的数据进行平均

这样得到的数据更准确些

回复

使用道具 举报

wukong50 | 2024-3-25 17:43:02 | 显示全部楼层
音频文件

0.zip

28.95 KB, 下载次数: 2

回复

使用道具 举报

1084504793 | 2024-3-25 18:40:42 | 显示全部楼层
回复

使用道具 举报

爱笑 | 2024-3-26 08:40:42 | 显示全部楼层
不错不错!
用心做好保姆工作
回复

使用道具 举报

lazy | 2024-3-26 14:09:11 | 显示全部楼层
回复

使用道具 举报

WT_0213 | 2024-3-26 14:32:57 | 显示全部楼层
不错不错!
回复

使用道具 举报

wukong50 | 2024-4-4 10:27:05 | 显示全部楼层
回复

使用道具 举报

timo | 2024-4-4 11:30:21 | 显示全部楼层
回复

使用道具 举报

物联网 | 2024-4-4 13:55:51 | 显示全部楼层
回复

使用道具 举报

wurong | 2024-4-4 15:49:26 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则