本作品由安信可社区用户
wukong50制作
作者说:
以下是我用雷达模组做的电脑提醒小工具
因为我有一个儿子
他经常用电脑看动画片
稍不注意他就趴电脑屏幕上了
所以我就借雷达模组做了距离提醒工具
模组通过 TTL 直接与电脑通信
上位机使用 Python 来做
当检测到孩子趴在电脑前看
就播放语音(“距离太近了”)
让孩子自己往后挪
如果超过 3 次
孩子还不动,则直接锁定屏幕
这下孩子想靠近看都不行了
另外还添加了 MQTT 服务器连接
将每次检测到的距离信息传到MQT服务器上,方便和其他设备联动
1
接线
直接使用 USB 转 TTL 连接即可
2
UART.py
# pip install pyserialimport osimport timeimport serialfrom playsound import playsound import mmqttnum = 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()
3
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(
4
代码输出
5
MQTT 消息
6
数据过滤
在数据采集方面,每次采集 10 次数据,并把距离信息从小到大排序,剔除三个最高分,剔除三个最低分,最后才把剩下的数据进行平均,这样可以稍微确保得到的数据更准确些。
全部0条评论
快来发表一下你的评论吧 !