本帖最后由 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连接即可
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(
语音文件评论区自取
代码输出
MQTT消息
数据过滤
在数据采集方面,我每次采集10次数据,并把距离信息从小到大排序
剔除三个最高分,剔除三个最低分,最后才把剩下的数据进行平均
这样得到的数据更准确些 |