孩子看电视距离太近了?用Rd-03E 做个距离提醒!

描述

本作品由安信可社区用户

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 次数据,并把距离信息从小到大排序,剔除三个最高分,剔除三个最低分,最后才把剩下的数据进行平均,这样可以稍微确保得到的数据更准确些。

 

 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分